diff options
Diffstat (limited to 'src/lib/libcrypto/evp/p5_crpt.c')
-rw-r--r-- | src/lib/libcrypto/evp/p5_crpt.c | 39 |
1 files changed, 6 insertions, 33 deletions
diff --git a/src/lib/libcrypto/evp/p5_crpt.c b/src/lib/libcrypto/evp/p5_crpt.c index 2a265fdee2..7ecfa8dad9 100644 --- a/src/lib/libcrypto/evp/p5_crpt.c +++ b/src/lib/libcrypto/evp/p5_crpt.c | |||
@@ -62,42 +62,11 @@ | |||
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | #include <openssl/evp.h> | 63 | #include <openssl/evp.h> |
64 | 64 | ||
65 | /* PKCS#5 v1.5 compatible PBE functions: see PKCS#5 v2.0 for more info. | 65 | /* Doesn't do anything now: Builtin PBE algorithms in static table. |
66 | */ | 66 | */ |
67 | 67 | ||
68 | void PKCS5_PBE_add(void) | 68 | void PKCS5_PBE_add(void) |
69 | { | 69 | { |
70 | #ifndef OPENSSL_NO_DES | ||
71 | # ifndef OPENSSL_NO_MD5 | ||
72 | EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(), | ||
73 | PKCS5_PBE_keyivgen); | ||
74 | # endif | ||
75 | # ifndef OPENSSL_NO_MD2 | ||
76 | EVP_PBE_alg_add(NID_pbeWithMD2AndDES_CBC, EVP_des_cbc(), EVP_md2(), | ||
77 | PKCS5_PBE_keyivgen); | ||
78 | # endif | ||
79 | # ifndef OPENSSL_NO_SHA | ||
80 | EVP_PBE_alg_add(NID_pbeWithSHA1AndDES_CBC, EVP_des_cbc(), EVP_sha1(), | ||
81 | PKCS5_PBE_keyivgen); | ||
82 | # endif | ||
83 | #endif | ||
84 | #ifndef OPENSSL_NO_RC2 | ||
85 | # ifndef OPENSSL_NO_MD5 | ||
86 | EVP_PBE_alg_add(NID_pbeWithMD5AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md5(), | ||
87 | PKCS5_PBE_keyivgen); | ||
88 | # endif | ||
89 | # ifndef OPENSSL_NO_MD2 | ||
90 | EVP_PBE_alg_add(NID_pbeWithMD2AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md2(), | ||
91 | PKCS5_PBE_keyivgen); | ||
92 | # endif | ||
93 | # ifndef OPENSSL_NO_SHA | ||
94 | EVP_PBE_alg_add(NID_pbeWithSHA1AndRC2_CBC, EVP_rc2_64_cbc(), EVP_sha1(), | ||
95 | PKCS5_PBE_keyivgen); | ||
96 | # endif | ||
97 | #endif | ||
98 | #ifndef OPENSSL_NO_HMAC | ||
99 | EVP_PBE_alg_add(NID_pbes2, NULL, NULL, PKCS5_v2_PBE_keyivgen); | ||
100 | #endif | ||
101 | } | 70 | } |
102 | 71 | ||
103 | int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, | 72 | int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, |
@@ -112,6 +81,7 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, | |||
112 | int saltlen, iter; | 81 | int saltlen, iter; |
113 | unsigned char *salt; | 82 | unsigned char *salt; |
114 | const unsigned char *pbuf; | 83 | const unsigned char *pbuf; |
84 | int mdsize; | ||
115 | 85 | ||
116 | /* Extract useful info from parameter */ | 86 | /* Extract useful info from parameter */ |
117 | if (param == NULL || param->type != V_ASN1_SEQUENCE || | 87 | if (param == NULL || param->type != V_ASN1_SEQUENCE || |
@@ -140,9 +110,12 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, | |||
140 | EVP_DigestUpdate(&ctx, salt, saltlen); | 110 | EVP_DigestUpdate(&ctx, salt, saltlen); |
141 | PBEPARAM_free(pbe); | 111 | PBEPARAM_free(pbe); |
142 | EVP_DigestFinal_ex(&ctx, md_tmp, NULL); | 112 | EVP_DigestFinal_ex(&ctx, md_tmp, NULL); |
113 | mdsize = EVP_MD_size(md); | ||
114 | if (mdsize < 0) | ||
115 | return 0; | ||
143 | for (i = 1; i < iter; i++) { | 116 | for (i = 1; i < iter; i++) { |
144 | EVP_DigestInit_ex(&ctx, md, NULL); | 117 | EVP_DigestInit_ex(&ctx, md, NULL); |
145 | EVP_DigestUpdate(&ctx, md_tmp, EVP_MD_size(md)); | 118 | EVP_DigestUpdate(&ctx, md_tmp, mdsize); |
146 | EVP_DigestFinal_ex (&ctx, md_tmp, NULL); | 119 | EVP_DigestFinal_ex (&ctx, md_tmp, NULL); |
147 | } | 120 | } |
148 | EVP_MD_CTX_cleanup(&ctx); | 121 | EVP_MD_CTX_cleanup(&ctx); |