ref: 4b22dec91b37e3fd9da514964e159631e1d56ce9
parent: f4905dbfaac0bd930634eec8df3920ed53c1bd02
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Dec 4 05:53:53 EST 2012
devtls: add support for aes_128_cbc and aes_256_cbc (import from sources)
--- a/sys/src/9/port/devtls.c
+++ b/sys/src/9/port/devtls.c
@@ -234,6 +234,8 @@
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 @@
}
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 @@
{ "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 @@
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 *)
{--
⑨