8
3
Fork
You've already forked pEpEngine
0

FEATURE: Own Key Backup #203

Closed
opened 2025年12月25日 10:22:58 +01:00 by fdik · 10 comments
Owner
Copy link

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:

  1. "appname": name and version of the p≡p app creating this backup
  2. "filename": original filename including the date and time when the backup was created
  3. "own_identities": an array of identity objects
  4. "own_keys": an array of fingerprints of all default keys and former default keys
  5. "private_keydata": an array of private keydata for all own keys
  6. "comm_partner_identities": an array of fingerprints of all default keys of comm partners, who are known to use message protection of any kind
  7. "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
Author
Owner
Copy link

The implementation of this function should be split between crypto tech dependent and independent code.

The implementation of this function should be split between crypto tech dependent and independent code.
Author
Owner
Copy link

Instead of simple concatenation JSON could be considered, especially if this would be written in Zig.

Instead of simple concatenation JSON could be considered, especially if this would be written in Zig.

This seems nice. I believe the SQL part can be implemented easily in sqlite3 with

VACUUMmainINTO'/path/to/some/file';

https://sqlite.org/lang_vacuum.html#vacuuminto

which works as a prepared SQL statement (tested). If the file exists empty and has the right permissions then VACUUM ... INTO fills the file, without changing its permissions, exactly as we want.

The .dump logic, instead, as a dot command, is implemented in the sqlite3 interpreter and not in the sqlite3 library.

In fact I would even be tempted to dump the key database the same way for pEpEngineSequoiaBackend, which uses an sqlite database; that would not respect the specification above. If we want to respect it should still be easy enough.

Would you like me to pause my work on the transport system and work on #203 and #204? In order to finish this fast I would do it in C.

This seems nice. I believe the SQL part can be implemented easily in sqlite3 with ```sql VACUUM main INTO '/path/to/some/file'; ``` https://sqlite.org/lang_vacuum.html#vacuuminto which works as a prepared SQL statement (tested). If the file exists empty and has the right permissions then `VACUUM` ... `INTO` fills the file, without changing its permissions, exactly as we want. The `.dump` logic, instead, as a dot command, is implemented in the sqlite3 interpreter and not in the sqlite3 library. In fact I would even be tempted to dump the key database the same way for pEpEngineSequoiaBackend, which uses an sqlite database; that would not respect the specification above. If we want to respect it should still be easy enough. Would you like me to pause my work on the transport system and work on #203 and #204? In order to finish this fast I would do it in C.
Author
Owner
Copy link

@lucasaiu wrote in #203 (comment):

This seems nice. I believe the SQL part can be implemented easily in sqlite3 with

VACUUMmainINTO'/path/to/some/file';

That's a good idea.

In fact I would even be tempted to dump the key database the same way for pEpEngineSequoiaBackend, which uses an sqlite database; that would not respect the specification above. If we want to respect it should still be easy enough.

I'm not sure if this is a good idea, because we don't define this database yet, but Sequoia defined it. A list of keys will do in all cases, though.

Would you like me to pause my work on the transport system and work on #203 and #204? In order to finish this fast I would do it in C.

If you feel tempted, go ahead ;-)

We need encrypted backup in the new version of the apps. BTW: p≡p for iOS is already running in simulator...

@lucasaiu wrote in https://codeberg.org/pEp/pEpEngine/issues/203#issuecomment-9377195: > This seems nice. I believe the SQL part can be implemented easily in sqlite3 with > > ```sql > VACUUM main INTO '/path/to/some/file'; That's a good idea. > In fact I would even be tempted to dump the key database the same way for pEpEngineSequoiaBackend, which uses an sqlite database; that would not respect the specification above. If we want to respect it should still be easy enough. I'm not sure if this is a good idea, because we don't define this database yet, but Sequoia defined it. A list of keys will do in all cases, though. > Would you like me to pause my work on the transport system and work on #203 and #204? In order to finish this fast I would do it in C. If you feel tempted, go ahead ;-) We need encrypted backup in the new version of the apps. BTW: p≡p for iOS is already running in simulator...
Author
Owner
Copy link

