parse static method

UPdfType1? parse(
  1. Uint8List bytes
)

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;
  }
}