AES_Setkey takes key length in bytes rather than bits which makes it a bit simpler.
--- sys/crypto/cryptosoft.c | 8 +++---- sys/crypto/gmac.c | 9 ++++---- sys/crypto/gmac.h | 5 ++--- sys/crypto/xform.c | 55 +++++++++++++++++++++++-------------------------- sys/crypto/xform.h | 2 +- sys/netinet/ip_esp.c | 2 +- 6 files changed, 38 insertions(+), 43 deletions(-) diff --git sys/crypto/cryptosoft.c sys/crypto/cryptosoft.c index 315210c5407..bdc5602f6fe 100644 --- sys/crypto/cryptosoft.c +++ sys/crypto/cryptosoft.c @@ -793,12 +793,12 @@ swcr_newsession(u_int32_t *sid, struct cryptoini *cri) txf = &enc_xform_blf; goto enccommon; case CRYPTO_CAST_CBC: txf = &enc_xform_cast5; goto enccommon; - case CRYPTO_RIJNDAEL128_CBC: - txf = &enc_xform_rijndael128; + case CRYPTO_AES_CBC: + txf = &enc_xform_aes; goto enccommon; case CRYPTO_AES_CTR: txf = &enc_xform_aes_ctr; goto enccommon; case CRYPTO_AES_XTS: @@ -958,11 +958,11 @@ swcr_freesession(u_int64_t tid) switch (swd->sw_alg) { case CRYPTO_3DES_CBC: case CRYPTO_BLF_CBC: case CRYPTO_CAST_CBC: - case CRYPTO_RIJNDAEL128_CBC: + case CRYPTO_AES_CBC: case CRYPTO_AES_CTR: case CRYPTO_AES_XTS: case CRYPTO_AES_GCM_16: case CRYPTO_AES_GMAC: case CRYPTO_CHACHA20_POLY1305: @@ -1142,11 +1142,11 @@ swcr_init(void) algs[CRYPTO_BLF_CBC] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_CAST_CBC] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_MD5_HMAC] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_SHA1_HMAC] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_RIPEMD160_HMAC] = CRYPTO_ALG_FLAG_SUPPORTED; - algs[CRYPTO_RIJNDAEL128_CBC] = CRYPTO_ALG_FLAG_SUPPORTED; + algs[CRYPTO_AES_CBC] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_AES_CTR] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_AES_XTS] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_AES_GCM_16] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_AES_GMAC] = CRYPTO_ALG_FLAG_SUPPORTED; algs[CRYPTO_DEFLATE_COMP] = CRYPTO_ALG_FLAG_SUPPORTED; diff --git sys/crypto/gmac.c sys/crypto/gmac.c index 33843d08fbe..765f8404178 100644 --- sys/crypto/gmac.c +++ sys/crypto/gmac.c @@ -23,11 +23,11 @@ */ #include <sys/param.h> #include <sys/systm.h> -#include <crypto/rijndael.h> +#include <crypto/aes.h> #include <crypto/gmac.h> void ghash_gfmul(uint32_t *, uint32_t *, uint32_t *); void ghash_update_mi(GHASH_CTX *, uint8_t *, size_t); @@ -112,16 +112,15 @@ AES_GMAC_Init(void *xctx) void AES_GMAC_Setkey(void *xctx, const uint8_t *key, uint16_t klen) { AES_GMAC_CTX *ctx = xctx; - ctx->rounds = rijndaelKeySetupEnc(ctx->K, (u_char *)key, - (klen - AESCTR_NONCESIZE) * 8); + AES_Setkey(&ctx->K, key, klen - AESCTR_NONCESIZE); /* copy out salt to the counter block */ bcopy(key + klen - AESCTR_NONCESIZE, ctx->J, AESCTR_NONCESIZE); /* prepare a hash subkey */ - rijndaelEncrypt(ctx->K, ctx->rounds, ctx->ghash.H, ctx->ghash.H); + AES_Encrypt(&ctx->K, ctx->ghash.H, ctx->ghash.H); } void AES_GMAC_Reinit(void *xctx, const uint8_t *iv, uint16_t ivlen) { @@ -160,10 +159,10 @@ AES_GMAC_Final(uint8_t digest[GMAC_DIGEST_LEN], void *xctx) uint8_t keystream[GMAC_BLOCK_LEN]; int i; /* do one round of GCTR */ ctx->J[GMAC_BLOCK_LEN - 1] = 1; - rijndaelEncrypt(ctx->K, ctx->rounds, ctx->J, keystream); + AES_Encrypt(&ctx->K, ctx->J, keystream); for (i = 0; i < GMAC_DIGEST_LEN; i++) digest[i] = ctx->ghash.S[i] ^ keystream[i]; explicit_bzero(keystream, sizeof(keystream)); } diff --git sys/crypto/gmac.h sys/crypto/gmac.h index bae2c80864d..63e1988701e 100644 --- sys/crypto/gmac.h +++ sys/crypto/gmac.h @@ -17,11 +17,11 @@ */ #ifndef _GMAC_H_ #define _GMAC_H_ -#include <crypto/rijndael.h> +#include <crypto/aes.h> #define GMAC_BLOCK_LEN 16 #define GMAC_DIGEST_LEN 16 typedef struct _GHASH_CTX { @@ -30,13 +30,12 @@ typedef struct _GHASH_CTX { uint8_t Z[GMAC_BLOCK_LEN]; /* initial state */ } GHASH_CTX; typedef struct _AES_GMAC_CTX { GHASH_CTX ghash; - uint32_t K[4*(AES_MAXROUNDS + 1)]; + AES_CTX K; uint8_t J[GMAC_BLOCK_LEN]; /* counter block */ - int rounds; } AES_GMAC_CTX; __BEGIN_DECLS extern void (*ghash_update)(GHASH_CTX *, uint8_t *, size_t); diff --git sys/crypto/xform.c sys/crypto/xform.c index 0a4ddbb3ffd..70d460f3f58 100644 --- sys/crypto/xform.c +++ sys/crypto/xform.c @@ -57,11 +57,11 @@ #include <crypto/sha1.h> #include <crypto/sha2.h> #include <crypto/rmd160.h> #include <crypto/blf.h> #include <crypto/cast.h> -#include <crypto/rijndael.h> +#include <crypto/aes.h> #include <crypto/cryptodev.h> #include <crypto/xform.h> #include <crypto/gmac.h> #include <crypto/chachapoly.h> @@ -69,26 +69,26 @@ extern void des_ecb3_encrypt(caddr_t, caddr_t, caddr_t, caddr_t, caddr_t, int); int des_set_key(void *, caddr_t); int des3_setkey(void *, u_int8_t *, int); int blf_setkey(void *, u_int8_t *, int); int cast5_setkey(void *, u_int8_t *, int); -int rijndael128_setkey(void *, u_int8_t *, int); +int aes_setkey(void *, u_int8_t *, int); int aes_ctr_setkey(void *, u_int8_t *, int); int aes_xts_setkey(void *, u_int8_t *, int); int null_setkey(void *, u_int8_t *, int); void des3_encrypt(caddr_t, u_int8_t *); void blf_encrypt(caddr_t, u_int8_t *); void cast5_encrypt(caddr_t, u_int8_t *); -void rijndael128_encrypt(caddr_t, u_int8_t *); +void aes_encrypt(caddr_t, u_int8_t *); void null_encrypt(caddr_t, u_int8_t *); void aes_xts_encrypt(caddr_t, u_int8_t *); void des3_decrypt(caddr_t, u_int8_t *); void blf_decrypt(caddr_t, u_int8_t *); void cast5_decrypt(caddr_t, u_int8_t *); -void rijndael128_decrypt(caddr_t, u_int8_t *); +void aes_decrypt(caddr_t, u_int8_t *); void null_decrypt(caddr_t, u_int8_t *); void aes_xts_decrypt(caddr_t, u_int8_t *); void aes_ctr_crypt(caddr_t, u_int8_t *); @@ -110,22 +110,21 @@ u_int32_t lzs_dummy(u_int8_t *, u_int32_t, u_int8_t **); #define AESCTR_NONCESIZE 4 #define AESCTR_IVSIZE 8 #define AESCTR_BLOCKSIZE 16 struct aes_ctr_ctx { - u_int32_t ac_ek[4*(AES_MAXROUNDS + 1)]; + AES_CTX ac_key; u_int8_t ac_block[AESCTR_BLOCKSIZE]; - int ac_nr; }; #define AES_XTS_BLOCKSIZE 16 #define AES_XTS_IVSIZE 8 #define AES_XTS_ALPHA 0x87 /* GF(2^128) generator polynomial */ struct aes_xts_ctx { - rijndael_ctx key1; - rijndael_ctx key2; + AES_CTX key1; + AES_CTX key2; u_int8_t tweak[AES_XTS_BLOCKSIZE]; }; /* Helper */ void aes_xts_crypt(struct aes_xts_ctx *, u_int8_t *, u_int); @@ -158,17 +157,17 @@ struct enc_xform enc_xform_cast5 = { cast5_decrypt, cast5_setkey, NULL }; -struct enc_xform enc_xform_rijndael128 = { - CRYPTO_RIJNDAEL128_CBC, "Rijndael-128/AES", +struct enc_xform enc_xform_aes = { + CRYPTO_AES_CBC, "AES", 16, 16, 16, 32, - sizeof(rijndael_ctx), - rijndael128_encrypt, - rijndael128_decrypt, - rijndael128_setkey, + sizeof(AES_CTX), + aes_encrypt, + aes_decrypt, + aes_setkey, NULL }; struct enc_xform enc_xform_aes_ctr = { CRYPTO_AES_CTR, "AES-CTR", @@ -400,25 +399,25 @@ cast5_setkey(void *sched, u_int8_t *key, int len) return 0; } void -rijndael128_encrypt(caddr_t key, u_int8_t *blk) +aes_encrypt(caddr_t key, u_int8_t *blk) { - rijndael_encrypt((rijndael_ctx *) key, (u_char *) blk, (u_char *) blk); + AES_Encrypt((AES_CTX *)key, blk, blk); } void -rijndael128_decrypt(caddr_t key, u_int8_t *blk) +aes_decrypt(caddr_t key, u_int8_t *blk) { - rijndael_decrypt((rijndael_ctx *) key, (u_char *) blk, (u_char *) blk); + AES_Decrypt((AES_CTX *)key, blk, blk); } int -rijndael128_setkey(void *sched, u_int8_t *key, int len) +aes_setkey(void *sched, u_int8_t *key, int len) { - return rijndael_set_key((rijndael_ctx *)sched, (u_char *)key, len * 8); + return AES_Setkey((AES_CTX *)sched, key, len); } void aes_ctr_reinit(caddr_t key, u_int8_t *iv) { @@ -455,11 +454,11 @@ aes_ctr_crypt(caddr_t key, u_int8_t *data) /* increment counter */ for (i = AESCTR_BLOCKSIZE - 1; i >= AESCTR_NONCESIZE + AESCTR_IVSIZE; i--) if (++ctx->ac_block[i]) /* continue on overflow */ break; - rijndaelEncrypt(ctx->ac_ek, ctx->ac_nr, ctx->ac_block, keystream); + AES_Encrypt(&ctx->ac_key, ctx->ac_block, keystream); for (i = 0; i < AESCTR_BLOCKSIZE; i++) data[i] ^= keystream[i]; explicit_bzero(keystream, sizeof(keystream)); } @@ -470,13 +469,11 @@ aes_ctr_setkey(void *sched, u_int8_t *key, int len) if (len < AESCTR_NONCESIZE) return -1; ctx = (struct aes_ctr_ctx *)sched; - ctx->ac_nr = rijndaelKeySetupEnc(ctx->ac_ek, (u_char *)key, - (len - AESCTR_NONCESIZE) * 8); - if (ctx->ac_nr == 0) + if (AES_Setkey(&ctx->ac_key, key, len - AESCTR_NONCESIZE) != 0) return -1; bcopy(key + len - AESCTR_NONCESIZE, ctx->ac_block, AESCTR_NONCESIZE); return 0; } @@ -497,11 +494,11 @@ aes_xts_reinit(caddr_t key, u_int8_t *iv) blocknum >>= 8; } /* Last 64 bits of IV are always zero */ bzero(ctx->tweak + AES_XTS_IVSIZE, AES_XTS_IVSIZE); - rijndael_encrypt(&ctx->key2, ctx->tweak, ctx->tweak); + AES_Encrypt(&ctx->key2, ctx->tweak, ctx->tweak); } void aes_xts_crypt(struct aes_xts_ctx *ctx, u_int8_t *data, u_int do_encrypt) { @@ -510,13 +507,13 @@ aes_xts_crypt(struct aes_xts_ctx *ctx, u_int8_t *data, u_int do_encrypt) for (i = 0; i < AES_XTS_BLOCKSIZE; i++) block[i] = data[i] ^ ctx->tweak[i]; if (do_encrypt) - rijndael_encrypt(&ctx->key1, block, data); + AES_Encrypt(&ctx->key1, block, data); else - rijndael_decrypt(&ctx->key1, block, data); + AES_Decrypt(&ctx->key1, block, data); for (i = 0; i < AES_XTS_BLOCKSIZE; i++) data[i] ^= ctx->tweak[i]; /* Exponentiate tweak */ @@ -551,12 +548,12 @@ aes_xts_setkey(void *sched, u_int8_t *key, int len) if (len != 32 && len != 64) return -1; ctx = (struct aes_xts_ctx *)sched; - rijndael_set_key(&ctx->key1, key, len * 4); - rijndael_set_key(&ctx->key2, key + (len / 2), len * 4); + AES_Setkey(&ctx->key1, key, len / 2); + AES_Setkey(&ctx->key2, key + (len / 2), len / 2); return 0; } /* diff --git sys/crypto/xform.h sys/crypto/xform.h index 33d479d06bc..694c06e8e77 100644 --- sys/crypto/xform.h +++ sys/crypto/xform.h @@ -77,11 +77,11 @@ union authctx { }; extern struct enc_xform enc_xform_3des; extern struct enc_xform enc_xform_blf; extern struct enc_xform enc_xform_cast5; -extern struct enc_xform enc_xform_rijndael128; +extern struct enc_xform enc_xform_aes; extern struct enc_xform enc_xform_aes_ctr; extern struct enc_xform enc_xform_aes_gcm; extern struct enc_xform enc_xform_aes_gmac; extern struct enc_xform enc_xform_aes_xts; extern struct enc_xform enc_xform_chacha20_poly1305; diff --git sys/netinet/ip_esp.c sys/netinet/ip_esp.c index 4d8f385dc55..82e07812d92 100644 --- sys/netinet/ip_esp.c +++ sys/netinet/ip_esp.c @@ -114,11 +114,11 @@ esp_init(struct tdb *tdbp, struct xformsw *xsp, struct ipsecinit *ii) case SADB_EALG_3DESCBC: txform = &enc_xform_3des; break; case SADB_X_EALG_AES: - txform = &enc_xform_rijndael128; + txform = &enc_xform_aes; break; case SADB_X_EALG_AESCTR: txform = &enc_xform_aes_ctr; break; -- 2.12.2