47 lines
1.2 KiB
Dart
47 lines
1.2 KiB
Dart
import 'dart:typed_data';
|
|
|
|
import 'package:pointycastle/asn1.dart';
|
|
|
|
///
|
|
///```
|
|
/// MacData ::= SEQUENCE {
|
|
/// mac DigestInfo,
|
|
/// macSalt OCTET STRING,
|
|
/// iterations INTEGER DEFAULT 1
|
|
/// }
|
|
///```
|
|
///
|
|
class ASN1MacData extends ASN1Object {
|
|
late ASN1DigestInfo mac;
|
|
late Uint8List macSalt;
|
|
late BigInt iterationCount;
|
|
|
|
ASN1MacData(this.mac, this.macSalt, this.iterationCount);
|
|
|
|
ASN1MacData.fromSequence(ASN1Sequence seq) {
|
|
if (seq.elements!.length != 3) {
|
|
throw ArgumentError('Sequence has not enough elements');
|
|
}
|
|
mac =
|
|
ASN1DigestInfo.fromSequence(seq.elements!.elementAt(0) as ASN1Sequence);
|
|
var o = seq.elements!.elementAt(1) as ASN1OctetString;
|
|
if (o.valueBytes != null) {
|
|
macSalt = o.valueBytes!;
|
|
}
|
|
var i = seq.elements!.elementAt(2) as ASN1Integer;
|
|
if (i.integer != null) {
|
|
iterationCount = i.integer!;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Uint8List encode(
|
|
{ASN1EncodingRule encodingRule = ASN1EncodingRule.ENCODING_DER}) {
|
|
var tmp = ASN1Sequence(elements: [
|
|
mac,
|
|
ASN1OctetString(octets: macSalt),
|
|
ASN1Integer(iterationCount),
|
|
]);
|
|
return tmp.encode(encodingRule: encodingRule);
|
|
}
|
|
}
|