Mercurial > dropbear
comparison libtomcrypt/src/pk/rsa/rsa_encrypt_key.c @ 1435:f849a5ca2efc
update to libtomcrypt 1.17 (with Dropbear changes)
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 24 Jun 2017 17:50:50 +0800 |
parents | 0cbe8f6dbf9e |
children | 6dba84798cd5 |
comparison
equal
deleted
inserted
replaced
1434:27b9ddb06b09 | 1435:f849a5ca2efc |
---|---|
4 * algorithms in a highly modular and flexible manner. | 4 * algorithms in a highly modular and flexible manner. |
5 * | 5 * |
6 * The library is free for all purposes without any express | 6 * The library is free for all purposes without any express |
7 * guarantee it works. | 7 * guarantee it works. |
8 * | 8 * |
9 * Tom St Denis, [email protected], http://libtomcrypt.com | 9 * Tom St Denis, [email protected], http://libtom.org |
10 */ | 10 */ |
11 #include "tomcrypt.h" | 11 #include "tomcrypt.h" |
12 | 12 |
13 /** | 13 /** |
14 @file rsa_encrypt_key.c | 14 @file rsa_encrypt_key.c |
15 RSA PKCS #1 encryption, Tom St Denis and Andreas Lange | 15 RSA LTC_PKCS #1 encryption, Tom St Denis and Andreas Lange |
16 */ | 16 */ |
17 | 17 |
18 #ifdef MRSA | 18 #ifdef LTC_MRSA |
19 | 19 |
20 /** | 20 /** |
21 (PKCS #1 v2.0) OAEP pad then encrypt | 21 (LTC_PKCS #1 v2.0) OAEP pad then encrypt |
22 @param in The plaintext | 22 @param in The plaintext |
23 @param inlen The length of the plaintext (octets) | 23 @param inlen The length of the plaintext (octets) |
24 @param out [out] The ciphertext | 24 @param out [out] The ciphertext |
25 @param outlen [in/out] The max size and resulting size of the ciphertext | 25 @param outlen [in/out] The max size and resulting size of the ciphertext |
26 @param lparam The system "lparam" for the encryption | 26 @param lparam The system "lparam" for the encryption |
27 @param lparamlen The length of lparam (octets) | 27 @param lparamlen The length of lparam (octets) |
28 @param prng An active PRNG | 28 @param prng An active PRNG |
29 @param prng_idx The index of the desired prng | 29 @param prng_idx The index of the desired prng |
30 @param hash_idx The index of the desired hash | 30 @param hash_idx The index of the desired hash |
31 @param padding Type of padding (LTC_PKCS_1_OAEP or LTC_PKCS_1_V1_5) | 31 @param padding Type of padding (LTC_LTC_PKCS_1_OAEP or LTC_LTC_PKCS_1_V1_5) |
32 @param key The RSA key to encrypt to | 32 @param key The RSA key to encrypt to |
33 @return CRYPT_OK if successful | 33 @return CRYPT_OK if successful |
34 */ | 34 */ |
35 int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, | 35 int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, |
36 unsigned char *out, unsigned long *outlen, | 36 unsigned char *out, unsigned long *outlen, |
44 LTC_ARGCHK(out != NULL); | 44 LTC_ARGCHK(out != NULL); |
45 LTC_ARGCHK(outlen != NULL); | 45 LTC_ARGCHK(outlen != NULL); |
46 LTC_ARGCHK(key != NULL); | 46 LTC_ARGCHK(key != NULL); |
47 | 47 |
48 /* valid padding? */ | 48 /* valid padding? */ |
49 if ((padding != LTC_PKCS_1_V1_5) && | 49 if ((padding != LTC_LTC_PKCS_1_V1_5) && |
50 (padding != LTC_PKCS_1_OAEP)) { | 50 (padding != LTC_LTC_PKCS_1_OAEP)) { |
51 return CRYPT_PK_INVALID_PADDING; | 51 return CRYPT_PK_INVALID_PADDING; |
52 } | 52 } |
53 | 53 |
54 /* valid prng? */ | 54 /* valid prng? */ |
55 if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { | 55 if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { |
56 return err; | 56 return err; |
57 } | 57 } |
58 | 58 |
59 if (padding == LTC_PKCS_1_OAEP) { | 59 if (padding == LTC_LTC_PKCS_1_OAEP) { |
60 /* valid hash? */ | 60 /* valid hash? */ |
61 if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { | 61 if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { |
62 return err; | 62 return err; |
63 } | 63 } |
64 } | 64 } |
71 if (modulus_bytelen > *outlen) { | 71 if (modulus_bytelen > *outlen) { |
72 *outlen = modulus_bytelen; | 72 *outlen = modulus_bytelen; |
73 return CRYPT_BUFFER_OVERFLOW; | 73 return CRYPT_BUFFER_OVERFLOW; |
74 } | 74 } |
75 | 75 |
76 if (padding == LTC_PKCS_1_OAEP) { | 76 if (padding == LTC_LTC_PKCS_1_OAEP) { |
77 /* OAEP pad the key */ | 77 /* OAEP pad the key */ |
78 x = *outlen; | 78 x = *outlen; |
79 if ((err = pkcs_1_oaep_encode(in, inlen, lparam, | 79 if ((err = pkcs_1_oaep_encode(in, inlen, lparam, |
80 lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, | 80 lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, |
81 out, &x)) != CRYPT_OK) { | 81 out, &x)) != CRYPT_OK) { |
82 return err; | 82 return err; |
83 } | 83 } |
84 } else { | 84 } else { |
85 /* PKCS #1 v1.5 pad the key */ | 85 /* LTC_PKCS #1 v1.5 pad the key */ |
86 x = *outlen; | 86 x = *outlen; |
87 if ((err = pkcs_1_v1_5_encode(in, inlen, LTC_PKCS_1_EME, | 87 if ((err = pkcs_1_v1_5_encode(in, inlen, LTC_LTC_PKCS_1_EME, |
88 modulus_bitlen, prng, prng_idx, | 88 modulus_bitlen, prng, prng_idx, |
89 out, &x)) != CRYPT_OK) { | 89 out, &x)) != CRYPT_OK) { |
90 return err; | 90 return err; |
91 } | 91 } |
92 } | 92 } |
93 | 93 |
94 /* rsa exptmod the OAEP or PKCS #1 v1.5 pad */ | 94 /* rsa exptmod the OAEP or LTC_PKCS #1 v1.5 pad */ |
95 return ltc_mp.rsa_me(out, x, out, outlen, PK_PUBLIC, key); | 95 return ltc_mp.rsa_me(out, x, out, outlen, PK_PUBLIC, key); |
96 } | 96 } |
97 | 97 |
98 #endif /* MRSA */ | 98 #endif /* LTC_MRSA */ |
99 | 99 |
100 /* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_encrypt_key.c,v $ */ | 100 /* $Source$ */ |
101 /* $Revision: 1.8 $ */ | 101 /* $Revision$ */ |
102 /* $Date: 2006/11/01 09:18:22 $ */ | 102 /* $Date$ */ |