PolarSSL v1.1.4
|
The RSA public-key cryptosystem. More...
#include "bignum.h"
Go to the source code of this file.
Data Structures | |
struct | rsa_context |
RSA context structure. More... | |
Defines | |
#define | POLARSSL_ERR_RSA_BAD_INPUT_DATA -0x4080 |
Bad input parameters to function. | |
#define | POLARSSL_ERR_RSA_INVALID_PADDING -0x4100 |
Input data contains invalid padding and is rejected. | |
#define | POLARSSL_ERR_RSA_KEY_GEN_FAILED -0x4180 |
Something failed during generation of a key. | |
#define | POLARSSL_ERR_RSA_KEY_CHECK_FAILED -0x4200 |
Key failed to pass the libraries validity check. | |
#define | POLARSSL_ERR_RSA_PUBLIC_FAILED -0x4280 |
The public key operation failed. | |
#define | POLARSSL_ERR_RSA_PRIVATE_FAILED -0x4300 |
The private key operation failed. | |
#define | POLARSSL_ERR_RSA_VERIFY_FAILED -0x4380 |
The PKCS#1 verification failed. | |
#define | POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE -0x4400 |
The output buffer for decryption is not large enough. | |
#define | POLARSSL_ERR_RSA_RNG_FAILED -0x4480 |
The random generator failed to generate non-zeros. | |
#define | SIG_RSA_RAW 0 |
#define | SIG_RSA_MD2 2 |
#define | SIG_RSA_MD4 3 |
#define | SIG_RSA_MD5 4 |
#define | SIG_RSA_SHA1 5 |
#define | SIG_RSA_SHA224 14 |
#define | SIG_RSA_SHA256 11 |
#define | SIG_RSA_SHA384 12 |
#define | SIG_RSA_SHA512 13 |
#define | RSA_PUBLIC 0 |
#define | RSA_PRIVATE 1 |
#define | RSA_PKCS_V15 0 |
#define | RSA_PKCS_V21 1 |
#define | RSA_SIGN 1 |
#define | RSA_CRYPT 2 |
#define | ASN1_STR_CONSTRUCTED_SEQUENCE "\x30" |
#define | ASN1_STR_NULL "\x05" |
#define | ASN1_STR_OID "\x06" |
#define | ASN1_STR_OCTET_STRING "\x04" |
#define | OID_DIGEST_ALG_MDX "\x2A\x86\x48\x86\xF7\x0D\x02\x00" |
#define | OID_HASH_ALG_SHA1 "\x2b\x0e\x03\x02\x1a" |
#define | OID_HASH_ALG_SHA2X "\x60\x86\x48\x01\x65\x03\x04\x02\x00" |
#define | OID_ISO_MEMBER_BODIES "\x2a" |
#define | OID_ISO_IDENTIFIED_ORG "\x2b" |
#define | OID_COUNTRY_US "\x86\x48" |
#define | OID_RSA_DATA_SECURITY "\x86\xf7\x0d" |
#define | OID_OIW_SECSIG_SHA1 "\x0e\x03\x02\x1a" |
#define | ASN1_HASH_MDX |
#define | ASN1_HASH_SHA1 |
#define | ASN1_HASH_SHA2X |
Functions | |
void | rsa_init (rsa_context *ctx, int padding, int hash_id) |
Initialize an RSA context. | |
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. | |
int | rsa_check_pubkey (const rsa_context *ctx) |
Check a public RSA key. | |
int | rsa_check_privkey (const rsa_context *ctx) |
Check a private RSA key. | |
int | rsa_public (rsa_context *ctx, const unsigned char *input, unsigned char *output) |
Do an RSA public key operation. | |
int | rsa_private (rsa_context *ctx, const unsigned char *input, unsigned char *output) |
Do an RSA private key operation. | |
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) |
Add the message padding, then do an RSA operation. | |
int | rsa_pkcs1_decrypt (rsa_context *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len) |
Do an RSA operation, then remove the message padding. | |
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) |
Do a private RSA to sign a message digest. | |
int | rsa_pkcs1_verify (rsa_context *ctx, int mode, int hash_id, unsigned int hashlen, const unsigned char *hash, unsigned char *sig) |
Do a public RSA and check the message digest. | |
void | rsa_free (rsa_context *ctx) |
Free the components of an RSA key. | |
int | rsa_self_test (int verbose) |
Checkup routine. |
The RSA public-key cryptosystem.
Copyright (C) 2006-2010, Brainspark B.V.
This file is part of PolarSSL (http://www.polarssl.org) Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
All rights reserved.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Definition in file rsa.h.
#define ASN1_HASH_MDX |
#define ASN1_HASH_SHA1 |
ASN1_STR_CONSTRUCTED_SEQUENCE "\x21" \ ASN1_STR_CONSTRUCTED_SEQUENCE "\x09" \ ASN1_STR_OID "\x05" \ OID_HASH_ALG_SHA1 \ ASN1_STR_NULL "\x00" \ ASN1_STR_OCTET_STRING "\x14"
#define ASN1_HASH_SHA2X |
ASN1_STR_CONSTRUCTED_SEQUENCE "\x11" \ ASN1_STR_CONSTRUCTED_SEQUENCE "\x0d" \ ASN1_STR_OID "\x09" \ OID_HASH_ALG_SHA2X \ ASN1_STR_NULL "\x00" \ ASN1_STR_OCTET_STRING "\x00"
#define ASN1_STR_CONSTRUCTED_SEQUENCE "\x30" |
#define ASN1_STR_NULL "\x05" |
#define ASN1_STR_OCTET_STRING "\x04" |
#define ASN1_STR_OID "\x06" |
#define OID_COUNTRY_US "\x86\x48" |
#define OID_DIGEST_ALG_MDX "\x2A\x86\x48\x86\xF7\x0D\x02\x00" |
#define OID_HASH_ALG_SHA1 "\x2b\x0e\x03\x02\x1a" |
#define OID_HASH_ALG_SHA2X "\x60\x86\x48\x01\x65\x03\x04\x02\x00" |
#define OID_ISO_IDENTIFIED_ORG "\x2b" |
#define OID_ISO_MEMBER_BODIES "\x2a" |
#define OID_OIW_SECSIG_SHA1 "\x0e\x03\x02\x1a" |
#define OID_RSA_DATA_SECURITY "\x86\xf7\x0d" |
#define POLARSSL_ERR_RSA_BAD_INPUT_DATA -0x4080 |
#define POLARSSL_ERR_RSA_INVALID_PADDING -0x4100 |
#define POLARSSL_ERR_RSA_KEY_CHECK_FAILED -0x4200 |
#define POLARSSL_ERR_RSA_KEY_GEN_FAILED -0x4180 |
#define POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE -0x4400 |
#define POLARSSL_ERR_RSA_PRIVATE_FAILED -0x4300 |
#define POLARSSL_ERR_RSA_PUBLIC_FAILED -0x4280 |
#define POLARSSL_ERR_RSA_RNG_FAILED -0x4480 |
#define POLARSSL_ERR_RSA_VERIFY_FAILED -0x4380 |
#define RSA_PKCS_V15 0 |
#define RSA_PKCS_V21 1 |
#define RSA_PRIVATE 1 |
Definition at line 59 of file rsa.h.
Referenced by FCT_BGN(), RSA_private_decrypt(), and RSA_private_encrypt().
#define RSA_PUBLIC 0 |
Definition at line 58 of file rsa.h.
Referenced by FCT_BGN(), RSA_public_decrypt(), and RSA_public_encrypt().
#define SIG_RSA_MD2 2 |
#define SIG_RSA_MD4 3 |
#define SIG_RSA_MD5 4 |
#define SIG_RSA_RAW 0 |
#define SIG_RSA_SHA1 5 |
#define SIG_RSA_SHA224 14 |
#define SIG_RSA_SHA256 11 |
#define SIG_RSA_SHA384 12 |
#define SIG_RSA_SHA512 13 |
int rsa_check_privkey | ( | const rsa_context * | ctx | ) |
Check a private RSA key.
ctx | RSA context to be checked |
Referenced by FCT_BGN().
int rsa_check_pubkey | ( | const rsa_context * | ctx | ) |
Check a public RSA key.
ctx | RSA context to be checked |
Referenced by FCT_BGN().
void rsa_free | ( | rsa_context * | ctx | ) |
Free the components of an RSA key.
ctx | RSA Context to free |
int rsa_gen_key | ( | rsa_context * | ctx, |
int(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng, | ||
unsigned int | nbits, | ||
int | exponent | ||
) |
Generate an RSA keypair.
ctx | RSA context that will hold the key |
f_rng | RNG function |
p_rng | RNG parameter |
nbits | size of the public key in bits |
exponent | public exponent (e.g., 65537) |
Referenced by FCT_BGN().
void rsa_init | ( | rsa_context * | ctx, |
int | padding, | ||
int | hash_id | ||
) |
Initialize an RSA context.
ctx | RSA context to be initialized |
padding | RSA_PKCS_V15 or RSA_PKCS_V21 |
hash_id | RSA_PKCS_V21 hash identifier |
Referenced by FCT_BGN().
int rsa_pkcs1_decrypt | ( | rsa_context * | ctx, |
int | mode, | ||
size_t * | olen, | ||
const unsigned char * | input, | ||
unsigned char * | output, | ||
size_t | output_max_len | ||
) |
Do an RSA operation, then remove the message padding.
ctx | RSA context |
mode | RSA_PUBLIC or RSA_PRIVATE |
olen | will contain the plaintext length |
input | buffer holding the encrypted data |
output | buffer that will hold the plaintext |
output_max_len | maximum length of the output buffer |
Referenced by FCT_BGN(), RSA_private_decrypt(), and RSA_public_decrypt().
int rsa_pkcs1_encrypt | ( | rsa_context * | ctx, |
int(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng, | ||
int | mode, | ||
size_t | ilen, | ||
const unsigned char * | input, | ||
unsigned char * | output | ||
) |
Add the message padding, then do an RSA operation.
ctx | RSA context |
f_rng | RNG function (Needed for padding and PKCS#1 v2.1 encoding) |
p_rng | RNG parameter |
mode | RSA_PUBLIC or RSA_PRIVATE |
ilen | contains the plaintext length |
input | buffer holding the data to be encrypted |
output | buffer that will hold the ciphertext |
Referenced by FCT_BGN(), RSA_private_encrypt(), and RSA_public_encrypt().
int rsa_pkcs1_sign | ( | rsa_context * | ctx, |
int(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng, | ||
int | mode, | ||
int | hash_id, | ||
unsigned int | hashlen, | ||
const unsigned char * | hash, | ||
unsigned char * | sig | ||
) |
Do a private RSA to sign a message digest.
ctx | RSA context |
f_rng | RNG function (Needed for PKCS#1 v2.1 encoding) |
p_rng | RNG parameter |
mode | RSA_PUBLIC or RSA_PRIVATE |
hash_id | SIG_RSA_RAW, SIG_RSA_MD{2,4,5} or SIG_RSA_SHA{1,224,256,384,512} |
hashlen | message digest length (for SIG_RSA_RAW only) |
hash | buffer holding the message digest |
sig | buffer that will hold the ciphertext |
Referenced by FCT_BGN().
int rsa_pkcs1_verify | ( | rsa_context * | ctx, |
int | mode, | ||
int | hash_id, | ||
unsigned int | hashlen, | ||
const unsigned char * | hash, | ||
unsigned char * | sig | ||
) |
Do a public RSA and check the message digest.
ctx | points to an RSA public key |
mode | RSA_PUBLIC or RSA_PRIVATE |
hash_id | SIG_RSA_RAW, SIG_RSA_MD{2,4,5} or SIG_RSA_SHA{1,224,256,384,512} |
hashlen | message digest length (for SIG_RSA_RAW only) |
hash | buffer holding the message digest |
sig | buffer holding the ciphertext |
Referenced by FCT_BGN().
int rsa_private | ( | rsa_context * | ctx, |
const unsigned char * | input, | ||
unsigned char * | output | ||
) |
Do an RSA private key operation.
ctx | RSA context |
input | input buffer |
output | output buffer |
Referenced by FCT_BGN().
int rsa_public | ( | rsa_context * | ctx, |
const unsigned char * | input, | ||
unsigned char * | output | ||
) |
Do an RSA public key operation.
ctx | RSA context |
input | input buffer |
output | output buffer |
Referenced by FCT_BGN().
int rsa_self_test | ( | int | verbose | ) |