28 lines
820 B
Dart
28 lines
820 B
Dart
|
import 'dart:typed_data';
|
||
|
import 'asn1_identifier.dart';
|
||
|
|
||
|
class ASN1DEREncoder {
|
||
|
|
||
|
static Uint8List encodeSequence({required Uint8List content}) {
|
||
|
var encoded = Uint8List.fromList([]);
|
||
|
encoded.add(ASN1Identifier.constructedTag | ASN1IdentifierTagNumber.SEQUENCE.toValue());
|
||
|
encoded.addAll(contentLength(size: content.length));
|
||
|
encoded.addAll(content);
|
||
|
return Uint8List.fromList(encoded);
|
||
|
}
|
||
|
|
||
|
static Uint8List contentLength({required int size}) {
|
||
|
if (size >= 128) {
|
||
|
var lenBytes = Uint8List(size);
|
||
|
while (lenBytes.first == 0) {
|
||
|
lenBytes.removeAt(0);
|
||
|
}
|
||
|
int len = 0x80 | lenBytes.length;
|
||
|
return Uint8List(len)..addAll(lenBytes);
|
||
|
} else {
|
||
|
return Uint8List(size);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|