xref: /minix3/crypto/external/bsd/openssl/dist/doc/crypto/rsa.pod (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc=pod
2*ebfedea0SLionel Sambuc
3*ebfedea0SLionel Sambuc=head1 NAME
4*ebfedea0SLionel Sambuc
5*ebfedea0SLionel Sambucrsa - RSA public key cryptosystem
6*ebfedea0SLionel Sambuc
7*ebfedea0SLionel Sambuc=head1 SYNOPSIS
8*ebfedea0SLionel Sambuc
9*ebfedea0SLionel Sambuc #include <openssl/rsa.h>
10*ebfedea0SLionel Sambuc #include <openssl/engine.h>
11*ebfedea0SLionel Sambuc
12*ebfedea0SLionel Sambuc RSA * RSA_new(void);
13*ebfedea0SLionel Sambuc void RSA_free(RSA *rsa);
14*ebfedea0SLionel Sambuc
15*ebfedea0SLionel Sambuc int RSA_public_encrypt(int flen, unsigned char *from,
16*ebfedea0SLionel Sambuc    unsigned char *to, RSA *rsa, int padding);
17*ebfedea0SLionel Sambuc int RSA_private_decrypt(int flen, unsigned char *from,
18*ebfedea0SLionel Sambuc    unsigned char *to, RSA *rsa, int padding);
19*ebfedea0SLionel Sambuc int RSA_private_encrypt(int flen, unsigned char *from,
20*ebfedea0SLionel Sambuc    unsigned char *to, RSA *rsa,int padding);
21*ebfedea0SLionel Sambuc int RSA_public_decrypt(int flen, unsigned char *from,
22*ebfedea0SLionel Sambuc    unsigned char *to, RSA *rsa,int padding);
23*ebfedea0SLionel Sambuc
24*ebfedea0SLionel Sambuc int RSA_sign(int type, unsigned char *m, unsigned int m_len,
25*ebfedea0SLionel Sambuc    unsigned char *sigret, unsigned int *siglen, RSA *rsa);
26*ebfedea0SLionel Sambuc int RSA_verify(int type, unsigned char *m, unsigned int m_len,
27*ebfedea0SLionel Sambuc    unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
28*ebfedea0SLionel Sambuc
29*ebfedea0SLionel Sambuc int RSA_size(const RSA *rsa);
30*ebfedea0SLionel Sambuc
31*ebfedea0SLionel Sambuc RSA *RSA_generate_key(int num, unsigned long e,
32*ebfedea0SLionel Sambuc    void (*callback)(int,int,void *), void *cb_arg);
33*ebfedea0SLionel Sambuc
34*ebfedea0SLionel Sambuc int RSA_check_key(RSA *rsa);
35*ebfedea0SLionel Sambuc
36*ebfedea0SLionel Sambuc int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
37*ebfedea0SLionel Sambuc void RSA_blinding_off(RSA *rsa);
38*ebfedea0SLionel Sambuc
39*ebfedea0SLionel Sambuc void RSA_set_default_method(const RSA_METHOD *meth);
40*ebfedea0SLionel Sambuc const RSA_METHOD *RSA_get_default_method(void);
41*ebfedea0SLionel Sambuc int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
42*ebfedea0SLionel Sambuc const RSA_METHOD *RSA_get_method(const RSA *rsa);
43*ebfedea0SLionel Sambuc RSA_METHOD *RSA_PKCS1_SSLeay(void);
44*ebfedea0SLionel Sambuc RSA_METHOD *RSA_null_method(void);
45*ebfedea0SLionel Sambuc int RSA_flags(const RSA *rsa);
46*ebfedea0SLionel Sambuc RSA *RSA_new_method(ENGINE *engine);
47*ebfedea0SLionel Sambuc
48*ebfedea0SLionel Sambuc int RSA_print(BIO *bp, RSA *x, int offset);
49*ebfedea0SLionel Sambuc int RSA_print_fp(FILE *fp, RSA *x, int offset);
50*ebfedea0SLionel Sambuc
51*ebfedea0SLionel Sambuc int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
52*ebfedea0SLionel Sambuc    int (*dup_func)(), void (*free_func)());
53*ebfedea0SLionel Sambuc int RSA_set_ex_data(RSA *r,int idx,char *arg);
54*ebfedea0SLionel Sambuc char *RSA_get_ex_data(RSA *r, int idx);
55*ebfedea0SLionel Sambuc
56*ebfedea0SLionel Sambuc int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m,
57*ebfedea0SLionel Sambuc    unsigned int m_len, unsigned char *sigret, unsigned int *siglen,
58*ebfedea0SLionel Sambuc    RSA *rsa);
59*ebfedea0SLionel Sambuc int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m,
60*ebfedea0SLionel Sambuc    unsigned int m_len, unsigned char *sigbuf, unsigned int siglen,
61*ebfedea0SLionel Sambuc    RSA *rsa);
62*ebfedea0SLionel Sambuc
63*ebfedea0SLionel Sambuc=head1 DESCRIPTION
64*ebfedea0SLionel Sambuc
65*ebfedea0SLionel SambucThese functions implement RSA public key encryption and signatures
66*ebfedea0SLionel Sambucas defined in PKCS #1 v2.0 [RFC 2437].
67*ebfedea0SLionel Sambuc
68*ebfedea0SLionel SambucThe B<RSA> structure consists of several BIGNUM components. It can
69*ebfedea0SLionel Sambuccontain public as well as private RSA keys:
70*ebfedea0SLionel Sambuc
71*ebfedea0SLionel Sambuc struct
72*ebfedea0SLionel Sambuc        {
73*ebfedea0SLionel Sambuc        BIGNUM *n;		// public modulus
74*ebfedea0SLionel Sambuc        BIGNUM *e;		// public exponent
75*ebfedea0SLionel Sambuc        BIGNUM *d;		// private exponent
76*ebfedea0SLionel Sambuc        BIGNUM *p;		// secret prime factor
77*ebfedea0SLionel Sambuc        BIGNUM *q;		// secret prime factor
78*ebfedea0SLionel Sambuc        BIGNUM *dmp1;		// d mod (p-1)
79*ebfedea0SLionel Sambuc        BIGNUM *dmq1;		// d mod (q-1)
80*ebfedea0SLionel Sambuc        BIGNUM *iqmp;		// q^-1 mod p
81*ebfedea0SLionel Sambuc	// ...
82*ebfedea0SLionel Sambuc        };
83*ebfedea0SLionel Sambuc RSA
84*ebfedea0SLionel Sambuc
85*ebfedea0SLionel SambucIn public keys, the private exponent and the related secret values are
86*ebfedea0SLionel SambucB<NULL>.
87*ebfedea0SLionel Sambuc
88*ebfedea0SLionel SambucB<p>, B<q>, B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private
89*ebfedea0SLionel Sambuckeys, but the RSA operations are much faster when these values are
90*ebfedea0SLionel Sambucavailable.
91*ebfedea0SLionel Sambuc
92*ebfedea0SLionel SambucNote that RSA keys may use non-standard B<RSA_METHOD> implementations,
93*ebfedea0SLionel Sambuceither directly or by the use of B<ENGINE> modules. In some cases (eg. an
94*ebfedea0SLionel SambucENGINE providing support for hardware-embedded keys), these BIGNUM values
95*ebfedea0SLionel Sambucwill not be used by the implementation or may be used for alternative data
96*ebfedea0SLionel Sambucstorage. For this reason, applications should generally avoid using RSA
97*ebfedea0SLionel Sambucstructure elements directly and instead use API functions to query or
98*ebfedea0SLionel Sambucmodify keys.
99*ebfedea0SLionel Sambuc
100*ebfedea0SLionel Sambuc=head1 CONFORMING TO
101*ebfedea0SLionel Sambuc
102*ebfedea0SLionel SambucSSL, PKCS #1 v2.0
103*ebfedea0SLionel Sambuc
104*ebfedea0SLionel Sambuc=head1 PATENTS
105*ebfedea0SLionel Sambuc
106*ebfedea0SLionel SambucRSA was covered by a US patent which expired in September 2000.
107*ebfedea0SLionel Sambuc
108*ebfedea0SLionel Sambuc=head1 SEE ALSO
109*ebfedea0SLionel Sambuc
110*ebfedea0SLionel SambucL<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>,
111*ebfedea0SLionel SambucL<rand(3)|rand(3)>, L<engine(3)|engine(3)>, L<RSA_new(3)|RSA_new(3)>,
112*ebfedea0SLionel SambucL<RSA_public_encrypt(3)|RSA_public_encrypt(3)>,
113*ebfedea0SLionel SambucL<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>,
114*ebfedea0SLionel SambucL<RSA_generate_key(3)|RSA_generate_key(3)>,
115*ebfedea0SLionel SambucL<RSA_check_key(3)|RSA_check_key(3)>,
116*ebfedea0SLionel SambucL<RSA_blinding_on(3)|RSA_blinding_on(3)>,
117*ebfedea0SLionel SambucL<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>,
118*ebfedea0SLionel SambucL<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>,
119*ebfedea0SLionel SambucL<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
120*ebfedea0SLionel SambucL<RSA_sign_ASN1_OCTET_STRING(3)|RSA_sign_ASN1_OCTET_STRING(3)>,
121*ebfedea0SLionel SambucL<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)>
122*ebfedea0SLionel Sambuc
123*ebfedea0SLionel Sambuc=cut
124