summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/rsa/rsa_oaep.c
diff options
context:
space:
mode:
authordjm <>2010-10-01 22:59:01 +0000
committerdjm <>2010-10-01 22:59:01 +0000
commitfe047d8b632246cb2db3234a0a4f32e5c318857b (patch)
tree939b752540947d33507b3acc48d76a8bfb7c3dc3 /src/lib/libcrypto/rsa/rsa_oaep.c
parent2ea67f4aa254b09ded62e6e14fc893bbe6381579 (diff)
downloadopenbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.gz
openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.bz2
openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.zip
resolve conflicts, fix local changes
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_oaep.c')
-rw-r--r--src/lib/libcrypto/rsa/rsa_oaep.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c
index 4d30c9d2d3..e238d10e5c 100644
--- a/src/lib/libcrypto/rsa/rsa_oaep.c
+++ b/src/lib/libcrypto/rsa/rsa_oaep.c
@@ -28,7 +28,7 @@
28#include <openssl/rand.h> 28#include <openssl/rand.h>
29#include <openssl/sha.h> 29#include <openssl/sha.h>
30 30
31int MGF1(unsigned char *mask, long len, 31static int MGF1(unsigned char *mask, long len,
32 const unsigned char *seed, long seedlen); 32 const unsigned char *seed, long seedlen);
33 33
34int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, 34int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
@@ -52,13 +52,6 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
52 return 0; 52 return 0;
53 } 53 }
54 54
55 dbmask = OPENSSL_malloc(emlen - SHA_DIGEST_LENGTH);
56 if (dbmask == NULL)
57 {
58 RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, ERR_R_MALLOC_FAILURE);
59 return 0;
60 }
61
62 to[0] = 0; 55 to[0] = 0;
63 seed = to + 1; 56 seed = to + 1;
64 db = to + SHA_DIGEST_LENGTH + 1; 57 db = to + SHA_DIGEST_LENGTH + 1;
@@ -76,11 +69,20 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
76 20); 69 20);
77#endif 70#endif
78 71
79 MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH); 72 dbmask = OPENSSL_malloc(emlen - SHA_DIGEST_LENGTH);
73 if (dbmask == NULL)
74 {
75 RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, ERR_R_MALLOC_FAILURE);
76 return 0;
77 }
78
79 if (MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH) < 0)
80 return 0;
80 for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++) 81 for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++)
81 db[i] ^= dbmask[i]; 82 db[i] ^= dbmask[i];
82 83
83 MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH); 84 if (MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH) < 0)
85 return 0;
84 for (i = 0; i < SHA_DIGEST_LENGTH; i++) 86 for (i = 0; i < SHA_DIGEST_LENGTH; i++)
85 seed[i] ^= seedmask[i]; 87 seed[i] ^= seedmask[i];
86 88
@@ -133,11 +135,13 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
133 135
134 maskeddb = padded_from + SHA_DIGEST_LENGTH; 136 maskeddb = padded_from + SHA_DIGEST_LENGTH;
135 137
136 MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen); 138 if (MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen))
139 return -1;
137 for (i = 0; i < SHA_DIGEST_LENGTH; i++) 140 for (i = 0; i < SHA_DIGEST_LENGTH; i++)
138 seed[i] ^= padded_from[i]; 141 seed[i] ^= padded_from[i];
139 142
140 MGF1(db, dblen, seed, SHA_DIGEST_LENGTH); 143 if (MGF1(db, dblen, seed, SHA_DIGEST_LENGTH))
144 return -1;
141 for (i = 0; i < dblen; i++) 145 for (i = 0; i < dblen; i++)
142 db[i] ^= maskeddb[i]; 146 db[i] ^= maskeddb[i];
143 147
@@ -187,7 +191,9 @@ int PKCS1_MGF1(unsigned char *mask, long len,
187 int mdlen; 191 int mdlen;
188 192
189 EVP_MD_CTX_init(&c); 193 EVP_MD_CTX_init(&c);
190 mdlen = M_EVP_MD_size(dgst); 194 mdlen = EVP_MD_size(dgst);
195 if (mdlen < 0)
196 return -1;
191 for (i = 0; outlen < len; i++) 197 for (i = 0; outlen < len; i++)
192 { 198 {
193 cnt[0] = (unsigned char)((i >> 24) & 255); 199 cnt[0] = (unsigned char)((i >> 24) & 255);
@@ -213,7 +219,8 @@ int PKCS1_MGF1(unsigned char *mask, long len,
213 return 0; 219 return 0;
214 } 220 }
215 221
216int MGF1(unsigned char *mask, long len, const unsigned char *seed, long seedlen) 222static int MGF1(unsigned char *mask, long len, const unsigned char *seed,
223 long seedlen)
217 { 224 {
218 return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1()); 225 return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());
219 } 226 }