52 lines
1.4 KiB
Dart
52 lines
1.4 KiB
Dart
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);
|
|
}
|
|
}
|