2
0
Эх сурвалжийг харах

der flexi decoder: implement decoding of context-specific data

Steffen Jaeckel 11 жил өмнө
parent
commit
6bd6319fb0

+ 20 - 0
src/pk/asn1/der/sequence/der_decode_sequence_flexi.c

@@ -108,6 +108,12 @@ int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc
          /* treat constructed elements like SETs */
          type = 0x20;
       }
+      else if ((type & 0xC0) == 0x80) {
+         /* context-specific, use the 'used' field to store the original identifier */
+         l->used = type;
+         /* context-specific elements are treated as opaque data */
+         type = 0x80;
+      }
 
      /* now switch on type */
       switch (type) {
@@ -359,6 +365,20 @@ int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc
              l->child->parent = l;
 
              break;
+
+         case 0x80: /* Context-specific */
+             l->type = LTC_ASN1_CONTEXT_SPECIFIC;
+
+             if ((l->data = XCALLOC(1, len - data_offset)) == NULL) {
+                err = CRYPT_MEM;
+                goto error;
+             }
+
+             XMEMCPY(l->data, in + data_offset, len - data_offset);
+             l->size = len - data_offset;
+
+             break;
+
          default:
            /* invalid byte ... this is a soft error */
            /* remove link */