import 'dart:typed_data'; import 'package:pointycastle/asn1.dart'; /// ///``` /// PFX ::= SEQUENCE { /// version INTEGER {v3(3)}(v3,...), /// authSafe ContentInfo, /// macData MacData OPTIONAL /// } ///``` /// class ASN1Pfx extends ASN1Object { late ASN1Integer version; late ASN1ContentInfo authSafe; ASN1MacData? macData; ASN1Pfx(this.version, this.authSafe, {this.macData}); /// /// Creates an instance of [PFX] from the given [sequence]. The sequence must have at least 2 elements. /// ASN1Pfx.fromSequence(ASN1Sequence seq) { if (seq.elements == null || seq.elements!.isEmpty) { throw ArgumentError('Empty sequence'); } if (seq.elements!.length == 1) { throw ArgumentError('Sequence has not enough elements'); } version = seq.elements!.elementAt(0) as ASN1Integer; if (version.integer!.toInt() != 3) { throw ArgumentError('Wrong version for PFX PDU'); } authSafe = ASN1ContentInfo.fromSequence( seq.elements!.elementAt(1) as ASN1Sequence); if (seq.elements!.length == 3) { macData = ASN1MacData.fromSequence(seq.elements!.elementAt(2) as ASN1Sequence); } } @override Uint8List encode( {ASN1EncodingRule encodingRule = ASN1EncodingRule.ENCODING_DER}) { var tmp = ASN1Sequence(elements: [version, authSafe]); if (macData != null) { tmp.add(macData!); } return tmp.encode(encodingRule: encodingRule); } }