See also #205

See also https://codeberg.org/pEp/pEpEngine/issues/205
Author
Owner
Copy link

@lucasaiu, added "The concatenated text file contains its own original filename as second part", because we need this protected.

@lucasaiu, added "The concatenated text file contains its own original filename as second part", because we need this protected.
Author
Owner
Copy link

@lucasaiu: I had to adapt the spec again. Please review.

@lucasaiu: I had to adapt the spec again. Please review.

Update after speaking with fdik: do not back up the entire management db.

Update after speaking with fdik: do not back up the entire management db.

Update after speaking with @fdik: I will try to implement this in Zig, using the basic API to retrieve keys; the existing basic API should already be sufficient, since the functionality is already needed for Sync.

This will be a good way of testing Zig in the field, and see how interoperable it is: I will call the backup functionality from pmt, which is written in Python and relies on the Python adapter written in C++, calling into the Engine using its C API. If Zig allows us to do this we can conclude that it is fit for the job.

Update after speaking with @fdik: I will try to implement this _in Zig_, using the basic API to retrieve keys; the existing basic API should already be sufficient, since the functionality is already needed for Sync. This will be a good way of testing Zig in the field, and see how interoperable it is: I will call the backup functionality from pmt, which is written in Python and relies on the Python adapter written in C++, calling into the Engine using its C API. If Zig allows us to do this we can conclude that it is fit for the job.
Author
Owner
Copy link

See https://codeberg.org/pEp/pEpEngineBackup for the implementation.

