diff options
| author | djm <> | 2006-06-27 05:07:03 +0000 | 
|---|---|---|
| committer | djm <> | 2006-06-27 05:07:03 +0000 | 
| commit | 7fe7e1ed6bcd0e342aed7c0f890962dda616aa0d (patch) | |
| tree | 224c33f66b0b932c84dda315d9ba4236bf125b1c /src/lib/libcrypto/rsa/rsa_oaep.c | |
| parent | 3f764f48d2626a43b6eeef7652c28303269d1204 (diff) | |
| download | openbsd-7fe7e1ed6bcd0e342aed7c0f890962dda616aa0d.tar.gz openbsd-7fe7e1ed6bcd0e342aed7c0f890962dda616aa0d.tar.bz2 openbsd-7fe7e1ed6bcd0e342aed7c0f890962dda616aa0d.zip | |
resolve conflicts
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_oaep.c')
| -rw-r--r-- | src/lib/libcrypto/rsa/rsa_oaep.c | 32 | 
1 files changed, 19 insertions, 13 deletions
| diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c index e3f7c608ec..d43ecaca63 100644 --- a/src/lib/libcrypto/rsa/rsa_oaep.c +++ b/src/lib/libcrypto/rsa/rsa_oaep.c | |||
| @@ -28,9 +28,6 @@ | |||
| 28 | #include <openssl/rand.h> | 28 | #include <openssl/rand.h> | 
| 29 | #include <openssl/sha.h> | 29 | #include <openssl/sha.h> | 
| 30 | 30 | ||
| 31 | int MGF1(unsigned char *mask, long len, | ||
| 32 | const unsigned char *seed, long seedlen); | ||
| 33 | |||
| 34 | int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | 31 | int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | 
| 35 | const unsigned char *from, int flen, | 32 | const unsigned char *from, int flen, | 
| 36 | const unsigned char *param, int plen) | 33 | const unsigned char *param, int plen) | 
| @@ -76,11 +73,13 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, | |||
| 76 | 20); | 73 | 20); | 
| 77 | #endif | 74 | #endif | 
| 78 | 75 | ||
| 79 | MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH); | 76 | PKCS1_MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH, | 
| 77 | EVP_sha1()); | ||
| 80 | for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++) | 78 | for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++) | 
| 81 | db[i] ^= dbmask[i]; | 79 | db[i] ^= dbmask[i]; | 
| 82 | 80 | ||
| 83 | MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH); | 81 | PKCS1_MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH, | 
| 82 | EVP_sha1()); | ||
| 84 | for (i = 0; i < SHA_DIGEST_LENGTH; i++) | 83 | for (i = 0; i < SHA_DIGEST_LENGTH; i++) | 
| 85 | seed[i] ^= seedmask[i]; | 84 | seed[i] ^= seedmask[i]; | 
| 86 | 85 | ||
| @@ -126,11 +125,11 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, | |||
| 126 | return -1; | 125 | return -1; | 
| 127 | } | 126 | } | 
| 128 | 127 | ||
| 129 | MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen); | 128 | PKCS1_MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen, EVP_sha1()); | 
| 130 | for (i = lzero; i < SHA_DIGEST_LENGTH; i++) | 129 | for (i = lzero; i < SHA_DIGEST_LENGTH; i++) | 
| 131 | seed[i] ^= from[i - lzero]; | 130 | seed[i] ^= from[i - lzero]; | 
| 132 | 131 | ||
| 133 | MGF1(db, dblen, seed, SHA_DIGEST_LENGTH); | 132 | PKCS1_MGF1(db, dblen, seed, SHA_DIGEST_LENGTH, EVP_sha1()); | 
| 134 | for (i = 0; i < dblen; i++) | 133 | for (i = 0; i < dblen; i++) | 
| 135 | db[i] ^= maskeddb[i]; | 134 | db[i] ^= maskeddb[i]; | 
| 136 | 135 | ||
| @@ -170,28 +169,30 @@ decoding_err: | |||
| 170 | return -1; | 169 | return -1; | 
| 171 | } | 170 | } | 
| 172 | 171 | ||
| 173 | int MGF1(unsigned char *mask, long len, | 172 | int PKCS1_MGF1(unsigned char *mask, long len, | 
| 174 | const unsigned char *seed, long seedlen) | 173 | const unsigned char *seed, long seedlen, const EVP_MD *dgst) | 
| 175 | { | 174 | { | 
| 176 | long i, outlen = 0; | 175 | long i, outlen = 0; | 
| 177 | unsigned char cnt[4]; | 176 | unsigned char cnt[4]; | 
| 178 | EVP_MD_CTX c; | 177 | EVP_MD_CTX c; | 
| 179 | unsigned char md[SHA_DIGEST_LENGTH]; | 178 | unsigned char md[EVP_MAX_MD_SIZE]; | 
| 179 | int mdlen; | ||
| 180 | 180 | ||
| 181 | EVP_MD_CTX_init(&c); | 181 | EVP_MD_CTX_init(&c); | 
| 182 | mdlen = EVP_MD_size(dgst); | ||
| 182 | for (i = 0; outlen < len; i++) | 183 | for (i = 0; outlen < len; i++) | 
| 183 | { | 184 | { | 
| 184 | cnt[0] = (unsigned char)((i >> 24) & 255); | 185 | cnt[0] = (unsigned char)((i >> 24) & 255); | 
| 185 | cnt[1] = (unsigned char)((i >> 16) & 255); | 186 | cnt[1] = (unsigned char)((i >> 16) & 255); | 
| 186 | cnt[2] = (unsigned char)((i >> 8)) & 255; | 187 | cnt[2] = (unsigned char)((i >> 8)) & 255; | 
| 187 | cnt[3] = (unsigned char)(i & 255); | 188 | cnt[3] = (unsigned char)(i & 255); | 
| 188 | EVP_DigestInit_ex(&c,EVP_sha1(), NULL); | 189 | EVP_DigestInit_ex(&c,dgst, NULL); | 
| 189 | EVP_DigestUpdate(&c, seed, seedlen); | 190 | EVP_DigestUpdate(&c, seed, seedlen); | 
| 190 | EVP_DigestUpdate(&c, cnt, 4); | 191 | EVP_DigestUpdate(&c, cnt, 4); | 
| 191 | if (outlen + SHA_DIGEST_LENGTH <= len) | 192 | if (outlen + mdlen <= len) | 
| 192 | { | 193 | { | 
| 193 | EVP_DigestFinal_ex(&c, mask + outlen, NULL); | 194 | EVP_DigestFinal_ex(&c, mask + outlen, NULL); | 
| 194 | outlen += SHA_DIGEST_LENGTH; | 195 | outlen += mdlen; | 
| 195 | } | 196 | } | 
| 196 | else | 197 | else | 
| 197 | { | 198 | { | 
| @@ -203,4 +204,9 @@ int MGF1(unsigned char *mask, long len, | |||
| 203 | EVP_MD_CTX_cleanup(&c); | 204 | EVP_MD_CTX_cleanup(&c); | 
| 204 | return 0; | 205 | return 0; | 
| 205 | } | 206 | } | 
| 207 | |||
| 208 | int MGF1(unsigned char *mask, long len, const unsigned char *seed, long seedlen) | ||
| 209 | { | ||
| 210 | return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1()); | ||
| 211 | } | ||
| 206 | #endif | 212 | #endif | 
