The German Federal Office for Information Security (BSI) has published the technical guideline BSI TR-03137-1 for securing sovereign paper documents. This guideline covers the protection of seven different sovereign documents, which are referred to as profiles. The specific profiles are: Visa Profile, Arrical Attestation Document Profile, Social Insurance Card Profile, Residence Permit Profile, Supplementary Sheet of the Residence Permit Profile, Address Sticker Profile for German Identity Card, address sticker for passport, Place of Residence Sticker Profile for German Passport. In the implementation process, but independent of BSI TR-03137-1, a further profile, the test profile, was designed, which contains a passport photo in addition to the printed textual data. This is intended to better protect the paper document against forgery. The implementation can be used to evaluate the profiles in combination with various barcodes.
The JABPro core library, encoder, decoder, parser and signer are written in C.
Follow the following steps to build the core library and applications.
Step 1: Build the ABPro core library by running the make command in './jabpro'
Step 2: Build the encoder, signer, decoder and parser by running make in their respected directory (./jproEncoder, ./jproSigner, ./jproDecoder, ./Parser)
The build library can be found in jabpro/build. The encoder, signer, decoder and parser can be found in jproEncoder/bin, jproSigner/bin, jproDecoder/bin and jproParser/bin.
The usage of the jproEncoder, jproSigner, jproDecoder and jproParser can be obtainded by running the programs with the argument --help
To encode a profile:
Step 1: run jproEncoder with the profile data
Step 2: generate a signature for the encoded profile using openSSL
Step 3: run jproSigner to append the signature to the encoded profile
To decode an encoded profile:
Step 1: run jproParser to get the signature and the encoded profile
Step 2: verify the signature using openSSL
Step 3: run jproDecoder with the encoded profile
Used to encode a Profile:
run jproEncoder --help for detailed usage.
Used to append a signature to an encoded profile:
run jproSigner --help for detailed usage.
Used to split the signature from an encoded profile:
run jproParser --help for detailed usage.
Used to decode an encoded profile:
run jproDecoder --help for detailed usage.
The code is well commented and the API documentation can be easily generated by using doxygen.