parse static method
Implementation
static UPdfType1? parse(Uint8List bytes) {
try {
Uint8List data = bytes;
if (data.length > 6 && data[0] == 0x80) {
final List<int> joined = <int>[];
int index = 0;
while (index + 6 <= data.length && data[index] == 0x80) {
final int type = data[index + 1];
if (type == 3) break;
final int length = data[index + 2] | (data[index + 3] << 8) | (data[index + 4] << 16) | (data[index + 5] << 24);
final int start = index + 6;
final int end = start + length > data.length ? data.length : start + length;
joined.addAll(Uint8List.sublistView(data, start, end));
index = end;
}
data = Uint8List.fromList(joined);
}
final int eexecIndex = UDocCursor(data).indexOf(const <int>[0x65, 0x65, 0x78, 0x65, 0x63]);
final String clearText = String.fromCharCodes(Uint8List.sublistView(data, 0, eexecIndex < 0 ? (data.length < 4096 ? data.length : 4096) : eexecIndex));
if (eexecIndex < 0) return null;
int start = eexecIndex + 5;
while (start < data.length && (data[start] == 0x0D || data[start] == 0x0A || data[start] == 0x20 || data[start] == 0x09)) {
start++;
}
Uint8List encrypted = Uint8List.sublistView(data, start);
if (_looksHex(encrypted)) encrypted = UPdfCodecs.asciiHex(encrypted);
final Uint8List decrypted = _decrypt(encrypted, 55665, 4);
return _readPrivate(decrypted, clearText);
} on Object {
return null;
}
}