See https://codeberg.org/pEp/pEpEngineBackup for the implementation.
Sign in to join this conversation.
master
master
engine-236
transport-system
dz/zig_0.16.0
FEATURE-232
transport-system-bk-before-showing-volker
FEATURE-206
dz/install_headers_only
FEATURE-220
Release_3.4.0
FEATURE_213
management-db-20
rebuild
own-key-backup
Release_3.3.0
193-attempt-late-2025
debug-mime
mailing-lists
non-destructive-imap
pEpMIME-default
positron-nkls-mixnet
pep4tb_deploy_macos
positron-check-signature
positron-nkls-mixnet--backup--2023年07月19日
gitea-169
heck_idl_codegen
gitea-168
gitea-165
gitea-133
gitea-133-rebased-snapshot-2023年05月10日
gitea-133-rebased-snapshot
gitea-133-unrebased
archive/Release_3.2
dvn/ci/sqlite
nkls-mixnet
gitea-150
gitea-148
gitea-149
positron/dvn/ci-refactor2023
gitea-140
gitea-91
gitea-136
pepmime--renamed
Release_2.1
unexpire-test-keys
gitea-96
gitea-120--2.x
gitea-116--2.x
gitea-121
gitea-118--3.x
gitea-113
gitea-117
foo
gitea-116
heck/tmpbugfix
gitea-100
gitea-104
gitea-90
echo-rate-limit
gitea-105
Release_2.1--with-sequoia-openpgp/v1.13.0-probably-all-wrong
invalid-upgdade
allow-empty-username
gitea-102
gitea-99
doxygen-3.x
gitea-83-84--v3
gitea-83-84--v2
gitea-83-84--v3--old-and-probably-useless
backup-before-using-REQUIRE
some-RCs-from-3.x--3.2.0-RC8-to-3.2.0-RC10
newsequoia2022--bk-2022年10月12日
log-scratch
mscgen
ENGINE-1006-for-engine-v2
sqlite-cleanup
ENGINE-1006-for-engine-v2-rebasing--backup-before-cleaning-2022年08月10日
ENGINE-999
ENGINE-1006-for-engine-v3--bk-before-rebasing
ENGINE-1006-for-engine-v3
ENGINE-1001--2.x
ENGINE-1001--3.x
ENGINE-1002--2.x
ENGINE-1002--3.x
positron/tka-scratch
positron/ENGINE-899
2.1-doxygen-docs
ENGINE-995
big-rewrite
migration-debugging
2.1-fix-two-lines-patch-only
ENGINE-996
QA-180
ENGINE-900
positron-temporary-for-heck-2022年01月12日-a
ENGINE-989
ENGINE-979-for-engine-v2
ENGINE-979-for-engine-v3
ENGINE-984
ENGINE-930
ENGINE-959
ENGINE-959-new-part-to-be-pushed-to-the-old-branch
ENGINE-975
ENGINE-969
ENGINE-971
ENGINE-969--almost-certainly-wrongly-named-and-useless--to-be-removed
ENGINE-974
ENGINE-972
ENGINE-968
ENGINE-619
lucasaiu/WIP-ENGINE-968
ENGINE-967
lucasaiu/test
ENGINE-964
ENGINE-956
lucasaiu/message-struct-change
ENGINE-961
ENGINE-962
lucasaiu/rating-field
Release_3.1
ENGINE-958
ENGINE-847
ENGINE-558
ENGINE-957
ENGINE-955
ENGINE-848
ENGINE-570
ENGINE-953
ENGINE-954
ENGINE-899
ENGINE-898
2.1_audit_refresh
joerg/Release_2.1
doxygen_doc
generate_api
neal/sequoia-1.1
ENGINE-878
ENGINE-606
ENGINE-820
MACOSINST-33
MACOSINST-26
ENGINE-868
ENGINE-814
ENGINE-864
mime-integrate
trustsync
test-README.md
sync
pEpMIME_windows
pEpMIME--old--krista
nuanced_return_codes
key-manipulation-tests
fpr-format-check
extra_keys_add
elevated_attachments
doc_update_sequoia
doxygen-key-id
b0rken_crypto
audit_branch
add_key_notification
Release_2.1.0
ENGINE-871
ENGINE-872
ENGINE-641
v3.4.0
v3.3.0
v3.3.0-RC17
v3.3.0-RC16
v3.3.0-RC15
v3.3.0-RC14
v3.3.0-RC13
v3.3.0-RC12
v3.3.0-RC11
v3.3.0-RC10
v3.3.0-RC9
v3.3.0-RC8
v3.3.0-RC7
v3.3.0-RC6
v3.3.0-RC5
v3.3.0-RC4
v3.3.0-RC3
v3.3.0-RC2
v3.3.0-RC1
v3.2.1
v3.2.0
v3.2.0-RC27
v3.2.0-RC26
v3.2.0-RC25
v3.2.0-RC24
v2.1.72
v3.2.0-RC23
v3.2.0-RC22
v3.2.0-RC21
v2.1.71
v2.1.70
v2.1.69
v3.2.0-RC20
v3.2.0-RC19
v3.2.0-RC18
v3.2.0-RC17
v3.2.0-RC16
v3.2.0-RC15
3.2.0-RC14
v3.2.0-RC14
v2.1.68
v3.2.0-RC13
v2.1.67
v3.2.0-RC12
v2.1.66
v2.1.65
v2.1.65-RC1
v3.2.0-RC11
gitea-86
v3.2.0-RC10
Release_3.2.0-RC9
3.2.0-RC8
Release_2.1.64
Release_2.1.63
Release_2.1.62
Release_2.1.61
Release_2.1.60
Release_2.1.59
Release_2.1.58
Release_2.1.57
Release_2.1.56
Release_2.1.55
Release_2.1.54
Release_3.2.0-RC7
Release_2.1.52
Release_2.1.51-RC6
Release_2.1.51-RC5
Release_2.1.51-RC4
Release_2.1.51-RC3
Release_2.1.51-RC2
Release_2.1.51-RC1
undo-the-incompatible-change-in-ENGINE-959
decrypt_message_2
after-incompatible-change-in-ENGINE-959
before-incompatible-change-in-ENGINE-959
Release_3.2.0-RC6
Release_zOS_0.1
Release_0.0.1
Release_3.2.0-RC5
Release_2.1.50
Release_3.1.10
Release_3.2.0-RC4
Release_3.2.0-RC3
Release_3.2.0-RC2
Release_3.2.0-RC1
Release_2.1.49
Release_2.1.48
Release_3.1.9
Release_3.1.8
Release_3.1.7
Release_3.1.6
Release_2.1.47
Release_2.1.46
Release_3.1.5
Release_3.1.4
Release_2.1.45
Release_3.1.3
Release_2.1.44
Release_2.1.43
Release_3.1.2
Release_3.1.1
Release_2.1.42
Release_3.1.0
Release_2.1.41
Release_2.1.40
archive/ENGINE-633
Release_2.1.39
Release_2.1.38
Release_2.1.37
Release_2.1.36
Release_2.1.35
Release_2.1.34
archive/Release_3.0
Release_3.0.11
Release_2.1.33
Release_2.1.32
Release_3.0.10
Release_2.1.31
Release_3.0.9
Release_2.1.30
Release_3.0.8
Release_3.0.7
Release_2.1.29
Release_3.0.6
Release_3.0.5
Release_2.1.28
Release_3.0.4
Release_3.0.3
Release_3.0.2
Release_2.1.27
Release_3.0.1
Release_3.0.0
Release_2.1.26
Release_2.1.25
archive/ENGINE-606
Release_2.1.24
Release_2.1.23
Release_2.1.22
Release_2.1.21
Release_2.1.20
Release_2.1.19
Release_2.1.18
Release_2.1.17
Release_2.1.16
TEST-ENGINE-820
Release_2.1.15
Release_2.1.14
archive/ENGINE-866
archive/ENGINE-883
TEST_ENGINE-814_1
ENGINE-864
Release_2.1.13
archive/ENGINE-877
Release_2.1.12
archive/ENGINE-864_old
archive/ENGINE-282
archive/ENGINE-109
archive/ENGINE-107
archive/ENGINE-105
archive/AllGroupDevicesShowHandshake
archive/2.0.5_p4a_log_test
archive/IOSAD-186
Release_2.1.11
archive/ENGINE-870
archive/ENGINE-822-sql-refactor
Release_2.1.10
Release_2.1.9
Release_2.1.8
Release_2.1.7
Release_2.1.6
archive/ENGINE-835
Release_2.1.5
archive/IOSAD-182
Release_2.1.4
Release_2.1.3
archive/neal-sequoia-update-staging
Release_2.1.2
Release_2.1.1
archive/Release_2.1.0
Release_2.1.0
Release_2.2.0-RC0
Release_2.1.0-RC39
Release_2.1.0-final
Release_2.1.0-RC38
Release_2.1.0-RC37
archive/short_term_is_own_key_branch
Release_2.1.0-RC36
Release_2.1.0-RC35
Release_2.1.0-RC34
Release_2.1.0-RC33
Release_2.1.0-RC32
archive/IOS-2414
Release_2.1.0-RC31
Release_2.1.0-RC30
Release_2.1.0-RC29
archive/ENGINE-812
Release_2.1.0-RC28
Release_2.1.0-RC27
archive/633-up-id-refactor
archive/test-huss-hypothesis-42
Release_2.1.0-RC26
audit_update_from_sync
Release_2.1.0-RC25
archive/ENGINE-781
archive/ENGINE-780-take2
Release_2.1.0-RC24
Release_2.1.0-RC23
archive/ENGINE-780
Release_2.1.0-RC22
Release_2.1.0-RC21
Release_2.1.0-RC20
archive/IOS-2327
Release_2.1.0-RC19
Release_2.1.0-RC18
Release_2.1.0-RC17
Release_2.1.0-RC16
Release_2.1.0-RC15
Release_2.1.0-RC14
Release_2.1.0-RC13
Release_2.1.0-RC12
Release_2.1.0-RC11
Release_2.1.0-RC10
archive/ENGINE-767
Release_2.1.0-RC9
Release_2.1.0-RC8
Release_2.1.0-RC7
archive/ENGINE-764
Release_2.1.0-RC6
Release_2.1.0-RC5
Release_2.1.0-RC4
Release_2.1.0-RC3
archive/ENGINE-757
Release_2.1.0-RC2
archive/import_key_2.1
Release_2.1.0-RC1
Release_2.0.6
Release_2.0.5
Release_2.1.0-RC0
archive/ENGINE-751
Release_2.0.4
archive/postrelease
archive/ENGINE-750
archive/default-1
Revived_default_branch._Close_postrelease_and_work_here._sync_is_2.0_branch_
Restarting_default_from_postrelease
Release_2.0.3
archive/ENGINE-746
archive/Release_1_branch_deprecated
archive/install_headers
decode-encode-API-change
last-old-mime-api-version
archive/ENGINE-720
Release_2.0.2
archive/ENGINE-736
Release_2.0.1
archive/ENGINE-514
archive/maintain
2.1.0_target
2.0.1_target
archive/remove_gpg
Release_2.0.0
archive/krista_tmp_sequoia_upgrade
archive/ENGINE-703
archive/grind_and_cleanup
archive/reduce
archive/krista-local-7-Jan-2020
archive/IOSAD-163
archive/IOSAD-161
archive/gen_sample
archive/group_key_reset
archive/key_reset_get_revocations
archive/ENGINE-659-gpg
archive/ENGINE-681
archive/ENGINE-655
Last_commit_in_old_default_branch_-_branch_now_moves_to_Release_1_branch_deprecated._Goal_is_to_move_postrelease_to_default_and_continue_with_new_release/branching_rules_
archive/sender-fpr-and-friends
archive/Xcode-sync-session
archive/ENGINE-596
archive/debian_default_test
archive/IOS-1942
archive/tracing_for_thomas
archive/android-stuff
archive/changeset_add
archive/spinlock_remove
archive/signature_test
archive/ENGINE-654
archive/Xcode11
archive/sync-test-dev
archive/ENGINE-638
archive/IOS-BUILD_NDEBUG_FIX
archive/ENGINE-649
archive/ENGINE-639
archive/ENGINE-647
archive/sender-fpr-checks
archive/ENGINE-630
archive/tunneling
archive/beacon_test
archive/IOS-1784
archive/sequoia_windows
archive/googletest
archive/google-ENGINE-325-testing
archive/ENGINE-325
archive/ENGINE-600
archive/ENGINE-571
archive/ENGINE-614
archive/ENGINE-552
archive/ENGINE-551
archive/ENGINE-559
archive/ENGINE-602
archive/IOSAD-120
archive/IOS-1576
archive/ENGINE-581
archive/IOS-1484
archive/notifyHandshake
archive/ENGINE-524
archive/neal/tpk-cache
archive/ENGINE-553
archive/ENGINE-544
archive/ENGINE-550
archive/email_comparison
2.0.0-RC
add
archive/IOSAD-111
archive/ENGINE-540
archive/krista_temp
archive/delete_key
archive/IOS-1482
archive/ENGINE-536
archive/make-cleanup
archive/ENGINE-531
archive/sync_test_refactor
archive/IOSAD-103
archive/krista-netpgp-sync
1.3.0-RC-sync
1.3.0-RC-default
archive/ENGINE-448
archive/ENGINE-510
archive/ENGINE-487
archive/ENGINE-507
Release_1.2.0
archive/ENGINE-474
archive/sequoia
archive/merge_ll_sign_only
archive/ENGINE-479
archive/ENGINE-479_low_level
archive/IOS-1351
archive/IOSAD-101
archive/ENGINE-472
archive/ENGINE-473
archive/ENGINE-358
Release_1.1.2
Release_1.1.1
archive/ENGINE-466
Release_1.1.0
Patch_release_1.0.442
archive/ENGINE-459
archive/ENGINE-463
archive/ENGINE-467
archive/sync_and_key_reset
archive/ENGINE-398
archive/ENGINE-455
archive/ENGINE-427
archive/ENGINE-451
archive/ENGINE-454
Release_1.0.441
archive/ENGINE-450-MARK-II
archive/ENGINE-450
archive/ENGINE-442
archive/ENGINE-440
archive/ENGINE-434
archive/ENGINE-422
archive/local_cmocka
archive/outlook_mime_support
archive/ENGINE-27
archive/ENGINE-139
archive/ENGINE-217
archive/ENGINE-198
archive/ENGINE-140_exclude_identity_from_sync
archive/gpgme-1.9.0
archive/ENGINE-238
archive/ENGINE-229
archive/ENGINE-228
archive/ENGINE-259
archive/ENGINE-254
archive/ENGINE-251
archive/ENGINE-237
archive/ENGINE-233
archive/ENGINE-308
archive/ENGINE-286
archive/ENGINE-275
archive/ENGINE-261
archive/ENGINE-214
archive/import_priv_keys_fix
archive/database_change_branch
archive/ENGINE_314
archive/ENGINE-293
archive/ENGINE-407
archive/ENGINE-400
archive/ENGINE-294
archive/JNI-26
archive/ENGINE-152
archive/ENGINE-137
archive/ENGINE-135
archive/ENGINE-178
archive/ENGINE-173
archive/local_cpptest
archive/ENGINE-430
archive/ENGINE-423
archive/el_presidente
archive/ENGINE-425
archive/ENGINE-420
archive/ENGINE-402
archive/preview_rating
archive/ENGINE-320-lr1
archive/roker-linux
archive/rok-mac
archive/enigmail_tests_pre_revision_2535
archive/thomas_timing_tests
archive/ENGINE-250
archive/mistrust_fixes
archive/ENGINE-352
archive/ENGINE-329
archive/ENGINE-289
archive/ENGINE-339
archive/ENGINE-332
archive/ENGINE-320
ENGINE-323_fixed
archive/ENGINE-322
archive/ENGINE-321
0.9.0_release
archive/test_diphoton
M1.0_current
no_support_provided_from_message_2.0_on_this_branch._Please_use_branch_diphoton_M1
archive/diphoton_M1
archive/ENGINE-305
archive/ENGINE-298
archive/ENGINE-287
archive/ENGINE-290
archive/ENGINE-288
archive/ENGINE-265
last_usable_message_format_commit
archive/krista-temp
archive/ENGINE-262
archive/ENGINE-255
archive/ENGINE-247
archive/2028_fix
archive/ENGINE-226
archive/message-2.0
archive/gpgme_passphrase_cb
archive/gnupg-2.1
archive/ENGINE-9
archive/ENGINE-171
archive/ENGINE-207
archive/ENGINE-9-1
archive/ENGINE-215
archive/ENGINE-204
archive/ENGINE-179
archive/ENGINE-3
archive/ENGINE-209
archive/IOS-506
archive/ENGINE-199
archive/ENGINE-183
archive/ENGINE-207-1
archive/ENGINE-187
archive/fdik_sync
archive/NETPGP-18
archive/ENGINE-189
archive/ENGINE-174
archive/ENGINE-188
archive/ENGINE-172
archive/ENGINE-180
archive/ratings
archive/KeySyncWaitForAccept
archive/GroupMerge
archive/enigmail-color-tests
archive/ENGINE-168
archive/ENGINE-157
archive/ENGINE-155
archive/default-2
archive/JNI-21
archive/default-3
archive/ENGINE-133
for_Outlook-1.1.10
archive/ENGINE-74
archive/ENGINE-112
archive/ENGINE-118
archive/ENGINE-140
archive/ENGINE-140-reloaded
archive/ENGINE-142
archive/ENGINE-84
archive/ENGINE-129
archive/keysync
archive/ENGINE-128
archive/peg-mime
archive/keysync-windows
archive/ENGINE-96
archive/ENGINE-95
archive/ENGINE-98
archive/ENGINE-92
archive/ENGINE-1
archive/krista_local_windows
archive/ENGINE-73
archive/JIRA_smart_commit_test_branch
archive/async_key_management
0.8.0
archive/ENGINE-79
archive/ENGINE-40
archive/import_own_key
archive/fixing_revoke
archive/null_size_attachment
archive/strl-imp
0.7.0
0.7
list
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pEp/pEpEngine#203
Reference in a new issue
pEp/pEpEngine
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?