A Dart native pkpass parsing library.
Find a file
The one with the braid 78f88305ec chore: add high level classes
Signed-off-by: The one with the braid <the-one@with-the-braid.cf>
2023-08-27 17:47:11 +02:00
.idea chore: add high level classes 2023-08-27 17:47:11 +02:00
example chore: add high level classes 2023-08-27 17:47:11 +02:00
lib chore: add high level classes 2023-08-27 17:47:11 +02:00
test chore: add high level classes 2023-08-27 17:47:11 +02:00
.gitignore chore: initial commit 2023-08-26 23:05:51 +02:00
analysis_options.yaml chore: initial commit 2023-08-26 23:05:51 +02:00
CHANGELOG.md chore: initial commit 2023-08-26 23:05:51 +02:00
LICENSE chore: initial commit 2023-08-26 23:05:51 +02:00
pkpass.iml chore: initial commit 2023-08-26 23:05:51 +02:00
pubspec.yaml chore: add high level classes 2023-08-27 17:47:11 +02:00
README.md chore: add high level classes 2023-08-27 17:47:11 +02:00

pkpass

A Dart native pkpass parsing library

Features

  • no platform specific dependencies - pure Dart
  • parse any .pkpass file as blob
  • checksum verification
  • extract metadata
  • high level lookup for assets by locale and scale, with proper fallbacks
  • high level barcode API
  • No dependency on dart:io or dart:ui runs everywhere, from CLI to Flutter

Not supported (yet)

Some parts of the PkPass specification are either not yet implemented, or not planned, such as:

  • signature: The detached PKCS #7 signature using Apple certificates of the manifest. Note: Checksums are checked. - Not planned, feel free to contribute.
  • nfc: Card payment information for Apple Pay. - Not planned, feel free to contribute.
  • webService: Information used to update passes using the web service. - Planned, feel free to contribute.

Dependencies and compatibility

Any package should keep its dependencies as minimal as possible. Sometimes, there are specifications making this difficult. The PkPass spec unfortunately is a very complex one, requiring support of many standards and formats.

The following dependencies are used to correctly parse the PkPass file into a relevant Dart representation.

  • pub:archive: The PkPass file itself is a ZIP archive, used to parse the raw bytes.
  • pub:barcode: Used to provide high-level access to barcode generation with the proper encoding supported.
  • pub:crypto: Used for SHA1 signature verification as defined in the PkPass spec.
  • pub:intl: Used for localization lookup of localizable resources like Strings or assets.

Getting started

import 'dart:io';

import 'package:intl/locale.dart';
import 'package:pkpass/pkpass.dart';

Future<int> main(List<String> args) async {
  print('Using first argument or stdin file name: ');
  final path = args.singleOrNull ?? stdin.readLineSync();
  if (path == null || path.isEmpty) {
    print('Please enter a file name or provide it as single argument.');
    return 1;
  }

  final file = File(path);
  final contents = await file.readAsBytes();

  final pass = await PassFile.parse(contents);

  final logo = pass.getLogo(
    scale: 2,
    locale: Locale.fromSubtags(languageCode: 'fr'),
  );

  print('Logo image blob length: ${logo?.length}');

  return 0;
}

Additional information

License : EUPL-1.2