52 lines
1.6 KiB
Dart
52 lines
1.6 KiB
Dart
import 'dart:typed_data';
|
|
|
|
import 'package:pointycastle/asn1.dart';
|
|
|
|
///
|
|
///```
|
|
/// CertificationRequest ::= SEQUENCE {
|
|
/// certificationRequestInfo CertificationRequestInfo,
|
|
/// signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
|
|
/// signature BIT STRING
|
|
/// }
|
|
///```
|
|
///
|
|
class ASN1CertificationRequest extends ASN1Object {
|
|
late ASN1Object certificationRequestInfo;
|
|
late ASN1AlgorithmIdentifier signatureAlgorithm;
|
|
late ASN1BitString signature;
|
|
|
|
ASN1CertificationRequest(
|
|
this.certificationRequestInfo,
|
|
this.signatureAlgorithm,
|
|
this.signature,
|
|
);
|
|
|
|
ASN1CertificationRequest.fromSequence(ASN1Sequence seq) {
|
|
if (seq.elements == null || seq.elements!.length != 3) {
|
|
throw ArgumentError('');
|
|
}
|
|
if (seq.elements!.elementAt(0) is! ASN1Sequence) {
|
|
throw ArgumentError('Element at index 0 has to be ASN1Sequence');
|
|
}
|
|
if (seq.elements!.elementAt(1) is! ASN1Sequence) {
|
|
throw ArgumentError('Element at index 1 has to be ASN1Sequence');
|
|
}
|
|
if (seq.elements!.elementAt(2) is! ASN1BitString) {
|
|
throw ArgumentError('Element at index 2 has to be ASN1BitString');
|
|
}
|
|
certificationRequestInfo = seq.elements!.elementAt(0);
|
|
signatureAlgorithm = ASN1AlgorithmIdentifier.fromSequence(
|
|
seq.elements!.elementAt(1) as ASN1Sequence);
|
|
signature = seq.elements!.elementAt(2) as ASN1BitString;
|
|
}
|
|
|
|
@override
|
|
Uint8List encode(
|
|
{ASN1EncodingRule encodingRule = ASN1EncodingRule.ENCODING_DER}) {
|
|
var tmp = ASN1Sequence(
|
|
elements: [certificationRequestInfo, signatureAlgorithm, signature]);
|
|
|
|
return tmp.encode(encodingRule: encodingRule);
|
|
}
|
|
}
|