PolarSSL v1.3.3
rsa.h
Go to the documentation of this file.
1 
27 #ifndef POLARSSL_RSA_H
28 #define POLARSSL_RSA_H
29 
30 #include "config.h"
31 
32 #include "bignum.h"
33 #include "md.h"
34 
35 #if defined(POLARSSL_THREADING_C)
36 #include "threading.h"
37 #endif
38 
39 /*
40  * RSA Error codes
41  */
42 #define POLARSSL_ERR_RSA_BAD_INPUT_DATA -0x4080
43 #define POLARSSL_ERR_RSA_INVALID_PADDING -0x4100
44 #define POLARSSL_ERR_RSA_KEY_GEN_FAILED -0x4180
45 #define POLARSSL_ERR_RSA_KEY_CHECK_FAILED -0x4200
46 #define POLARSSL_ERR_RSA_PUBLIC_FAILED -0x4280
47 #define POLARSSL_ERR_RSA_PRIVATE_FAILED -0x4300
48 #define POLARSSL_ERR_RSA_VERIFY_FAILED -0x4380
49 #define POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE -0x4400
50 #define POLARSSL_ERR_RSA_RNG_FAILED -0x4480
52 /*
53  * RSA constants
54  */
55 #define RSA_PUBLIC 0
56 #define RSA_PRIVATE 1
57 
58 #define RSA_PKCS_V15 0
59 #define RSA_PKCS_V21 1
60 
61 #define RSA_SIGN 1
62 #define RSA_CRYPT 2
63 
64 /*
65  * The above constants may be used even if the RSA module is compile out,
66  * eg for alternative (PKCS#11) RSA implemenations in the PK layers.
67  */
68 #if defined(POLARSSL_RSA_C)
69 
70 #ifdef __cplusplus
71 extern "C" {
72 #endif
73 
77 typedef struct
78 {
79  int ver;
80  size_t len;
82  mpi N;
83  mpi E;
85  mpi D;
86  mpi P;
87  mpi Q;
88  mpi DP;
89  mpi DQ;
90  mpi QP;
92  mpi RN;
93  mpi RP;
94  mpi RQ;
96 #if !defined(POLARSSL_RSA_NO_CRT)
97  mpi Vi;
98  mpi Vf;
99 #endif
100 
101  int padding;
103  int hash_id;
107 #if defined(POLARSSL_THREADING_C)
108  threading_mutex_t mutex;
109 #endif
110 }
112 
126 void rsa_init( rsa_context *ctx,
127  int padding,
128  int hash_id);
129 
144 int rsa_gen_key( rsa_context *ctx,
145  int (*f_rng)(void *, unsigned char *, size_t),
146  void *p_rng,
147  unsigned int nbits, int exponent );
148 
156 int rsa_check_pubkey( const rsa_context *ctx );
157 
165 int rsa_check_privkey( const rsa_context *ctx );
166 
183 int rsa_public( rsa_context *ctx,
184  const unsigned char *input,
185  unsigned char *output );
186 
201 int rsa_private( rsa_context *ctx,
202  int (*f_rng)(void *, unsigned char *, size_t),
203  void *p_rng,
204  const unsigned char *input,
205  unsigned char *output );
206 
227  int (*f_rng)(void *, unsigned char *, size_t),
228  void *p_rng,
229  int mode, size_t ilen,
230  const unsigned char *input,
231  unsigned char *output );
232 
250  int (*f_rng)(void *, unsigned char *, size_t),
251  void *p_rng,
252  int mode, size_t ilen,
253  const unsigned char *input,
254  unsigned char *output );
255 
276  int (*f_rng)(void *, unsigned char *, size_t),
277  void *p_rng,
278  int mode,
279  const unsigned char *label, size_t label_len,
280  size_t ilen,
281  const unsigned char *input,
282  unsigned char *output );
283 
305  int (*f_rng)(void *, unsigned char *, size_t),
306  void *p_rng,
307  int mode, size_t *olen,
308  const unsigned char *input,
309  unsigned char *output,
310  size_t output_max_len );
311 
331  int (*f_rng)(void *, unsigned char *, size_t),
332  void *p_rng,
333  int mode, size_t *olen,
334  const unsigned char *input,
335  unsigned char *output,
336  size_t output_max_len );
337 
359  int (*f_rng)(void *, unsigned char *, size_t),
360  void *p_rng,
361  int mode,
362  const unsigned char *label, size_t label_len,
363  size_t *olen,
364  const unsigned char *input,
365  unsigned char *output,
366  size_t output_max_len );
367 
395 int rsa_pkcs1_sign( rsa_context *ctx,
396  int (*f_rng)(void *, unsigned char *, size_t),
397  void *p_rng,
398  int mode,
399  md_type_t md_alg,
400  unsigned int hashlen,
401  const unsigned char *hash,
402  unsigned char *sig );
403 
423  int (*f_rng)(void *, unsigned char *, size_t),
424  void *p_rng,
425  int mode,
426  md_type_t md_alg,
427  unsigned int hashlen,
428  const unsigned char *hash,
429  unsigned char *sig );
430 
457  int (*f_rng)(void *, unsigned char *, size_t),
458  void *p_rng,
459  int mode,
460  md_type_t md_alg,
461  unsigned int hashlen,
462  const unsigned char *hash,
463  unsigned char *sig );
464 
491 int rsa_pkcs1_verify( rsa_context *ctx,
492  int (*f_rng)(void *, unsigned char *, size_t),
493  void *p_rng,
494  int mode,
495  md_type_t md_alg,
496  unsigned int hashlen,
497  const unsigned char *hash,
498  const unsigned char *sig );
499 
519  int (*f_rng)(void *, unsigned char *, size_t),
520  void *p_rng,
521  int mode,
522  md_type_t md_alg,
523  unsigned int hashlen,
524  const unsigned char *hash,
525  const unsigned char *sig );
526 
552  int (*f_rng)(void *, unsigned char *, size_t),
553  void *p_rng,
554  int mode,
555  md_type_t md_alg,
556  unsigned int hashlen,
557  const unsigned char *hash,
558  const unsigned char *sig );
559 
569 int rsa_copy( rsa_context *dst, const rsa_context *src );
570 
576 void rsa_free( rsa_context *ctx );
577 
583 int rsa_self_test( int verbose );
584 
585 #ifdef __cplusplus
586 }
587 #endif
588 
589 #endif /* POLARSSL_RSA_C */
590 
591 #endif /* rsa.h */
int rsa_self_test(int verbose)
Checkup routine.
int rsa_copy(rsa_context *dst, const rsa_context *src)
Copy the components of an RSA context.
int rsa_rsaes_oaep_encrypt(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, const unsigned char *label, size_t label_len, size_t ilen, const unsigned char *input, unsigned char *output)
Perform a PKCS#1 v2.1 OAEP encryption (RSAES-OAEP-ENCRYPT)
int rsa_check_privkey(const rsa_context *ctx)
Check a private RSA key.
int padding
Definition: rsa.h:101
int rsa_rsassa_pkcs1_v15_verify(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, const unsigned char *sig)
Perform a PKCS#1 v1.5 verification (RSASSA-PKCS1-v1_5-VERIFY)
mpi Vf
Definition: rsa.h:98
int rsa_rsaes_pkcs1_v15_encrypt(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, size_t ilen, const unsigned char *input, unsigned char *output)
Perform a PKCS#1 v1.5 encryption (RSAES-PKCS1-v1_5-ENCRYPT)
int rsa_rsaes_oaep_decrypt(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, const unsigned char *label, size_t label_len, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)
Perform a PKCS#1 v2.1 OAEP decryption (RSAES-OAEP-DECRYPT)
mpi DQ
Definition: rsa.h:89
Configuration options (set of defines)
int rsa_check_pubkey(const rsa_context *ctx)
Check a public RSA key.
mpi RP
Definition: rsa.h:93
int rsa_rsassa_pss_verify(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, const unsigned char *sig)
Perform a PKCS#1 v2.1 PSS verification (RSASSA-PSS-VERIFY)
int rsa_pkcs1_decrypt(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)
Generic wrapper to perform a PKCS#1 decryption using the mode from the context.
MPI structure.
Definition: bignum.h:177
Multi-precision integer library.
size_t len
Definition: rsa.h:80
md_type_t
Definition: md.h:51
mpi P
Definition: rsa.h:86
mpi Vi
Definition: rsa.h:97
int rsa_rsaes_pkcs1_v15_decrypt(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)
Perform a PKCS#1 v1.5 decryption (RSAES-PKCS1-v1_5-DECRYPT)
mpi Q
Definition: rsa.h:87
void rsa_free(rsa_context *ctx)
Free the components of an RSA key.
int rsa_private(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, const unsigned char *input, unsigned char *output)
Do an RSA private key operation.
RSA context structure.
Definition: rsa.h:77
mpi D
Definition: rsa.h:85
int rsa_pkcs1_encrypt(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, size_t ilen, const unsigned char *input, unsigned char *output)
Generic wrapper to perform a PKCS#1 encryption using the mode from the context.
Threading abstraction layer.
mpi QP
Definition: rsa.h:90
mpi N
Definition: rsa.h:82
mpi RQ
Definition: rsa.h:94
int rsa_rsassa_pss_sign(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Perform a PKCS#1 v2.1 PSS signature (RSASSA-PSS-SIGN)
mpi E
Definition: rsa.h:83
int rsa_pkcs1_verify(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, const unsigned char *sig)
Generic wrapper to perform a PKCS#1 verification using the mode from the context. ...
mpi DP
Definition: rsa.h:88
int hash_id
Definition: rsa.h:103
int rsa_pkcs1_sign(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Generic wrapper to perform a PKCS#1 signature using the mode from the context.
int rsa_rsassa_pkcs1_v15_sign(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Perform a PKCS#1 v1.5 signature (RSASSA-PKCS1-v1_5-SIGN)
Generic message digest wrapper.
int rsa_gen_key(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, unsigned int nbits, int exponent)
Generate an RSA keypair.
void rsa_init(rsa_context *ctx, int padding, int hash_id)
Initialize an RSA context.
mpi RN
Definition: rsa.h:92
int ver
Definition: rsa.h:79
int rsa_public(rsa_context *ctx, const unsigned char *input, unsigned char *output)
Do an RSA public key operation.