diff options
author | Henrik Nord <[email protected]> | 2015-02-27 10:27:39 +0100 |
---|---|---|
committer | Henrik Nord <[email protected]> | 2015-02-27 10:27:39 +0100 |
commit | 4c3b88d20c62aacbd5dd6b45be4a18c73bed3356 (patch) | |
tree | d20c792e600c9da5d17bebb369f955c19d122ca4 /lib/crypto/c_src/crypto.c | |
parent | 18d5c901b1184c4c87ba549c14f96b528cdeb265 (diff) | |
parent | a1fa5b86e2241a6409d3278ebc39dbc6a07fcae4 (diff) | |
download | otp-4c3b88d20c62aacbd5dd6b45be4a18c73bed3356.tar.gz otp-4c3b88d20c62aacbd5dd6b45be4a18c73bed3356.tar.bz2 otp-4c3b88d20c62aacbd5dd6b45be4a18c73bed3356.zip |
Merge branch 'kellymclaughlin/crypto-aes-cfb-flexible-key-size/OTP-12467' into maint
* kellymclaughlin/crypto-aes-cfb-flexible-key-size/OTP-12467:
Accept all valid key sizes in aes_cfb functions
Diffstat (limited to 'lib/crypto/c_src/crypto.c')
-rw-r--r-- | lib/crypto/c_src/crypto.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c index e7215eeb64..26e2486dc2 100644 --- a/lib/crypto/c_src/crypto.c +++ b/lib/crypto/c_src/crypto.c @@ -1644,14 +1644,15 @@ static ERL_NIF_TERM aes_cfb_8_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM int new_ivlen = 0; ERL_NIF_TERM ret; - if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 16 + if (!enif_inspect_iolist_as_binary(env, argv[0], &key) + || !(key.size == 16 || key.size == 24 || key.size == 32) || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16 || !enif_inspect_iolist_as_binary(env, argv[2], &text)) { return enif_make_badarg(env); } memcpy(ivec_clone, ivec.data, 16); - AES_set_encrypt_key(key.data, 128, &aes_key); + AES_set_encrypt_key(key.data, key.size * 8, &aes_key); AES_cfb8_encrypt((unsigned char *) text.data, enif_make_new_binary(env, text.size, &ret), text.size, &aes_key, ivec_clone, &new_ivlen, @@ -1670,14 +1671,15 @@ static ERL_NIF_TERM aes_cfb_128_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TE CHECK_OSE_CRYPTO(); - if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 16 + if (!enif_inspect_iolist_as_binary(env, argv[0], &key) + || !(key.size == 16 || key.size == 24 || key.size == 32) || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16 || !enif_inspect_iolist_as_binary(env, argv[2], &text)) { return enif_make_badarg(env); } memcpy(ivec_clone, ivec.data, 16); - AES_set_encrypt_key(key.data, 128, &aes_key); + AES_set_encrypt_key(key.data, key.size * 8, &aes_key); AES_cfb128_encrypt((unsigned char *) text.data, enif_make_new_binary(env, text.size, &ret), text.size, &aes_key, ivec_clone, &new_ivlen, |