blob: 37108267e83d6c2c51053e54232075d5784289d8 [file] [log] [blame]
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);
}
}