mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-05-29 01:21:21 +02:00
Avoid unnecessary memcpy
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -85,11 +85,13 @@ void process_fci(const file_t *pe) {
|
|||||||
}
|
}
|
||||||
memcpy(res_APDU+res_APDU_size, "\x8A\x01\x05", 3); //life-cycle (5 -> activated)
|
memcpy(res_APDU+res_APDU_size, "\x8A\x01\x05", 3); //life-cycle (5 -> activated)
|
||||||
res_APDU_size += 3;
|
res_APDU_size += 3;
|
||||||
uint8_t meta_size = meta_find(pe->fid, res_APDU+res_APDU_size+3, 256);
|
uint8_t *meta_data = NULL;
|
||||||
|
uint8_t meta_size = meta_find(pe->fid, &meta_data);
|
||||||
if (meta_size) {
|
if (meta_size) {
|
||||||
res_APDU[res_APDU_size++] = 0xA5;
|
res_APDU[res_APDU_size++] = 0xA5;
|
||||||
res_APDU[res_APDU_size++] = 0x81;
|
res_APDU[res_APDU_size++] = 0x81;
|
||||||
res_APDU[res_APDU_size++] = meta_size;
|
res_APDU[res_APDU_size++] = meta_size;
|
||||||
|
memcpy(res_APDU+res_APDU_size,meta_data,meta_size);
|
||||||
res_APDU_size += meta_size;
|
res_APDU_size += meta_size;
|
||||||
}
|
}
|
||||||
res_APDU[1] = res_APDU_size-2;
|
res_APDU[1] = res_APDU_size-2;
|
||||||
@@ -299,7 +301,7 @@ file_t *file_new(uint16_t fid) {
|
|||||||
//memset((uint8_t *)f->acl, 0x90, sizeof(f->acl));
|
//memset((uint8_t *)f->acl, 0x90, sizeof(f->acl));
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
int meta_find(uint16_t fid, uint8_t *out, size_t out_len) {
|
int meta_find(uint16_t fid, uint8_t **out) {
|
||||||
file_t *ef = search_by_fid(EF_META, NULL, SPECIFY_EF);
|
file_t *ef = search_by_fid(EF_META, NULL, SPECIFY_EF);
|
||||||
if (!ef)
|
if (!ef)
|
||||||
return CCID_ERR_FILE_NOT_FOUND;
|
return CCID_ERR_FILE_NOT_FOUND;
|
||||||
@@ -310,11 +312,8 @@ int meta_find(uint16_t fid, uint8_t *out, size_t out_len) {
|
|||||||
continue;
|
continue;
|
||||||
uint16_t cfid = (tag_data[0] << 8 | tag_data[1]);
|
uint16_t cfid = (tag_data[0] << 8 | tag_data[1]);
|
||||||
if (cfid == fid) {
|
if (cfid == fid) {
|
||||||
if (out) {
|
if (out)
|
||||||
if (out_len < tag_len-2)
|
*out = tag_data+2;
|
||||||
return CCID_ERR_NO_MEMORY;
|
|
||||||
memcpy(out, tag_data+2, tag_len-2);
|
|
||||||
}
|
|
||||||
return tag_len-2;
|
return tag_len-2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ extern int delete_dynamic_file(file_t *f);
|
|||||||
|
|
||||||
extern bool isUserAuthenticated;
|
extern bool isUserAuthenticated;
|
||||||
|
|
||||||
extern int meta_find(uint16_t, uint8_t *out, size_t out_len);
|
extern int meta_find(uint16_t, uint8_t **out);
|
||||||
extern int meta_delete(uint16_t fid);
|
extern int meta_delete(uint16_t fid);
|
||||||
extern int meta_add(uint16_t fid, const uint8_t *data, uint16_t len);
|
extern int meta_add(uint16_t fid, const uint8_t *data, uint16_t len);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user