diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-04 10:53:53 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-04 10:53:53 +0100 |
commit | 96cc3eb2ee989163e02129b8fc1f7aa581c7fd40 (patch) | |
tree | bcd95c1af2db5aa99d466cfc07623c6a7992b93b | |
parent | b296b96c688a4297047e5dec33d411ed6366b6c3 (diff) | |
download | plan9front-96cc3eb2ee989163e02129b8fc1f7aa581c7fd40.tar.xz |
devtls: add support for aes_128_cbc and aes_256_cbc (import from sources)
-rw-r--r-- | sys/src/9/port/devtls.c | 30 |
1 files changed, 30 insertions, 0 deletions
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); @@ -1428,6 +1430,16 @@ initDES3key(Encalg *, Secret *s, uchar *p, uchar *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 *) { s->enc = noenc; @@ -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 *) { |