OSDN Git Service

crypto: omap-aes-gcm - add missing .setauthsize hooks
authorArd Biesheuvel <ardb@kernel.org>
Tue, 5 Nov 2019 14:01:03 +0000 (16:01 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 11 Dec 2019 08:36:59 +0000 (16:36 +0800)
GCM only permits certain tag lengths, so populate the .setauthsize
hooks which ensure that only permitted sizes are accepted by the
implementation.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Tero Kristo <t-kristo@ti.com>
Tested-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/omap-aes-gcm.c
drivers/crypto/omap-aes.c
drivers/crypto/omap-aes.h

index 05d2fe7..70398fb 100644 (file)
@@ -413,3 +413,14 @@ int omap_aes_4106gcm_setkey(struct crypto_aead *tfm, const u8 *key,
 
        return 0;
 }
+
+int omap_aes_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize)
+{
+       return crypto_gcm_check_authsize(authsize);
+}
+
+int omap_aes_4106gcm_setauthsize(struct crypto_aead *parent,
+                                unsigned int authsize)
+{
+       return crypto_rfc4106_check_authsize(authsize);
+}
index 33cba7a..161af3b 100644 (file)
@@ -787,6 +787,7 @@ static struct aead_alg algs_aead_gcm[] = {
        .ivsize         = GCM_AES_IV_SIZE,
        .maxauthsize    = AES_BLOCK_SIZE,
        .setkey         = omap_aes_gcm_setkey,
+       .setauthsize    = omap_aes_gcm_setauthsize,
        .encrypt        = omap_aes_gcm_encrypt,
        .decrypt        = omap_aes_gcm_decrypt,
 },
@@ -807,6 +808,7 @@ static struct aead_alg algs_aead_gcm[] = {
        .maxauthsize    = AES_BLOCK_SIZE,
        .ivsize         = GCM_RFC4106_IV_SIZE,
        .setkey         = omap_aes_4106gcm_setkey,
+       .setauthsize    = omap_aes_4106gcm_setauthsize,
        .encrypt        = omap_aes_4106gcm_encrypt,
        .decrypt        = omap_aes_4106gcm_decrypt,
 },
index 2d35752..1bcca79 100644 (file)
@@ -202,8 +202,11 @@ int omap_aes_4106gcm_setkey(struct crypto_aead *tfm, const u8 *key,
                            unsigned int keylen);
 int omap_aes_gcm_encrypt(struct aead_request *req);
 int omap_aes_gcm_decrypt(struct aead_request *req);
+int omap_aes_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize);
 int omap_aes_4106gcm_encrypt(struct aead_request *req);
 int omap_aes_4106gcm_decrypt(struct aead_request *req);
+int omap_aes_4106gcm_setauthsize(struct crypto_aead *parent,
+                                unsigned int authsize);
 int omap_aes_write_ctrl(struct omap_aes_dev *dd);
 int omap_aes_crypt_dma_start(struct omap_aes_dev *dd);
 int omap_aes_crypt_dma_stop(struct omap_aes_dev *dd);