pkcs15init: allocate EC parameters

This commit is contained in:
Viktor Tarasov 2015-03-01 13:38:50 +01:00
parent 1123768ac3
commit 31124ac4f9
3 changed files with 40 additions and 2 deletions

View File

@ -1114,6 +1114,31 @@ void sc_print_cache(struct sc_card *card) {
sc_print_path(&card->cache.current_df->path));
}
int sc_copy_ec_params(struct sc_ec_parameters *dst, struct sc_ec_parameters *src)
{
if (!dst || !src)
return SC_ERROR_INVALID_ARGUMENTS;
memset(dst, 0, sizeof(*dst));
if (src->named_curve) {
dst->named_curve = strdup(src->named_curve);
if (!dst->named_curve)
return SC_ERROR_OUT_OF_MEMORY;
}
dst->id = src->id;
if (src->der.value && src->der.len) {
dst->der.value = malloc(src->der.len);
if (!dst->der.value)
return SC_ERROR_OUT_OF_MEMORY;
memcpy(dst->der.value, src->der.value, src->der.len);
dst->der.len = src->der.len;
}
src->type = dst->type;
src->field_length = dst->field_length;
return SC_SUCCESS;
}
scconf_block *
sc_match_atr_block(sc_context_t *ctx, struct sc_card_driver *driver, struct sc_atr *atr)
{

View File

@ -1315,6 +1315,15 @@ unsigned sc_crc32(unsigned char *value, size_t len);
*/
void sc_remote_data_init(struct sc_remote_data *rdata);
/**
* Copy and allocate if needed EC parameters data
* @dst destination
* @src source
*/
int sc_copy_ec_params(struct sc_ec_parameters *, struct sc_ec_parameters *);
struct sc_card_error {
unsigned int SWs;
int errorno;

View File

@ -1314,10 +1314,14 @@ sc_pkcs15init_generate_key(struct sc_pkcs15_card *p15card, struct sc_profile *pr
pubkey_args.usage = keygen_args->prkey_args.usage;
pubkey_args.x509_usage = keygen_args->prkey_args.x509_usage;
if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_GOSTR3410)
if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_GOSTR3410) {
pubkey_args.params.gost = keygen_args->prkey_args.params.gost;
else if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_EC)
}
else if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_EC) {
pubkey_args.key.u.ec.params = keygen_args->prkey_args.key.u.ec.params;
r = sc_copy_ec_params(&pubkey_args.key.u.ec.params, &keygen_args->prkey_args.key.u.ec.params);
LOG_TEST_RET(ctx, r, "Cannot allocate EC parameters");
}
/* Generate the private key on card */
r = profile->ops->create_key(profile, p15card, object);