The following function is needed in module backup:
PEP_STATUS backup_management_and_keys(
PEP_SESSION session, const char *appname, const char *lang,
char **words, size_t *wsize, bloblist_t **backupfile
);
To call this function a valid session must be delivered.
The appname of the p≡p app must be delivered, followed by a semantic version string.
An ISO 639-1 ALPHA-2 language code must be delivered in lang, which is then being used to generate the Trustwords in words. The language code must be delivered as three bytes, the third byte must be 0. The function fails if Trustwords in this language are not available.
This function creates a 10 Trustwords text and returns them in words and wsize using the language in lang under the conditions documented in random_trustwords() (see #206).
The created Trustwords are random. The Trustwords string in words is zero terminated. wsize is the length of the Trustwords string including the trailing zero.
This function creates a JSON file, which is encrypted by symmetric encryption. The encrypted version of the JSON file is returned in backupfile.
The filename without extension is the timestamp of the export of the own keys in UTC in the format YYYYMMDDThhmmss following ISO8601. That means:
- YYYY is the year (for example, 2025)
- MM is the number of the month with leading 0 if needed (for example, 12)
- DD is the number of the day in the month with leading 0 if needed (for example, 25)
- T is the literal character
'T'
- hh is the number of the hour with leading 0 if needed (for example, 09)
- mm is the number of the minute in the hour with leading 0 if needed (for example, 12)
- ss is the number of the second in the minute with leading 0 if needed (for example, 05)
The file extension for the encrypted JSON file is .okb, which stands for "own key backup".
The decrypted version of the JSON file contains a JSON object with seven keys:
"appname": name and version of the p≡p app creating this backup
"filename": original filename including the date and time when the backup was created
"own_identities": an array of identity objects
"own_keys": an array of fingerprints of all default keys and former default keys
"private_keydata": an array of private keydata for all own keys
"comm_partner_identities": an array of fingerprints of all default keys of comm partners, who are known to use message protection of any kind
"public_keydata": an array of public keydata (certificates) for all communication partners' identities in the array before
The name and version of the p≡p app creating this backup is represented of a string containing the name of the p≡p app followed by semantic versioning. As example:
p≡p for iOS v3.0.3
The JSON file contains its own original filename. As Example:
20251225T091205.okb
The keydata contains keys in the preferred format of the crypto tech, ASCII armored. For OpenPGP this is each key as ASCII armored text certificate, respectively, with LF line endings. For other crypto tech an ASCII armoring must be defined accordingly if the crypto tech's base technology does not define one already.
For OpenPGP Own keys are represented as certificates with private keys, respectively. Keys of comm partners are represented as public key certificates, respectively.
An example JSON file may look like this:
{
"appname": "p≡p for iOS v3.0.3",
"filename": "20260213T161511.okb",
"own_identities": [
{
"address": "alice@mail.com",
"fpr": "B915525AAE4C018A6E65A468664BE9C353A1C444",
"user_id": "pEp_own_userId",
"username": "Alice",
"comm_type": 255,
"lang": "",
"me": true,
"major_ver": 0,
"minor_ver": 0,
"enc_format": 0,
"flags": 0
}
],
"own_keys": [
"B915525AAE4C018A6E65A468664BE9C353A1C444"
],
"private_keydata": [
"-----BEGIN PGP PRIVATE KEY BLOCK-----\nComment: B915 525A AE4C 018A 6E65 A468 664B E9C3 53A1 C444\nComment: Alice <alice@mail.com>\n\n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\nFPkRsDQnBOxN+PE=\n=wJ6n\n-----END PGP PRIVATE KEY BLOCK-----\n"
],
"comm_partner_identities": [
{
"address": "bob@bob.com",
"fpr": "7FF328EC514E555A79BF9CE4C901D057806103D0",
"user_id": "id_of_bob",
"username": "Bob",
"comm_type": 255,
"lang": "",
"me": false,
"major_ver": 2,
"minor_ver": 1,
"enc_format": 4,
"flags": 0
}
],
"public_keydata": [
"-----BEGIN PGP PUBLIC KEY BLOCK-----\nComment: 7FF3 28EC 514E 555A 79BF 9CE4 C901 D057 8061 03D0\nComment: Bob <bob@bob.com>\n\nxjMEaY5caBYJKwYBBAHaRw8BAQdAKx4TRowyQGXBt005gdnea4GEe2baenB+ZQiI\nE5ZwpUDNEUJvYiA8Ym9iQGJvYi5jb20+wq8EExYIAFcbFIAAAAAABAAObWFudTIs\nMi41KzEuMTIsMCwzAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEf/Mo\n7FFOVVp5v5zkyQHQV4BhA9AFAmmOXOwACgkQyQHQV4BhA9CnBQD9HfpkkXcGlsUo\n0IRWfP9NMFq0EIVmdYSdpc+DVMKkOrsBANAXxzl4RJlEz2zZsQgJRKLmlls9hUaE\nNjdj8VJ6y8kIzjgEaY5caBIKKwYBBAGXVQEFAQEHQJeZ8Ybadgub19l1qM5Bo5lc\ndKPe2nzRSgkzUtGwDXddAwEIB8KUBBgWCAA8GxSAAAAAAAQADm1hbnUyLDIuNSsx\nLjEyLDAsMwIbDBYhBH/zKOxRTlVaeb+c5MkB0FeAYQPQBQJpjlz9AAoJEMkB0FeA\nYQPQKbwBAJu/OZtF12uFDWlKuu5i66dT/yIzvwbjHeL+779mNXhEAPsHROoMv26y\nRbEoXQmJP/MSqdrO8W4RvKjXK7heuSahBg==\n=RTMK\n-----END PGP PUBLIC KEY BLOCK-----\n"
]
}
For all types of crypto tech the JSON file is symmetrically encrypted with OpenPGP using EAX<AES128> with the password words.
The MIME type for the encrypted file is application/octet-stream.
See also the restore function here: #204
The following function is needed in module backup:
```C
PEP_STATUS backup_management_and_keys(
PEP_SESSION session, const char *appname, const char *lang,
char **words, size_t *wsize, bloblist_t **backupfile
);
```
To call this function a valid `session` must be delivered.
The `appname` of the p≡p app must be delivered, followed by a semantic version string.
An ISO 639-1 ALPHA-2 language code must be delivered in `lang`, which is then being used to generate the Trustwords in `words`. The language code must be delivered as three bytes, the third byte must be 0. The function fails if Trustwords in this language are not available.
This function creates a 10 Trustwords text and returns them in `words` and `wsize` using the language in `lang` under the conditions documented in `random_trustwords()` (see https://codeberg.org/pEp/pEpEngine/issues/206).
The created Trustwords are random. The Trustwords string in `words` is zero terminated. `wsize` is the length of the Trustwords string including the trailing zero.
This function creates a JSON file, which is encrypted by symmetric encryption. The encrypted version of the JSON file is returned in `backupfile`.
The filename without extension is the timestamp of the export of the own keys in UTC in the format `YYYYMMDDThhmmss` following ISO8601. That means:
- YYYY is the year (for example, 2025)
- MM is the number of the month with leading 0 if needed (for example, 12)
- DD is the number of the day in the month with leading 0 if needed (for example, 25)
- T is the literal character `'T'`
- hh is the number of the hour with leading 0 if needed (for example, 09)
- mm is the number of the minute in the hour with leading 0 if needed (for example, 12)
- ss is the number of the second in the minute with leading 0 if needed (for example, 05)
The file extension for the encrypted JSON file is `.okb`, which stands for "own key backup".
The decrypted version of the JSON file contains a JSON object with seven keys:
1. `"appname":` name and version of the p≡p app creating this backup
1. `"filename"`: original filename including the date and time when the backup was created
1. `"own_identities"`: an array of identity objects
1. `"own_keys"`: an array of fingerprints of all default keys and former default keys
1. `"private_keydata"`: an array of private keydata for all own keys
1. `"comm_partner_identities"`: an array of fingerprints of all default keys of comm partners, who are known to use message protection of any kind
1. `"public_keydata"`: an array of public keydata (certificates) for all communication partners' identities in the array before
The name and version of the p≡p app creating this backup is represented of a string containing the name of the p≡p app followed by semantic versioning. As example:
```
p≡p for iOS v3.0.3
```
The JSON file contains its own original filename. As Example:
```
20251225T091205.okb
```
The keydata contains keys in the preferred format of the crypto tech, ASCII armored. For OpenPGP this is each key as ASCII armored text certificate, respectively, with `LF` line endings. For other crypto tech an ASCII armoring must be defined accordingly if the crypto tech's base technology does not define one already.
For OpenPGP Own keys are represented as certificates with private keys, respectively. Keys of comm partners are represented as public key certificates, respectively.
An example JSON file may look like this:
```JSON
{
"appname": "p≡p for iOS v3.0.3",
"filename": "20260213T161511.okb",
"own_identities": [
{
"address": "alice@mail.com",
"fpr": "B915525AAE4C018A6E65A468664BE9C353A1C444",
"user_id": "pEp_own_userId",
"username": "Alice",
"comm_type": 255,
"lang": "",
"me": true,
"major_ver": 0,
"minor_ver": 0,
"enc_format": 0,
"flags": 0
}
],
"own_keys": [
"B915525AAE4C018A6E65A468664BE9C353A1C444"
],
"private_keydata": [
"-----BEGIN PGP PRIVATE KEY BLOCK-----\nComment: B915 525A AE4C 018A 6E65 A468 664B E9C3 53A1 C444\nComment: Alice <alice@mail.com>\n\n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\nFPkRsDQnBOxN+PE=\n=wJ6n\n-----END PGP PRIVATE KEY BLOCK-----\n"
],
"comm_partner_identities": [
{
"address": "bob@bob.com",
"fpr": "7FF328EC514E555A79BF9CE4C901D057806103D0",
"user_id": "id_of_bob",
"username": "Bob",
"comm_type": 255,
"lang": "",
"me": false,
"major_ver": 2,
"minor_ver": 1,
"enc_format": 4,
"flags": 0
}
],
"public_keydata": [
"-----BEGIN PGP PUBLIC KEY BLOCK-----\nComment: 7FF3 28EC 514E 555A 79BF 9CE4 C901 D057 8061 03D0\nComment: Bob <bob@bob.com>\n\nxjMEaY5caBYJKwYBBAHaRw8BAQdAKx4TRowyQGXBt005gdnea4GEe2baenB+ZQiI\nE5ZwpUDNEUJvYiA8Ym9iQGJvYi5jb20+wq8EExYIAFcbFIAAAAAABAAObWFudTIs\nMi41KzEuMTIsMCwzAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEf/Mo\n7FFOVVp5v5zkyQHQV4BhA9AFAmmOXOwACgkQyQHQV4BhA9CnBQD9HfpkkXcGlsUo\n0IRWfP9NMFq0EIVmdYSdpc+DVMKkOrsBANAXxzl4RJlEz2zZsQgJRKLmlls9hUaE\nNjdj8VJ6y8kIzjgEaY5caBIKKwYBBAGXVQEFAQEHQJeZ8Ybadgub19l1qM5Bo5lc\ndKPe2nzRSgkzUtGwDXddAwEIB8KUBBgWCAA8GxSAAAAAAAQADm1hbnUyLDIuNSsx\nLjEyLDAsMwIbDBYhBH/zKOxRTlVaeb+c5MkB0FeAYQPQBQJpjlz9AAoJEMkB0FeA\nYQPQKbwBAJu/OZtF12uFDWlKuu5i66dT/yIzvwbjHeL+779mNXhEAPsHROoMv26y\nRbEoXQmJP/MSqdrO8W4RvKjXK7heuSahBg==\n=RTMK\n-----END PGP PUBLIC KEY BLOCK-----\n"
]
}
```
For all types of crypto tech the JSON file is symmetrically encrypted with OpenPGP using EAX\<AES128\> with the password `words`.
The MIME type for the encrypted file is `application/octet-stream`.
See also the restore function here: https://codeberg.org/pEp/pEpEngine/issues/204