]> git.lizzy.rs Git - plan9front.git/commitdiff
devtls: add support for aes_128_cbc and aes_256_cbc (import from sources)
authorcinap_lenrek <cinap_lenrek@gmx.de>
Tue, 4 Dec 2012 09:53:53 +0000 (10:53 +0100)
committercinap_lenrek <cinap_lenrek@gmx.de>
Tue, 4 Dec 2012 09:53:53 +0000 (10:53 +0100)
sys/src/9/port/devtls.c

index 7a5e1da53b81e38652eee7bcd5c413dda0fcfb3f..f853abceeebfacaa78f41db53a349d245542e949 100644 (file)
@@ -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 *)
 {