PolarSSL v1.2.9
rsa.h
Go to the documentation of this file.
1 
27 #ifndef POLARSSL_RSA_H
28 #define POLARSSL_RSA_H
29 
30 #include "bignum.h"
31 
32 /*
33  * RSA Error codes
34  */
35 #define POLARSSL_ERR_RSA_BAD_INPUT_DATA -0x4080
36 #define POLARSSL_ERR_RSA_INVALID_PADDING -0x4100
37 #define POLARSSL_ERR_RSA_KEY_GEN_FAILED -0x4180
38 #define POLARSSL_ERR_RSA_KEY_CHECK_FAILED -0x4200
39 #define POLARSSL_ERR_RSA_PUBLIC_FAILED -0x4280
40 #define POLARSSL_ERR_RSA_PRIVATE_FAILED -0x4300
41 #define POLARSSL_ERR_RSA_VERIFY_FAILED -0x4380
42 #define POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE -0x4400
43 #define POLARSSL_ERR_RSA_RNG_FAILED -0x4480
45 /*
46  * PKCS#1 constants
47  */
48 #define SIG_RSA_RAW 0
49 #define SIG_RSA_MD2 2
50 #define SIG_RSA_MD4 3
51 #define SIG_RSA_MD5 4
52 #define SIG_RSA_SHA1 5
53 #define SIG_RSA_SHA224 14
54 #define SIG_RSA_SHA256 11
55 #define SIG_RSA_SHA384 12
56 #define SIG_RSA_SHA512 13
57 
58 #define RSA_PUBLIC 0
59 #define RSA_PRIVATE 1
60 
61 #define RSA_PKCS_V15 0
62 #define RSA_PKCS_V21 1
63 
64 #define RSA_SIGN 1
65 #define RSA_CRYPT 2
66 
67 #define ASN1_STR_CONSTRUCTED_SEQUENCE "\x30"
68 #define ASN1_STR_NULL "\x05"
69 #define ASN1_STR_OID "\x06"
70 #define ASN1_STR_OCTET_STRING "\x04"
71 
72 #define OID_DIGEST_ALG_MDX "\x2A\x86\x48\x86\xF7\x0D\x02\x00"
73 #define OID_HASH_ALG_SHA1 "\x2b\x0e\x03\x02\x1a"
74 #define OID_HASH_ALG_SHA2X "\x60\x86\x48\x01\x65\x03\x04\x02\x00"
75 
76 #define OID_ISO_MEMBER_BODIES "\x2a"
77 #define OID_ISO_IDENTIFIED_ORG "\x2b"
78 
79 /*
80  * ISO Member bodies OID parts
81  */
82 #define OID_COUNTRY_US "\x86\x48"
83 #define OID_RSA_DATA_SECURITY "\x86\xf7\x0d"
84 
85 /*
86  * ISO Identified organization OID parts
87  */
88 #define OID_OIW_SECSIG_SHA1 "\x0e\x03\x02\x1a"
89 
90 /*
91  * DigestInfo ::= SEQUENCE {
92  * digestAlgorithm DigestAlgorithmIdentifier,
93  * digest Digest }
94  *
95  * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
96  *
97  * Digest ::= OCTET STRING
98  */
99 #define ASN1_HASH_MDX \
100 ( \
101  ASN1_STR_CONSTRUCTED_SEQUENCE "\x20" \
102  ASN1_STR_CONSTRUCTED_SEQUENCE "\x0C" \
103  ASN1_STR_OID "\x08" \
104  OID_DIGEST_ALG_MDX \
105  ASN1_STR_NULL "\x00" \
106  ASN1_STR_OCTET_STRING "\x10" \
107 )
108 
109 #define ASN1_HASH_SHA1 \
110  ASN1_STR_CONSTRUCTED_SEQUENCE "\x21" \
111  ASN1_STR_CONSTRUCTED_SEQUENCE "\x09" \
112  ASN1_STR_OID "\x05" \
113  OID_HASH_ALG_SHA1 \
114  ASN1_STR_NULL "\x00" \
115  ASN1_STR_OCTET_STRING "\x14"
116 
117 #define ASN1_HASH_SHA1_ALT \
118  ASN1_STR_CONSTRUCTED_SEQUENCE "\x1F" \
119  ASN1_STR_CONSTRUCTED_SEQUENCE "\x07" \
120  ASN1_STR_OID "\x05" \
121  OID_HASH_ALG_SHA1 \
122  ASN1_STR_OCTET_STRING "\x14"
123 
124 #define ASN1_HASH_SHA2X \
125  ASN1_STR_CONSTRUCTED_SEQUENCE "\x11" \
126  ASN1_STR_CONSTRUCTED_SEQUENCE "\x0d" \
127  ASN1_STR_OID "\x09" \
128  OID_HASH_ALG_SHA2X \
129  ASN1_STR_NULL "\x00" \
130  ASN1_STR_OCTET_STRING "\x00"
131 
135 typedef struct
136 {
137  int ver;
138  size_t len;
140  mpi N;
141  mpi E;
143  mpi D;
144  mpi P;
145  mpi Q;
146  mpi DP;
147  mpi DQ;
148  mpi QP;
150  mpi RN;
151  mpi RP;
152  mpi RQ;
154 #if !defined(POLARSSL_RSA_NO_CRT)
155  mpi Vi;
156  mpi Vf;
157 #endif
158 
159  int padding;
161  int hash_id;
165 }
167 
168 #ifdef __cplusplus
169 extern "C" {
170 #endif
171 
185 void rsa_init( rsa_context *ctx,
186  int padding,
187  int hash_id);
188 
203 int rsa_gen_key( rsa_context *ctx,
204  int (*f_rng)(void *, unsigned char *, size_t),
205  void *p_rng,
206  unsigned int nbits, int exponent );
207 
215 int rsa_check_pubkey( const rsa_context *ctx );
216 
224 int rsa_check_privkey( const rsa_context *ctx );
225 
242 int rsa_public( rsa_context *ctx,
243  const unsigned char *input,
244  unsigned char *output );
245 
260 int rsa_private( rsa_context *ctx,
261  int (*f_rng)(void *, unsigned char *, size_t),
262  void *p_rng,
263  const unsigned char *input,
264  unsigned char *output );
265 
286  int (*f_rng)(void *, unsigned char *, size_t),
287  void *p_rng,
288  int mode, size_t ilen,
289  const unsigned char *input,
290  unsigned char *output );
291 
309  int (*f_rng)(void *, unsigned char *, size_t),
310  void *p_rng,
311  int mode, size_t ilen,
312  const unsigned char *input,
313  unsigned char *output );
314 
335  int (*f_rng)(void *, unsigned char *, size_t),
336  void *p_rng,
337  int mode,
338  const unsigned char *label, size_t label_len,
339  size_t ilen,
340  const unsigned char *input,
341  unsigned char *output );
342 
364  int (*f_rng)(void *, unsigned char *, size_t),
365  void *p_rng,
366  int mode, size_t *olen,
367  const unsigned char *input,
368  unsigned char *output,
369  size_t output_max_len );
370 
390  int (*f_rng)(void *, unsigned char *, size_t),
391  void *p_rng,
392  int mode, size_t *olen,
393  const unsigned char *input,
394  unsigned char *output,
395  size_t output_max_len );
396 
418  int (*f_rng)(void *, unsigned char *, size_t),
419  void *p_rng,
420  int mode,
421  const unsigned char *label, size_t label_len,
422  size_t *olen,
423  const unsigned char *input,
424  unsigned char *output,
425  size_t output_max_len );
426 
454 int rsa_pkcs1_sign( rsa_context *ctx,
455  int (*f_rng)(void *, unsigned char *, size_t),
456  void *p_rng,
457  int mode,
458  int hash_id,
459  unsigned int hashlen,
460  const unsigned char *hash,
461  unsigned char *sig );
462 
482  int (*f_rng)(void *, unsigned char *, size_t),
483  void *p_rng,
484  int mode,
485  int hash_id,
486  unsigned int hashlen,
487  const unsigned char *hash,
488  unsigned char *sig );
489 
516  int (*f_rng)(void *, unsigned char *, size_t),
517  void *p_rng,
518  int mode,
519  int hash_id,
520  unsigned int hashlen,
521  const unsigned char *hash,
522  unsigned char *sig );
523 
550 int rsa_pkcs1_verify( rsa_context *ctx,
551  int (*f_rng)(void *, unsigned char *, size_t),
552  void *p_rng,
553  int mode,
554  int hash_id,
555  unsigned int hashlen,
556  const unsigned char *hash,
557  unsigned char *sig );
558 
578  int (*f_rng)(void *, unsigned char *, size_t),
579  void *p_rng,
580  int mode,
581  int hash_id,
582  unsigned int hashlen,
583  const unsigned char *hash,
584  unsigned char *sig );
585 
612  int (*f_rng)(void *, unsigned char *, size_t),
613  void *p_rng,
614  int mode,
615  int hash_id,
616  unsigned int hashlen,
617  const unsigned char *hash,
618  unsigned char *sig );
619 
625 void rsa_free( rsa_context *ctx );
626 
632 int rsa_self_test( int verbose );
633 
634 #ifdef __cplusplus
635 }
636 #endif
637 
638 #endif /* rsa.h */