Commit 7c84ce80 authored by Richard van der Hoff's avatar Richard van der Hoff Committed by GitHub
Browse files

Merge pull request #18 from matrix-org/rav/pickle_ed25519_in_c

Convert ed25519 pickling functions to C
parents 8912d13b 833ecd3c
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
extern "C" { extern "C" {
#endif #endif
struct _olm_ed25519_public_key;
struct _olm_ed25519_key_pair;
#define _olm_pickle_uint32_length(value) 4 #define _olm_pickle_uint32_length(value) 4
uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value); uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value);
uint8_t const * _olm_unpickle_uint32( uint8_t const * _olm_unpickle_uint32(
...@@ -43,6 +47,42 @@ uint8_t const * _olm_unpickle_bytes(uint8_t const * pos, uint8_t const * end, ...@@ -43,6 +47,42 @@ uint8_t const * _olm_unpickle_bytes(uint8_t const * pos, uint8_t const * end,
uint8_t * bytes, size_t bytes_length); uint8_t * bytes, size_t bytes_length);
/** Get the number of bytes needed to pickle an ed25519 public key */
size_t _olm_pickle_ed25519_public_key_length(
const struct _olm_ed25519_public_key * value
);
/** Pickle the ed25519 public key. Returns a pointer to the next free space in
* the buffer. */
uint8_t * _olm_pickle_ed25519_public_key(
uint8_t *pos, const struct _olm_ed25519_public_key * value
);
/** Unpickle the ed25519 public key. Returns a pointer to the next item in the
* buffer. */
const uint8_t * _olm_unpickle_ed25519_public_key(
const uint8_t *pos, const uint8_t *end,
struct _olm_ed25519_public_key * value
);
/** Get the number of bytes needed to pickle an ed25519 key pair */
size_t _olm_pickle_ed25519_key_pair_length(
const struct _olm_ed25519_key_pair * value
);
/** Pickle the ed25519 key pair. Returns a pointer to the next free space in
* the buffer. */
uint8_t * _olm_pickle_ed25519_key_pair(
uint8_t *pos, const struct _olm_ed25519_key_pair * value
);
/** Unpickle the ed25519 key pair. Returns a pointer to the next item in the
* buffer. */
const uint8_t * _olm_unpickle_ed25519_key_pair(
const uint8_t *pos, const uint8_t *end,
struct _olm_ed25519_key_pair * value
);
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif #endif
......
...@@ -141,40 +141,6 @@ std::uint8_t const * unpickle( ...@@ -141,40 +141,6 @@ std::uint8_t const * unpickle(
_olm_curve25519_key_pair & value _olm_curve25519_key_pair & value
); );
std::size_t pickle_length(
const _olm_ed25519_public_key & value
);
std::uint8_t * pickle(
std::uint8_t * pos,
const _olm_ed25519_public_key & value
);
std::uint8_t const * unpickle(
std::uint8_t const * pos, std::uint8_t const * end,
_olm_ed25519_public_key & value
);
std::size_t pickle_length(
const _olm_ed25519_key_pair & value
);
std::uint8_t * pickle(
std::uint8_t * pos,
const _olm_ed25519_key_pair & value
);
std::uint8_t const * unpickle(
std::uint8_t const * pos, std::uint8_t const * end,
_olm_ed25519_key_pair & value
);
} // namespace olm } // namespace olm
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
*/ */
#include "olm/account.hh" #include "olm/account.hh"
#include "olm/base64.hh" #include "olm/base64.hh"
#include "olm/pickle.h"
#include "olm/pickle.hh" #include "olm/pickle.hh"
#include "olm/memory.hh" #include "olm/memory.hh"
...@@ -265,7 +266,7 @@ static std::size_t pickle_length( ...@@ -265,7 +266,7 @@ static std::size_t pickle_length(
olm::IdentityKeys const & value olm::IdentityKeys const & value
) { ) {
size_t length = 0; size_t length = 0;
length += olm::pickle_length(value.ed25519_key); length += _olm_pickle_ed25519_key_pair_length(&value.ed25519_key);
length += olm::pickle_length(value.curve25519_key); length += olm::pickle_length(value.curve25519_key);
return length; return length;
} }
...@@ -275,7 +276,7 @@ static std::uint8_t * pickle( ...@@ -275,7 +276,7 @@ static std::uint8_t * pickle(
std::uint8_t * pos, std::uint8_t * pos,
olm::IdentityKeys const & value olm::IdentityKeys const & value
) { ) {
pos = olm::pickle(pos, value.ed25519_key); pos = _olm_pickle_ed25519_key_pair(pos, &value.ed25519_key);
pos = olm::pickle(pos, value.curve25519_key); pos = olm::pickle(pos, value.curve25519_key);
return pos; return pos;
} }
...@@ -285,7 +286,7 @@ static std::uint8_t const * unpickle( ...@@ -285,7 +286,7 @@ static std::uint8_t const * unpickle(
std::uint8_t const * pos, std::uint8_t const * end, std::uint8_t const * pos, std::uint8_t const * end,
olm::IdentityKeys & value olm::IdentityKeys & value
) { ) {
pos = olm::unpickle(pos, end, value.ed25519_key); pos = _olm_unpickle_ed25519_key_pair(pos, end, &value.ed25519_key);
pos = olm::unpickle(pos, end, value.curve25519_key); pos = olm::unpickle(pos, end, value.curve25519_key);
return pos; return pos;
} }
......
...@@ -139,77 +139,76 @@ std::uint8_t const * olm::unpickle( ...@@ -139,77 +139,76 @@ std::uint8_t const * olm::unpickle(
return pos; return pos;
} }
std::size_t olm::pickle_length( ////// pickle.h implementations
const _olm_ed25519_public_key & value
std::size_t _olm_pickle_ed25519_public_key_length(
const _olm_ed25519_public_key * value
) { ) {
return sizeof(value.public_key); return sizeof(value->public_key);
} }
std::uint8_t * olm::pickle( std::uint8_t * _olm_pickle_ed25519_public_key(
std::uint8_t * pos, std::uint8_t * pos,
const _olm_ed25519_public_key & value const _olm_ed25519_public_key *value
) { ) {
pos = olm::pickle_bytes( pos = olm::pickle_bytes(
pos, value.public_key, sizeof(value.public_key) pos, value->public_key, sizeof(value->public_key)
); );
return pos; return pos;
} }
std::uint8_t const * olm::unpickle( std::uint8_t const * _olm_unpickle_ed25519_public_key(
std::uint8_t const * pos, std::uint8_t const * end, std::uint8_t const * pos, std::uint8_t const * end,
_olm_ed25519_public_key & value _olm_ed25519_public_key * value
) { ) {
pos = olm::unpickle_bytes( pos = olm::unpickle_bytes(
pos, end, value.public_key, sizeof(value.public_key) pos, end, value->public_key, sizeof(value->public_key)
); );
return pos; return pos;
} }
std::size_t olm::pickle_length( std::size_t _olm_pickle_ed25519_key_pair_length(
const _olm_ed25519_key_pair & value const _olm_ed25519_key_pair *value
) { ) {
return sizeof(value.public_key.public_key) return sizeof(value->public_key.public_key)
+ sizeof(value.private_key.private_key); + sizeof(value->private_key.private_key);
} }
std::uint8_t * olm::pickle( std::uint8_t * _olm_pickle_ed25519_key_pair(
std::uint8_t * pos, std::uint8_t * pos,
const _olm_ed25519_key_pair & value const _olm_ed25519_key_pair *value
) { ) {
pos = olm::pickle_bytes( pos = olm::pickle_bytes(
pos, value.public_key.public_key, pos, value->public_key.public_key,
sizeof(value.public_key.public_key) sizeof(value->public_key.public_key)
); );
pos = olm::pickle_bytes( pos = olm::pickle_bytes(
pos, value.private_key.private_key, pos, value->private_key.private_key,
sizeof(value.private_key.private_key) sizeof(value->private_key.private_key)
); );
return pos; return pos;
} }
std::uint8_t const * olm::unpickle( std::uint8_t const * _olm_unpickle_ed25519_key_pair(
std::uint8_t const * pos, std::uint8_t const * end, std::uint8_t const * pos, std::uint8_t const * end,
_olm_ed25519_key_pair & value _olm_ed25519_key_pair *value
) { ) {
pos = olm::unpickle_bytes( pos = olm::unpickle_bytes(
pos, end, value.public_key.public_key, pos, end, value->public_key.public_key,
sizeof(value.public_key.public_key) sizeof(value->public_key.public_key)
); );
pos = olm::unpickle_bytes( pos = olm::unpickle_bytes(
pos, end, value.private_key.private_key, pos, end, value->private_key.private_key,
sizeof(value.private_key.private_key) sizeof(value->private_key.private_key)
); );
return pos; return pos;
} }
////// pickle.h implementations
uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value) { uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value) {
return olm::pickle(pos, value); return olm::pickle(pos, value);
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment