diff options
Diffstat (limited to 'src/lib/libcrypto/evp/p5_crpt.c')
-rw-r--r-- | src/lib/libcrypto/evp/p5_crpt.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/lib/libcrypto/evp/p5_crpt.c b/src/lib/libcrypto/evp/p5_crpt.c index 6bfa2c5acb..113c60fedb 100644 --- a/src/lib/libcrypto/evp/p5_crpt.c +++ b/src/lib/libcrypto/evp/p5_crpt.c | |||
@@ -67,41 +67,41 @@ | |||
67 | 67 | ||
68 | void PKCS5_PBE_add(void) | 68 | void PKCS5_PBE_add(void) |
69 | { | 69 | { |
70 | #ifndef NO_DES | 70 | #ifndef OPENSSL_NO_DES |
71 | # ifndef NO_MD5 | 71 | # ifndef OPENSSL_NO_MD5 |
72 | EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(), | 72 | EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(), |
73 | PKCS5_PBE_keyivgen); | 73 | PKCS5_PBE_keyivgen); |
74 | # endif | 74 | # endif |
75 | # ifndef NO_MD2 | 75 | # ifndef OPENSSL_NO_MD2 |
76 | EVP_PBE_alg_add(NID_pbeWithMD2AndDES_CBC, EVP_des_cbc(), EVP_md2(), | 76 | EVP_PBE_alg_add(NID_pbeWithMD2AndDES_CBC, EVP_des_cbc(), EVP_md2(), |
77 | PKCS5_PBE_keyivgen); | 77 | PKCS5_PBE_keyivgen); |
78 | # endif | 78 | # endif |
79 | # ifndef NO_SHA | 79 | # ifndef OPENSSL_NO_SHA |
80 | EVP_PBE_alg_add(NID_pbeWithSHA1AndDES_CBC, EVP_des_cbc(), EVP_sha1(), | 80 | EVP_PBE_alg_add(NID_pbeWithSHA1AndDES_CBC, EVP_des_cbc(), EVP_sha1(), |
81 | PKCS5_PBE_keyivgen); | 81 | PKCS5_PBE_keyivgen); |
82 | # endif | 82 | # endif |
83 | #endif | 83 | #endif |
84 | #ifndef NO_RC2 | 84 | #ifndef OPENSSL_NO_RC2 |
85 | # ifndef NO_MD5 | 85 | # ifndef OPENSSL_NO_MD5 |
86 | EVP_PBE_alg_add(NID_pbeWithMD5AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md5(), | 86 | EVP_PBE_alg_add(NID_pbeWithMD5AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md5(), |
87 | PKCS5_PBE_keyivgen); | 87 | PKCS5_PBE_keyivgen); |
88 | # endif | 88 | # endif |
89 | # ifndef NO_MD2 | 89 | # ifndef OPENSSL_NO_MD2 |
90 | EVP_PBE_alg_add(NID_pbeWithMD2AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md2(), | 90 | EVP_PBE_alg_add(NID_pbeWithMD2AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md2(), |
91 | PKCS5_PBE_keyivgen); | 91 | PKCS5_PBE_keyivgen); |
92 | # endif | 92 | # endif |
93 | # ifndef NO_SHA | 93 | # ifndef OPENSSL_NO_SHA |
94 | EVP_PBE_alg_add(NID_pbeWithSHA1AndRC2_CBC, EVP_rc2_64_cbc(), EVP_sha1(), | 94 | EVP_PBE_alg_add(NID_pbeWithSHA1AndRC2_CBC, EVP_rc2_64_cbc(), EVP_sha1(), |
95 | PKCS5_PBE_keyivgen); | 95 | PKCS5_PBE_keyivgen); |
96 | # endif | 96 | # endif |
97 | #endif | 97 | #endif |
98 | #ifndef NO_HMAC | 98 | #ifndef OPENSSL_NO_HMAC |
99 | EVP_PBE_alg_add(NID_pbes2, NULL, NULL, PKCS5_v2_PBE_keyivgen); | 99 | EVP_PBE_alg_add(NID_pbes2, NULL, NULL, PKCS5_v2_PBE_keyivgen); |
100 | #endif | 100 | #endif |
101 | } | 101 | } |
102 | 102 | ||
103 | int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, | 103 | int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, |
104 | ASN1_TYPE *param, EVP_CIPHER *cipher, EVP_MD *md, | 104 | ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, |
105 | int en_de) | 105 | int en_de) |
106 | { | 106 | { |
107 | EVP_MD_CTX ctx; | 107 | EVP_MD_CTX ctx; |
@@ -128,20 +128,22 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, | |||
128 | if(!pass) passlen = 0; | 128 | if(!pass) passlen = 0; |
129 | else if(passlen == -1) passlen = strlen(pass); | 129 | else if(passlen == -1) passlen = strlen(pass); |
130 | 130 | ||
131 | EVP_DigestInit (&ctx, md); | 131 | EVP_MD_CTX_init(&ctx); |
132 | EVP_DigestUpdate (&ctx, pass, passlen); | 132 | EVP_DigestInit_ex(&ctx, md, NULL); |
133 | EVP_DigestUpdate (&ctx, salt, saltlen); | 133 | EVP_DigestUpdate(&ctx, pass, passlen); |
134 | EVP_DigestUpdate(&ctx, salt, saltlen); | ||
134 | PBEPARAM_free(pbe); | 135 | PBEPARAM_free(pbe); |
135 | EVP_DigestFinal (&ctx, md_tmp, NULL); | 136 | EVP_DigestFinal_ex(&ctx, md_tmp, NULL); |
136 | for (i = 1; i < iter; i++) { | 137 | for (i = 1; i < iter; i++) { |
137 | EVP_DigestInit(&ctx, md); | 138 | EVP_DigestInit_ex(&ctx, md, NULL); |
138 | EVP_DigestUpdate(&ctx, md_tmp, EVP_MD_size(md)); | 139 | EVP_DigestUpdate(&ctx, md_tmp, EVP_MD_size(md)); |
139 | EVP_DigestFinal (&ctx, md_tmp, NULL); | 140 | EVP_DigestFinal_ex (&ctx, md_tmp, NULL); |
140 | } | 141 | } |
141 | memcpy (key, md_tmp, EVP_CIPHER_key_length(cipher)); | 142 | EVP_MD_CTX_cleanup(&ctx); |
142 | memcpy (iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)), | 143 | memcpy(key, md_tmp, EVP_CIPHER_key_length(cipher)); |
144 | memcpy(iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)), | ||
143 | EVP_CIPHER_iv_length(cipher)); | 145 | EVP_CIPHER_iv_length(cipher)); |
144 | EVP_CipherInit(cctx, cipher, key, iv, en_de); | 146 | EVP_CipherInit_ex(cctx, cipher, NULL, key, iv, en_de); |
145 | memset(md_tmp, 0, EVP_MAX_MD_SIZE); | 147 | memset(md_tmp, 0, EVP_MAX_MD_SIZE); |
146 | memset(key, 0, EVP_MAX_KEY_LENGTH); | 148 | memset(key, 0, EVP_MAX_KEY_LENGTH); |
147 | memset(iv, 0, EVP_MAX_IV_LENGTH); | 149 | memset(iv, 0, EVP_MAX_IV_LENGTH); |