diff options
author | bcook <> | 2018-08-05 13:30:04 +0000 |
---|---|---|
committer | bcook <> | 2018-08-05 13:30:04 +0000 |
commit | d94f6c9208e326091c9c0989ba6ae67951b493f0 (patch) | |
tree | ccf5996a37941d3c2b8e5b2679a3239641a22d99 /src | |
parent | 9fb2e421d867d8869fcc0ded070590ae9beaa51f (diff) | |
download | openbsd-d94f6c9208e326091c9c0989ba6ae67951b493f0.tar.gz openbsd-d94f6c9208e326091c9c0989ba6ae67951b493f0.tar.bz2 openbsd-d94f6c9208e326091c9c0989ba6ae67951b493f0.zip |
In RSA_padding_add_PKCS1_OAEP, dbmask needs to be freed on failure.
ok tb@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_oaep.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c index cd7af203b7..a62927506e 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.26 2017/01/29 17:49:23 beck Exp $ */ | 1 | /* $OpenBSD: rsa_oaep.c,v 1.27 2018/08/05 13:30:04 bcook 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 | ||
@@ -72,14 +72,18 @@ RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | |||
72 | } | 72 | } |
73 | 73 | ||
74 | if (MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, | 74 | if (MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, |
75 | SHA_DIGEST_LENGTH) < 0) | 75 | SHA_DIGEST_LENGTH) < 0) { |
76 | free(dbmask); | ||
76 | return 0; | 77 | return 0; |
78 | } | ||
77 | for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++) | 79 | for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++) |
78 | db[i] ^= dbmask[i]; | 80 | db[i] ^= dbmask[i]; |
79 | 81 | ||
80 | if (MGF1(seedmask, SHA_DIGEST_LENGTH, db, | 82 | if (MGF1(seedmask, SHA_DIGEST_LENGTH, db, |
81 | emlen - SHA_DIGEST_LENGTH) < 0) | 83 | emlen - SHA_DIGEST_LENGTH) < 0) { |
84 | free(dbmask); | ||
82 | return 0; | 85 | return 0; |
86 | } | ||
83 | for (i = 0; i < SHA_DIGEST_LENGTH; i++) | 87 | for (i = 0; i < SHA_DIGEST_LENGTH; i++) |
84 | seed[i] ^= seedmask[i]; | 88 | seed[i] ^= seedmask[i]; |
85 | 89 | ||