This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "".
The branch, api-next has been updated via a908a4dead95321e84d6a8a23de060051dcd8969 (commit) via 157234c02e26c66581b9a661ab3bbb62439c906d (commit) via ab19e58de943b3324e96a2ef92e4aa533b1be165 (commit) from 9ff682c8d0315f3f1921d5b9fe13d62897c78710 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit a908a4dead95321e84d6a8a23de060051dcd8969 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Thu Nov 2 19:45:10 2017 +0300
linux-gen: crypto: add AES-CTR support
Add implementation for AES-CTR cryptographic mode.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c index 9ebbe552..f34863bf 100644 --- a/platform/linux-generic/odp_crypto.c +++ b/platform/linux-generic/odp_crypto.c @@ -47,6 +47,11 @@ static const odp_crypto_cipher_capability_t cipher_capa_aes_cbc[] = { {.key_len = 24, .iv_len = 16}, {.key_len = 32, .iv_len = 16} };
+static const odp_crypto_cipher_capability_t cipher_capa_aes_ctr[] = { +{.key_len = 16, .iv_len = 16}, +{.key_len = 24, .iv_len = 16}, +{.key_len = 32, .iv_len = 16} }; + static const odp_crypto_cipher_capability_t cipher_capa_aes_gcm[] = { {.key_len = 16, .iv_len = 12}, {.key_len = 24, .iv_len = 12}, @@ -587,6 +592,7 @@ int odp_crypto_capability(odp_crypto_capability_t *capa) capa->ciphers.bit.null = 1; capa->ciphers.bit.trides_cbc = 1; capa->ciphers.bit.aes_cbc = 1; + capa->ciphers.bit.aes_ctr = 1; capa->ciphers.bit.aes_gcm = 1;
capa->auths.bit.null = 1; @@ -630,6 +636,10 @@ int odp_crypto_cipher_capability(odp_cipher_alg_t cipher, src = cipher_capa_aes_cbc; num = sizeof(cipher_capa_aes_cbc) / size; break; + case ODP_CIPHER_ALG_AES_CTR: + src = cipher_capa_aes_ctr; + num = sizeof(cipher_capa_aes_ctr) / size; + break; case ODP_CIPHER_ALG_AES_GCM: src = cipher_capa_aes_gcm; num = sizeof(cipher_capa_aes_gcm) / size; @@ -753,6 +763,16 @@ odp_crypto_session_create(odp_crypto_session_param_t *param, else rc = -1; break; + case ODP_CIPHER_ALG_AES_CTR: + if (param->cipher_key.length == 16) + rc = process_cipher_param(session, EVP_aes_128_ctr()); + else if (param->cipher_key.length == 24) + rc = process_cipher_param(session, EVP_aes_192_ctr()); + else if (param->cipher_key.length == 32) + rc = process_cipher_param(session, EVP_aes_256_ctr()); + else + rc = -1; + break; #if ODP_DEPRECATED_API case ODP_CIPHER_ALG_AES128_GCM: /* AES-GCM requires to do both auth and
commit 157234c02e26c66581b9a661ab3bbb62439c906d Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Thu Nov 2 19:44:09 2017 +0300
validation: crypto: add tests for AES-CTR
Add AES-CTR test vectors from NIST SP800-38A.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/test/validation/api/crypto/crypto.h b/test/validation/api/crypto/crypto.h index 71f862ec..ba1058f3 100644 --- a/test/validation/api/crypto/crypto.h +++ b/test/validation/api/crypto/crypto.h @@ -20,6 +20,10 @@ void crypto_test_enc_alg_aes_cbc(void); void crypto_test_enc_alg_aes_cbc_ovr_iv(void); void crypto_test_dec_alg_aes_cbc(void); void crypto_test_dec_alg_aes_cbc_ovr_iv(void); +void crypto_test_enc_alg_aes_ctr(void); +void crypto_test_enc_alg_aes_ctr_ovr_iv(void); +void crypto_test_dec_alg_aes_ctr(void); +void crypto_test_dec_alg_aes_ctr_ovr_iv(void); void crypto_test_enc_alg_aes_gcm(void); void crypto_test_enc_alg_aes_gcm_ovr_iv(void); void crypto_test_dec_alg_aes_gcm(void); diff --git a/test/validation/api/crypto/odp_crypto_test_inp.c b/test/validation/api/crypto/odp_crypto_test_inp.c index f0578037..1f7523de 100644 --- a/test/validation/api/crypto/odp_crypto_test_inp.c +++ b/test/validation/api/crypto/odp_crypto_test_inp.c @@ -325,6 +325,9 @@ static void alg_test(odp_crypto_op_t op, if (cipher_alg == ODP_CIPHER_ALG_AES_CBC && !(capa.ciphers.bit.aes_cbc)) rc = -1; + if (cipher_alg == ODP_CIPHER_ALG_AES_CTR && + !(capa.ciphers.bit.aes_ctr)) + rc = -1; if (cipher_alg == ODP_CIPHER_ALG_AES_GCM && !(capa.ciphers.bit.aes_gcm)) rc = -1; @@ -546,6 +549,10 @@ static int check_alg_support(odp_cipher_alg_t cipher, odp_auth_alg_t auth) if (!capability.ciphers.bit.aes_cbc) return ODP_TEST_INACTIVE; break; + case ODP_CIPHER_ALG_AES_CTR: + if (!capability.ciphers.bit.aes_ctr) + return ODP_TEST_INACTIVE; + break; case ODP_CIPHER_ALG_AES_GCM: if (!capability.ciphers.bit.aes_gcm) return ODP_TEST_INACTIVE; @@ -865,6 +872,88 @@ void crypto_test_dec_alg_aes_cbc_ovr_iv(void) } }
+static int check_alg_aes_ctr(void) +{ + return check_alg_support(ODP_CIPHER_ALG_AES_CTR, ODP_AUTH_ALG_NULL); +} + +/* This test verifies the correctness of encode (plaintext -> ciphertext) + * operation for AES128_CTR algorithm. IV for the operation is the session IV. + * In addition the test verifies if the implementation can use the + * packet buffer as completion event buffer.*/ +void crypto_test_enc_alg_aes_ctr(void) +{ + unsigned int test_vec_num = (sizeof(aes_ctr_reference) / + sizeof(aes_ctr_reference[0])); + unsigned int i; + + for (i = 0; i < test_vec_num; i++) { + alg_test(ODP_CRYPTO_OP_ENCODE, + ODP_CIPHER_ALG_AES_CTR, + ODP_AUTH_ALG_NULL, + &aes_ctr_reference[i], + false); + } +} + +/* This test verifies the correctness of encode (plaintext -> ciphertext) + * operation for AES128_CTR algorithm. IV for the operation is the operation IV. + * */ +void crypto_test_enc_alg_aes_ctr_ovr_iv(void) +{ + unsigned int test_vec_num = (sizeof(aes_ctr_reference) / + sizeof(aes_ctr_reference[0])); + unsigned int i; + + for (i = 0; i < test_vec_num; i++) { + alg_test(ODP_CRYPTO_OP_ENCODE, + ODP_CIPHER_ALG_AES_CTR, + ODP_AUTH_ALG_NULL, + &aes_ctr_reference[i], + true); + } +} + +/* This test verifies the correctness of decode (ciphertext -> plaintext) + * operation for AES128_CTR algorithm. IV for the operation is the session IV + * In addition the test verifies if the implementation can use the + * packet buffer as completion event buffer. + * */ +void crypto_test_dec_alg_aes_ctr(void) +{ + unsigned int test_vec_num = (sizeof(aes_ctr_reference) / + sizeof(aes_ctr_reference[0])); + unsigned int i; + + for (i = 0; i < test_vec_num; i++) { + alg_test(ODP_CRYPTO_OP_DECODE, + ODP_CIPHER_ALG_AES_CTR, + ODP_AUTH_ALG_NULL, + &aes_ctr_reference[i], + false); + } +} + +/* This test verifies the correctness of decode (ciphertext -> plaintext) + * operation for AES128_CTR algorithm. IV for the operation is the session IV + * In addition the test verifies if the implementation can use the + * packet buffer as completion event buffer. + * */ +void crypto_test_dec_alg_aes_ctr_ovr_iv(void) +{ + unsigned int test_vec_num = (sizeof(aes_ctr_reference) / + sizeof(aes_ctr_reference[0])); + unsigned int i; + + for (i = 0; i < test_vec_num; i++) { + alg_test(ODP_CRYPTO_OP_DECODE, + ODP_CIPHER_ALG_AES_CTR, + ODP_AUTH_ALG_NULL, + &aes_ctr_reference[i], + true); + } +} + static int check_alg_hmac_md5(void) { return check_alg_support(ODP_CIPHER_ALG_NULL, ODP_AUTH_ALG_MD5_HMAC); @@ -1098,6 +1187,14 @@ odp_testinfo_t crypto_suite[] = { check_alg_aes_cbc), ODP_TEST_INFO_CONDITIONAL(crypto_test_dec_alg_aes_cbc_ovr_iv, check_alg_aes_cbc), + ODP_TEST_INFO_CONDITIONAL(crypto_test_enc_alg_aes_ctr, + check_alg_aes_ctr), + ODP_TEST_INFO_CONDITIONAL(crypto_test_dec_alg_aes_ctr, + check_alg_aes_ctr), + ODP_TEST_INFO_CONDITIONAL(crypto_test_enc_alg_aes_ctr_ovr_iv, + check_alg_aes_ctr), + ODP_TEST_INFO_CONDITIONAL(crypto_test_dec_alg_aes_ctr_ovr_iv, + check_alg_aes_ctr), ODP_TEST_INFO_CONDITIONAL(crypto_test_enc_alg_aes_gcm, check_alg_aes_gcm), ODP_TEST_INFO_CONDITIONAL(crypto_test_enc_alg_aes_gcm_ovr_iv, diff --git a/test/validation/api/crypto/test_vectors.h b/test/validation/api/crypto/test_vectors.h index 652968be..63103227 100644 --- a/test/validation/api/crypto/test_vectors.h +++ b/test/validation/api/crypto/test_vectors.h @@ -184,6 +184,87 @@ static crypto_test_reference_t aes_cbc_reference[] = { } };
+static crypto_test_reference_t aes_ctr_reference[] = { + { + .cipher_key_length = AES128_CTR_KEY_LEN, + .cipher_key = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, + 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c}, + .iv_length = AES_CTR_IV_LEN, + .iv = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }, + .length = 64, + .plaintext = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, + 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, + 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, + 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, + 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, + 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, + 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }, + .ciphertext = { 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, + 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, + 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, + 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, + 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, + 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, + 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, + 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee } + }, + { + .cipher_key_length = AES192_CTR_KEY_LEN, + .cipher_key = { 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52, + 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5, + 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b}, + .iv_length = AES_CTR_IV_LEN, + .iv = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }, + .length = 64, + .plaintext = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, + 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, + 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, + 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, + 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, + 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, + 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }, + .ciphertext = { 0x1a, 0xbc, 0x93, 0x24, 0x17, 0x52, 0x1c, 0xa2, + 0x4f, 0x2b, 0x04, 0x59, 0xfe, 0x7e, 0x6e, 0x0b, + 0x09, 0x03, 0x39, 0xec, 0x0a, 0xa6, 0xfa, 0xef, + 0xd5, 0xcc, 0xc2, 0xc6, 0xf4, 0xce, 0x8e, 0x94, + 0x1e, 0x36, 0xb2, 0x6b, 0xd1, 0xeb, 0xc6, 0x70, + 0xd1, 0xbd, 0x1d, 0x66, 0x56, 0x20, 0xab, 0xf7, + 0x4f, 0x78, 0xa7, 0xf6, 0xd2, 0x98, 0x09, 0x58, + 0x5a, 0x97, 0xda, 0xec, 0x58, 0xc6, 0xb0, 0x50 } + }, + { + .cipher_key_length = AES256_CTR_KEY_LEN, + .cipher_key = { 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, + 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, + 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, + 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4}, + .iv_length = AES_CTR_IV_LEN, + .iv = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }, + .length = 64, + .plaintext = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, + 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, + 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, + 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, + 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, + 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, + 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }, + .ciphertext = { 0x60, 0x1e, 0xc3, 0x13, 0x77, 0x57, 0x89, 0xa5, + 0xb7, 0xa7, 0xf5, 0x04, 0xbb, 0xf3, 0xd2, 0x28, + 0xf4, 0x43, 0xe3, 0xca, 0x4d, 0x62, 0xb5, 0x9a, + 0xca, 0x84, 0xe9, 0x90, 0xca, 0xca, 0xf5, 0xc5, + 0x2b, 0x09, 0x30, 0xda, 0xa2, 0x3d, 0xe9, 0x4c, + 0xe8, 0x70, 0x17, 0xba, 0x2d, 0x84, 0x98, 0x8d, + 0xdf, 0xc9, 0xc5, 0x8d, 0xb6, 0x7a, 0xad, 0xa6, + 0x13, 0xc2, 0xdd, 0x08, 0x45, 0x79, 0x41, 0xa6 } + }, +}; + /* AES-GCM test vectors extracted from * https://tools.ietf.org/html/draft-mcgrew-gcm-test-01#section-2 */ diff --git a/test/validation/api/crypto/test_vectors_len.h b/test/validation/api/crypto/test_vectors_len.h index b1ce719e..0062299e 100644 --- a/test/validation/api/crypto/test_vectors_len.h +++ b/test/validation/api/crypto/test_vectors_len.h @@ -29,6 +29,18 @@ /* AES256-CBC */ #define AES256_CBC_KEY_LEN 32
+/* AES-CBC common */ +#define AES_CTR_IV_LEN 16 + +/* AES128-CTR */ +#define AES128_CTR_KEY_LEN 16 + +/* AES192-CTR */ +#define AES192_CTR_KEY_LEN 24 + +/* AES256-CTR */ +#define AES256_CTR_KEY_LEN 32 + /* AES-GCM common */ #define AES_GCM_IV_LEN 12 #define AES_GCM_DIGEST_LEN 16
commit ab19e58de943b3324e96a2ef92e4aa533b1be165 Author: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Date: Thu Nov 2 19:43:32 2017 +0300
api: crypto: add AES-CTR declarations
Add declarations for AES-CTR cryptographic mode support.
Signed-off-by: Dmitry Eremin-Solenikov dmitry.ereminsolenikov@linaro.org Reviewed-by: Bill Fischofer bill.fischofer@linaro.org Reviewed-by: Petri Savolainen petri.savolainen@linaro.org Signed-off-by: Maxim Uvarov maxim.uvarov@linaro.org
diff --git a/include/odp/api/spec/crypto.h b/include/odp/api/spec/crypto.h index 7dcb7126..ed1fd678 100644 --- a/include/odp/api/spec/crypto.h +++ b/include/odp/api/spec/crypto.h @@ -80,6 +80,9 @@ typedef enum { /** AES with cipher block chaining */ ODP_CIPHER_ALG_AES_CBC,
+ /** AES with counter mode */ + ODP_CIPHER_ALG_AES_CTR, + /** AES in Galois/Counter Mode * * @note Must be paired with cipher ODP_AUTH_ALG_AES_GCM @@ -90,7 +93,7 @@ typedef enum { ODP_DEPRECATE(ODP_CIPHER_ALG_AES128_CBC),
/** @deprecated Use ODP_CIPHER_ALG_AES_GCM instead */ - ODP_DEPRECATE(ODP_CIPHER_ALG_AES128_GCM) + ODP_DEPRECATE(ODP_CIPHER_ALG_AES128_GCM),
} odp_cipher_alg_t;
@@ -160,6 +163,9 @@ typedef union odp_crypto_cipher_algos_t { /** ODP_CIPHER_ALG_AES_CBC */ uint32_t aes_cbc : 1;
+ /** ODP_CIPHER_ALG_AES_CTR */ + uint32_t aes_ctr : 1; + /** ODP_CIPHER_ALG_AES_GCM */ uint32_t aes_gcm : 1;
-----------------------------------------------------------------------
Summary of changes: include/odp/api/spec/crypto.h | 8 +- platform/linux-generic/odp_crypto.c | 20 +++++ test/validation/api/crypto/crypto.h | 4 + test/validation/api/crypto/odp_crypto_test_inp.c | 97 ++++++++++++++++++++++++ test/validation/api/crypto/test_vectors.h | 81 ++++++++++++++++++++ test/validation/api/crypto/test_vectors_len.h | 12 +++ 6 files changed, 221 insertions(+), 1 deletion(-)
hooks/post-receive