diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/rsa/rsa_oaep.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c index a62927506e..555205813a 100644 --- a/src/lib/libcrypto/rsa/rsa_oaep.c +++ b/src/lib/libcrypto/rsa/rsa_oaep.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rsa_oaep.c,v 1.27 2018/08/05 13:30:04 bcook Exp $ */ | 1 | /* $OpenBSD: rsa_oaep.c,v 1.28 2018/08/19 20:15:30 tb Exp $ */ |
| 2 | /* Written by Ulf Moeller. This software is distributed on an "AS IS" | 2 | /* Written by Ulf Moeller. This software is distributed on an "AS IS" |
| 3 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. */ | 3 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. */ |
| 4 | 4 | ||
| @@ -126,8 +126,7 @@ RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | |||
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | dblen = num - SHA_DIGEST_LENGTH; | 128 | dblen = num - SHA_DIGEST_LENGTH; |
| 129 | db = malloc(dblen + num); | 129 | if ((db = malloc(dblen + num)) == NULL) { |
| 130 | if (db == NULL) { | ||
| 131 | RSAerror(ERR_R_MALLOC_FAILURE); | 130 | RSAerror(ERR_R_MALLOC_FAILURE); |
| 132 | return -1; | 131 | return -1; |
| 133 | } | 132 | } |
| @@ -143,17 +142,17 @@ RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | |||
| 143 | maskeddb = padded_from + SHA_DIGEST_LENGTH; | 142 | maskeddb = padded_from + SHA_DIGEST_LENGTH; |
| 144 | 143 | ||
| 145 | if (MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen)) | 144 | if (MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen)) |
| 146 | return -1; | 145 | goto err; |
| 147 | for (i = 0; i < SHA_DIGEST_LENGTH; i++) | 146 | for (i = 0; i < SHA_DIGEST_LENGTH; i++) |
| 148 | seed[i] ^= padded_from[i]; | 147 | seed[i] ^= padded_from[i]; |
| 149 | 148 | ||
| 150 | if (MGF1(db, dblen, seed, SHA_DIGEST_LENGTH)) | 149 | if (MGF1(db, dblen, seed, SHA_DIGEST_LENGTH)) |
| 151 | return -1; | 150 | goto err; |
| 152 | for (i = 0; i < dblen; i++) | 151 | for (i = 0; i < dblen; i++) |
| 153 | db[i] ^= maskeddb[i]; | 152 | db[i] ^= maskeddb[i]; |
| 154 | 153 | ||
| 155 | if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL)) | 154 | if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL)) |
| 156 | return -1; | 155 | goto err; |
| 157 | 156 | ||
| 158 | if (timingsafe_memcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad) | 157 | if (timingsafe_memcmp(db, phash, SHA_DIGEST_LENGTH) != 0 || bad) |
| 159 | goto decoding_err; | 158 | goto decoding_err; |
| @@ -177,12 +176,13 @@ RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | |||
| 177 | free(db); | 176 | free(db); |
| 178 | return mlen; | 177 | return mlen; |
| 179 | 178 | ||
| 180 | decoding_err: | 179 | decoding_err: |
| 181 | /* | 180 | /* |
| 182 | * To avoid chosen ciphertext attacks, the error message should not | 181 | * To avoid chosen ciphertext attacks, the error message should not |
| 183 | * reveal which kind of decoding error happened | 182 | * reveal which kind of decoding error happened |
| 184 | */ | 183 | */ |
| 185 | RSAerror(RSA_R_OAEP_DECODING_ERROR); | 184 | RSAerror(RSA_R_OAEP_DECODING_ERROR); |
| 185 | err: | ||
| 186 | free(db); | 186 | free(db); |
| 187 | return -1; | 187 | return -1; |
| 188 | } | 188 | } |
