aboutsummaryrefslogtreecommitdiff
path: root/sys/crypto/aesni
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2018-07-18 04:43:18 +0000
committerConrad Meyer <cem@FreeBSD.org>2018-07-18 04:43:18 +0000
commit2ec76e3e3149dae3bd96a47439bf8758295c77fb (patch)
treee6dead77b1919cf021b93397bd8db32580b53a46 /sys/crypto/aesni
parentd9f87e4651fa7dda42dc8c895bdee2cbd47ad929 (diff)
Notes
Diffstat (limited to 'sys/crypto/aesni')
-rw-r--r--sys/crypto/aesni/aesni.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/crypto/aesni/aesni.c b/sys/crypto/aesni/aesni.c
index e9f5a0dcd562..eda6aef4c6f9 100644
--- a/sys/crypto/aesni/aesni.c
+++ b/sys/crypto/aesni/aesni.c
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#include <crypto/aesni/aesni.h>
#include <crypto/aesni/sha_sse.h>
#include <crypto/sha1.h>
+#include <crypto/sha2/sha224.h>
#include <crypto/sha2/sha256.h>
#include <opencrypto/cryptodev.h>
@@ -196,6 +197,8 @@ aesni_attach(device_t dev)
if (sc->has_sha) {
crypto_register(sc->cid, CRYPTO_SHA1, 0, 0);
crypto_register(sc->cid, CRYPTO_SHA1_HMAC, 0, 0);
+ crypto_register(sc->cid, CRYPTO_SHA2_224, 0, 0);
+ crypto_register(sc->cid, CRYPTO_SHA2_224_HMAC, 0, 0);
crypto_register(sc->cid, CRYPTO_SHA2_256, 0, 0);
crypto_register(sc->cid, CRYPTO_SHA2_256_HMAC, 0, 0);
}
@@ -266,6 +269,8 @@ aesni_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
break;
case CRYPTO_SHA1:
case CRYPTO_SHA1_HMAC:
+ case CRYPTO_SHA2_224:
+ case CRYPTO_SHA2_224_HMAC:
case CRYPTO_SHA2_256:
case CRYPTO_SHA2_256_HMAC:
if (!sc->has_sha)
@@ -352,6 +357,8 @@ aesni_process(device_t dev, struct cryptop *crp, int hint __unused)
case CRYPTO_AES_256_NIST_GMAC:
case CRYPTO_SHA1:
case CRYPTO_SHA1_HMAC:
+ case CRYPTO_SHA2_224:
+ case CRYPTO_SHA2_224_HMAC:
case CRYPTO_SHA2_256:
case CRYPTO_SHA2_256_HMAC:
if (authcrd != NULL) {
@@ -480,6 +487,8 @@ aesni_cipher_setup(struct aesni_session *ses, struct cryptoini *encini,
switch (ses->auth_algo) {
case CRYPTO_SHA1:
case CRYPTO_SHA1_HMAC:
+ case CRYPTO_SHA2_224:
+ case CRYPTO_SHA2_224_HMAC:
case CRYPTO_SHA2_256:
case CRYPTO_SHA2_256_HMAC:
error = aesni_authprepare(ses, authini->cri_klen,
@@ -600,6 +609,18 @@ intel_sha256_update(void *vctx, const void *vdata, u_int len)
}
static void
+SHA224_Init_fn(void *ctx)
+{
+ SHA224_Init(ctx);
+}
+
+static void
+SHA224_Finalize_fn(void *digest, void *ctx)
+{
+ SHA224_Final(digest, ctx);
+}
+
+static void
SHA256_Init_fn(void *ctx)
{
SHA256_Init(ctx);
@@ -870,6 +891,17 @@ aesni_cipher_mac(struct aesni_session *ses, struct cryptodesc *crd,
FinalizeFn = SHA256_Finalize_fn;
ctx = &sctx.sha2;
break;
+
+ case CRYPTO_SHA2_224_HMAC:
+ hmac = true;
+ /* FALLTHROUGH */
+ case CRYPTO_SHA2_224:
+ hashlen = SHA2_224_HASH_LEN;
+ InitFn = SHA224_Init_fn;
+ UpdateFn = intel_sha256_update;
+ FinalizeFn = SHA224_Finalize_fn;
+ ctx = &sctx.sha2;
+ break;
default:
/*
* AES-GMAC authentication is verified while processing the