Extension.fromAsn1 constructor

Extension.fromAsn1(
  1. ASN1Sequence sequence
)

Creates a Extension from an ASN1Sequence.

The ASN.1 definition is:

Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING -- contains the DER encoding of an ASN.1 value -- corresponding to the extension type identified -- by extnID }

Implementation

factory Extension.fromAsn1(ASN1Sequence sequence) {
  var id = toDart(sequence.elements[0]);
  var critical = false;
  var octetIndex = 1;
  if (sequence.elements.length > 2) {
    critical = toDart(sequence.elements[1]);
    octetIndex = 2;
  }

  var value = ExtensionValue.fromAsn1(
    ASN1Parser(sequence.elements[octetIndex].contentBytes()).nextObject(),
    id,
  );
  if (value is UnknownExtension && critical) {
    throw UnimplementedError(
        'Cannot handle critical extension $id (${id.parent} ${id.nodes.last})');
  }

  return Extension(extnId: id, isCritical: critical, extnValue: value);
}