diff options
author | Richard van der Hoff <richard@matrix.org> | 2016-09-01 13:35:23 +0100 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2016-09-01 13:35:23 +0100 |
commit | 0c462cff112589fc52d13da6c919f881cb6d3f8c (patch) | |
tree | 9c71802ce0d583856b7cd47bfcf20cdfa05354ba /include/olm/error.h | |
parent | f03febb772c47855ab748ed6dee2f29db9f9c5ba (diff) |
Fix Ed25519 keypair generation
Ed25519 private keys, it turns out, have 64 bytes, not 32.
We were previously generating only 32 bytes (which is all that is required to
generate the public key), and then using the public key as the upper 32 bytes
when generating the per-message session key. This meant that everything
appeared to work, but the security of the private key was severely compromised.
By way of fixes:
* Use the correct algorithm for generating the Ed25519 private key, and store
all 512 bits of it.
* Update the account pickle format and refuse to load the old format (since we
should consider it compromised).
* Bump the library version, and add a function to retrieve the library
version, so that applications can verify that they are linked against a
fixed version of the library.
* Remove the curve25519_{sign, verify} functions which were unused and of
dubious quality.
Diffstat (limited to 'include/olm/error.h')
-rw-r--r-- | include/olm/error.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/olm/error.h b/include/olm/error.h index 98d2cf5..1c44de8 100644 --- a/include/olm/error.h +++ b/include/olm/error.h @@ -39,6 +39,13 @@ enum OlmErrorCode { * known session key. */ + /** + * Attempt to unpickle an account which uses pickle version 1 (which did + * not save enough space for the Ed25519 key; the key should be considered + * compromised. We don't let the user reload the account. + */ + OLM_BAD_LEGACY_ACCOUNT_PICKLE = 13, + /* remember to update the list of string constants in error.c when updating * this list. */ }; |