Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src-draft/trunk]: src/sys/arch/x86 padlock(4): Convert legacy rijndael API t...
details: https://anonhg.NetBSD.org/src-all/rev/7cabe9b8bac0
branches: trunk
changeset: 934609:7cabe9b8bac0
user: Taylor R Campbell <riastradh%NetBSD.org@localhost>
date: Sun Jun 14 19:51:43 2020 +0000
description:
padlock(4): Convert legacy rijndael API to new aes API.
XXX Compile-tested only.
XXX The byte-order business here seems highly questionable.
diffstat:
sys/arch/x86/include/via_padlock.h | 8 ++++----
sys/arch/x86/x86/via_padlock.c | 27 ++++++++++++++++-----------
2 files changed, 20 insertions(+), 15 deletions(-)
diffs (99 lines):
diff -r 8a23668b1934 -r 7cabe9b8bac0 sys/arch/x86/include/via_padlock.h
--- a/sys/arch/x86/include/via_padlock.h Sun Jun 14 19:50:33 2020 +0000
+++ b/sys/arch/x86/include/via_padlock.h Sun Jun 14 19:51:43 2020 +0000
@@ -25,7 +25,8 @@
#include <sys/rndsource.h>
#include <sys/callout.h>
-#include <crypto/rijndael/rijndael.h>
+
+#include <crypto/aes/aes.h>
/* VIA C3 xcrypt-* instruction context control options */
#define C3_CRYPT_CWLO_ROUND_M 0x0000000f
@@ -43,9 +44,8 @@
#define C3_CRYPT_CWLO_KEY256 0x0000080e /* 256bit, 15 rds */
struct via_padlock_session {
- uint32_t ses_ekey[4 * (RIJNDAEL_MAXNR + 1) + 4]; /* 128 bit aligned */
- uint32_t ses_dkey[4 * (RIJNDAEL_MAXNR + 1) + 4]; /* 128 bit aligned */
- uint8_t ses_iv[16]; /* 128 bit aligned */
+ struct aesenc ses_ekey;
+ struct aesdec ses_dkey;
uint32_t ses_cw0;
struct swcr_data *swd;
int ses_klen;
diff -r 8a23668b1934 -r 7cabe9b8bac0 sys/arch/x86/x86/via_padlock.c
--- a/sys/arch/x86/x86/via_padlock.c Sun Jun 14 19:50:33 2020 +0000
+++ b/sys/arch/x86/x86/via_padlock.c Sun Jun 14 19:51:43 2020 +0000
@@ -37,10 +37,11 @@
#include <machine/cpufunc.h>
#include <machine/cpuvar.h>
+#include <crypto/aes/aes.h>
+
#include <opencrypto/cryptodev.h>
#include <opencrypto/cryptosoft.h>
#include <opencrypto/xform.h>
-#include <crypto/rijndael/rijndael.h>
#include <opencrypto/cryptosoft_xform.c>
@@ -176,12 +177,18 @@
case CRYPTO_AES_CBC:
switch (c->cri_klen) {
case 128:
+ aes_setenckey128(&ses->ses_ekey, c->cri_key);
+ aes_setdeckey128(&ses->ses_dkey, c->cri_key);
cw0 = C3_CRYPT_CWLO_KEY128;
break;
case 192:
+ aes_setenckey192(&ses->ses_ekey, c->cri_key);
+ aes_setdeckey192(&ses->ses_dkey, c->cri_key);
cw0 = C3_CRYPT_CWLO_KEY192;
break;
case 256:
+ aes_setenckey256(&ses->ses_ekey, c->cri_key);
+ aes_setdeckey256(&ses->ses_dkey, c->cri_key);
cw0 = C3_CRYPT_CWLO_KEY256;
break;
default:
@@ -194,14 +201,12 @@
ses->ses_klen = c->cri_klen;
ses->ses_cw0 = cw0;
- /* Build expanded keys for both directions */
- rijndaelKeySetupEnc(ses->ses_ekey, c->cri_key,
- c->cri_klen);
- rijndaelKeySetupDec(ses->ses_dkey, c->cri_key,
- c->cri_klen);
- for (i = 0; i < 4 * (RIJNDAEL_MAXNR + 1); i++) {
- ses->ses_ekey[i] = ntohl(ses->ses_ekey[i]);
- ses->ses_dkey[i] = ntohl(ses->ses_dkey[i]);
+ /* Convert words to host byte order (???) */
+ for (i = 0; i < 4 * (AES_256_NROUNDS + 1); i++) {
+ ses->ses_ekey.aese_aes.aes_rk[i] =
+ ntohl(ses->ses_ekey.aese_aes.aes_rk[i]);
+ ses->ses_dkey.aesd_aes.aes_rk[i] =
+ ntohl(ses->ses_dkey.aesd_aes.aes_rk[i]);
}
break;
@@ -379,7 +384,7 @@
if (crd->crd_flags & CRD_F_ENCRYPT) {
sc->op_cw[0] = ses->ses_cw0 | C3_CRYPT_CWLO_ENCRYPT;
- key = ses->ses_ekey;
+ key = ses->ses_ekey.aese_aes.aes_rk;
if (crd->crd_flags & CRD_F_IV_EXPLICIT)
memcpy(sc->op_iv, crd->crd_iv, 16);
else
@@ -398,7 +403,7 @@
}
} else {
sc->op_cw[0] = ses->ses_cw0 | C3_CRYPT_CWLO_DECRYPT;
- key = ses->ses_dkey;
+ key = ses->ses_dkey.aesd_aes.aes_rk;
if (crd->crd_flags & CRD_F_IV_EXPLICIT)
memcpy(sc->op_iv, crd->crd_iv, 16);
else {
Home |
Main Index |
Thread Index |
Old Index