svn commit: r213066 - head/sys/crypto/aesni

Pawel Jakub Dawidek pjd at FreeBSD.org
Thu Sep 23 11:46:54 UTC 2010


Author: pjd
Date: Thu Sep 23 11:46:53 2010
New Revision: 213066
URL: http://svn.freebsd.org/changeset/base/213066

Log:
  Add support for CRD_F_KEY_EXPLICIT flag.
  
  MFC after:	1 week

Modified:
  head/sys/crypto/aesni/aesni_wrap.c

Modified: head/sys/crypto/aesni/aesni_wrap.c
==============================================================================
--- head/sys/crypto/aesni/aesni_wrap.c	Thu Sep 23 11:33:29 2010	(r213065)
+++ head/sys/crypto/aesni/aesni_wrap.c	Thu Sep 23 11:46:53 2010	(r213066)
@@ -105,13 +105,12 @@ aesni_decrypt_ecb(int rounds, const void
 	}
 }
 
-int
-aesni_cipher_setup(struct aesni_session *ses, struct cryptoini *encini)
+static int
+aesni_cipher_setup_common(struct aesni_session *ses, const uint8_t *key,
+    int keylen)
 {
-	struct thread *td;
-	int error;
 
-	switch (encini->cri_klen) {
+	switch (keylen) {
 	case 128:
 		ses->rounds = AES128_ROUNDS;
 		break;
@@ -124,18 +123,28 @@ aesni_cipher_setup(struct aesni_session 
 	default:
 		return (EINVAL);
 	}
+ 
+	aesni_set_enckey(key, ses->enc_schedule, ses->rounds);
+	aesni_set_deckey(ses->enc_schedule, ses->dec_schedule, ses->rounds);
+	arc4rand(ses->iv, sizeof(ses->iv), 0);
 
-	td = curthread;
-	error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
-	if (error == 0) {
-		aesni_set_enckey(encini->cri_key, ses->enc_schedule,
-		    ses->rounds);
-		aesni_set_deckey(ses->enc_schedule, ses->dec_schedule,
-		    ses->rounds);
-		arc4rand(ses->iv, sizeof(ses->iv), 0);
-		fpu_kern_leave(td, &ses->fpu_ctx);
-	}
-	return (error);
+	return (0);
+}
+
+int
+aesni_cipher_setup(struct aesni_session *ses, struct cryptoini *encini)
+{
+	struct thread *td;
+	int error;
+
+ 	td = curthread;
+ 	error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
+ 	if (error == 0) {
+		error = aesni_cipher_setup_common(ses, encini->cri_key,
+		    encini->cri_klen);
+ 		fpu_kern_leave(td, &ses->fpu_ctx);
+ 	}
+ 	return (error);
 }
 
 int
@@ -154,6 +163,13 @@ aesni_cipher_process(struct aesni_sessio
 	error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
 	if (error != 0)
 		goto out;
+ 
+	if ((enccrd->crd_flags & CRD_F_KEY_EXPLICIT) != 0) {
+		error = aesni_cipher_setup_common(ses, enccrd->crd_key,
+		    enccrd->crd_klen);
+		if (error != 0)
+			goto out;
+	}
 
 	if ((enccrd->crd_flags & CRD_F_ENCRYPT) != 0) {
 		if ((enccrd->crd_flags & CRD_F_IV_EXPLICIT) != 0)


More information about the svn-src-all mailing list