Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1749728076, "reponame":"openssl", "desc":"OpenSSL", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://warmcat.com/repo/openssl", "f":3, "items": [ {"schema":"libjg2-1", "cid":"2bacf33c78e7fb7c9a470f9b9894cbc6", "commit": {"type":"commit", "time": 1512729592, "time_ofs": 0, "oid_tree": { "oid": "57ab449718a0864366a750a6fbc16b55ec37da37", "alias": []}, "oid":{ "oid": "49ea0f09833fb526a12f9402fa2fcf0f4b735d5e", "alias": []}, "msg": "extending afalg with aes-cbc-192/256, afalgtest.c also updated accordingly. comments from matt", "sig_commit": { "git_time": { "time": 1512729592, "offset": 0 }, "name": "Matt Caswell", "email": "matt@openssl.org", "md5": "10f7b441a32d5790efad9fc68cae4af2" }, "sig_author": { "git_time": { "time": 1510381918, "offset": 330 }, "name": "JitendraLulla", "email": "lullajd@yahoo.com", "md5": "0d6d6c5ca5e73c6d061467a55cf62660" }}, "body": "extending afalg with aes-cbc-192/256, afalgtest.c also updated accordingly. comments from matt, Stephen considered\n\nfix indentation, remove printf from afalgtest.c\n\nReviewed-by: Paul Dale \u003cpaul.dale@oracle.com\u003e\nReviewed-by: Matt Caswell \u003cmatt@openssl.org\u003e\n(Merged from https://github.com/openssl/openssl/pull/4717)\n" , "diff": "diff --git a/engines/e_afalg.c b/engines/e_afalg.c\nindex 982a53d..5f9bc2d 100644\n--- a/engines/e_afalg.c\n+++ b/engines/e_afalg.c\n@@ -18,6 +18,7 @@\n #include \u003copenssl/engine.h\u003e\n #include \u003copenssl/async.h\u003e\n #include \u003copenssl/err.h\u003e\n+#include \u0022internal/nelem.h\u0022\n \n #include \u003csys/socket.h\u003e\n #include \u003clinux/version.h\u003e\n@@ -78,7 +79,7 @@ static int afalg_create_sk(afalg_ctx *actx, const char *ciphertype,\n static int afalg_destroy(ENGINE *e);\n static int afalg_init(ENGINE *e);\n static int afalg_finish(ENGINE *e);\n-const EVP_CIPHER *afalg_aes_128_cbc(void);\n+const EVP_CIPHER *afalg_aes_cbc(int nid);\n static int afalg_ciphers(ENGINE *e, const EVP_CIPHER **cipher,\n const int **nids, int nid);\n static int afalg_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,\n@@ -93,10 +94,14 @@ static const char *engine_afalg_id \u003d \u0022afalg\u0022;\n static const char *engine_afalg_name \u003d \u0022AFALG engine support\u0022;\n \n static int afalg_cipher_nids[] \u003d {\n- NID_aes_128_cbc\n+ NID_aes_128_cbc,\n+ NID_aes_192_cbc,\n+ NID_aes_256_cbc,\n };\n \n-static EVP_CIPHER *_hidden_aes_128_cbc \u003d NULL;\n+static cbc_handles cbc_handle[] \u003d {{AES_KEY_SIZE_128, NULL},\n+ {AES_KEY_SIZE_192, NULL},\n+ {AES_KEY_SIZE_256, NULL}};\n \n static ossl_inline int io_setup(unsigned n, aio_context_t *ctx)\n {\n@@ -350,7 +355,6 @@ static ossl_inline int afalg_set_key(afalg_ctx *actx, const unsigned char *key,\n AFALGerr(AFALG_F_AFALG_SET_KEY, AFALG_R_SOCKET_SET_KEY_FAILED);\n return 0;\n }\n-\n return 1;\n }\n \n@@ -515,6 +519,8 @@ static int afalg_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,\n ciphertype \u003d EVP_CIPHER_CTX_nid(ctx);\n switch (ciphertype) {\n case NID_aes_128_cbc:\n+ case NID_aes_192_cbc:\n+ case NID_aes_256_cbc:\n strncpy(ciphername, \u0022cbc(aes)\u0022, ALG_MAX_SALG_NAME);\n break;\n default:\n@@ -637,29 +643,45 @@ static int afalg_cipher_cleanup(EVP_CIPHER_CTX *ctx)\n return 1;\n }\n \n-const EVP_CIPHER *afalg_aes_128_cbc(void)\n+cbc_handles *get_cipher_handle(int nid)\n+{\n+ switch (nid) {\n+ case NID_aes_128_cbc:\n+ return \u0026cbc_handle[AES_CBC_128];\n+ case NID_aes_192_cbc:\n+ return \u0026cbc_handle[AES_CBC_192];\n+ case NID_aes_256_cbc:\n+ return \u0026cbc_handle[AES_CBC_256];\n+ default:\n+ return NULL;\n+ }\n+}\n+\n+const EVP_CIPHER *afalg_aes_cbc(int nid)\n {\n- if (_hidden_aes_128_cbc \u003d\u003d NULL\n- \u0026\u0026 ((_hidden_aes_128_cbc \u003d\n- EVP_CIPHER_meth_new(NID_aes_128_cbc,\n- AES_BLOCK_SIZE,\n- AES_KEY_SIZE_128)) \u003d\u003d NULL\n- || !EVP_CIPHER_meth_set_iv_length(_hidden_aes_128_cbc, AES_IV_LEN)\n- || !EVP_CIPHER_meth_set_flags(_hidden_aes_128_cbc,\n- EVP_CIPH_CBC_MODE |\n- EVP_CIPH_FLAG_DEFAULT_ASN1)\n- || !EVP_CIPHER_meth_set_init(_hidden_aes_128_cbc,\n- afalg_cipher_init)\n- || !EVP_CIPHER_meth_set_do_cipher(_hidden_aes_128_cbc,\n- afalg_do_cipher)\n- || !EVP_CIPHER_meth_set_cleanup(_hidden_aes_128_cbc,\n- afalg_cipher_cleanup)\n- || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_aes_128_cbc,\n- sizeof(afalg_ctx)))) {\n- EVP_CIPHER_meth_free(_hidden_aes_128_cbc);\n- _hidden_aes_128_cbc \u003d NULL;\n- }\n- return _hidden_aes_128_cbc;\n+ cbc_handles *cipher_handle \u003d get_cipher_handle(nid);\n+ if (cipher_handle-\u003e_hidden \u003d\u003d NULL\n+ \u0026\u0026 ((cipher_handle-\u003e_hidden \u003d\n+ EVP_CIPHER_meth_new(nid,\n+ AES_BLOCK_SIZE,\n+ cipher_handle-\u003ekey_size)) \u003d\u003d NULL\n+ || !EVP_CIPHER_meth_set_iv_length(cipher_handle-\u003e_hidden,\n+ AES_IV_LEN)\n+ || !EVP_CIPHER_meth_set_flags(cipher_handle-\u003e_hidden,\n+ EVP_CIPH_CBC_MODE |\n+ EVP_CIPH_FLAG_DEFAULT_ASN1)\n+ || !EVP_CIPHER_meth_set_init(cipher_handle-\u003e_hidden,\n+ afalg_cipher_init)\n+ || !EVP_CIPHER_meth_set_do_cipher(cipher_handle-\u003e_hidden,\n+ afalg_do_cipher)\n+ || !EVP_CIPHER_meth_set_cleanup(cipher_handle-\u003e_hidden,\n+ afalg_cipher_cleanup)\n+ || !EVP_CIPHER_meth_set_impl_ctx_size(cipher_handle-\u003e_hidden,\n+ sizeof(afalg_ctx)))) {\n+ EVP_CIPHER_meth_free(cipher_handle-\u003e_hidden);\n+ cipher_handle-\u003e_hidden\u003d NULL;\n+ }\n+ return cipher_handle-\u003e_hidden;\n }\n \n static int afalg_ciphers(ENGINE *e, const EVP_CIPHER **cipher,\n@@ -674,19 +696,21 @@ static int afalg_ciphers(ENGINE *e, const EVP_CIPHER **cipher,\n \n switch (nid) {\n case NID_aes_128_cbc:\n- *cipher \u003d afalg_aes_128_cbc();\n+ case NID_aes_192_cbc:\n+ case NID_aes_256_cbc:\n+ *cipher \u003d afalg_aes_cbc(nid);\n break;\n default:\n *cipher \u003d NULL;\n r \u003d 0;\n }\n-\n return r;\n }\n \n static int bind_afalg(ENGINE *e)\n {\n /* Ensure the afalg error handling is set up */\n+ unsigned short i;\n ERR_load_AFALG_strings();\n \n if (!ENGINE_set_id(e, engine_afalg_id)\n@@ -699,13 +723,15 @@ static int bind_afalg(ENGINE *e)\n }\n \n /*\n- * Create _hidden_aes_128_cbc by calling afalg_aes_128_cbc\n+ * Create _hidden_aes_xxx_cbc by calling afalg_aes_xxx_cbc\n * now, as bind_aflag can only be called by one thread at a\n * time.\n */\n- if (afalg_aes_128_cbc() \u003d\u003d NULL) {\n- AFALGerr(AFALG_F_BIND_AFALG, AFALG_R_INIT_FAILED);\n- return 0;\n+ for(i \u003d 0; i \u003c OSSL_NELEM(afalg_cipher_nids); i++) {\n+ if (afalg_aes_cbc(afalg_cipher_nids[i]) \u003d\u003d NULL) {\n+ AFALGerr(AFALG_F_BIND_AFALG, AFALG_R_INIT_FAILED);\n+ return 0;\n+ }\n }\n \n if (!ENGINE_set_ciphers(e, afalg_ciphers)) {\n@@ -817,11 +843,20 @@ static int afalg_finish(ENGINE *e)\n return 1;\n }\n \n+static int free_cbc(void)\n+{\n+ short int i;\n+ for(i \u003d 0; i \u003c OSSL_NELEM(afalg_cipher_nids); i++) {\n+ EVP_CIPHER_meth_free(cbc_handle[i]._hidden);\n+ cbc_handle[i]._hidden \u003d NULL;\n+ }\n+ return 1;\n+}\n+\n static int afalg_destroy(ENGINE *e)\n {\n ERR_unload_AFALG_strings();\n- EVP_CIPHER_meth_free(_hidden_aes_128_cbc);\n- _hidden_aes_128_cbc \u003d NULL;\n+ free_cbc();\n return 1;\n }\n \ndiff --git a/engines/e_afalg.h b/engines/e_afalg.h\nindex 948d67e..2c03c44 100644\n--- a/engines/e_afalg.h\n+++ b/engines/e_afalg.h\n@@ -41,6 +41,8 @@\n # define AES_BLOCK_SIZE 16\n # endif\n # define AES_KEY_SIZE_128 16\n+# define AES_KEY_SIZE_192 24\n+# define AES_KEY_SIZE_256 32\n # define AES_IV_LEN 16\n \n # define MAX_INFLIGHTS 1\n@@ -51,6 +53,19 @@ typedef enum {\n MODE_ASYNC\n } op_mode;\n \n+enum {\n+ AES_CBC_128 \u003d 0,\n+ AES_CBC_192,\n+ AES_CBC_256\n+};\n+\n+struct cbc_cipher_handles {\n+ int key_size;\n+ EVP_CIPHER *_hidden;\n+};\n+\n+typedef struct cbc_cipher_handles cbc_handles;\n+\n struct afalg_aio_st {\n int efd;\n op_mode mode;\ndiff --git a/test/afalgtest.c b/test/afalgtest.c\nindex 18025ab..ec25d58 100644\n--- a/test/afalgtest.c\n+++ b/test/afalgtest.c\n@@ -17,7 +17,7 @@\n #include \u0022testutil.h\u0022\n \n /* Use a buffer size which is not aligned to block size */\n-#define BUFFER_SIZE (8 * 1024) - 13\n+#define BUFFER_SIZE 17\n \n #ifndef OPENSSL_NO_ENGINE\n static ENGINE *e;\n@@ -41,24 +41,50 @@ static ENGINE *e;\n #endif\n \n #ifndef OPENSSL_NO_AFALGENG\n-static int test_afalg_aes_128_cbc(void)\n+static int test_afalg_aes_cbc(int keysize_idx)\n {\n EVP_CIPHER_CTX *ctx;\n- const EVP_CIPHER *cipher \u003d EVP_aes_128_cbc();\n- unsigned char key[] \u003d \u0022\u005cx5F\u005cx4D\u005cxCC\u005cx3B\u005cx5A\u005cxA7\u005cx65\u005cxD6\u005c\n- \u005cx1D\u005cx83\u005cx27\u005cxDE\u005cxB8\u005cx82\u005cxCF\u005cx99\u0022;\n- unsigned char iv[] \u003d \u0022\u005cx2B\u005cx95\u005cx99\u005cx0A\u005cx91\u005cx51\u005cx37\u005cx4A\u005c\n- \u005cxBD\u005cx8F\u005cxF8\u005cxC5\u005cxA7\u005cxA0\u005cxFE\u005cx08\u0022;\n-\n- unsigned char in[BUFFER_SIZE];\n+ const EVP_CIPHER *cipher;\n+ unsigned char key[] \u003d \u0022\u005cx06\u005cxa9\u005cx21\u005cx40\u005cx36\u005cxb8\u005cxa1\u005cx5b\u0022\n+ \u0022\u005cx51\u005cx2e\u005cx03\u005cxd5\u005cx34\u005cx12\u005cx00\u005cx06\u0022\n+ \u0022\u005cx06\u005cxa9\u005cx21\u005cx40\u005cx36\u005cxb8\u005cxa1\u005cx5b\u0022\n+ \u0022\u005cx51\u005cx2e\u005cx03\u005cxd5\u005cx34\u005cx12\u005cx00\u005cx06\u0022;\n+ unsigned char iv[] \u003d \u0022\u005cx3d\u005cxaf\u005cxba\u005cx42\u005cx9d\u005cx9e\u005cxb4\u005cx30\u0022\n+ \u0022\u005cxb4\u005cx22\u005cxda\u005cx80\u005cx2c\u005cx9f\u005cxac\u005cx41\u0022;\n+ /* input \u003d \u0022Single block msg\u005cn\u0022 17Bytes*/\n+ unsigned char in[BUFFER_SIZE] \u003d \u0022\u005cx53\u005cx69\u005cx6e\u005cx67\u005cx6c\u005cx65\u005cx20\u005cx62\u0022\n+ \u0022\u005cx6c\u005cx6f\u005cx63\u005cx6b\u005cx20\u005cx6d\u005cx73\u005cx67\u005cx0a\u0022;\n unsigned char ebuf[BUFFER_SIZE + 32];\n unsigned char dbuf[BUFFER_SIZE + 32];\n+ unsigned char encresult_128[] \u003d \u0022\u005cxe3\u005cx53\u005cx77\u005cx9c\u005cx10\u005cx79\u005cxae\u005cxb8\u0022\n+ \u0022\u005cx27\u005cx08\u005cx94\u005cx2d\u005cxbe\u005cx77\u005cx18\u005cx1a\u005cx2d\u0022;\n+ unsigned char encresult_192[] \u003d \u0022\u005cxf7\u005cxe4\u005cx26\u005cxd1\u005cxd5\u005cx4f\u005cx8f\u005cx39\u0022\n+ \u0022\u005cxb1\u005cx9e\u005cxe0\u005cxdf\u005cx61\u005cxb9\u005cxc2\u005cx55\u005cxeb\u0022;\n+ unsigned char encresult_256[] \u003d \u0022\u005cxa0\u005cx76\u005cx85\u005cxfd\u005cxc1\u005cx65\u005cx71\u005cx9d\u0022\n+ \u0022\u005cxc7\u005cxe9\u005cx13\u005cx6e\u005cxae\u005cx55\u005cx49\u005cxb4\u005cx13\u0022;\n+ unsigned char *enc_result;\n+\n int encl, encf, decl, decf;\n int ret \u003d 0;\n \n+ switch (keysize_idx) {\n+ case 0:\n+ cipher \u003d EVP_aes_128_cbc();\n+ enc_result \u003d \u0026encresult_128[0];\n+ break;\n+ case 1:\n+ cipher \u003d EVP_aes_192_cbc();\n+ enc_result \u003d \u0026encresult_192[0];\n+ break;\n+ case 2:\n+ cipher \u003d EVP_aes_256_cbc();\n+ enc_result \u003d \u0026encresult_256[0];\n+ break;\n+ default:\n+ cipher \u003d NULL;\n+ }\n if (!TEST_ptr(ctx \u003d EVP_CIPHER_CTX_new()))\n return 0;\n- RAND_bytes(in, BUFFER_SIZE);\n \n if (!TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 1))\n || !TEST_true(EVP_CipherUpdate(ctx, ebuf, \u0026encl, in, BUFFER_SIZE))\n@@ -66,6 +92,9 @@ static int test_afalg_aes_128_cbc(void)\n goto end;\n encl +\u003d encf;\n \n+ if (!TEST_mem_eq(enc_result, BUFFER_SIZE, ebuf, BUFFER_SIZE))\n+ goto end;\n+\n if (!TEST_true(EVP_CIPHER_CTX_reset(ctx))\n || !TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 0))\n || !TEST_true(EVP_CipherUpdate(ctx, dbuf, \u0026decl, ebuf, encl))\n@@ -104,7 +133,7 @@ int setup_tests(void)\n TEST_info(\u0022Can't load AFALG engine\u0022);\n } else {\n # ifndef OPENSSL_NO_AFALGENG\n- ADD_TEST(test_afalg_aes_128_cbc);\n+ ADD_ALL_TESTS(test_afalg_aes_cbc, 3);\n # endif\n }\n #endif\n","s":{"c":1749728076,"u": 36994}} ],"g": 39561,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}