diff options
Diffstat (limited to 'src/lib/libcrypto/pkcs12/p12_key.c')
| -rw-r--r-- | src/lib/libcrypto/pkcs12/p12_key.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/lib/libcrypto/pkcs12/p12_key.c b/src/lib/libcrypto/pkcs12/p12_key.c index c55c7b60b3..61d58502fd 100644 --- a/src/lib/libcrypto/pkcs12/p12_key.c +++ b/src/lib/libcrypto/pkcs12/p12_key.c | |||
| @@ -176,24 +176,32 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, | |||
| 176 | out += u; | 176 | out += u; |
| 177 | for (j = 0; j < v; j++) B[j] = Ai[j % u]; | 177 | for (j = 0; j < v; j++) B[j] = Ai[j % u]; |
| 178 | /* Work out B + 1 first then can use B as tmp space */ | 178 | /* Work out B + 1 first then can use B as tmp space */ |
| 179 | if (!BN_bin2bn (B, v, Bpl1)) goto err; | 179 | if (!BN_bin2bn (B, v, Bpl1)) |
| 180 | if (!BN_add_word (Bpl1, 1)) goto err; | 180 | goto err; |
| 181 | if (!BN_add_word (Bpl1, 1)) | ||
| 182 | goto err; | ||
| 181 | for (j = 0; j < Ilen ; j+=v) { | 183 | for (j = 0; j < Ilen ; j+=v) { |
| 182 | if (!BN_bin2bn (I + j, v, Ij)) goto err; | 184 | if (!BN_bin2bn(I + j, v, Ij)) |
| 183 | if (!BN_add (Ij, Ij, Bpl1)) goto err; | 185 | goto err; |
| 184 | BN_bn2bin (Ij, B); | 186 | if (!BN_add(Ij, Ij, Bpl1)) |
| 187 | goto err; | ||
| 188 | if (!BN_bn2bin(Ij, B)) | ||
| 189 | goto err; | ||
| 185 | Ijlen = BN_num_bytes (Ij); | 190 | Ijlen = BN_num_bytes (Ij); |
| 186 | /* If more than 2^(v*8) - 1 cut off MSB */ | 191 | /* If more than 2^(v*8) - 1 cut off MSB */ |
| 187 | if (Ijlen > v) { | 192 | if (Ijlen > v) { |
| 188 | BN_bn2bin (Ij, B); | 193 | if (!BN_bn2bin (Ij, B)) |
| 194 | goto err; | ||
| 189 | memcpy (I + j, B + 1, v); | 195 | memcpy (I + j, B + 1, v); |
| 190 | #ifndef PKCS12_BROKEN_KEYGEN | 196 | #ifndef PKCS12_BROKEN_KEYGEN |
| 191 | /* If less than v bytes pad with zeroes */ | 197 | /* If less than v bytes pad with zeroes */ |
| 192 | } else if (Ijlen < v) { | 198 | } else if (Ijlen < v) { |
| 193 | memset(I + j, 0, v - Ijlen); | 199 | memset(I + j, 0, v - Ijlen); |
| 194 | BN_bn2bin(Ij, I + j + v - Ijlen); | 200 | if (!BN_bn2bin(Ij, I + j + v - Ijlen)) |
| 201 | goto err; | ||
| 195 | #endif | 202 | #endif |
| 196 | } else BN_bn2bin (Ij, I + j); | 203 | } else if (!BN_bn2bin (Ij, I + j)) |
| 204 | goto err; | ||
| 197 | } | 205 | } |
| 198 | } | 206 | } |
| 199 | 207 | ||
