Constify the BIGNUM routines a bit more. The only trouble were the
[openssl.git] / doc / crypto / rsa.pod
1 =pod
2
3 =head1 NAME
4
5 rsa - RSA public key cryptosystem
6
7 =head1 SYNOPSIS
8
9  #include <openssl/rsa.h>
10  #include <openssl/engine.h>
11
12  RSA * RSA_new(void);
13  void RSA_free(RSA *rsa);
14
15  int RSA_public_encrypt(int flen, unsigned char *from,
16     unsigned char *to, RSA *rsa, int padding);
17  int RSA_private_decrypt(int flen, unsigned char *from,
18     unsigned char *to, RSA *rsa, int padding);
19
20  int RSA_sign(int type, unsigned char *m, unsigned int m_len,
21     unsigned char *sigret, unsigned int *siglen, RSA *rsa);
22  int RSA_verify(int type, unsigned char *m, unsigned int m_len,
23     unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
24
25  int RSA_size(RSA *rsa);
26
27  RSA *RSA_generate_key(int num, unsigned long e,
28     void (*callback)(int,int,void *), void *cb_arg);
29
30  int RSA_check_key(RSA *rsa);
31
32  int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
33  void RSA_blinding_off(RSA *rsa);
34
35  void RSA_set_default_openssl_method(RSA_METHOD *meth);
36  RSA_METHOD *RSA_get_default_openssl_method(void);
37  int RSA_set_method(RSA *rsa, ENGINE *engine);
38  RSA_METHOD *RSA_get_method(RSA *rsa);
39  RSA_METHOD *RSA_PKCS1_SSLeay(void);
40  RSA_METHOD *RSA_PKCS1_RSAref(void);
41  RSA_METHOD *RSA_null_method(void);
42  int RSA_flags(RSA *rsa);
43  RSA *RSA_new_method(ENGINE *engine);
44
45  int RSA_print(BIO *bp, RSA *x, int offset);
46  int RSA_print_fp(FILE *fp, RSA *x, int offset);
47
48  int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
49     int (*dup_func)(), void (*free_func)());
50  int RSA_set_ex_data(RSA *r,int idx,char *arg);
51  char *RSA_get_ex_data(RSA *r, int idx);
52
53  int RSA_private_encrypt(int flen, unsigned char *from,
54     unsigned char *to, RSA *rsa,int padding);
55  int RSA_public_decrypt(int flen, unsigned char *from, 
56     unsigned char *to, RSA *rsa,int padding);
57
58  int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m,
59     unsigned int m_len, unsigned char *sigret, unsigned int *siglen,
60     RSA *rsa);
61  int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m,
62     unsigned int m_len, unsigned char *sigbuf, unsigned int siglen,
63     RSA *rsa);
64
65 =head1 DESCRIPTION
66
67 These functions implement RSA public key encryption and signatures
68 as defined in PKCS #1 v2.0 [RFC 2437].
69
70 The B<RSA> structure consists of several BIGNUM components. It can
71 contain public as well as private RSA keys:
72
73  struct
74         {
75         BIGNUM *n;              // public modulus
76         BIGNUM *e;              // public exponent
77         BIGNUM *d;              // private exponent
78         BIGNUM *p;              // secret prime factor
79         BIGNUM *q;              // secret prime factor
80         BIGNUM *dmp1;           // d mod (p-1)
81         BIGNUM *dmq1;           // d mod (q-1)
82         BIGNUM *iqmp;           // q^-1 mod p
83         // ...
84         };
85  RSA
86
87 In public keys, the private exponent and the related secret values are
88 B<NULL>.
89
90 B<p>, B<q>, B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private
91 keys, but the RSA operations are much faster when these values are
92 available.
93
94 =head1 CONFORMING TO
95
96 SSL, PKCS #1 v2.0
97
98 =head1 PATENTS
99
100 RSA was covered by a US patent which expired in September 2000.
101
102 =head1 SEE ALSO
103
104 L<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>,
105 L<rand(3)|rand(3)>, L<RSA_new(3)|RSA_new(3)>,
106 L<RSA_public_encrypt(3)|RSA_public_encrypt(3)>,
107 L<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>,
108 L<RSA_generate_key(3)|RSA_generate_key(3)>,
109 L<RSA_check_key(3)|RSA_check_key(3)>,
110 L<RSA_blinding_on(3)|RSA_blinding_on(3)>,
111 L<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>,
112 L<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>,
113 L<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
114 L<RSA_sign_ASN_OCTET_STRING(3)|RSA_sign_ASN_OCTET_STRING(3)>,
115 L<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)> 
116
117 =cut