--- /n/sources/plan9/sys/src/libsec/port/chacha.c Sat Jun 14 00:00:00 2025 +++ /sys/src/libsec/port/chacha.c Mon Nov 20 00:10:35 2017 @@ -10,34 +10,18 @@ #include "os.h" #include -enum{ - Blockwords= ChachaBsize/sizeof(u32int) -}; +/* from chachablock.$O */ +extern void _chachablock(u32int x[16], int rounds); /* little-endian data order */ #define GET4(p) ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) #define PUT4(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24 -#define ROTATE(v,c) ((u32int)((v) << (c)) | ((v) >> (32 - (c)))) - -#define QUARTERROUND(ia,ib,ic,id) { \ - u32int a, b, c, d, t; \ - a = x[ia]; b = x[ib]; c = x[ic]; d = x[id]; \ - a += b; t = d^a; d = ROTATE(t,16); \ - c += d; t = b^c; b = ROTATE(t,12); \ - a += b; t = d^a; d = ROTATE(t, 8); \ - c += d; t = b^c; b = ROTATE(t, 7); \ - x[ia] = a; x[ib] = b; x[ic] = c; x[id] = d; \ -} - #define ENCRYPT(s, x, y, d) {\ u32int v; \ - uchar *sp, *dp; \ - sp = (s); \ - v = GET4(sp); \ + v = GET4(s); \ v ^= (x)+(y); \ - dp = (d); \ - PUT4(dp, v); \ + PUT4(d, v); \ } static uchar sigma[16] = "expand 32-byte k"; @@ -91,22 +75,6 @@ } static void -dorounds(u32int x[Blockwords], int rounds) -{ - for(; rounds > 0; rounds -= 2) { - QUARTERROUND(0, 4, 8,12) - QUARTERROUND(1, 5, 9,13) - QUARTERROUND(2, 6,10,14) - QUARTERROUND(3, 7,11,15) - - QUARTERROUND(0, 5,10,15) - QUARTERROUND(1, 6,11,12) - QUARTERROUND(2, 7, 8,13) - QUARTERROUND(3, 4, 9,14) - } -} - -static void hchachablock(uchar h[32], Chachastate *s) { u32int x[16]; @@ -128,7 +96,7 @@ x[14] = s->input[14]; x[15] = s->input[15]; - dorounds(x, s->rounds); + _chachablock(x, s->rounds); PUT4(h+0*4, x[0]); PUT4(h+1*4, x[1]); @@ -186,7 +154,7 @@ static void encryptblock(Chachastate *s, uchar *src, uchar *dst) { - u32int x[Blockwords]; + u32int x[16]; int i; x[0] = s->input[0]; @@ -205,7 +173,7 @@ x[13] = s->input[13]; x[14] = s->input[14]; x[15] = s->input[15]; - dorounds(x, s->rounds); + _chachablock(x, s->rounds); for(i=0; iinput[i], dst); --- /dev/null Thu Jan 1 00:00:00 1970 +++ /sys/src/libsec/port/chachablock.c Mon Nov 20 00:10:35 2017 @@ -0,0 +1,29 @@ +#include "os.h" + +#define ROTATE(v,c) ((u32int)((v) << (c)) | ((v) >> (32 - (c)))) + +#define QUARTERROUND(ia,ib,ic,id) { \ + u32int a, b, c, d, t; \ + a = x[ia]; b = x[ib]; c = x[ic]; d = x[id]; \ + a += b; t = d^a; d = ROTATE(t,16); \ + c += d; t = b^c; b = ROTATE(t,12); \ + a += b; t = d^a; d = ROTATE(t, 8); \ + c += d; t = b^c; b = ROTATE(t, 7); \ + x[ia] = a; x[ib] = b; x[ic] = c; x[id] = d; \ +} + +void +_chachablock(u32int x[16], int rounds) +{ + for(; rounds > 0; rounds -= 2) { + QUARTERROUND(0, 4, 8,12) + QUARTERROUND(1, 5, 9,13) + QUARTERROUND(2, 6,10,14) + QUARTERROUND(3, 7,11,15) + + QUARTERROUND(0, 5,10,15) + QUARTERROUND(1, 6,11,12) + QUARTERROUND(2, 7, 8,13) + QUARTERROUND(3, 4, 9,14) + } +} --- /n/sources/plan9/sys/src/libsec/port/mkfile Sat Jun 14 00:00:00 2025 +++ /sys/src/libsec/port/mkfile Tue Jun 23 00:00:00 2026 @@ -3,7 +3,7 @@ LIB=/$objtype/lib/libsec.a CFILES = des.c desmodes.c desECB.c desCBC.c des3ECB.c des3CBC.c\ - aes.c blowfish.c chacha.c \ + aes.c blowfish.c chacha.c chachablock.c \ hmac.c md5.c md5block.c md4.c sha1.c sha1block.c\ sha2_64.c sha2_128.c sha2block64.c sha2block128.c\ sha1pickle.c md5pickle.c\