twonly-app-dependencies/pointycastle/lib/asn1/pkcs/pkcs10/asn1_certification_request.dart
2025-12-07 16:10:41 +01:00

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);
}
}