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

65 lines
1.6 KiB
Dart

import 'dart:typed_data';
import 'package:pointycastle/asn1.dart';
///
///
/// ```
/// ContentInfo ::= SEQUENCE {
/// contentType ContentType,
/// content
/// [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
/// ```
///
class ASN1ContentInfo extends ASN1Object {
late ASN1ObjectIdentifier contentType;
ASN1Object? content;
ASN1ContentInfo(this.contentType, {this.content});
ASN1ContentInfo.fromSequence(ASN1Sequence seq) {
contentType = seq.elements!.elementAt(0) as ASN1ObjectIdentifier;
if (seq.elements!.length == 2) {
var el = seq.elements!.elementAt(1);
if (el.tag == 0xA0) {
content = ASN1Parser(el.valueBytes).nextObject();
} else {
content = el;
}
}
}
ASN1ContentInfo.forData(this.content) {
contentType =
ASN1ObjectIdentifier.fromIdentifierString('1.2.840.113549.1.7.1');
}
ASN1ContentInfo.forEncryptedData(this.content) {
contentType =
ASN1ObjectIdentifier.fromIdentifierString('1.2.840.113549.1.7.6');
}
@override
Uint8List encode(
{ASN1EncodingRule encodingRule = ASN1EncodingRule.ENCODING_DER}) {
var wrapper = _getWrapper();
var tmp = ASN1Sequence(elements: [
contentType,
wrapper,
]);
return tmp.encode(encodingRule: encodingRule);
}
ASN1Object _getWrapper() {
var wrapper = ASN1Object(tag: 0xA0);
if (content != null) {
var contentBytes = content!.encode();
wrapper.valueBytes = contentBytes;
wrapper.valueByteLength = contentBytes.length;
} else {
wrapper.valueBytes = Uint8List(0);
wrapper.valueByteLength = 0;
}
return wrapper;
}
}