twonly-app-dependencies/pointycastle/test/asn1/asn1_dump_test.dart
2025-12-07 16:10:41 +01:00

153 lines
2.7 KiB
Dart

import 'dart:convert';
import 'dart:typed_data';
import 'package:pointycastle/asn1.dart';
import 'package:test/test.dart';
void main() {
///
/// Helper method
///
List<String> chunk(String s, int chunkSize) {
var chunked = <String>[];
for (var i = 0; i < s.length; i += chunkSize) {
var end = (i + chunkSize < s.length) ? i + chunkSize : s.length;
chunked.add(s.substring(i, end));
}
return chunked;
}
var dump1 = '''SEQUENCE (4 elem)
SEQUENCE (3 elem)
OBJECT IDENTIFIER 2.5.29.15 keyUsage
BOOLEAN true
OCTET STRING (4 byte) 03020186
SEQUENCE (3 elem)
OBJECT IDENTIFIER 2.5.29.19 basicConstraints
BOOLEAN true
OCTET STRING (5 byte) 30030101FF
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.29.14 subjectKeyIdentifier
OCTET STRING (22 byte) 041403DE503556D14CBB66F0A3E21B1BC397B23DD155
SEQUENCE (2 elem)
OBJECT IDENTIFIER 2.5.29.35 authorityKeyIdentifier
OCTET STRING (24 byte) 3016801403DE503556D14CBB66F0A3E21B1BC397B23DD155''';
test('Test asn1 dump', () {
var outer = ASN1Sequence.fromBytes(Uint8List.fromList([
0x30,
0x61,
0x30,
0x0E,
0x06,
0x03,
0x55,
0x1D,
0x0F,
0x01,
0x01,
0xFF,
0x04,
0x04,
0x03,
0x02,
0x01,
0x86,
0x30,
0x0F,
0x06,
0x03,
0x55,
0x1D,
0x13,
0x01,
0x01,
0xFF,
0x04,
0x05,
0x30,
0x03,
0x01,
0x01,
0xFF,
0x30,
0x1D,
0x06,
0x03,
0x55,
0x1D,
0x0E,
0x04,
0x16,
0x04,
0x14,
0x03,
0xDE,
0x50,
0x35,
0x56,
0xD1,
0x4C,
0xBB,
0x66,
0xF0,
0xA3,
0xE2,
0x1B,
0x1B,
0xC3,
0x97,
0xB2,
0x3D,
0xD1,
0x55,
0x30,
0x1F,
0x06,
0x03,
0x55,
0x1D,
0x23,
0x04,
0x18,
0x30,
0x16,
0x80,
0x14,
0x03,
0xDE,
0x50,
0x35,
0x56,
0xD1,
0x4C,
0xBB,
0x66,
0xF0,
0xA3,
0xE2,
0x1B,
0x1B,
0xC3,
0x97,
0xB2,
0x3D,
0xD1,
0x55
]));
var chunks = chunk(base64.encode(outer.encode()), 64);
var pem = chunks.join('\r\n');
var lines = LineSplitter.split(pem)
.map((line) => line.trim())
.where((line) => line.isNotEmpty)
.toList();
var base64String = lines.join('');
var bytes = Uint8List.fromList(base64Decode(base64String));
var asn1Parser = ASN1Parser(bytes);
var topLevelSeq = asn1Parser.nextObject();
var dump = topLevelSeq.dump();
expect(dump, dump1);
});
}