Home | History | Annotate | Download | only in rsa

Lines Matching refs:rsa

10  * apply to all code found in this distribution, be it the RC4, RSA,
57 #include <openssl/rsa.h>
76 RSA *RSA_new(void) { return RSA_new_method(NULL); }
78 RSA *RSA_new_method(const ENGINE *engine) {
79 RSA *rsa = (RSA *)OPENSSL_malloc(sizeof(RSA));
80 if (rsa == NULL) {
81 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
85 memset(rsa, 0, sizeof(RSA));
88 rsa->meth = ENGINE_get_RSA_method(engine);
91 if (rsa->meth == NULL) {
92 rsa->meth = (RSA_METHOD*) &RSA_default_method;
94 METHOD_ref(rsa->meth);
96 rsa->references = 1;
97 rsa->flags = rsa->meth->flags;
98 CRYPTO_MUTEX_init(&rsa->lock);
99 CRYPTO_new_ex_data(&rsa->ex_data);
101 if (rsa->meth->init && !rsa->meth->init(rsa)) {
102 CRYPTO_free_ex_data(&g_ex_data_class, rsa, &rsa->ex_data);
103 CRYPTO_MUTEX_cleanup(&rsa->lock);
104 METHOD_unref(rsa->meth);
105 OPENSSL_free(rsa);
109 return rsa;
125 void RSA_free(RSA *rsa) {
128 if (rsa == NULL) {
132 if (!CRYPTO_refcount_dec_and_test_zero(&rsa->references)) {
136 if (rsa->meth->finish) {
137 rsa->meth->finish(rsa);
139 METHOD_unref(rsa->meth);
141 CRYPTO_free_ex_data(&g_ex_data_class, rsa, &rsa->ex_data);
143 BN_clear_free(rsa->n);
144 BN_clear_free(rsa->e);
145 BN_clear_free(rsa->d);
146 BN_clear_free(rsa->p);
147 BN_clear_free(rsa->q);
148 BN_clear_free(rsa->dmp1);
149 BN_clear_free(rsa->dmq1);
150 BN_clear_free(rsa->iqmp);
151 BN_MONT_CTX_free(rsa->mont_n);
152 BN_MONT_CTX_free(rsa->mont_p);
153 BN_MONT_CTX_free(rsa->mont_q);
154 for (u = 0; u < rsa->num_blindings; u++) {
155 BN_BLINDING_free(rsa->blindings[u]);
157 OPENSSL_free(rsa->blindings);
158 OPENSSL_free(rsa->blindings_inuse);
159 if (rsa->additional_primes != NULL) {
160 sk_RSA_additional_prime_pop_free(rsa->additional_primes,
163 CRYPTO_MUTEX_cleanup(&rsa->lock);
164 OPENSSL_free(rsa);
167 int RSA_up_ref(RSA *rsa) {
168 CRYPTO_refcount_inc(&rsa->references);
172 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) {
173 if (rsa->meth->keygen) {
174 return rsa->meth->keygen(rsa, bits, e_value, cb);
177 return rsa_default_keygen(rsa, bits, e_value, cb);
180 int RSA_generate_multi_prime_key(RSA *rsa, int bits, int num_primes,
182 if (rsa->meth->multi_prime_keygen) {
183 return rsa->meth->multi_prime_keygen(rsa, bits, num_primes, e_value, cb);
186 return rsa_default_multi_prime_keygen(rsa, bits, num_primes, e_value, cb);
189 int RSA_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
191 if (rsa->meth->encrypt) {
192 return rsa->meth->encrypt(rsa, out_len, out, max_out, in, in_len, padding);
195 return rsa_default_encrypt(rsa, out_len, out, max_out, in, in_len, padding);
198 int RSA_public_encrypt(size_t flen, const uint8_t *from, uint8_t *to, RSA *rsa,
202 if (!RSA_encrypt(rsa, &out_len, to, RSA_size(rsa), from, flen, padding)) {
207 OPENSSL_PUT_ERROR(RSA, ERR_R_OVERFLOW);
213 int RSA_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
215 if (rsa->meth->sign_raw) {
216 return rsa->meth->sign_raw(rsa, out_len, out, max_out, in, in_len, padding);
219 return rsa_default_sign_raw(rsa, out_len, out, max_out, in, in_len, padding);
222 int RSA_private_encrypt(size_t flen, const uint8_t *from, uint8_t *to, RSA *rsa,
226 if (!RSA_sign_raw(rsa, &out_len, to, RSA_size(rsa), from, flen, padding)) {
231 OPENSSL_PUT_ERROR(RSA, ERR_R_OVERFLOW);
237 int RSA_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
239 if (rsa->meth->decrypt) {
240 return rsa->meth->decrypt(rsa, out_len, out, max_out, in, in_len, padding);
243 return rsa_default_decrypt(rsa, out_len, out, max_out, in, in_len, padding);
246 int RSA_private_decrypt(size_t flen, const uint8_t *from, uint8_t *to, RSA *rsa,
250 if (!RSA_decrypt(rsa, &out_len, to, RSA_size(rsa), from, flen, padding)) {
255 OPENSSL_PUT_ERROR(RSA, ERR_R_OVERFLOW);
261 int RSA_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
263 if (rsa->meth->verify_raw) {
264 return rsa->meth->verify_raw(rsa, out_len, out, max_out, in, in_len, padding);
267 return rsa_default_verify_raw(rsa, out_len, out, max_out, in, in_len,
271 int RSA_public_decrypt(size_t flen, const uint8_t *from, uint8_t *to, RSA *rsa,
275 if (!RSA_verify_raw(rsa, &out_len, to, RSA_size(rsa), from, flen, padding)) {
280 OPENSSL_PUT_ERROR(RSA, ERR_R_OVERFLOW);
286 unsigned RSA_size(const RSA *rsa) {
287 if (rsa->meth->size) {
288 return rsa->meth->size(rsa);
291 return rsa_default_size(rsa);
294 int RSA_is_opaque(const RSA *rsa) {
295 return rsa->meth && (rsa->meth->flags & RSA_FLAG_OPAQUE);
298 int RSA_supports_digest(const RSA *rsa, const EVP_MD *md) {
299 if (rsa->meth && rsa->meth->supports_digest) {
300 return rsa->meth->supports_digest(rsa, md);
315 int RSA_set_ex_data(RSA *d, int idx, void *arg) {
319 void *RSA_get_ex_data(const RSA *d, int idx) {
390 OPENSSL_PUT_ERROR(RSA, RSA_R_INVALID_MESSAGE_LENGTH);
413 OPENSSL_PUT_ERROR(RSA, RSA_R_TOO_LONG);
419 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
433 OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_ALGORITHM_TYPE);
438 unsigned *out_len, RSA *rsa) {
439 const unsigned rsa_size = RSA_size(rsa);
446 if (rsa->meth->sign) {
447 return rsa->meth->sign(hash_nid, in, in_len, out, out_len, rsa);
457 OPENSSL_PUT_ERROR(RSA, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
461 if (RSA_sign_raw(rsa, &size_t_out_len, out, rsa_size, signed_msg,
475 const uint8_t *sig, size_t sig_len, RSA *rsa) {
476 const size_t rsa_size = RSA_size(rsa);
483 if (rsa->meth->verify) {
484 return rsa->meth->verify(hash_nid, msg, msg_len, sig, sig_len, rsa);
488 OPENSSL_PUT_ERROR(RSA, RSA_R_WRONG_SIGNATURE_LENGTH);
493 OPENSSL_PUT_ERROR(RSA, RSA_R_INVALID_MESSAGE_LENGTH);
499 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
503 if (!RSA_verify_raw(rsa, &len, buf, rsa_size, sig, sig_len,
514 OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_SIGNATURE);
533 int RSA_check_key(const RSA *key) {
544 OPENSSL_PUT_ERROR(RSA, RSA_R_ONLY_ONE_OF_P_Q_GIVEN);
549 OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
561 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
581 OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
598 OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
607 OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
612 OPENSSL_PUT_ERROR(RSA, RSA_R_N_NOT_EQUAL_P_Q);
617 OPENSSL_PUT_ERROR(RSA, RSA_R_D_E_NOT_CONGRUENT_TO_1);
624 OPENSSL_PUT_ERROR(RSA, RSA_R_INCONSISTENT_SET_OF_CRT_VALUES);
635 OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
642 OPENSSL_PUT_ERROR(RSA, RSA_R_CRT_VALUES_INCORRECT);
664 int RSA_recover_crt_params(RSA *rsa) {
669 if (rsa->n == NULL || rsa->e == NULL || rsa->d == NULL) {
670 OPENSSL_PUT_ERROR(RSA, RSA_R_EMPTY_PUBLIC_KEY);
674 if (rsa->p || rsa->q || rsa->dmp1 || rsa->dmq1 || rsa->iqmp) {
675 OPENSSL_PUT_ERROR(RSA, RSA_R_CRT_PARAMS_ALREADY_GIVEN);
679 if (rsa->additional_primes != NULL) {
680 OPENSSL_PUT_ERROR(RSA, RSA_R_CANNOT_RECOVER_MULTI_PRIME_KEY);
684 /* This uses the algorithm from section 9B of the RSA paper:
689 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
702 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
707 if (!BN_mul(totient, rsa->e, rsa->d, ctx) ||
727 !BN_div(multiple, NULL, totient, rsa->n, ctx) ||
730 OPENSSL_PUT_ERROR(RSA, ERR_R_BN_LIB);
735 OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_RSA_PARAMETERS);
739 rsa->p = BN_new();
740 rsa->q = BN_new();
741 rsa->dmp1 = BN_new();
742 rsa->dmq1 = BN_new();
743 rsa->iqmp = BN_new();
744 if (rsa->p == NULL || rsa->q == NULL || rsa->dmp1 == NULL || rsa->dmq1 ==
745 NULL || rsa->iqmp == NULL) {
746 OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
752 if (!BN_sub(p_plus_q, rsa->n, totient) ||
756 !BN_lshift(multiple, rsa->n, 2) ||
760 !BN_sub(rsa->q, p_plus_q, p_minus_q) ||
761 !BN_rshift1(rsa->q, rsa->q) ||
762 !BN_div(rsa->p, NULL, rsa->n, rsa->q, ctx) ||
763 !BN_mul(multiple, rsa->p, rsa->q, ctx)) {
764 OPENSSL_PUT_ERROR(RSA, ERR_R_BN_LIB);
768 if (BN_cmp(multiple, rsa->n) != 0) {
769 OPENSSL_PUT_ERROR(RSA, RSA_R_INTERNAL_ERROR);
773 if (!BN_sub(rem, rsa->p, BN_value_one()) ||
774 !BN_mod(rsa->dmp1, rsa->d, rem, ctx) ||
775 !BN_sub(rem, rsa->q, BN_value_one()) ||
776 !BN_mod(rsa->dmq1, rsa->d, rem, ctx) ||
777 !BN_mod_inverse(rsa->iqmp, rsa->q, rsa->p, ctx)) {
778 OPENSSL_PUT_ERROR(RSA, ERR_R_BN_LIB);
788 bn_free_and_null(&rsa->p);
789 bn_free_and_null(&rsa->q);
790 bn_free_and_null(&rsa->dmp1);
791 bn_free_and_null(&rsa->dmq1);
792 bn_free_and_null(&rsa->iqmp);
797 int RSA_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
799 if (rsa->meth->private_transform) {
800 return rsa->meth->private_transform(rsa, out, in, len);
803 return rsa_default_private_transform(rsa, out, in, len);
806 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx) {