X509Name.fromAsn1 constructor

X509Name.fromAsn1(
  1. ASN1Sequence seq
)

Implementation

factory X509Name.fromAsn1(ASN1Sequence seq) {
  final attrs = <X509NameAttribute>[];
  for (final rdn in seq.elements) {
    final rdnSeqs = <ASN1Sequence>[];
    if (rdn is ASN1Set) {
      for (final el in rdn.elements) {
        if (el is ASN1Sequence) rdnSeqs.add(el);
      }
    } else if (rdn is ASN1Sequence) {
      rdnSeqs.add(rdn);
    }

    for (final attrSeq in rdnSeqs) {
      if (attrSeq.elements.length < 2) continue;
      final oidObj = attrSeq.elements[0] as ASN1ObjectIdentifier;
      final valueObj = attrSeq.elements[1];
      final oid = oidObj.identifier ?? '';
      final shortName = _oidShortName(oid);
      final value = _asn1ValueToString(valueObj);
      attrs.add(
        X509NameAttribute(
          oid: oid,
          shortName: shortName,
          value: value,
        ),
      );
    }
  }
  return X509Name(attrs);
}