sc-hsm: Fixed problem deleting CA certificates

sc-hsm: Fixed public key format returned when generating ECC keys
This commit is contained in:
Andreas Schwier 2013-02-15 15:02:28 +01:00
parent 20824e2124
commit b34d916e60
2 changed files with 12 additions and 9 deletions

View File

@ -661,7 +661,9 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
r = sc_pkcs15emu_sc_hsm_add_cd(p15card, filelist[i + 1]); r = sc_pkcs15emu_sc_hsm_add_cd(p15card, filelist[i + 1]);
break; break;
} }
LOG_TEST_RET(card->ctx, r, "Error adding elements to framework"); if (r != SC_SUCCESS) {
sc_log(card->ctx, "Error %d adding elements to framework", r);
}
} }
LOG_FUNC_RETURN(card->ctx, SC_SUCCESS); LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);

View File

@ -401,11 +401,12 @@ static int sc_hsm_decode_gakp_ec(struct sc_pkcs15_card *p15card,
pubkey->alg_id->algorithm = SC_ALGORITHM_EC; pubkey->alg_id->algorithm = SC_ALGORITHM_EC;
pubkey->alg_id->params = ecp; pubkey->alg_id->params = ecp;
sc_copy_asn1_entry(c_asn1_ec_pointQ, asn1_ec_pointQ); pubkey->u.ec.ecpointQ.value = malloc(cvc->publicPointlen);
sc_format_asn1_entry(asn1_ec_pointQ + 0, cvc->publicPoint, &cvc->publicPointlen, 1); if (!pubkey->u.ec.ecpointQ.value) {
LOG_FUNC_RETURN(p15card->card->ctx, SC_ERROR_OUT_OF_MEMORY);
r = sc_asn1_encode(p15card->card->ctx, asn1_ec_pointQ, &pubkey->u.ec.ecpointQ.value, &pubkey->u.ec.ecpointQ.len); }
LOG_TEST_RET(p15card->card->ctx, r, "ASN.1 encoding failed"); memcpy(pubkey->u.ec.ecpointQ.value, cvc->publicPoint, cvc->publicPointlen);
pubkey->u.ec.ecpointQ.len = cvc->publicPointlen;
LOG_FUNC_RETURN(p15card->card->ctx, SC_SUCCESS); LOG_FUNC_RETURN(p15card->card->ctx, SC_SUCCESS);
} }
@ -698,7 +699,7 @@ static int sc_hsm_emu_update_dcod(struct sc_profile *profile, struct sc_pkcs15_c
r = sc_pkcs15_encode_dodf_entry(p15card->card->ctx, object, &buf, &buflen); r = sc_pkcs15_encode_dodf_entry(p15card->card->ctx, object, &buf, &buflen);
LOG_TEST_RET(p15card->card->ctx, r, "Error encoding DCOD entry"); LOG_TEST_RET(p15card->card->ctx, r, "Error encoding DCOD entry");
r = sc_hsm_update_ef(p15card, DCOD_PREFIX, data_info->path.value[1], 0, buf, buflen); r = sc_hsm_update_ef(p15card, DCOD_PREFIX, data_info->path.value[data_info->path.len - 1], 0, buf, buflen);
free(buf); free(buf);
return r; return r;
} }
@ -723,7 +724,7 @@ static int sc_hsm_emu_update_cd(struct sc_profile *profile, struct sc_pkcs15_car
r = sc_pkcs15_encode_cdf_entry(p15card->card->ctx, object, &buf, &buflen); r = sc_pkcs15_encode_cdf_entry(p15card->card->ctx, object, &buf, &buflen);
LOG_TEST_RET(p15card->card->ctx, r, "Error encoding CD entry"); LOG_TEST_RET(p15card->card->ctx, r, "Error encoding CD entry");
r = sc_hsm_update_ef(p15card, CD_PREFIX, cert_info->path.value[1], 0, buf, buflen); r = sc_hsm_update_ef(p15card, CD_PREFIX, cert_info->path.value[cert_info->path.len - 1], 0, buf, buflen);
free(buf); free(buf);
return r; return r;
} }
@ -745,7 +746,7 @@ static int sc_hsm_emu_delete_cd(struct sc_profile *profile, struct sc_pkcs15_car
return SC_SUCCESS; return SC_SUCCESS;
} }
return sc_hsm_delete_ef(p15card, CD_PREFIX, ((struct sc_pkcs15_data_info *)object->data)->path.value[1]); return sc_hsm_delete_ef(p15card, CD_PREFIX, cert_info->path.value[cert_info->path.len - 1]);
} }