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

66 lines
1.8 KiB
Dart

import 'dart:typed_data';
import 'package:pointycastle/asn1.dart';
///
///```
/// CertificationRequestInfo ::= SEQUENCE {
/// version INTEGER { v1(0) } (v1,...),
/// subject Name,
/// subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
/// attributes [0] Attributes{{ CRIAttributes }}
/// }
///```
///
class ASN1CertificationRequestInfo extends ASN1Object {
/// The version. The default should be 0
late ASN1Integer version;
/// The distinguished name of the certificate subject
late ASN1Name subject;
/// Information about the public key being certified.
late ASN1SubjectPublicKeyInfo subjectPKInfo;
/// Collection of attributes providing additional information about the subject of the certificate.
ASN1Object? attributes;
ASN1CertificationRequestInfo(
this.version,
this.subject,
this.subjectPKInfo, {
this.attributes,
});
ASN1CertificationRequestInfo.fromSequence(ASN1Sequence seq) {
if (seq.elements == null || seq.elements!.length != 3) {
throw ArgumentError('');
}
if (seq.elements!.elementAt(0) is! ASN1Integer) {
throw ArgumentError('Element at index 0 has to be ASN1Integer');
}
version = seq.elements!.elementAt(0) as ASN1Integer;
}
@override
Uint8List encode(
{ASN1EncodingRule encodingRule = ASN1EncodingRule.ENCODING_DER}) {
var tmp = ASN1Sequence(
elements: [version, subject, subjectPKInfo, _getWrapper()]);
return tmp.encode(encodingRule: encodingRule);
}
ASN1Object _getWrapper() {
var wrapper = ASN1Object(tag: 0xA0);
if (attributes != null) {
var contentBytes = attributes!.encode();
wrapper.valueBytes = contentBytes;
wrapper.valueByteLength = contentBytes.length;
} else {
wrapper.valueBytes = Uint8List(0);
wrapper.valueByteLength = 0;
}
return wrapper;
}
}