#include "polarssl/config.h"
#include "polarssl/pkcs12.h"
#include "polarssl/asn1.h"
#include "polarssl/cipher.h"
#include "polarssl/arc4.h"
#include "polarssl/des.h"
Go to the source code of this file.
Functions | |
static int | pkcs12_parse_pbe_params (asn1_buf *params, asn1_buf *salt, int *iterations) |
static int | pkcs12_pbe_derive_key_iv (asn1_buf *pbe_params, md_type_t md_type, const unsigned char *pwd, size_t pwdlen, unsigned char *key, size_t keylen, unsigned char *iv, size_t ivlen) |
int | pkcs12_pbe_sha1_rc4_128 (asn1_buf *pbe_params, int mode, const unsigned char *pwd, size_t pwdlen, const unsigned char *data, size_t len, unsigned char *output) |
PKCS12 Password Based function (encryption / decryption) for pbeWithSHAAnd128BitRC4. | |
int | pkcs12_pbe (asn1_buf *pbe_params, int mode, cipher_type_t cipher_type, md_type_t md_type, const unsigned char *pwd, size_t pwdlen, const unsigned char *data, size_t len, unsigned char *output) |
PKCS12 Password Based function (encryption / decryption) for cipher-based and md-based PBE's. | |
static void | pkcs12_fill_buffer (unsigned char *data, size_t data_len, const unsigned char *filler, size_t fill_len) |
int | pkcs12_derivation (unsigned char *data, size_t datalen, const unsigned char *pwd, size_t pwdlen, const unsigned char *salt, size_t saltlen, md_type_t md_type, int id, int iterations) |
The PKCS#12 derivation function uses a password and a salt to produce pseudo-random bits for a particular "purpose". |
int pkcs12_derivation | ( | unsigned char * | data, | |
size_t | datalen, | |||
const unsigned char * | pwd, | |||
size_t | pwdlen, | |||
const unsigned char * | salt, | |||
size_t | saltlen, | |||
md_type_t | md, | |||
int | id, | |||
int | iterations | |||
) |
The PKCS#12 derivation function uses a password and a salt to produce pseudo-random bits for a particular "purpose".
Depending on the given id, this function can produce an encryption/decryption key, an nitialization vector or an integrity key.
data | buffer to store the derived data in | |
datalen | length to fill | |
pwd | password to use (may be NULL if no password is used) | |
pwdlen | length of the password (may be 0) | |
salt | salt buffer to use | |
saltlen | length of the salt | |
md | md type to use during the derivation | |
id | id that describes the purpose (can be PKCS12_DERIVE_KEY, PKCS12_DERIVE_IV or PKCS12_DERIVE_MAC_KEY) | |
iterations | number of iterations |
Definition at line 223 of file pkcs12.c.
References md(), md_finish(), md_free_ctx(), md_get_size(), md_info_from_type(), md_init_ctx(), md_starts(), md_update(), pkcs12_fill_buffer(), POLARSSL_ERR_PKCS12_BAD_INPUT_DATA, POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE, and POLARSSL_MD_MAX_SIZE.
Referenced by pkcs12_pbe_derive_key_iv().
static void pkcs12_fill_buffer | ( | unsigned char * | data, | |
size_t | data_len, | |||
const unsigned char * | filler, | |||
size_t | fill_len | |||
) | [static] |
Definition at line 208 of file pkcs12.c.
Referenced by pkcs12_derivation().
static int pkcs12_parse_pbe_params | ( | asn1_buf * | params, | |
asn1_buf * | salt, | |||
int * | iterations | |||
) | [static] |
Definition at line 48 of file pkcs12.c.
References ASN1_CONSTRUCTED, asn1_get_int(), asn1_get_tag(), ASN1_OCTET_STRING, ASN1_SEQUENCE, _asn1_buf::len, _asn1_buf::p, POLARSSL_ERR_ASN1_LENGTH_MISMATCH, POLARSSL_ERR_ASN1_UNEXPECTED_TAG, POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT, and _asn1_buf::tag.
Referenced by pkcs12_pbe_derive_key_iv().
int pkcs12_pbe | ( | asn1_buf * | pbe_params, | |
int | mode, | |||
cipher_type_t | cipher_type, | |||
md_type_t | md_type, | |||
const unsigned char * | pwd, | |||
size_t | pwdlen, | |||
const unsigned char * | input, | |||
size_t | len, | |||
unsigned char * | output | |||
) |
PKCS12 Password Based function (encryption / decryption) for cipher-based and md-based PBE's.
pbe_params | an ASN1 buffer containing the pkcs-12PbeParams structure | |
mode | either PKCS12_PBE_ENCRYPT or PKCS12_PBE_DECRYPT | |
cipher_type | the cipher used | |
md_type | the md used | |
pwd | the password used (may be NULL if no password is used) | |
pwdlen | length of the password (may be 0) | |
input | the input data | |
len | data length | |
output | the output buffer |
Definition at line 155 of file pkcs12.c.
References cipher_finish(), cipher_free_ctx(), cipher_info_from_type(), cipher_init_ctx(), cipher_reset(), cipher_set_iv(), cipher_setkey(), cipher_update(), iv, cipher_info_t::iv_size, key, cipher_info_t::key_length, pkcs12_pbe_derive_key_iv(), POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE, and POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH.
Referenced by pk_parse_key_pkcs8_encrypted_der().
static int pkcs12_pbe_derive_key_iv | ( | asn1_buf * | pbe_params, | |
md_type_t | md_type, | |||
const unsigned char * | pwd, | |||
size_t | pwdlen, | |||
unsigned char * | key, | |||
size_t | keylen, | |||
unsigned char * | iv, | |||
size_t | ivlen | |||
) | [static] |
Definition at line 82 of file pkcs12.c.
References _asn1_buf::len, _asn1_buf::p, pkcs12_derivation(), PKCS12_DERIVE_IV, PKCS12_DERIVE_KEY, pkcs12_parse_pbe_params(), and salt.
Referenced by pkcs12_pbe(), and pkcs12_pbe_sha1_rc4_128().
int pkcs12_pbe_sha1_rc4_128 | ( | asn1_buf * | pbe_params, | |
int | mode, | |||
const unsigned char * | pwd, | |||
size_t | pwdlen, | |||
const unsigned char * | input, | |||
size_t | len, | |||
unsigned char * | output | |||
) |
PKCS12 Password Based function (encryption / decryption) for pbeWithSHAAnd128BitRC4.
pbe_params | an ASN1 buffer containing the pkcs-12PbeParams structure | |
mode | either PKCS12_PBE_ENCRYPT or PKCS12_PBE_DECRYPT | |
pwd | the password used (may be NULL if no password is used) | |
pwdlen | length of the password (may be 0) | |
input | the input data | |
len | data length | |
output | the output buffer |
Definition at line 120 of file pkcs12.c.
References arc4_crypt(), arc4_setup(), key, pkcs12_pbe_derive_key_iv(), POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE, and POLARSSL_MD_SHA1.
Referenced by pk_parse_key_pkcs8_encrypted_der().