summaryrefslogtreecommitdiff
path: root/sys/include/libsec.h
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-11-26 15:25:10 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2015-11-26 15:25:10 +0100
commit254031cf7020f1b185c6d0af89c653a271e0ed01 (patch)
tree9d8b55c3639a7c137ca6cd135a81b5f395d5f860 /sys/include/libsec.h
parent90695e2eb24430a984e76afb6aaf1c10e2d4809e (diff)
libsec: add chacha20 poly1305 aead, allow 64 bit iv's for chacha, add tsmemcmp()
chacha20 comes in two variants: ietf rfc7539, using 96 bit iv and 32 bit counter and draft-agl-tls-chacha20poly1305 using 64 bit iv and a 64 bit counter. so setupChachastate() now takes a ivlen argument which sets the mode. add ccpoly_encrypt()/ccpoly_decrypt() routines. to implement timing safe ccpoly_decrypt(), a constant time memcmp was needed, so adding tsmemcmp() to libsec.
Diffstat (limited to 'sys/include/libsec.h')
-rw-r--r--sys/include/libsec.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/include/libsec.h b/sys/include/libsec.h
index 359a8aa61..0b3ba44ac 100644
--- a/sys/include/libsec.h
+++ b/sys/include/libsec.h
@@ -94,13 +94,18 @@ struct Chachastate
};
};
int rounds;
+ int ivwords;
};
-void setupChachastate(Chachastate*, uchar*, ulong, uchar*, int);
-void chacha_setblock(Chachastate*, u32int);
+void setupChachastate(Chachastate*, uchar*, ulong, uchar*, ulong, int);
+void chacha_setiv(Chachastate *, uchar*);
+void chacha_setblock(Chachastate*, u64int);
void chacha_encrypt(uchar*, ulong, Chachastate*);
void chacha_encrypt2(uchar*, uchar*, ulong, Chachastate*);
+void ccpoly_encrypt(uchar *dat, ulong ndat, uchar *aad, ulong naad, uchar tag[16], Chachastate *cs);
+int ccpoly_decrypt(uchar *dat, ulong ndat, uchar *aad, ulong naad, uchar tag[16], Chachastate *cs);
+
/*
* DES definitions
*/
@@ -505,3 +510,5 @@ void pbkdf2_x(uchar *p, ulong plen, uchar *s, ulong slen, ulong rounds, uchar *d
void hkdf_x(uchar *salt, ulong nsalt, uchar *info, ulong ninfo, uchar *key, ulong nkey, uchar *d, ulong dlen,
DigestState* (*x)(uchar*, ulong, uchar*, ulong, uchar*, DigestState*), int xlen);
+/* timing safe memcmp() */
+int tsmemcmp(void*, void*, ulong);