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

58 lines
1.8 KiB
Dart

import 'dart:typed_data';
import 'package:pointycastle/asn1.dart';
///
///```
/// PKCS12Attribute ::= SEQUENCE {
/// attrId ATTRIBUTE.&id ({PKCS12AttrSet}),
/// attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})
/// }
///```
///
class ASN1Pkcs12Attribute extends ASN1Object {
///
/// Defines the type of the attribute.
///
/// Possible objectIdentifier :
/// * 1.2.840.113549.1.9.20 (friendlyName)
/// * 1.2.840.113549.1.9.21 (localKeyID)
///
/// See https://www.rfc-editor.org/rfc/rfc2985#section-5 for all possible attribute types.
///
late ASN1ObjectIdentifier attrId;
///
/// ASN1Set containing the values, depending on the [attrId].
///
late ASN1Set attrValues;
ASN1Pkcs12Attribute(this.attrId, this.attrValues);
///
/// Creates an instance of Attribute for friendlyName with the given [name].
///
ASN1Pkcs12Attribute.friendlyName(String name) {
attrId = ASN1ObjectIdentifier.fromIdentifierString('1.2.840.113549.1.9.20');
var bmpString = ASN1BMPString(stringValue: name);
attrValues = ASN1Set(elements: [bmpString]);
}
///
/// Creates an instance of Attribute for localKeyID with the given [octets].
///
ASN1Pkcs12Attribute.localKeyID(Uint8List octets) {
//attrId = ASN1ObjectIdentifier.fromIdentifierString('1.2.840.113549.1.9.21');
attrId = ASN1ObjectIdentifier.fromBytes(Uint8List.fromList(
[0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x15]));
var octetString = ASN1OctetString(octets: octets);
attrValues = ASN1Set(elements: [octetString]);
}
@override
Uint8List encode(
{ASN1EncodingRule encodingRule = ASN1EncodingRule.ENCODING_DER}) {
var tmp = ASN1Sequence(elements: [attrId, attrValues]);
return tmp.encode(encodingRule: encodingRule);
}
}