SDK configuration file generation
The SDK can load configuration settings from an encrypted file named pathwaypro_sdk.cfg
. This file can be bundled with a customer’s application as a raw resource file by placing it in the app/src/main/res/raw
directory.
The file is encrypted using AES in GCM mode with 256-bit keys. The 12-byte nonce is prepended to the beginning of the file, then the entire file is encoded in Base64.
Here is an example of an unencrypted configuration file:
{
"service_id": 12345
}
The file can be encrypted using the following Python script:
import base64
import os
import sys
# From the "cryptography" module
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
key = bytes([0x9a, 0x39, 0x46, 0x82, 0xa8, 0x3d, 0x23, 0xfe, 0x1d, 0x7e, 0x12, 0xe6,
0x16, 0xa9, 0xb6, 0xec, 0xa3, 0xc2, 0x7b, 0x5d, 0xb4, 0x9b, 0x55, 0x51,
0x49, 0x5f, 0xd8, 0x08, 0x5f, 0xd4, 0xaf, 0xa2]) # example
input_file = "/tmp/config.json"
output_file = "/tmp/pathwaypro_sdk.cfg"
NONCE_SIZE = 12
with open(input_file, "rb") as in_fp:
plain_data = in_fp.read()
nonce = os.urandom(NONCE_SIZE)
cipher = Cipher(algorithms.AES(key), modes.GCM(nonce), backend=default_backend())
encryptor = cipher.encryptor()
encrypted_data = encryptor.update(plain_data) + encryptor.finalize()
tag = encryptor.tag
with open(output_file, "wb") as out_fp:
out_fp.write(base64.b64encode(nonce + encrypted_data + tag))
The actual encryption key is provided with the SDK.