@@ -27,6 +27,22 @@ static int s_new_element(ltc_asn1_list **l)
2727 }
2828 return CRYPT_OK ;
2929}
30+ #if defined(LTC_TEST_DBG )
31+ void s_print_err (const char * errstr , ltc_asn1_list * l , int err , unsigned long identifier , unsigned long data_offset , unsigned long len )
32+ {
33+ #if LTC_TEST_DBG <= 1
34+ if (err == CRYPT_OK )
35+ return ;
36+ #endif
37+ if (l -> type == LTC_ASN1_CUSTOM_TYPE ) {
38+ fprintf (stderr , "%s %02lx: hl=%4lu l=%4lu - %s[%s %llu] (%s)\n" , errstr , identifier , data_offset , len , der_asn1_class_to_string_map [l -> klass ], der_asn1_pc_to_string_map [l -> pc ], l -> tag , error_to_string (err ));
39+ } else {
40+ fprintf (stderr , "%s %02lx: hl=%4lu l=%4lu - %s (%s)\n" , errstr , identifier , data_offset , len , der_asn1_tag_to_string_map [l -> tag ], error_to_string (err ));
41+ }
42+ }
43+ #else
44+ #define s_print_err (errstr , l , err , identifier , data_offset , len ) LTC_UNUSED_PARAM(data_offset)
45+ #endif
3046
3147/**
3248 ASN.1 DER Flexi(ble) decoder will decode arbitrary DER packets and create a linked list of the decoded elements.
@@ -39,7 +55,8 @@ static int s_new_element(ltc_asn1_list **l)
3955static int s_der_decode_sequence_flexi (const unsigned char * in , unsigned long * inlen , ltc_asn1_list * * out , unsigned long depth )
4056{
4157 ltc_asn1_list * l ;
42- unsigned long err , identifier , len , totlen , data_offset , id_len , len_len ;
58+ int err ;
59+ unsigned long identifier , len , totlen , data_offset , id_len , len_len ;
4360 void * realloc_tmp ;
4461
4562 LTC_ARGCHK (in != NULL );
@@ -73,30 +90,19 @@ static int s_der_decode_sequence_flexi(const unsigned char *in, unsigned long *i
7390 if (l -> type != LTC_ASN1_EOL ) {
7491 /* fetch length */
7592 len_len = * inlen - id_len ;
76- #if defined( LTC_TEST_DBG )
93+ /* init with dummy values for error cases */
7794 data_offset = 666 ;
7895 len = 0 ;
79- #endif
8096 if ((err = der_decode_asn1_length (& in [id_len ], & len_len , & len )) != CRYPT_OK ) {
81- #if defined(LTC_TEST_DBG )
82- fprintf (stderr , "E1 %02lx: hl=%4lu l=%4lu - %s (%s)\n" , identifier , data_offset , len , der_asn1_tag_to_string_map [l -> tag ], error_to_string (err ));
83- #endif
97+ s_print_err ("E1" , l , err , identifier , data_offset , len );
8498 goto error ;
8599 } else if (len > (* inlen - id_len - len_len )) {
86100 err = CRYPT_INVALID_PACKET ;
87- #if defined(LTC_TEST_DBG )
88- fprintf (stderr , "E2 %02lx: hl=%4lu l=%4lu - %s (%s)\n" , identifier , data_offset , len , der_asn1_tag_to_string_map [l -> tag ], error_to_string (err ));
89- #endif
101+ s_print_err ("E2" , l , err , identifier , data_offset , len );
90102 goto error ;
91103 }
92104 data_offset = id_len + len_len ;
93- #if defined(LTC_TEST_DBG ) && LTC_TEST_DBG > 1
94- if (l -> type == LTC_ASN1_CUSTOM_TYPE && l -> klass == LTC_ASN1_CL_CONTEXT_SPECIFIC ) {
95- fprintf (stderr , "OK %02lx: hl=%4lu l=%4lu - Context Specific[%s %llu]\n" , identifier , data_offset , len , der_asn1_pc_to_string_map [l -> pc ], l -> tag );
96- } else {
97- fprintf (stderr , "OK %02lx: hl=%4lu l=%4lu - %s\n" , identifier , data_offset , len , der_asn1_tag_to_string_map [l -> tag ]);
98- }
99- #endif
105+ s_print_err ("OK" , l , err , identifier , data_offset , len );
100106 len += data_offset ;
101107
102108 if (l -> type == LTC_ASN1_CUSTOM_TYPE ) {
0 commit comments