fixed accessing fixed size guid

This commit is contained in:
Frank Morgner 2015-10-06 08:21:20 +02:00
parent 137afb10b7
commit 6c61bf6815
1 changed files with 21 additions and 21 deletions

View File

@ -859,13 +859,13 @@ md_pkcs15_encode_cmapfile(PCARD_DATA pCardData, unsigned char **out, size_t *out
struct md_pkcs15_container cont = vs->p15_containers[idx]; struct md_pkcs15_container cont = vs->p15_containers[idx];
int rv; int rv;
if (!cont.id.len && !strlen(cont.guid)) if (!cont.id.len && cont.guid[0] == '\0')
continue; continue;
sc_copy_asn1_entry(c_asn1_md_container_attrs, asn1_md_container_attrs); sc_copy_asn1_entry(c_asn1_md_container_attrs, asn1_md_container_attrs);
sc_copy_asn1_entry(c_asn1_md_container, asn1_md_container); sc_copy_asn1_entry(c_asn1_md_container, asn1_md_container);
guid_len = strlen(cont.guid); guid_len = strnlen(cont.guid, sizeof cont.guid);
flags_len = sizeof(size_t); flags_len = sizeof(size_t);
sc_format_asn1_entry(asn1_md_container_attrs + 0, &cont.index, NULL, 1); sc_format_asn1_entry(asn1_md_container_attrs + 0, &cont.index, NULL, 1);
sc_format_asn1_entry(asn1_md_container_attrs + 1, &cont.id, NULL, 1); sc_format_asn1_entry(asn1_md_container_attrs + 1, &cont.id, NULL, 1);
@ -938,8 +938,8 @@ md_pkcs15_update_containers(PCARD_DATA pCardData, unsigned char *blob, size_t si
cont->flags = pp->bFlags; cont->flags = pp->bFlags;
cont->size_sign = pp->wSigKeySizeBits; cont->size_sign = pp->wSigKeySizeBits;
cont->size_key_exchange = pp->wKeyExchangeKeySizeBits; cont->size_key_exchange = pp->wKeyExchangeKeySizeBits;
logprintf(pCardData, 3, "update P15 containers: touch container (idx:%i,id:%s,guid:%s,flags:%X)\n", logprintf(pCardData, 3, "update P15 containers: touch container (idx:%i,id:%s,guid:%.*s,flags:%X)\n",
idx, sc_pkcs15_print_id(&cont->id),cont->guid,cont->flags); idx, sc_pkcs15_print_id(&cont->id),(int)sizeof cont->guid,cont->guid,cont->flags);
} }
} }
@ -1535,7 +1535,7 @@ md_set_cmapfile(PCARD_DATA pCardData, struct md_file *file)
cont->size_key_exchange = prkey_info->modulus_length; cont->size_key_exchange = prkey_info->modulus_length;
} }
logprintf(pCardData, 7, "Container[%i]'s guid=%s\n", ii, cont->guid); logprintf(pCardData, 7, "Container[%i]'s guid=%.*s\n", ii, (int) sizeof cont->guid, cont->guid);
logprintf(pCardData, 7, "Container[%i]'s key-exchange:%i, sign:%i\n", ii, cont->size_key_exchange, cont->size_sign); logprintf(pCardData, 7, "Container[%i]'s key-exchange:%i, sign:%i\n", ii, cont->size_key_exchange, cont->size_sign);
cont->id = prkey_info->id; cont->id = prkey_info->id;
@ -1916,20 +1916,20 @@ md_pkcs15_generate_key(PCARD_DATA pCardData, DWORD idx, DWORD key_type, DWORD ke
sc_pkcs15init_set_p15card(profile, vs->p15card); sc_pkcs15init_set_p15card(profile, vs->p15card);
cont = &(vs->p15_containers[idx]); cont = &(vs->p15_containers[idx]);
if (strlen(cont->guid)) { if (cont->guid[0] != '\0') {
logprintf(pCardData, 3, "MdGenerateKey(): generate key(idx:%i,guid:%s)\n", idx, cont->guid); logprintf(pCardData, 3, "MdGenerateKey(): generate key(idx:%i,guid:%.*s)\n", idx, (int) sizeof cont->guid, cont->guid);
keygen_args.prkey_args.guid = cont->guid; keygen_args.prkey_args.guid = cont->guid;
keygen_args.prkey_args.guid_len = strlen(cont->guid); keygen_args.prkey_args.guid_len = strnlen(cont->guid, sizeof cont->guid);
} }
if (md_is_guid_as_id(pCardData)) { if (md_is_guid_as_id(pCardData)) {
if (strlen(cont->guid) > sizeof(keygen_args.prkey_args.id.value)) { if (strnlen(cont->guid, sizeof cont->guid) > sizeof(keygen_args.prkey_args.id.value)) {
logprintf(pCardData, 3, "MdGenerateKey(): cannot set ID -- invalid GUID length\n"); logprintf(pCardData, 3, "MdGenerateKey(): cannot set ID -- invalid GUID length\n");
goto done; goto done;
} }
memcpy(keygen_args.prkey_args.id.value, cont->guid, strlen(cont->guid)); memcpy(keygen_args.prkey_args.id.value, cont->guid, strnlen(cont->guid, sizeof cont->guid));
keygen_args.prkey_args.id.len = strlen(cont->guid); keygen_args.prkey_args.id.len = strnlen(cont->guid, sizeof cont->guid);
logprintf(pCardData, 3, "MdGenerateKey(): use ID:%s\n", sc_pkcs15_print_id(&keygen_args.prkey_args.id)); logprintf(pCardData, 3, "MdGenerateKey(): use ID:%s\n", sc_pkcs15_print_id(&keygen_args.prkey_args.id));
} }
@ -1948,8 +1948,8 @@ md_pkcs15_generate_key(PCARD_DATA pCardData, DWORD idx, DWORD key_type, DWORD ke
cont->index = idx; cont->index = idx;
cont->flags = CONTAINER_MAP_VALID_CONTAINER; cont->flags = CONTAINER_MAP_VALID_CONTAINER;
logprintf(pCardData, 3, "MdGenerateKey(): generated key(idx:%i,id:%s,guid:%s)\n", logprintf(pCardData, 3, "MdGenerateKey(): generated key(idx:%i,id:%s,guid:%.*s)\n",
idx, sc_pkcs15_print_id(&cont->id),cont->guid); idx, sc_pkcs15_print_id(&cont->id),(int) sizeof cont->guid, cont->guid);
dwret = SCARD_S_SUCCESS; dwret = SCARD_S_SUCCESS;
done: done:
@ -2049,23 +2049,23 @@ md_pkcs15_store_key(PCARD_DATA pCardData, DWORD idx, DWORD key_type, BYTE *blob,
sc_pkcs15init_set_p15card(profile, vs->p15card); sc_pkcs15init_set_p15card(profile, vs->p15card);
cont = &(vs->p15_containers[idx]); cont = &(vs->p15_containers[idx]);
if (strlen(cont->guid)) { if (cont->guid[0] != '\0') {
logprintf(pCardData, 3, "MdStoreKey(): store key(idx:%i,id:%s,guid:%s)\n", idx, sc_pkcs15_print_id(&cont->id), cont->guid); logprintf(pCardData, 3, "MdStoreKey(): store key(idx:%i,id:%s,guid:%s)\n", idx, sc_pkcs15_print_id(&cont->id), cont->guid);
prkey_args.guid = cont->guid; prkey_args.guid = cont->guid;
prkey_args.guid_len = strlen(cont->guid); prkey_args.guid_len = strnlen(cont->guid, sizeof cont->guid);
} }
if (md_is_guid_as_id(pCardData)) { if (md_is_guid_as_id(pCardData)) {
if (strlen(cont->guid) > sizeof(prkey_args.id.value)) { if (strnlen(cont->guid, sizeof cont->guid) > sizeof(prkey_args.id.value)) {
logprintf(pCardData, 3, "MdStoreKey(): cannot set ID -- invalid GUID length\n"); logprintf(pCardData, 3, "MdStoreKey(): cannot set ID -- invalid GUID length\n");
goto done; goto done;
} }
memcpy(prkey_args.id.value, cont->guid, strlen(cont->guid)); memcpy(prkey_args.id.value, cont->guid, strnlen(cont->guid, sizeof cont->guid));
prkey_args.id.len = strlen(cont->guid); prkey_args.id.len = strnlen(cont->guid, sizeof cont->guid);
memcpy(pubkey_args.id.value, cont->guid, strlen(cont->guid)); memcpy(pubkey_args.id.value, cont->guid, strnlen(cont->guid, sizeof cont->guid));
pubkey_args.id.len = strlen(cont->guid); pubkey_args.id.len = strnlen(cont->guid, sizeof cont->guid);
logprintf(pCardData, 3, "MdStoreKey(): use ID:%s\n", sc_pkcs15_print_id(&prkey_args.id)); logprintf(pCardData, 3, "MdStoreKey(): use ID:%s\n", sc_pkcs15_print_id(&prkey_args.id));
} }
@ -2092,7 +2092,7 @@ md_pkcs15_store_key(PCARD_DATA pCardData, DWORD idx, DWORD key_type, BYTE *blob,
cont->index = idx; cont->index = idx;
cont->flags |= CONTAINER_MAP_VALID_CONTAINER; cont->flags |= CONTAINER_MAP_VALID_CONTAINER;
logprintf(pCardData, 3, "MdStoreKey(): stored key(idx:%i,id:%s,guid:%s)\n", idx, sc_pkcs15_print_id(&cont->id),cont->guid); logprintf(pCardData, 3, "MdStoreKey(): stored key(idx:%i,id:%s,guid:%.*s)\n", idx, sc_pkcs15_print_id(&cont->id),(int) sizeof cont->guid,cont->guid);
dwret = SCARD_S_SUCCESS; dwret = SCARD_S_SUCCESS;
done: done: