#include <ccid.h>
#include <list.h>
#include <emv.h>
#include <ber.h>
#include "emv-internal.h"
Go to the source code of this file.
Data Structures | |
struct | dda_req |
Functions | |
static int | get_required_data (struct _emv *e, struct dda_req *req) |
static RSA * | get_ca_key (unsigned int idx, emv_mod_cb_t mod, emv_exp_cb_t exp, size_t *key_len, void *priv) |
static int | recover (uint8_t *ptr, size_t len, RSA *key) |
static int | check_pk_cert (struct _emv *e, struct dda_req *req) |
static RSA * | make_issuer_pk (struct _emv *e, struct dda_req *req) |
static RSA * | get_issuer_pk (struct _emv *e, struct dda_req *req, RSA *ca_key, size_t key_len) |
static RSA * | make_icc_pk (struct _emv *e, struct dda_req *req) |
static int | check_icc_cert (struct _emv *e, struct dda_req *req) |
static RSA * | get_icc_pk (struct _emv *e, struct dda_req *req, RSA *iss_key, size_t key_len) |
static int | dol_cb (uint16_t tag, uint8_t *ptr, size_t len, void *priv) |
static int | verify_dynamic_sig (emv_t e, size_t icc_pk_len, const uint8_t *ddol, size_t ddol_len) |
int | emv_authenticate_dynamic (emv_t e, emv_mod_cb_t mod, emv_exp_cb_t exp, void *priv) |
int | emv_dda_ok (emv_t e) |
Definition at line 321 of file emv_dda.c.
References _emsa_pss_decode(), _emv_error(), _emv_sys_error(), _emv_data::d_data, _emv_data::d_len, _emv_db::db_numsda, _emv_db::db_sda, _emv::e_aip, _emv::e_db, _emv::e_sda_ok, EMV_ERR_CERTIFICATE, dda_req::icc_cert, dda_req::icc_cert_len, dda_req::icc_exp, dda_req::icc_exp_len, dda_req::icc_r, dda_req::icc_r_len, and dda_req::pan.
Referenced by get_icc_pk().
Definition at line 172 of file emv_dda.c.
References _emsa_pss_decode(), _emv_error(), _emv_sys_error(), EMV_ERR_CERTIFICATE, dda_req::pk_cert, dda_req::pk_cert_len, dda_req::pk_exp, dda_req::pk_exp_len, dda_req::pk_r, and dda_req::pk_r_len.
Referenced by get_issuer_pk().
static int dol_cb | ( | uint16_t | tag, | |
uint8_t * | ptr, | |||
size_t | len, | |||
void * | priv | |||
) | [static] |
Definition at line 412 of file emv_dda.c.
References EMV_TAG_UNPREDICTABLE_NUMBER.
int emv_authenticate_dynamic | ( | emv_t | e, | |
emv_mod_cb_t | mod, | |||
emv_exp_cb_t | exp, | |||
void * | priv | |||
) |
Definition at line 497 of file emv_dda.c.
References _emv_error(), dda_req::ca_pk_idx, dda_req::ddol, dda_req::ddol_len, _emv::e_aip, _emv::e_ca_pk, _emv::e_dda_ok, _emv::e_icc_pk, _emv::e_iss_pk, EMV_AIP_DDA, EMV_ERR_DATA_ELEMENT_NOT_FOUND, EMV_ERR_FUNC_NOT_SUPPORTED, EMV_ERR_KEY_NOT_FOUND, get_ca_key(), get_icc_pk(), get_issuer_pk(), get_required_data(), dda_req::icc_mod_len, and verify_dynamic_sig().
Referenced by cp_dda(), and do_emv_stuff().
int emv_dda_ok | ( | emv_t | e | ) |
Definition at line 540 of file emv_dda.c.
References _emv::e_dda_ok.
static RSA* get_ca_key | ( | unsigned int | idx, | |
emv_mod_cb_t | mod, | |||
emv_exp_cb_t | exp, | |||
size_t * | key_len, | |||
void * | priv | |||
) | [static] |
Definition at line 114 of file emv_dda.c.
References exp_len, and mod_len.
Referenced by emv_authenticate_dynamic().
static RSA* get_icc_pk | ( | struct _emv * | e, | |
struct dda_req * | req, | |||
RSA * | iss_key, | |||
size_t | key_len | |||
) | [static] |
Definition at line 390 of file emv_dda.c.
References _emv_error(), check_icc_cert(), EMV_ERR_KEY_SIZE_MISMATCH, EMV_ERR_RSA_RECOVERY, dda_req::icc_cert, dda_req::icc_cert_len, make_icc_pk(), and recover().
Referenced by emv_authenticate_dynamic().
static RSA* get_issuer_pk | ( | struct _emv * | e, | |
struct dda_req * | req, | |||
RSA * | ca_key, | |||
size_t | key_len | |||
) | [static] |
Definition at line 258 of file emv_dda.c.
References _emv_error(), check_pk_cert(), EMV_ERR_KEY_SIZE_MISMATCH, EMV_ERR_RSA_RECOVERY, make_issuer_pk(), dda_req::pk_cert, dda_req::pk_cert_len, and recover().
Referenced by emv_authenticate_dynamic().
Definition at line 35 of file emv_dda.c.
References _emv_retrieve_data(), dda_req::ca_pk_idx, _emv_data::d_data, _emv_data::d_len, dda_req::ddol, dda_req::ddol_len, emv_data_int(), EMV_TAG_CA_PK_INDEX, EMV_TAG_DDOL, EMV_TAG_ICC_PK_CERT, EMV_TAG_ICC_PK_EXP, EMV_TAG_ICC_PK_R, EMV_TAG_ISS_PK_CERT, EMV_TAG_ISS_PK_EXP, EMV_TAG_ISS_PK_R, EMV_TAG_PAN, dda_req::icc_cert, dda_req::icc_cert_len, dda_req::icc_exp, dda_req::icc_exp_len, dda_req::icc_r, dda_req::icc_r_len, dda_req::pan, dda_req::pk_cert, dda_req::pk_cert_len, dda_req::pk_exp, dda_req::pk_exp_len, dda_req::pk_r, and dda_req::pk_r_len.
Referenced by emv_authenticate_dynamic().
Definition at line 281 of file emv_dda.c.
References _emv_sys_error(), dda_req::icc_cert, dda_req::icc_cert_len, dda_req::icc_exp, dda_req::icc_exp_len, dda_req::icc_mod_len, dda_req::icc_r, and dda_req::icc_r_len.
Referenced by get_icc_pk().
Definition at line 219 of file emv_dda.c.
References _emv_sys_error(), dda_req::pk_cert, dda_req::pk_cert_len, dda_req::pk_exp, dda_req::pk_exp_len, dda_req::pk_r, and dda_req::pk_r_len.
Referenced by get_issuer_pk().
static int recover | ( | uint8_t * | ptr, | |
size_t | len, | |||
RSA * | key | |||
) | [static] |
Definition at line 151 of file emv_dda.c.
Referenced by get_icc_pk(), get_issuer_pk(), and verify_dynamic_sig().
static int verify_dynamic_sig | ( | emv_t | e, | |
size_t | icc_pk_len, | |||
const uint8_t * | ddol, | |||
size_t | ddol_len | |||
) | [static] |
Definition at line 432 of file emv_dda.c.
References _emv_construct_dol(), _emv_error(), _emv_int_authenticate(), _emv::e_icc_pk, _emv::e_xfr, EMV_ERR_BER_DECODE, EMV_ERR_CERTIFICATE, recover(), and xfr_rx_data().
Referenced by emv_authenticate_dynamic().