| Index: openssl/crypto/evp/p5_crpt.c
|
| ===================================================================
|
| --- openssl/crypto/evp/p5_crpt.c (revision 105093)
|
| +++ openssl/crypto/evp/p5_crpt.c (working copy)
|
| @@ -62,42 +62,11 @@
|
| #include <openssl/x509.h>
|
| #include <openssl/evp.h>
|
|
|
| -/* PKCS#5 v1.5 compatible PBE functions: see PKCS#5 v2.0 for more info.
|
| +/* Doesn't do anything now: Builtin PBE algorithms in static table.
|
| */
|
|
|
| void PKCS5_PBE_add(void)
|
| {
|
| -#ifndef OPENSSL_NO_DES
|
| -# ifndef OPENSSL_NO_MD5
|
| -EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(),
|
| - PKCS5_PBE_keyivgen);
|
| -# endif
|
| -# ifndef OPENSSL_NO_MD2
|
| -EVP_PBE_alg_add(NID_pbeWithMD2AndDES_CBC, EVP_des_cbc(), EVP_md2(),
|
| - PKCS5_PBE_keyivgen);
|
| -# endif
|
| -# ifndef OPENSSL_NO_SHA
|
| -EVP_PBE_alg_add(NID_pbeWithSHA1AndDES_CBC, EVP_des_cbc(), EVP_sha1(),
|
| - PKCS5_PBE_keyivgen);
|
| -# endif
|
| -#endif
|
| -#ifndef OPENSSL_NO_RC2
|
| -# ifndef OPENSSL_NO_MD5
|
| -EVP_PBE_alg_add(NID_pbeWithMD5AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md5(),
|
| - PKCS5_PBE_keyivgen);
|
| -# endif
|
| -# ifndef OPENSSL_NO_MD2
|
| -EVP_PBE_alg_add(NID_pbeWithMD2AndRC2_CBC, EVP_rc2_64_cbc(), EVP_md2(),
|
| - PKCS5_PBE_keyivgen);
|
| -# endif
|
| -# ifndef OPENSSL_NO_SHA
|
| -EVP_PBE_alg_add(NID_pbeWithSHA1AndRC2_CBC, EVP_rc2_64_cbc(), EVP_sha1(),
|
| - PKCS5_PBE_keyivgen);
|
| -# endif
|
| -#endif
|
| -#ifndef OPENSSL_NO_HMAC
|
| -EVP_PBE_alg_add(NID_pbes2, NULL, NULL, PKCS5_v2_PBE_keyivgen);
|
| -#endif
|
| }
|
|
|
| int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
|
| @@ -112,6 +81,7 @@
|
| int saltlen, iter;
|
| unsigned char *salt;
|
| const unsigned char *pbuf;
|
| + int mdsize;
|
|
|
| /* Extract useful info from parameter */
|
| if (param == NULL || param->type != V_ASN1_SEQUENCE ||
|
| @@ -140,9 +110,12 @@
|
| EVP_DigestUpdate(&ctx, salt, saltlen);
|
| PBEPARAM_free(pbe);
|
| EVP_DigestFinal_ex(&ctx, md_tmp, NULL);
|
| + mdsize = EVP_MD_size(md);
|
| + if (mdsize < 0)
|
| + return 0;
|
| for (i = 1; i < iter; i++) {
|
| EVP_DigestInit_ex(&ctx, md, NULL);
|
| - EVP_DigestUpdate(&ctx, md_tmp, EVP_MD_size(md));
|
| + EVP_DigestUpdate(&ctx, md_tmp, mdsize);
|
| EVP_DigestFinal_ex (&ctx, md_tmp, NULL);
|
| }
|
| EVP_MD_CTX_cleanup(&ctx);
|
|
|