From adfa3aaf604d1e70ed3a636eb3eb9a318994c9a0 Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Wed, 11 Jan 2023 14:19:37 +0800 Subject: [PATCH] Add functions for SEQUENCE OF SEQUENCE SIZE (1..n) OF Always check that SEQUENCE OF is not empty. --- include/gmssl/asn1.h | 2 ++ src/asn1.c | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/gmssl/asn1.h b/include/gmssl/asn1.h index 212ec334..1cbec66d 100644 --- a/include/gmssl/asn1.h +++ b/include/gmssl/asn1.h @@ -250,6 +250,8 @@ int asn1_types_get_count(const uint8_t *d, size_t dlen, int tag, size_t *cnt); int asn1_types_get_item_by_index(const uint8_t *d, size_t *dlen, int tag, int index, const uint8_t **item_d, size_t *item_dlen); +int asn1_sequence_of_from_der(const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); + int asn1_sequence_of_int_to_der(const int *nums, size_t nums_cnt, uint8_t **out, size_t *outlen); int asn1_sequence_of_int_from_der(int *nums, size_t *nums_cnt, const uint8_t **in, size_t *inlen); int asn1_sequence_of_int_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *d, size_t dlen); diff --git a/src/asn1.c b/src/asn1.c index 2069a9a8..c35ed2ee 100644 --- a/src/asn1.c +++ b/src/asn1.c @@ -1437,6 +1437,19 @@ int asn1_object_identifier_equ(const uint32_t *a, size_t a_cnt, const uint32_t * return 0; } +int asn1_sequence_of_from_der(const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen) +{ + int ret; + if ((ret = asn1_sequence_from_der(d, dlen, in, inlen)) != 1) { + if (ret < 0) error_print(); + return ret; + } + if (!(*d) || !(*dlen)) { + error_print(); + return -1; + } + return 1; +} int asn1_sequence_of_int_to_der(const int *nums, size_t nums_cnt, uint8_t **out, size_t *outlen) {