aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-05-29 23:30:35 +0000
committerLaurent Bercot <ska@appnovation.com>2025-05-29 23:30:35 +0000
commit356e37cb9cceeca82df50ef99b68979eb3ff0136 (patch)
treed1ae0748e0c73bc01c70a9f8874f448bda8b8891
parentc91a37b2b030a69ec62acde10d00ddcd703c792d (diff)
downloadskalibs-356e37cb9cceeca82df50ef99b68979eb3ff0136.tar.gz
Add crc32c. Prepare for 2.14.5.0
Signed-off-by: Laurent Bercot <ska@appnovation.com>
-rw-r--r--NEWS8
-rw-r--r--doc/index.html4
-rw-r--r--doc/libstdcrypto/index.html82
-rw-r--r--doc/license.html2
-rw-r--r--doc/upgrade.html7
-rw-r--r--package/deps.mak3
-rw-r--r--package/info2
-rw-r--r--src/include/skalibs/crc32c.h11
-rw-r--r--src/include/skalibs/stdcrypto.h1
-rw-r--r--src/libstdcrypto/crc32c.c85
10 files changed, 153 insertions, 52 deletions
diff --git a/NEWS b/NEWS
index e02952a..0436869 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,13 @@
Changelog for skalibs.
+In 2.14.5.0
+-----------
+
+ - Bugfixes.
+ - Support for shared libraries on MacOS.
+ - crc32c implementation: skalibs/crc32c.h
+
+
In 2.14.4.0
-----------
diff --git a/doc/index.html b/doc/index.html
index c92183a..8887bc0 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -60,8 +60,8 @@ with a standard C development environment </li>
<h3> Download </h3>
<ul>
- <li> The current released version of skalibs is <a href="skalibs-2.14.4.0.tar.gz">2.14.4.0</a>.
-You can access its checksum <a href="skalibs-2.14.4.0.tar.gz.sha256">here</a>. </li>
+ <li> The current released version of skalibs is <a href="skalibs-2.14.5.0.tar.gz">2.14.5.0</a>.
+You can access its checksum <a href="skalibs-2.14.5.0.tar.gz.sha256">here</a>. </li>
<li> Alternatively, you can checkout a copy of the
<a href="//git.skarnet.org/cgi-bin/cgit.cgi/skalibs/">skalibs
git repository</a>:
diff --git a/doc/libstdcrypto/index.html b/doc/libstdcrypto/index.html
index 6bf6974..d7c2bc0 100644
--- a/doc/libstdcrypto/index.html
+++ b/doc/libstdcrypto/index.html
@@ -26,16 +26,16 @@ operations are provided:
</p>
<ul>
- <li> rc4 </li>
- <li> md5 </li>
<li> sha1 </li>
<li> sha256 </li>
<li> sha512 </li>
+ <li> blake2s </li>
+ <li> crc32c </li>
</ul>
<p>
- Please bear in mind that rc4 and md5 are broken, and that sha1 is about to be.
-Do not use them in security-critical applications.
+ Please bear in mind that sha1 is practically broken.
+Do not use it in security-critical applications.
</p>
<h2> Compiling </h2>
@@ -51,49 +51,6 @@ Do not use them in security-critical applications.
for the exact function prototypes.
</p>
-<h3> <a name="rc4" />
-RC4 </h3>
-
-<pre>
- RC4Schedule ctx ;
- unsigned char const *key ;
- size_t keylen ;
- unsigned char const *in ;
- unsigned char *out ;
- size_t len ;
-
- rc4_init(&amp;ctx, key, keylen) ;
- rc4(&amp;ctx, in, out, len) ;
-</pre>
-
-<ul>
- <li> <tt>rc4_init()</tt> initializes a RC4Schedule structure with a key <em>key</em>,
-of length <em>keylen</em>. It then computes and throws away the first <tt>RC4_THROWAWAY</tt>
-bytes, usually 100 </li>
- <li> <tt>rc4()</tt> encrypts <em>len</em> bytes of <em>in</em> with the RC4 flow, and
-stores the results into <em>out</em> </li>
-</ul>
-
-<h3> <a name="md5" />
-MD5 </h3>
-
-<pre>
- MD5Schedule ctx ;
- char const *message ;
- size_t messagelen ;
- char digest[16] ;
-
- md5_init(&amp;ctx) ;
- md5_update(&amp;ctx, message, messagelen) ;
- md5_final(&amp;ctx, digest) ;
-</pre>
-
-<ul>
- <li> <tt>md5_init()</tt> prepares a MD5Schedule structure for computation </li>
- <li> <tt>md5_update()</tt> adds <em>message</em> to the message to be digested </li>
- <li> <tt>md5_final()</tt> computes the digest </li>
-</ul>
-
<h3> <a name="sha1"></a>
SHA1 </h3>
@@ -154,5 +111,36 @@ SHA512 </h3>
<li> <tt>sha512_final()</tt> computes the digest </li>
</ul>
+<h3> <a name="blake2s"></a>
+blake2s </h3>
+
+ Same scheme as with the other hashes.
+
+<pre>
+ blake2s_ctx ctx ;
+ char const *message ;
+ size_t messagelen ;
+ size_t outlen = 32 ; /* the user gives the length of the digest */
+ char digest[outlen] ;
+
+ blake2s_init(&amp;ctx, outlen) ;
+ blake2s_update(&amp;ctx, message, messagelen) ;
+ blake2s_final(&amp;ctx, digest) ;
+</pre>
+
+<h3> <a name="crc32c"></a>
+crc32c </h3>
+
+ This isn't a cryptography primitive, but just a function to compute
+the Castagnoli version of a cyclic redundancy code.
+
+<pre>
+ uint32_t crc = 0 ; /* no need for context except that crc needs to be initialized to 0 */
+ char const *message ;
+ size_t messagelen ;
+
+ crc = crc32c(crc, message, messagelen) ;
+</pre>
+
</body>
</html>
diff --git a/doc/license.html b/doc/license.html
index e10a595..94fa9ba 100644
--- a/doc/license.html
+++ b/doc/license.html
@@ -74,7 +74,7 @@ color, or different text font. </li>
<p>
<em>I am aware that the previous restrictions sound completely
ridiculous while the official skalibs documentation is incomplete.
-As of 2.14.4.0, I'm not going to enforce those restrictions, but if you're
+As of 2.14.5.0, I'm not going to enforce those restrictions, but if you're
going to provide documentation for skalibs, don't keep it to yourself,
please send it to me instead. :-) </em>
</p>
diff --git a/doc/upgrade.html b/doc/upgrade.html
index e6763d2..3903acc 100644
--- a/doc/upgrade.html
+++ b/doc/upgrade.html
@@ -16,6 +16,13 @@
<a href="//skarnet.org/">skarnet.org</a>
</p>
+<h2> in 2.14.5.0 </h2>
+
+<ul>
+ <li> Support for shared libraries on MacOS. </li>
+ <li> New <tt>crc32c</tt> function. </li>
+</ul>
+
<h2> in 2.14.4.0 </h2>
<ul>
diff --git a/package/deps.mak b/package/deps.mak
index 7b7af35..e771be2 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -45,7 +45,7 @@ src/include/skalibs/skalibs.h: src/include/skalibs/cplz.h src/include/skalibs/da
src/include/skalibs/skamisc.h: src/include/skalibs/buffer.h src/include/skalibs/stralloc.h
src/include/skalibs/socket.h: src/include/skalibs/fcntl.h src/include/skalibs/gccattributes.h src/include/skalibs/posixplz.h src/include/skalibs/tai.h
src/include/skalibs/stat.h: src/include/skalibs/sysdeps.h
-src/include/skalibs/stdcrypto.h: src/include/skalibs/blake2s.h src/include/skalibs/sha1.h src/include/skalibs/sha256.h src/include/skalibs/sha512.h
+src/include/skalibs/stdcrypto.h: src/include/skalibs/blake2s.h src/include/skalibs/crc32c.h src/include/skalibs/sha1.h src/include/skalibs/sha256.h src/include/skalibs/sha512.h
src/include/skalibs/stddjb.h: src/include/skalibs/alarm.h src/include/skalibs/alloc.h src/include/skalibs/allreadwrite.h src/include/skalibs/bitarray.h src/include/skalibs/bufalloc.h src/include/skalibs/buffer.h src/include/skalibs/bytestr.h src/include/skalibs/cbuffer.h src/include/skalibs/cdb.h src/include/skalibs/cdbmake.h src/include/skalibs/cspawn.h src/include/skalibs/devino.h src/include/skalibs/direntry.h src/include/skalibs/disize.h src/include/skalibs/diuint.h src/include/skalibs/diuint32.h src/include/skalibs/djbtime.h src/include/skalibs/djbunix.h src/include/skalibs/env.h src/include/skalibs/envalloc.h src/include/skalibs/error.h src/include/skalibs/exec.h src/include/skalibs/fmtscan.h src/include/skalibs/functypes.h src/include/skalibs/gccattributes.h src/include/skalibs/genalloc.h src/include/skalibs/genwrite.h src/include/skalibs/iopause.h src/include/skalibs/ip46.h src/include/skalibs/lolstdio.h src/include/skalibs/netstring.h src/include/skalibs/segfault.h src/include/skalibs/selfpipe.h src/include/skalibs/setgroups.h src/include/skalibs/sgetopt.h src/include/skalibs/sig.h src/include/skalibs/siovec.h src/include/skalibs/skamisc.h src/include/skalibs/socket.h src/include/skalibs/stralloc.h src/include/skalibs/tai.h src/include/skalibs/types.h src/include/skalibs/uint16.h src/include/skalibs/uint32.h src/include/skalibs/uint64.h
src/include/skalibs/strerr.h: src/include/skalibs/gccattributes.h
src/include/skalibs/strerr2.h: src/include/skalibs/strerr.h
@@ -205,6 +205,7 @@ src/libstdcrypto/blake2s_final.o src/libstdcrypto/blake2s_final.lo: src/libstdcr
src/libstdcrypto/blake2s_init.o src/libstdcrypto/blake2s_init.lo: src/libstdcrypto/blake2s_init.c src/include/skalibs/blake2s.h
src/libstdcrypto/blake2s_transform.o src/libstdcrypto/blake2s_transform.lo: src/libstdcrypto/blake2s_transform.c src/libstdcrypto/blake2s-internal.h src/include/skalibs/blake2s.h src/include/skalibs/uint32.h
src/libstdcrypto/blake2s_update.o src/libstdcrypto/blake2s_update.lo: src/libstdcrypto/blake2s_update.c src/libstdcrypto/blake2s-internal.h src/include/skalibs/blake2s.h
+src/libstdcrypto/crc32c.o src/libstdcrypto/crc32c.lo: src/libstdcrypto/crc32c.c src/include/skalibs/crc32c.h
src/libstdcrypto/sha1_feed.o src/libstdcrypto/sha1_feed.lo: src/libstdcrypto/sha1_feed.c src/include/skalibs/bytestr.h src/libstdcrypto/sha1-internal.h src/include/skalibs/sha1.h
src/libstdcrypto/sha1_final.o src/libstdcrypto/sha1_final.lo: src/libstdcrypto/sha1_final.c src/libstdcrypto/sha1-internal.h src/include/skalibs/sha1.h src/include/skalibs/uint32.h
src/libstdcrypto/sha1_init.o src/libstdcrypto/sha1_init.lo: src/libstdcrypto/sha1_init.c src/include/skalibs/sha1.h
diff --git a/package/info b/package/info
index 966efc6..7314982 100644
--- a/package/info
+++ b/package/info
@@ -1,4 +1,4 @@
package=skalibs
-version=2.14.4.0
+version=2.14.5.0
category=prog
package_macro_name=SKALIBS
diff --git a/src/include/skalibs/crc32c.h b/src/include/skalibs/crc32c.h
new file mode 100644
index 0000000..0aba0d8
--- /dev/null
+++ b/src/include/skalibs/crc32c.h
@@ -0,0 +1,11 @@
+/* ISC license. */
+
+#ifndef SKALIBS_CRC32C_H
+#define SKALIBS_CRC32C_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+extern uint32_t crc32c (uint32_t, char const *, size_t) ;
+
+#endif
diff --git a/src/include/skalibs/stdcrypto.h b/src/include/skalibs/stdcrypto.h
index a74c451..08e1fd9 100644
--- a/src/include/skalibs/stdcrypto.h
+++ b/src/include/skalibs/stdcrypto.h
@@ -7,5 +7,6 @@
#include <skalibs/sha256.h>
#include <skalibs/sha512.h>
#include <skalibs/blake2s.h>
+#include <skalibs/crc32c.h>
#endif
diff --git a/src/libstdcrypto/crc32c.c b/src/libstdcrypto/crc32c.c
new file mode 100644
index 0000000..4694720
--- /dev/null
+++ b/src/libstdcrypto/crc32c.c
@@ -0,0 +1,85 @@
+/* ISC license. */
+
+/*
+ Adapted from Gary S. Brown's original 1986 implementation,
+ https://web.mit.edu/freebsd/head/sys/libkern/crc32.c
+*/
+
+#include <stdint.h>
+
+#include <skalibs/crc32c.h>
+
+static uint32_t const table[256] =
+{
+ 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
+ 0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
+ 0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
+ 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
+ 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
+ 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
+ 0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
+ 0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
+ 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
+ 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
+ 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
+ 0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
+ 0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
+ 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
+ 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
+ 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
+ 0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
+ 0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
+ 0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
+ 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
+ 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
+ 0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
+ 0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
+ 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
+ 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
+ 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
+ 0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
+ 0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
+ 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
+ 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
+ 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
+ 0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
+ 0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
+ 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
+ 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
+ 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
+ 0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
+ 0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
+ 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
+ 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
+ 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
+ 0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
+ 0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
+ 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
+ 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
+ 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
+ 0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
+ 0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
+ 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
+ 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
+ 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
+ 0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
+ 0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
+ 0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
+ 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
+ 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
+ 0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
+ 0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
+ 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
+ 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
+ 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
+ 0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
+ 0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
+ 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L
+} ;
+
+uint32_t crc32c (uint32_t crc, char const *s, size_t len)
+{
+ unsigned char const *p = (unsigned char const *)s ;
+ while (len--) crc = table[(crc ^ *p++) & 0xffu] ^ (crc >> 8) ;
+ return crc ;
+}