159191Skris=pod
259191Skris
359191Skris=head1 NAME
459191Skris
559191Skrisrsa - RSA public key cryptosystem
659191Skris
759191Skris=head1 SYNOPSIS
859191Skris
959191Skris #include <openssl/rsa.h>
10109998Smarkm #include <openssl/engine.h>
1159191Skris
1259191Skris RSA * RSA_new(void);
1359191Skris void RSA_free(RSA *rsa);
1459191Skris
1559191Skris int RSA_public_encrypt(int flen, unsigned char *from,
1659191Skris    unsigned char *to, RSA *rsa, int padding);
1759191Skris int RSA_private_decrypt(int flen, unsigned char *from,
1859191Skris    unsigned char *to, RSA *rsa, int padding);
19109998Smarkm int RSA_private_encrypt(int flen, unsigned char *from,
20109998Smarkm    unsigned char *to, RSA *rsa,int padding);
21109998Smarkm int RSA_public_decrypt(int flen, unsigned char *from, 
22109998Smarkm    unsigned char *to, RSA *rsa,int padding);
2359191Skris
2459191Skris int RSA_sign(int type, unsigned char *m, unsigned int m_len,
2559191Skris    unsigned char *sigret, unsigned int *siglen, RSA *rsa);
2659191Skris int RSA_verify(int type, unsigned char *m, unsigned int m_len,
2759191Skris    unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
2859191Skris
29109998Smarkm int RSA_size(const RSA *rsa);
3059191Skris
3159191Skris RSA *RSA_generate_key(int num, unsigned long e,
3259191Skris    void (*callback)(int,int,void *), void *cb_arg);
3359191Skris
3459191Skris int RSA_check_key(RSA *rsa);
3559191Skris
3659191Skris int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
3759191Skris void RSA_blinding_off(RSA *rsa);
3859191Skris
39109998Smarkm void RSA_set_default_method(const RSA_METHOD *meth);
40109998Smarkm const RSA_METHOD *RSA_get_default_method(void);
41109998Smarkm int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
42109998Smarkm const RSA_METHOD *RSA_get_method(const RSA *rsa);
4359191Skris RSA_METHOD *RSA_PKCS1_SSLeay(void);
4459191Skris RSA_METHOD *RSA_null_method(void);
45109998Smarkm int RSA_flags(const RSA *rsa);
46109998Smarkm RSA *RSA_new_method(ENGINE *engine);
4759191Skris
4859191Skris int RSA_print(BIO *bp, RSA *x, int offset);
4959191Skris int RSA_print_fp(FILE *fp, RSA *x, int offset);
5059191Skris
5159191Skris int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
5259191Skris    int (*dup_func)(), void (*free_func)());
5359191Skris int RSA_set_ex_data(RSA *r,int idx,char *arg);
5459191Skris char *RSA_get_ex_data(RSA *r, int idx);
5559191Skris
5659191Skris int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m,
5759191Skris    unsigned int m_len, unsigned char *sigret, unsigned int *siglen,
5859191Skris    RSA *rsa);
5959191Skris int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m,
6059191Skris    unsigned int m_len, unsigned char *sigbuf, unsigned int siglen,
6159191Skris    RSA *rsa);
6259191Skris
6359191Skris=head1 DESCRIPTION
6459191Skris
6559191SkrisThese functions implement RSA public key encryption and signatures
6659191Skrisas defined in PKCS #1 v2.0 [RFC 2437].
6759191Skris
6859191SkrisThe B<RSA> structure consists of several BIGNUM components. It can
6959191Skriscontain public as well as private RSA keys:
7059191Skris
7159191Skris struct
7259191Skris        {
7359191Skris        BIGNUM *n;		// public modulus
7459191Skris        BIGNUM *e;		// public exponent
7559191Skris        BIGNUM *d;		// private exponent
7659191Skris        BIGNUM *p;		// secret prime factor
7759191Skris        BIGNUM *q;		// secret prime factor
7859191Skris        BIGNUM *dmp1;		// d mod (p-1)
7959191Skris        BIGNUM *dmq1;		// d mod (q-1)
8059191Skris        BIGNUM *iqmp;		// q^-1 mod p
8159191Skris	// ...
8259191Skris        };
8359191Skris RSA
8459191Skris
8559191SkrisIn public keys, the private exponent and the related secret values are
8659191SkrisB<NULL>.
8759191Skris
8859191SkrisB<p>, B<q>, B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private
8959191Skriskeys, but the RSA operations are much faster when these values are
9059191Skrisavailable.
9159191Skris
92109998SmarkmNote that RSA keys may use non-standard B<RSA_METHOD> implementations,
93109998Smarkmeither directly or by the use of B<ENGINE> modules. In some cases (eg. an
94109998SmarkmENGINE providing support for hardware-embedded keys), these BIGNUM values
95109998Smarkmwill not be used by the implementation or may be used for alternative data
96109998Smarkmstorage. For this reason, applications should generally avoid using RSA
97109998Smarkmstructure elements directly and instead use API functions to query or
98109998Smarkmmodify keys.
99109998Smarkm
10059191Skris=head1 CONFORMING TO
10159191Skris
10259191SkrisSSL, PKCS #1 v2.0
10359191Skris
10459191Skris=head1 PATENTS
10559191Skris
10668651SkrisRSA was covered by a US patent which expired in September 2000.
10759191Skris
10859191Skris=head1 SEE ALSO
10959191Skris
11059191SkrisL<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>,
111109998SmarkmL<rand(3)|rand(3)>, L<engine(3)|engine(3)>, L<RSA_new(3)|RSA_new(3)>,
11259191SkrisL<RSA_public_encrypt(3)|RSA_public_encrypt(3)>,
11359191SkrisL<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>,
11459191SkrisL<RSA_generate_key(3)|RSA_generate_key(3)>,
11559191SkrisL<RSA_check_key(3)|RSA_check_key(3)>,
11659191SkrisL<RSA_blinding_on(3)|RSA_blinding_on(3)>,
11759191SkrisL<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>,
11859191SkrisL<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>,
11959191SkrisL<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
120100936SnectarL<RSA_sign_ASN1_OCTET_STRING(3)|RSA_sign_ASN1_OCTET_STRING(3)>,
12159191SkrisL<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)> 
12259191Skris
12359191Skris=cut
124