idpass / idpass-lite

A library to create and interact with secure and biometrically-binding QR code identity cards
https://www.idpass.org/
Apache License 2.0
28 stars 5 forks source link
biometrics c cplusplus digital-identity hacktoberfest identity-cards

ID PASS Lite

CircleCI

A library to create and issue biometrically-binding QR code identity cards.

Alt text

Getting started

This library can be used in C and C++ projects. Download libidpasslite.so from the Releases page or build it from source, then add it to the project that will use it.

Additional documentation on how to use this library can be found in the wiki.

Other languages are also supported through our wrapper packages:

Usage

Add the library to the project's CMakeLists.txt:

TARGET_LINK_LIBRARIES(idpasslite)

Then include the library's header files into the code:

#include "idpass.h"
#include "proto/api/api.pb.h"
#include "proto/idpasslite/idpasslite.pb.h"

The library needs to be initialized before it can be used. Add the following to the code:

void initialize_idpass()
{
    // Generate cryptographic keys
    unsigned char signaturekey[64];
    unsigned char encryptionkey[32];

    idpass_lite_generate_secret_signature_key(signaturekey, 64);
    idpass_lite_generate_encryption_key(encryptionkey, 32);

    // Create a keyset using the generated keys
    api::KeySet keyset;
    keyset.set_encryptionkey(encryptionkey, 32);
    keyset.set_signaturekey(signaturekey, 64);

    // Serialize the keyset into a byte array
    std::vector<unsigned char> keysetbuf(keyset.ByteSizeLong());
    keyset.SerializeToArray(keysetbuf.data(), keysetbuf.size());

    // Call the library's main initialization API
    void* context = idpass_lite_init(keysetbuf.data(), keysetbuf.size(), nullptr, 0);
}

int main() {
    initialize_idpass();
}

Now the library can be used in the project, for example in order to create an ID Pass Lite identity card for a new user:

// Prepare protobuf object
api::Ident ident;

// Take a photo of the user
std::string filename = "userphoto.jpg";
std::ifstream photofile(filename, std::ios::binary);
std::vector<char> photo(std::istreambuf_iterator<char>{photofile}, {});

// Initialize protobuf object with the user's identity details
ident.set_surname("Doe");
ident.set_givenname("John");
ident.set_placeofbirth("Kibawe, Bukidnon");
ident.set_pin("12345");
ident.mutable_dateofbirth()->set_year(1978);
ident.mutable_dateofbirth()->set_month(12);
ident.mutable_dateofbirth()->set_day(17);
ident.set_photo(photo.data(), photo.size());

// Serialize protobuf object into a byte array
std::vector<unsigned char> identbuf(ident.ByteSizeLong());
ident.SerializeToArray(identbuf.data(), identbuf.size());

// Create an IDPASSLITE card for the user
int idcard_len;
unsigned char* idcard = idpass_lite_create_card_with_face(context,
    &idcard_len, identbuf.data(), identbuf.size());

// Save the IDASSLITE card as a QR code image
idpass_lite_saveToBitmap(context, idcard, idcard_len, "qrcode_id.bmp");

Refer to the API Reference for all the available methods provided by this library.

Open source dependencies

License

Apache-2.0 License