PolarSSL v1.2.10
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  int padding;
156  int hash_id;
160 }
162 
163 #ifdef __cplusplus
164 extern "C" {
165 #endif
166 
180 void rsa_init( rsa_context *ctx,
181  int padding,
182  int hash_id);
183 
198 int rsa_gen_key( rsa_context *ctx,
199  int (*f_rng)(void *, unsigned char *, size_t),
200  void *p_rng,
201  unsigned int nbits, int exponent );
202 
210 int rsa_check_pubkey( const rsa_context *ctx );
211 
219 int rsa_check_privkey( const rsa_context *ctx );
220 
237 int rsa_public( rsa_context *ctx,
238  const unsigned char *input,
239  unsigned char *output );
240 
255 int rsa_private( rsa_context *ctx,
256  int (*f_rng)(void *, unsigned char *, size_t),
257  void *p_rng,
258  const unsigned char *input,
259  unsigned char *output );
260 
281  int (*f_rng)(void *, unsigned char *, size_t),
282  void *p_rng,
283  int mode, size_t ilen,
284  const unsigned char *input,
285  unsigned char *output );
286 
304  int (*f_rng)(void *, unsigned char *, size_t),
305  void *p_rng,
306  int mode, size_t ilen,
307  const unsigned char *input,
308  unsigned char *output );
309 
330  int (*f_rng)(void *, unsigned char *, size_t),
331  void *p_rng,
332  int mode,
333  const unsigned char *label, size_t label_len,
334  size_t ilen,
335  const unsigned char *input,
336  unsigned char *output );
337 
359  int (*f_rng)(void *, unsigned char *, size_t),
360  void *p_rng,
361  int mode, size_t *olen,
362  const unsigned char *input,
363  unsigned char *output,
364  size_t output_max_len );
365 
385  int (*f_rng)(void *, unsigned char *, size_t),
386  void *p_rng,
387  int mode, size_t *olen,
388  const unsigned char *input,
389  unsigned char *output,
390  size_t output_max_len );
391 
413  int (*f_rng)(void *, unsigned char *, size_t),
414  void *p_rng,
415  int mode,
416  const unsigned char *label, size_t label_len,
417  size_t *olen,
418  const unsigned char *input,
419  unsigned char *output,
420  size_t output_max_len );
421 
449 int rsa_pkcs1_sign( rsa_context *ctx,
450  int (*f_rng)(void *, unsigned char *, size_t),
451  void *p_rng,
452  int mode,
453  int hash_id,
454  unsigned int hashlen,
455  const unsigned char *hash,
456  unsigned char *sig );
457 
477  int (*f_rng)(void *, unsigned char *, size_t),
478  void *p_rng,
479  int mode,
480  int hash_id,
481  unsigned int hashlen,
482  const unsigned char *hash,
483  unsigned char *sig );
484 
511  int (*f_rng)(void *, unsigned char *, size_t),
512  void *p_rng,
513  int mode,
514  int hash_id,
515  unsigned int hashlen,
516  const unsigned char *hash,
517  unsigned char *sig );
518 
545 int rsa_pkcs1_verify( rsa_context *ctx,
546  int (*f_rng)(void *, unsigned char *, size_t),
547  void *p_rng,
548  int mode,
549  int hash_id,
550  unsigned int hashlen,
551  const unsigned char *hash,
552  unsigned char *sig );
553 
573  int (*f_rng)(void *, unsigned char *, size_t),
574  void *p_rng,
575  int mode,
576  int hash_id,
577  unsigned int hashlen,
578  const unsigned char *hash,
579  unsigned char *sig );
580 
607  int (*f_rng)(void *, unsigned char *, size_t),
608  void *p_rng,
609  int mode,
610  int hash_id,
611  unsigned int hashlen,
612  const unsigned char *hash,
613  unsigned char *sig );
614 
620 void rsa_free( rsa_context *ctx );
621 
627 int rsa_self_test( int verbose );
628 
629 #ifdef __cplusplus
630 }
631 #endif
632 
633 #endif /* rsa.h */
int rsa_self_test(int verbose)
Checkup routine.
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:154
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)
int rsa_pkcs1_sign(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, int hash_id, 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, int hash_id, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Perform a PKCS#1 v1.5 signature (RSASSA-PKCS1-v1_5-SIGN)
mpi DQ
Definition: rsa.h:147
int rsa_check_pubkey(const rsa_context *ctx)
Check a public RSA key.
mpi RP
Definition: rsa.h:151
int rsa_rsassa_pss_verify(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, int hash_id, unsigned int hashlen, const unsigned char *hash, 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:164
Multi-precision integer library.
size_t len
Definition: rsa.h:138
mpi P
Definition: rsa.h:144
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:145
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:135
mpi D
Definition: rsa.h:143
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.
mpi QP
Definition: rsa.h:148
mpi N
Definition: rsa.h:140
mpi RQ
Definition: rsa.h:152
mpi E
Definition: rsa.h:141
mpi DP
Definition: rsa.h:146
int hash_id
Definition: rsa.h:156
int rsa_rsassa_pkcs1_v15_verify(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, int hash_id, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Perform a PKCS#1 v1.5 verification (RSASSA-PKCS1-v1_5-VERIFY)
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.
int rsa_rsassa_pss_sign(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, int hash_id, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Perform a PKCS#1 v2.1 PSS signature (RSASSA-PSS-SIGN)
mpi RN
Definition: rsa.h:150
int ver
Definition: rsa.h:137
int rsa_pkcs1_verify(rsa_context *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, int hash_id, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
Generic wrapper to perform a PKCS#1 verification using the mode from the context. ...
int rsa_public(rsa_context *ctx, const unsigned char *input, unsigned char *output)
Do an RSA public key operation.