From 96cc3eb2ee989163e02129b8fc1f7aa581c7fd40 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 4 Dec 2012 10:53:53 +0100 Subject: devtls: add support for aes_128_cbc and aes_256_cbc (import from sources) --- sys/src/9/port/devtls.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/sys/src/9/port/devtls.c b/sys/src/9/port/devtls.c index 7a5e1da53..f853abcee 100644 --- a/sys/src/9/port/devtls.c +++ b/sys/src/9/port/devtls.c @@ -234,6 +234,8 @@ static void rcvError(TlsRec *tr, int err, char *msg, ...); static int rc4enc(Secret *sec, uchar *buf, int n); static int des3enc(Secret *sec, uchar *buf, int n); static int des3dec(Secret *sec, uchar *buf, int n); +static int aesenc(Secret *sec, uchar *buf, int n); +static int aesdec(Secret *sec, uchar *buf, int n); static int noenc(Secret *sec, uchar *buf, int n); static int sslunpad(uchar *buf, int n, int block); static int tlsunpad(uchar *buf, int n, int block); @@ -1427,6 +1429,16 @@ initDES3key(Encalg *, Secret *s, uchar *p, uchar *iv) setupDES3state(s->enckey, (uchar(*)[8])p, iv); } +static void +initAESkey(Encalg *ea, Secret *s, uchar *p, uchar *iv) +{ + s->enckey = smalloc(sizeof(AESstate)); + s->enc = aesenc; + s->dec = aesdec; + s->block = 16; + setupAESstate(s->enckey, p, ea->keylen, iv); +} + static void initclearenc(Encalg *, Secret *s, uchar *, uchar *) { @@ -1440,6 +1452,8 @@ static Encalg encrypttab[] = { "clear", 0, 0, initclearenc }, { "rc4_128", 128/8, 0, initRC4key }, { "3des_ede_cbc", 3 * 8, 8, initDES3key }, + { "aes_128_cbc", 128/8, 16, initAESkey }, + { "aes_256_cbc", 256/8, 16, initAESkey }, { 0 } }; @@ -2015,6 +2029,22 @@ des3dec(Secret *sec, uchar *buf, int n) des3CBCdecrypt(buf, n, sec->enckey); return (*sec->unpad)(buf, n, 8); } + +static int +aesenc(Secret *sec, uchar *buf, int n) +{ + n = blockpad(buf, n, 16); + aesCBCencrypt(buf, n, sec->enckey); + return n; +} + +static int +aesdec(Secret *sec, uchar *buf, int n) +{ + aesCBCdecrypt(buf, n, sec->enckey); + return (*sec->unpad)(buf, n, 16); +} + static DigestState* nomac(uchar *, ulong, uchar *, ulong, uchar *, DigestState *) { -- cgit v1.2.3