Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

crypto: safexcel - Add support for authenc(hmac(md5),*) suites

This patch adds support for the following AEAD ciphersuites:
- authenc(hmac(md5),cbc(aes))
- authenc(hmac(md5),cbc(des)))
- authenc(hmac(md5),cbc(des3_ede))
- authenc(hmac(md5),rfc3686(ctr(aes)))

The first three ciphersuites were tested using testmgr and the recently
sent test vectors. They passed self-tests.

This is enhanced version of the patch found in the mtk-openwrt-feeds repo.

Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Reviewed-by: Antoine Tenart <atenart@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Aleksander Jan Bajkowski and committed by
Herbert Xu
f050e420 c75daa37

+157
+4
drivers/crypto/inside-secure/safexcel.c
··· 1204 1204 &safexcel_alg_hmac_sha256, 1205 1205 &safexcel_alg_hmac_sha384, 1206 1206 &safexcel_alg_hmac_sha512, 1207 + &safexcel_alg_authenc_hmac_md5_cbc_aes, 1207 1208 &safexcel_alg_authenc_hmac_sha1_cbc_aes, 1208 1209 &safexcel_alg_authenc_hmac_sha224_cbc_aes, 1209 1210 &safexcel_alg_authenc_hmac_sha256_cbc_aes, 1210 1211 &safexcel_alg_authenc_hmac_sha384_cbc_aes, 1211 1212 &safexcel_alg_authenc_hmac_sha512_cbc_aes, 1213 + &safexcel_alg_authenc_hmac_md5_ctr_aes, 1212 1214 &safexcel_alg_authenc_hmac_sha1_ctr_aes, 1213 1215 &safexcel_alg_authenc_hmac_sha224_ctr_aes, 1214 1216 &safexcel_alg_authenc_hmac_sha256_ctr_aes, ··· 1242 1240 &safexcel_alg_hmac_sha3_256, 1243 1241 &safexcel_alg_hmac_sha3_384, 1244 1242 &safexcel_alg_hmac_sha3_512, 1243 + &safexcel_alg_authenc_hmac_md5_cbc_des3_ede, 1245 1244 &safexcel_alg_authenc_hmac_sha1_cbc_des3_ede, 1246 1245 &safexcel_alg_authenc_hmac_sha256_cbc_des3_ede, 1247 1246 &safexcel_alg_authenc_hmac_sha224_cbc_des3_ede, 1248 1247 &safexcel_alg_authenc_hmac_sha512_cbc_des3_ede, 1249 1248 &safexcel_alg_authenc_hmac_sha384_cbc_des3_ede, 1249 + &safexcel_alg_authenc_hmac_md5_cbc_des, 1250 1250 &safexcel_alg_authenc_hmac_sha1_cbc_des, 1251 1251 &safexcel_alg_authenc_hmac_sha256_cbc_des, 1252 1252 &safexcel_alg_authenc_hmac_sha224_cbc_des,
+4
drivers/crypto/inside-secure/safexcel.h
··· 945 945 extern struct safexcel_alg_template safexcel_alg_hmac_sha256; 946 946 extern struct safexcel_alg_template safexcel_alg_hmac_sha384; 947 947 extern struct safexcel_alg_template safexcel_alg_hmac_sha512; 948 + extern struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_cbc_aes; 948 949 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_aes; 949 950 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_aes; 950 951 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_aes; 951 952 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_aes; 952 953 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_aes; 954 + extern struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_ctr_aes; 953 955 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_ctr_aes; 954 956 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_ctr_aes; 955 957 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_ctr_aes; ··· 983 981 extern struct safexcel_alg_template safexcel_alg_hmac_sha3_256; 984 982 extern struct safexcel_alg_template safexcel_alg_hmac_sha3_384; 985 983 extern struct safexcel_alg_template safexcel_alg_hmac_sha3_512; 984 + extern struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_cbc_des3_ede; 986 985 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_des3_ede; 987 986 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_des3_ede; 988 987 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_des3_ede; 989 988 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_des3_ede; 990 989 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_des3_ede; 990 + extern struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_cbc_des; 991 991 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_des; 992 992 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_des; 993 993 extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_des;
+149
drivers/crypto/inside-secure/safexcel_cipher.c
··· 17 17 #include <crypto/internal/des.h> 18 18 #include <crypto/gcm.h> 19 19 #include <crypto/ghash.h> 20 + #include <crypto/md5.h> 20 21 #include <crypto/poly1305.h> 21 22 #include <crypto/sha1.h> 22 23 #include <crypto/sha2.h> ··· 463 462 464 463 /* Auth key */ 465 464 switch (ctx->hash_alg) { 465 + case CONTEXT_CONTROL_CRYPTO_ALG_MD5: 466 + alg = "safexcel-md5"; 467 + break; 466 468 case CONTEXT_CONTROL_CRYPTO_ALG_SHA1: 467 469 alg = "safexcel-sha1"; 468 470 break; ··· 1666 1662 return 0; 1667 1663 } 1668 1664 1665 + static int safexcel_aead_md5_cra_init(struct crypto_tfm *tfm) 1666 + { 1667 + struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); 1668 + 1669 + safexcel_aead_cra_init(tfm); 1670 + ctx->hash_alg = CONTEXT_CONTROL_CRYPTO_ALG_MD5; 1671 + ctx->state_sz = MD5_DIGEST_SIZE; 1672 + return 0; 1673 + } 1674 + 1675 + struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_cbc_aes = { 1676 + .type = SAFEXCEL_ALG_TYPE_AEAD, 1677 + .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_MD5, 1678 + .alg.aead = { 1679 + .setkey = safexcel_aead_setkey, 1680 + .encrypt = safexcel_aead_encrypt, 1681 + .decrypt = safexcel_aead_decrypt, 1682 + .ivsize = AES_BLOCK_SIZE, 1683 + .maxauthsize = MD5_DIGEST_SIZE, 1684 + .base = { 1685 + .cra_name = "authenc(hmac(md5),cbc(aes))", 1686 + .cra_driver_name = "safexcel-authenc-hmac-md5-cbc-aes", 1687 + .cra_priority = SAFEXCEL_CRA_PRIORITY, 1688 + .cra_flags = CRYPTO_ALG_ASYNC | 1689 + CRYPTO_ALG_ALLOCATES_MEMORY | 1690 + CRYPTO_ALG_KERN_DRIVER_ONLY, 1691 + .cra_blocksize = AES_BLOCK_SIZE, 1692 + .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), 1693 + .cra_alignmask = 0, 1694 + .cra_init = safexcel_aead_md5_cra_init, 1695 + .cra_exit = safexcel_aead_cra_exit, 1696 + .cra_module = THIS_MODULE, 1697 + }, 1698 + }, 1699 + }; 1700 + 1669 1701 static int safexcel_aead_sha1_cra_init(struct crypto_tfm *tfm) 1670 1702 { 1671 1703 struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); ··· 1876 1836 .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), 1877 1837 .cra_alignmask = 0, 1878 1838 .cra_init = safexcel_aead_sha384_cra_init, 1839 + .cra_exit = safexcel_aead_cra_exit, 1840 + .cra_module = THIS_MODULE, 1841 + }, 1842 + }, 1843 + }; 1844 + 1845 + static int safexcel_aead_md5_des3_cra_init(struct crypto_tfm *tfm) 1846 + { 1847 + struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); 1848 + 1849 + safexcel_aead_md5_cra_init(tfm); 1850 + ctx->alg = SAFEXCEL_3DES; /* override default */ 1851 + ctx->blocksz = DES3_EDE_BLOCK_SIZE; 1852 + ctx->ivmask = EIP197_OPTION_2_TOKEN_IV_CMD; 1853 + return 0; 1854 + } 1855 + 1856 + struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_cbc_des3_ede = { 1857 + .type = SAFEXCEL_ALG_TYPE_AEAD, 1858 + .algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_MD5, 1859 + .alg.aead = { 1860 + .setkey = safexcel_aead_setkey, 1861 + .encrypt = safexcel_aead_encrypt, 1862 + .decrypt = safexcel_aead_decrypt, 1863 + .ivsize = DES3_EDE_BLOCK_SIZE, 1864 + .maxauthsize = MD5_DIGEST_SIZE, 1865 + .base = { 1866 + .cra_name = "authenc(hmac(md5),cbc(des3_ede))", 1867 + .cra_driver_name = "safexcel-authenc-hmac-md5-cbc-des3_ede", 1868 + .cra_priority = SAFEXCEL_CRA_PRIORITY, 1869 + .cra_flags = CRYPTO_ALG_ASYNC | 1870 + CRYPTO_ALG_ALLOCATES_MEMORY | 1871 + CRYPTO_ALG_KERN_DRIVER_ONLY, 1872 + .cra_blocksize = DES3_EDE_BLOCK_SIZE, 1873 + .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), 1874 + .cra_alignmask = 0, 1875 + .cra_init = safexcel_aead_md5_des3_cra_init, 1879 1876 .cra_exit = safexcel_aead_cra_exit, 1880 1877 .cra_module = THIS_MODULE, 1881 1878 }, ··· 2104 2027 }, 2105 2028 }; 2106 2029 2030 + static int safexcel_aead_md5_des_cra_init(struct crypto_tfm *tfm) 2031 + { 2032 + struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); 2033 + 2034 + safexcel_aead_md5_cra_init(tfm); 2035 + ctx->alg = SAFEXCEL_DES; /* override default */ 2036 + ctx->blocksz = DES_BLOCK_SIZE; 2037 + ctx->ivmask = EIP197_OPTION_2_TOKEN_IV_CMD; 2038 + return 0; 2039 + } 2040 + 2041 + struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_cbc_des = { 2042 + .type = SAFEXCEL_ALG_TYPE_AEAD, 2043 + .algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_MD5, 2044 + .alg.aead = { 2045 + .setkey = safexcel_aead_setkey, 2046 + .encrypt = safexcel_aead_encrypt, 2047 + .decrypt = safexcel_aead_decrypt, 2048 + .ivsize = DES_BLOCK_SIZE, 2049 + .maxauthsize = MD5_DIGEST_SIZE, 2050 + .base = { 2051 + .cra_name = "authenc(hmac(md5),cbc(des))", 2052 + .cra_driver_name = "safexcel-authenc-hmac-md5-cbc-des", 2053 + .cra_priority = SAFEXCEL_CRA_PRIORITY, 2054 + .cra_flags = CRYPTO_ALG_ASYNC | 2055 + CRYPTO_ALG_ALLOCATES_MEMORY | 2056 + CRYPTO_ALG_KERN_DRIVER_ONLY, 2057 + .cra_blocksize = DES_BLOCK_SIZE, 2058 + .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), 2059 + .cra_alignmask = 0, 2060 + .cra_init = safexcel_aead_md5_des_cra_init, 2061 + .cra_exit = safexcel_aead_cra_exit, 2062 + .cra_module = THIS_MODULE, 2063 + }, 2064 + }, 2065 + }; 2066 + 2107 2067 static int safexcel_aead_sha1_des_cra_init(struct crypto_tfm *tfm) 2108 2068 { 2109 2069 struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); ··· 2320 2206 .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), 2321 2207 .cra_alignmask = 0, 2322 2208 .cra_init = safexcel_aead_sha384_des_cra_init, 2209 + .cra_exit = safexcel_aead_cra_exit, 2210 + .cra_module = THIS_MODULE, 2211 + }, 2212 + }, 2213 + }; 2214 + 2215 + static int safexcel_aead_md5_ctr_cra_init(struct crypto_tfm *tfm) 2216 + { 2217 + struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); 2218 + 2219 + safexcel_aead_md5_cra_init(tfm); 2220 + ctx->mode = CONTEXT_CONTROL_CRYPTO_MODE_CTR_LOAD; /* override default */ 2221 + return 0; 2222 + } 2223 + 2224 + struct safexcel_alg_template safexcel_alg_authenc_hmac_md5_ctr_aes = { 2225 + .type = SAFEXCEL_ALG_TYPE_AEAD, 2226 + .algo_mask = SAFEXCEL_ALG_AES | SAFEXCEL_ALG_MD5, 2227 + .alg.aead = { 2228 + .setkey = safexcel_aead_setkey, 2229 + .encrypt = safexcel_aead_encrypt, 2230 + .decrypt = safexcel_aead_decrypt, 2231 + .ivsize = CTR_RFC3686_IV_SIZE, 2232 + .maxauthsize = MD5_DIGEST_SIZE, 2233 + .base = { 2234 + .cra_name = "authenc(hmac(md5),rfc3686(ctr(aes)))", 2235 + .cra_driver_name = "safexcel-authenc-hmac-md5-ctr-aes", 2236 + .cra_priority = SAFEXCEL_CRA_PRIORITY, 2237 + .cra_flags = CRYPTO_ALG_ASYNC | 2238 + CRYPTO_ALG_ALLOCATES_MEMORY | 2239 + CRYPTO_ALG_KERN_DRIVER_ONLY, 2240 + .cra_blocksize = 1, 2241 + .cra_ctxsize = sizeof(struct safexcel_cipher_ctx), 2242 + .cra_alignmask = 0, 2243 + .cra_init = safexcel_aead_md5_ctr_cra_init, 2323 2244 .cra_exit = safexcel_aead_cra_exit, 2324 2245 .cra_module = THIS_MODULE, 2325 2246 },