diff options
| -rw-r--r-- | NEWS | 8 | ||||
| -rw-r--r-- | doc/index.html | 4 | ||||
| -rw-r--r-- | doc/libstdcrypto/index.html | 82 | ||||
| -rw-r--r-- | doc/license.html | 2 | ||||
| -rw-r--r-- | doc/upgrade.html | 7 | ||||
| -rw-r--r-- | package/deps.mak | 3 | ||||
| -rw-r--r-- | package/info | 2 | ||||
| -rw-r--r-- | src/include/skalibs/crc32c.h | 11 | ||||
| -rw-r--r-- | src/include/skalibs/stdcrypto.h | 1 | ||||
| -rw-r--r-- | src/libstdcrypto/crc32c.c | 85 |
10 files changed, 153 insertions, 52 deletions
@@ -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(&ctx, key, keylen) ; - rc4(&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(&ctx) ; - md5_update(&ctx, message, messagelen) ; - md5_final(&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(&ctx, outlen) ; + blake2s_update(&ctx, message, messagelen) ; + blake2s_final(&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 ; +} |
