rsa.pod 4.5 KB
Newer Older
U
Ulf Möller 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
=pod

=head1 NAME

rsa - RSA public key cryptosystem

=head1 SYNOPSIS

 #include <openssl/rsa.h>

 RSA * RSA_new(void);
 void RSA_free(RSA *rsa);

 int RSA_public_encrypt(int flen, unsigned char *from,
    unsigned char *to, RSA *rsa, int padding);
 int RSA_private_decrypt(int flen, unsigned char *from,
    unsigned char *to, RSA *rsa, int padding);

 int RSA_sign(int type, unsigned char *m, unsigned int m_len,
    unsigned char *sigret, unsigned int *siglen, RSA *rsa);
 int RSA_verify(int type, unsigned char *m, unsigned int m_len,
    unsigned char *sigbuf, unsigned int siglen, RSA *rsa);

 int RSA_size(RSA *rsa);

 RSA *RSA_generate_key(int num, unsigned long e,
    void (*callback)(int,int,void *), void *cb_arg);

 int RSA_check_key(RSA *rsa);

 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
 void RSA_blinding_off(RSA *rsa);

 void RSA_set_default_method(RSA_METHOD *meth);
 RSA_METHOD *RSA_get_default_method(void);
 RSA_METHOD *RSA_set_method(RSA *rsa, RSA_METHOD *meth);
 RSA_METHOD *RSA_get_method(RSA *rsa);
 RSA_METHOD *RSA_PKCS1_SSLeay(void);
 RSA_METHOD *RSA_PKCS1_RSAref(void);
 RSA_METHOD *RSA_null_method(void);
 int RSA_flags(RSA *rsa);
 RSA *RSA_new_method(RSA_METHOD *method);

 int RSA_print(BIO *bp, RSA *x, int offset);
 int RSA_print_fp(FILE *fp, RSA *x, int offset);

 int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
    int (*dup_func)(), void (*free_func)());
 int RSA_set_ex_data(RSA *r,int idx,char *arg);
 char *RSA_get_ex_data(RSA *r, int idx);

 int RSA_private_encrypt(int flen, unsigned char *from,
    unsigned char *to, RSA *rsa,int padding);
 int RSA_public_decrypt(int flen, unsigned char *from, 
    unsigned char *to, RSA *rsa,int padding);

 int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m,
    unsigned int m_len, unsigned char *sigret, unsigned int *siglen,
    RSA *rsa);
 int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m,
    unsigned int m_len, unsigned char *sigbuf, unsigned int siglen,
    RSA *rsa);

 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,
    unsigned char *f, int fl);
 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,
    unsigned char *f, int fl);
 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
    unsigned char *f, int fl, unsigned char *p, int pl);
 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len, unsigned char *p, int pl);
 int RSA_padding_add_SSLv23(unsigned char *to, int tlen,
    unsigned char *f, int fl);
 int RSA_padding_check_SSLv23(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
 int RSA_padding_add_none(unsigned char *to, int tlen,
    unsigned char *f, int fl);
 int RSA_padding_check_none(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);

=head1 DESCRIPTION

These functions implement RSA public key encryption and signatures
as defined in PKCS #1 v2.0 [RFC 2437].

The B<RSA> structure consists of several BIGNUM components. It can
contain public as well as private RSA keys:

 struct
        {
        BIGNUM *n;		// public modulus
        BIGNUM *e;		// public exponent
        BIGNUM *d;		// private exponent
        BIGNUM *p;		// secret prime factor
        BIGNUM *q;		// secret prime factor
        BIGNUM *dmp1;		// d mod (p-1)
        BIGNUM *dmq1;		// d mod (q-1)
        BIGNUM *iqmp;		// q^-1 mod p
	// ...
        };
 RSA

In public keys, the private exponent and the related secret values are
B<NULL>.

B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private keys, but the
RSA operations are much faster when these values are available.

=head1 PATENTS

RSA is covered by a US patent which expires in September 2000.

=head1 SEE ALSO

119 120 121 122 123 124 125 126 127 128 129 130
L<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>,
L<rand(3)|rand(3)>, L<RSA_new(3)|RSA_new(3)>,
L<RSA_public_encrypt(3)|RSA_public_encrypt(3)>,
L<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>,
L<RSA_generate_key(3)|RSA_generate_key(3)>,
L<RSA_check_key(3)|RSA_check_key(3)>,
L<RSA_blinding_on(3)|RSA_blinding_on(3)>,
L<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>,
L<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>,
L<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
L<RSA_sign_ASN_OCTET_STRING(3)|RSA_sign_ASN_OCTET_STRING(3)>,
L<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)> 
U
Ulf Möller 已提交
131 132

=cut