#include "bignum.h"
Go to the source code of this file.
Data Structures | |
struct | rsa_context |
RSA context structure. More... | |
Defines | |
#define | XYSSL_ERR_RSA_BAD_INPUT_DATA -0x0400 |
#define | XYSSL_ERR_RSA_INVALID_PADDING -0x0410 |
#define | XYSSL_ERR_RSA_KEY_GEN_FAILED -0x0420 |
#define | XYSSL_ERR_RSA_KEY_CHECK_FAILED -0x0430 |
#define | XYSSL_ERR_RSA_PUBLIC_FAILED -0x0440 |
#define | XYSSL_ERR_RSA_PRIVATE_FAILED -0x0450 |
#define | XYSSL_ERR_RSA_VERIFY_FAILED -0x0460 |
#define | RSA_RAW 0 |
#define | RSA_MD2 2 |
#define | RSA_MD4 3 |
#define | RSA_MD5 4 |
#define | RSA_SHA1 5 |
#define | RSA_SHA256 6 |
#define | RSA_PUBLIC 0 |
#define | RSA_PRIVATE 1 |
#define | RSA_PKCS_V15 0 |
#define | RSA_PKCS_V21 1 |
#define | RSA_SIGN 1 |
#define | RSA_CRYPT 2 |
#define | ASN1_HASH_MDX |
#define | ASN1_HASH_SHA1 |
Functions | |
void | rsa_init (rsa_context *ctx, int padding, int hash_id, int(*f_rng)(void *), void *p_rng) |
Initialize an RSA context. | |
int | rsa_gen_key (rsa_context *ctx, int nbits, int exponent) |
Generate an RSA keypair. | |
int | rsa_check_pubkey (rsa_context *ctx) |
Check a public RSA key. | |
int | rsa_check_privkey (rsa_context *ctx) |
Check a private RSA key. | |
int | rsa_public (rsa_context *ctx, unsigned char *input, unsigned char *output) |
Do an RSA public key operation. | |
int | rsa_private (rsa_context *ctx, unsigned char *input, unsigned char *output) |
Do an RSA private key operation. | |
int | rsa_pkcs1_encrypt (rsa_context *ctx, int mode, int ilen, unsigned char *input, unsigned char *output) |
Add the message padding, then do an RSA operation. | |
int | rsa_pkcs1_decrypt (rsa_context *ctx, int mode, int *olen, unsigned char *input, unsigned char *output) |
Do an RSA operation, then remove the message padding. | |
int | rsa_pkcs1_sign (rsa_context *ctx, int mode, int hash_id, int hashlen, unsigned char *hash, unsigned char *sig) |
Do a private RSA to sign a message digest. | |
int | rsa_pkcs1_verify (rsa_context *ctx, int mode, int hash_id, int hashlen, unsigned char *hash, unsigned char *sig) |
Do a public RSA and check the message digest. | |
void | rsa_free (rsa_context *ctx) |
Free the components of an RSA key. | |
int | rsa_self_test (int verbose) |
Checkup routine. |
Definition in file rsa.h.
#define ASN1_HASH_MDX |
"\x30\x20\x30\x0C\x06\x08\x2A\x86\x48" \ "\x86\xF7\x0D\x02\x00\x05\x00\x04\x10"
Definition at line 45 of file rsa.h.
Referenced by rsa_pkcs1_sign(), and rsa_pkcs1_verify().
#define ASN1_HASH_SHA1 |
"\x30\x21\x30\x09\x06\x05\x2B\x0E\x03" \ "\x02\x1A\x05\x00\x04\x14"
Definition at line 49 of file rsa.h.
Referenced by rsa_pkcs1_sign(), and rsa_pkcs1_verify().
#define RSA_CRYPT 2 |
Definition at line 34 of file rsa.h.
Referenced by rsa_pkcs1_decrypt(), and rsa_pkcs1_encrypt().
#define RSA_MD2 2 |
Definition at line 21 of file rsa.h.
Referenced by rsa_pkcs1_sign(), rsa_pkcs1_verify(), x509_hash(), and x509parse_cert_info().
#define RSA_MD4 3 |
Definition at line 22 of file rsa.h.
Referenced by rsa_pkcs1_sign(), rsa_pkcs1_verify(), x509_hash(), and x509parse_cert_info().
#define RSA_MD5 4 |
Definition at line 23 of file rsa.h.
Referenced by rsa_pkcs1_sign(), rsa_pkcs1_verify(), x509_hash(), and x509parse_cert_info().
#define RSA_PKCS_V15 0 |
Definition at line 30 of file rsa.h.
Referenced by generate_RSA_keys_ciphertext(), generate_RSA_keys_plaintext(), main(), rsa_decryption(), rsa_encryption(), rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), and rsa_pkcs1_verify().
#define RSA_PRIVATE 1 |
Definition at line 28 of file rsa.h.
Referenced by main(), RSA_private_decrypt(), RSA_private_encrypt(), rsa_self_test(), ssl_parse_client_key_exchange(), ssl_write_certificate_verify(), and ssl_write_server_key_exchange().
#define RSA_PUBLIC 0 |
Definition at line 27 of file rsa.h.
Referenced by main(), rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), rsa_pkcs1_verify(), RSA_public_decrypt(), RSA_public_encrypt(), rsa_self_test(), ssl_parse_certificate_verify(), ssl_parse_server_key_exchange(), ssl_write_client_key_exchange(), and x509parse_verify().
#define RSA_RAW 0 |
Definition at line 20 of file rsa.h.
Referenced by rsa_pkcs1_sign(), rsa_pkcs1_verify(), ssl_parse_certificate_verify(), ssl_parse_server_key_exchange(), ssl_write_certificate_verify(), and ssl_write_server_key_exchange().
#define RSA_SHA1 5 |
Definition at line 24 of file rsa.h.
Referenced by main(), rsa_pkcs1_sign(), rsa_pkcs1_verify(), rsa_self_test(), x509_hash(), and x509parse_cert_info().
#define RSA_SIGN 1 |
Definition at line 33 of file rsa.h.
Referenced by rsa_pkcs1_sign(), and rsa_pkcs1_verify().
#define XYSSL_ERR_RSA_BAD_INPUT_DATA -0x0400 |
Definition at line 9 of file rsa.h.
Referenced by rsa_gen_key(), rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), rsa_pkcs1_verify(), rsa_private(), and rsa_public().
#define XYSSL_ERR_RSA_INVALID_PADDING -0x0410 |
Definition at line 10 of file rsa.h.
Referenced by rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), and rsa_pkcs1_verify().
#define XYSSL_ERR_RSA_KEY_CHECK_FAILED -0x0430 |
Definition at line 12 of file rsa.h.
Referenced by rsa_check_privkey(), and rsa_check_pubkey().
#define XYSSL_ERR_RSA_KEY_GEN_FAILED -0x0420 |
Definition at line 11 of file rsa.h.
Referenced by rsa_gen_key().
#define XYSSL_ERR_RSA_PRIVATE_FAILED -0x0450 |
Definition at line 14 of file rsa.h.
Referenced by rsa_private().
#define XYSSL_ERR_RSA_PUBLIC_FAILED -0x0440 |
Definition at line 13 of file rsa.h.
Referenced by rsa_public().
#define XYSSL_ERR_RSA_VERIFY_FAILED -0x0460 |
Definition at line 15 of file rsa.h.
Referenced by rsa_pkcs1_verify().
int rsa_check_privkey | ( | rsa_context * | ctx | ) |
Check a private RSA key.
ctx | RSA context to be checked |
Definition at line 152 of file rsa.c.
References rsa_context::D, rsa_context::E, MPI_CHK, mpi_cmp_int(), mpi_cmp_mpi(), mpi_free(), mpi_gcd(), mpi_init(), mpi_mod_mpi(), mpi_mul_mpi(), mpi_sub_int(), rsa_context::N, rsa_context::P, rsa_context::Q, rsa_check_pubkey(), and XYSSL_ERR_RSA_KEY_CHECK_FAILED.
Referenced by rsa_decryption(), rsa_self_test(), and x509parse_key().
int rsa_check_pubkey | ( | rsa_context * | ctx | ) |
Check a public RSA key.
ctx | RSA context to be checked |
Definition at line 132 of file rsa.c.
References rsa_context::E, mpi_msb(), rsa_context::N, mpi::p, and XYSSL_ERR_RSA_KEY_CHECK_FAILED.
Referenced by rsa_check_privkey(), rsa_encryption(), rsa_self_test(), and x509parse_crt().
void rsa_free | ( | rsa_context * | ctx | ) |
Free the components of an RSA key.
Definition at line 558 of file rsa.c.
References rsa_context::D, rsa_context::DP, rsa_context::DQ, rsa_context::E, mpi_free(), rsa_context::N, rsa_context::P, rsa_context::Q, rsa_context::QP, rsa_context::RN, rsa_context::RP, and rsa_context::RQ.
Referenced by main(), rsa_gen_key(), rsa_self_test(), ssl_test(), x509_free(), x509_self_test(), and x509parse_key().
int rsa_gen_key | ( | rsa_context * | ctx, | |
int | nbits, | |||
int | exponent | |||
) |
Generate an RSA keypair.
ctx | RSA context that will hold the key | |
nbits | size of the public key in bits | |
exponent | public exponent (e.g., 65537) |
Definition at line 60 of file rsa.c.
References rsa_context::D, rsa_context::DP, rsa_context::DQ, rsa_context::E, rsa_context::f_rng, rsa_context::len, MPI_CHK, mpi_cmp_int(), mpi_cmp_mpi(), mpi_free(), mpi_gcd(), mpi_gen_prime(), mpi_init(), mpi_inv_mod(), mpi_lset(), mpi_mod_mpi(), mpi_msb(), mpi_mul_mpi(), mpi_sub_int(), mpi_swap(), rsa_context::N, rsa_context::P, rsa_context::p_rng, rsa_context::Q, rsa_context::QP, rsa_free(), XYSSL_ERR_RSA_BAD_INPUT_DATA, and XYSSL_ERR_RSA_KEY_GEN_FAILED.
Referenced by generate_RSA_keys_ciphertext(), generate_RSA_keys_plaintext(), and main().
void rsa_init | ( | rsa_context * | ctx, | |
int | padding, | |||
int | hash_id, | |||
int(*)(void *) | f_rng, | |||
void * | p_rng | |||
) |
Initialize an RSA context.
ctx | RSA context to be initialized | |
padding | RSA_PKCS_V15 or RSA_PKCS_V21 | |
hash_id | RSA_PKCS_V21 hash identifier | |
f_rng | RNG function | |
p_rng | RNG parameter |
Definition at line 40 of file rsa.c.
References rsa_context::f_rng, rsa_context::hash_id, rsa_context::p_rng, and rsa_context::padding.
Referenced by generate_RSA_keys_ciphertext(), generate_RSA_keys_plaintext(), main(), rsa_decryption(), and rsa_encryption().
int rsa_pkcs1_decrypt | ( | rsa_context * | ctx, | |
int | mode, | |||
int * | olen, | |||
unsigned char * | input, | |||
unsigned char * | output | |||
) |
Do an RSA operation, then remove the message padding.
ctx | RSA context | |
mode | RSA_PUBLIC or RSA_PRIVATE | |
input | buffer holding the encrypted data | |
output | buffer that will hold the plaintext | |
olen | will contain the plaintext length |
Definition at line 326 of file rsa.c.
References buf, int, rsa_context::len, rsa_context::padding, RSA_CRYPT, RSA_PKCS_V15, rsa_private(), rsa_public(), RSA_PUBLIC, XYSSL_ERR_RSA_BAD_INPUT_DATA, and XYSSL_ERR_RSA_INVALID_PADDING.
Referenced by rsa_decryption(), RSA_private_decrypt(), RSA_public_decrypt(), rsa_self_test(), and ssl_parse_client_key_exchange().
int rsa_pkcs1_encrypt | ( | rsa_context * | ctx, | |
int | mode, | |||
int | ilen, | |||
unsigned char * | input, | |||
unsigned char * | output | |||
) |
Add the message padding, then do an RSA operation.
ctx | RSA context | |
mode | RSA_PUBLIC or RSA_PRIVATE | |
ilen | contains the the plaintext length | |
input | buffer holding the data to be encrypted | |
output | buffer that will hold the ciphertext |
Definition at line 280 of file rsa.c.
References rsa_context::len, rsa_context::padding, RSA_CRYPT, RSA_PKCS_V15, rsa_private(), rsa_public(), RSA_PUBLIC, XYSSL_ERR_RSA_BAD_INPUT_DATA, and XYSSL_ERR_RSA_INVALID_PADDING.
Referenced by rsa_encryption(), RSA_private_encrypt(), RSA_public_encrypt(), rsa_self_test(), and ssl_write_client_key_exchange().
int rsa_pkcs1_sign | ( | rsa_context * | ctx, | |
int | mode, | |||
int | hash_id, | |||
int | hashlen, | |||
unsigned char * | hash, | |||
unsigned char * | sig | |||
) |
Do a private RSA to sign a message digest.
ctx | RSA context | |
mode | RSA_PUBLIC or RSA_PRIVATE | |
hash_id | RSA_RAW, RSA_MD{2,4,5} or RSA_SHA{1,256} | |
hashlen | message digest length (for RSA_RAW only) | |
hash | buffer holding the message digest | |
sig | buffer that will hold the ciphertext |
Definition at line 379 of file rsa.c.
References ASN1_HASH_MDX, ASN1_HASH_SHA1, rsa_context::len, rsa_context::padding, RSA_MD2, RSA_MD4, RSA_MD5, RSA_PKCS_V15, rsa_private(), rsa_public(), RSA_PUBLIC, RSA_RAW, RSA_SHA1, RSA_SIGN, XYSSL_ERR_RSA_BAD_INPUT_DATA, and XYSSL_ERR_RSA_INVALID_PADDING.
Referenced by main(), rsa_self_test(), ssl_write_certificate_verify(), and ssl_write_server_key_exchange().
int rsa_pkcs1_verify | ( | rsa_context * | ctx, | |
int | mode, | |||
int | hash_id, | |||
int | hashlen, | |||
unsigned char * | hash, | |||
unsigned char * | sig | |||
) |
Do a public RSA and check the message digest.
ctx | points to an RSA public key | |
mode | RSA_PUBLIC or RSA_PRIVATE | |
hash_id | RSA_RAW, RSA_MD{2,4,5} or RSA_SHA{1,256} | |
hashlen | message digest length (for RSA_RAW only) | |
hash | buffer holding the message digest | |
sig | buffer holding the ciphertext |
Definition at line 468 of file rsa.c.
References ASN1_HASH_MDX, ASN1_HASH_SHA1, buf, int, rsa_context::len, rsa_context::padding, RSA_MD2, RSA_MD4, RSA_MD5, RSA_PKCS_V15, rsa_private(), rsa_public(), RSA_PUBLIC, RSA_RAW, RSA_SHA1, RSA_SIGN, XYSSL_ERR_RSA_BAD_INPUT_DATA, XYSSL_ERR_RSA_INVALID_PADDING, and XYSSL_ERR_RSA_VERIFY_FAILED.
Referenced by main(), rsa_self_test(), ssl_parse_certificate_verify(), ssl_parse_server_key_exchange(), and x509parse_verify().
int rsa_private | ( | rsa_context * | ctx, | |
unsigned char * | input, | |||
unsigned char * | output | |||
) |
Do an RSA private key operation.
ctx | RSA context | |
input | input buffer | |
output | output buffer |
Definition at line 221 of file rsa.c.
References rsa_context::D, rsa_context::DP, rsa_context::DQ, rsa_context::len, mpi_add_mpi(), MPI_CHK, mpi_cmp_mpi(), mpi_exp_mod(), mpi_free(), mpi_init(), mpi_mod_mpi(), mpi_mul_mpi(), mpi_read_binary(), mpi_sub_mpi(), mpi_write_binary(), rsa_context::N, rsa_context::P, rsa_context::Q, rsa_context::QP, rsa_context::RN, rsa_context::RP, rsa_context::RQ, XYSSL_ERR_RSA_BAD_INPUT_DATA, and XYSSL_ERR_RSA_PRIVATE_FAILED.
Referenced by main(), rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), and rsa_pkcs1_verify().
int rsa_public | ( | rsa_context * | ctx, | |
unsigned char * | input, | |||
unsigned char * | output | |||
) |
Do an RSA public key operation.
ctx | RSA context | |
input | input buffer | |
output | output buffer |
Definition at line 187 of file rsa.c.
References rsa_context::E, rsa_context::len, MPI_CHK, mpi_cmp_mpi(), mpi_exp_mod(), mpi_free(), mpi_init(), mpi_read_binary(), mpi_write_binary(), rsa_context::N, rsa_context::RN, XYSSL_ERR_RSA_BAD_INPUT_DATA, and XYSSL_ERR_RSA_PUBLIC_FAILED.
Referenced by main(), rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), and rsa_pkcs1_verify().
Checkup routine.
Definition at line 627 of file rsa.c.
References rsa_context::D, rsa_context::DP, rsa_context::DQ, rsa_context::E, KEY_LEN, rsa_context::len, mpi_read_string(), rsa_context::N, rsa_context::P, PT_LEN, rsa_context::Q, rsa_context::QP, rsa_check_privkey(), rsa_check_pubkey(), RSA_D, RSA_DP, RSA_DQ, RSA_E, rsa_free(), RSA_N, RSA_P, rsa_pkcs1_decrypt(), rsa_pkcs1_encrypt(), rsa_pkcs1_sign(), rsa_pkcs1_verify(), RSA_PRIVATE, RSA_PT, RSA_PUBLIC, RSA_Q, RSA_QP, RSA_SHA1, and sha1().
Referenced by main().