From fa4ecf658f84b63d3db264faeaac1a9457358a87 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Tue, 31 May 2022 18:51:43 +0200 Subject: [PATCH] Implementing own functions for cvc manipulation. Signed-off-by: Pol Henarejos --- src/ccid/ccid2040.c | 7 +++++++ src/ccid/ccid2040.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/ccid/ccid2040.c b/src/ccid/ccid2040.c index 2d81d10..45d5e44 100644 --- a/src/ccid/ccid2040.c +++ b/src/ccid/ccid2040.c @@ -529,6 +529,13 @@ void led_off_all() { #endif } +size_t asn1_len_tag(uint16_t tag, size_t len) { + size_t ret = 1+format_tlv_len(len, NULL)+len; + if (tag > 0x00ff) + return ret+1; + return ret; +} + int format_tlv_len(size_t len, uint8_t *out) { if (len < 128) { if (out) diff --git a/src/ccid/ccid2040.h b/src/ccid/ccid2040.h index 6a5efd2..4fb3509 100644 --- a/src/ccid/ccid2040.h +++ b/src/ccid/ccid2040.h @@ -247,5 +247,6 @@ extern void led_set_blink(uint32_t mode); extern int walk_tlv(const uint8_t *cdata, size_t cdata_len, uint8_t **p, uint16_t *tag, size_t *tag_len, uint8_t **data); extern int format_tlv_len(size_t len, uint8_t *out); extern bool asn1_find_tag(const uint8_t *data, size_t data_len, uint16_t itag, size_t *tag_len, uint8_t **tag_data); +extern size_t asn1_len_tag(uint16_t tag, size_t len); #endif \ No newline at end of file