Convert ed25519 pickling functions to C
... so that I can use them from the group session bits.
This commit is contained in:
parent
c09aa77c4a
commit
833ecd3c73
4 changed files with 112 additions and 106 deletions
|
@ -21,6 +21,10 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct _olm_ed25519_public_key;
|
||||
struct _olm_ed25519_key_pair;
|
||||
|
||||
|
||||
#define _olm_pickle_uint32_length(value) 4
|
||||
uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value);
|
||||
uint8_t const * _olm_unpickle_uint32(
|
||||
|
@ -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);
|
||||
|
||||
|
||||
/** 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
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
@ -141,40 +141,6 @@ std::uint8_t const * unpickle(
|
|||
_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
|
||||
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
*/
|
||||
#include "olm/account.hh"
|
||||
#include "olm/base64.hh"
|
||||
#include "olm/pickle.h"
|
||||
#include "olm/pickle.hh"
|
||||
#include "olm/memory.hh"
|
||||
|
||||
|
@ -265,7 +266,7 @@ static std::size_t pickle_length(
|
|||
olm::IdentityKeys const & value
|
||||
) {
|
||||
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);
|
||||
return length;
|
||||
}
|
||||
|
@ -275,7 +276,7 @@ static std::uint8_t * pickle(
|
|||
std::uint8_t * pos,
|
||||
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);
|
||||
return pos;
|
||||
}
|
||||
|
@ -285,7 +286,7 @@ static std::uint8_t const * unpickle(
|
|||
std::uint8_t const * pos, std::uint8_t const * end,
|
||||
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);
|
||||
return pos;
|
||||
}
|
||||
|
|
137
src/pickle.cpp
137
src/pickle.cpp
|
@ -139,77 +139,76 @@ std::uint8_t const * olm::unpickle(
|
|||
return pos;
|
||||
}
|
||||
|
||||
std::size_t olm::pickle_length(
|
||||
const _olm_ed25519_public_key & value
|
||||
) {
|
||||
return sizeof(value.public_key);
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t * olm::pickle(
|
||||
std::uint8_t * pos,
|
||||
const _olm_ed25519_public_key & value
|
||||
) {
|
||||
pos = olm::pickle_bytes(
|
||||
pos, value.public_key, sizeof(value.public_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t const * olm::unpickle(
|
||||
std::uint8_t const * pos, std::uint8_t const * end,
|
||||
_olm_ed25519_public_key & value
|
||||
) {
|
||||
pos = olm::unpickle_bytes(
|
||||
pos, end, value.public_key, sizeof(value.public_key)
|
||||
);
|
||||
return pos;
|
||||
|
||||
}
|
||||
|
||||
|
||||
std::size_t olm::pickle_length(
|
||||
const _olm_ed25519_key_pair & value
|
||||
) {
|
||||
return sizeof(value.public_key.public_key)
|
||||
+ sizeof(value.private_key.private_key);
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t * olm::pickle(
|
||||
std::uint8_t * pos,
|
||||
const _olm_ed25519_key_pair & value
|
||||
) {
|
||||
pos = olm::pickle_bytes(
|
||||
pos, value.public_key.public_key,
|
||||
sizeof(value.public_key.public_key)
|
||||
);
|
||||
pos = olm::pickle_bytes(
|
||||
pos, value.private_key.private_key,
|
||||
sizeof(value.private_key.private_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t const * olm::unpickle(
|
||||
std::uint8_t const * pos, std::uint8_t const * end,
|
||||
_olm_ed25519_key_pair & value
|
||||
) {
|
||||
pos = olm::unpickle_bytes(
|
||||
pos, end, value.public_key.public_key,
|
||||
sizeof(value.public_key.public_key)
|
||||
);
|
||||
pos = olm::unpickle_bytes(
|
||||
pos, end, value.private_key.private_key,
|
||||
sizeof(value.private_key.private_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
////// pickle.h implementations
|
||||
|
||||
std::size_t _olm_pickle_ed25519_public_key_length(
|
||||
const _olm_ed25519_public_key * value
|
||||
) {
|
||||
return sizeof(value->public_key);
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t * _olm_pickle_ed25519_public_key(
|
||||
std::uint8_t * pos,
|
||||
const _olm_ed25519_public_key *value
|
||||
) {
|
||||
pos = olm::pickle_bytes(
|
||||
pos, value->public_key, sizeof(value->public_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t const * _olm_unpickle_ed25519_public_key(
|
||||
std::uint8_t const * pos, std::uint8_t const * end,
|
||||
_olm_ed25519_public_key * value
|
||||
) {
|
||||
pos = olm::unpickle_bytes(
|
||||
pos, end, value->public_key, sizeof(value->public_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
std::size_t _olm_pickle_ed25519_key_pair_length(
|
||||
const _olm_ed25519_key_pair *value
|
||||
) {
|
||||
return sizeof(value->public_key.public_key)
|
||||
+ sizeof(value->private_key.private_key);
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t * _olm_pickle_ed25519_key_pair(
|
||||
std::uint8_t * pos,
|
||||
const _olm_ed25519_key_pair *value
|
||||
) {
|
||||
pos = olm::pickle_bytes(
|
||||
pos, value->public_key.public_key,
|
||||
sizeof(value->public_key.public_key)
|
||||
);
|
||||
pos = olm::pickle_bytes(
|
||||
pos, value->private_key.private_key,
|
||||
sizeof(value->private_key.private_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
std::uint8_t const * _olm_unpickle_ed25519_key_pair(
|
||||
std::uint8_t const * pos, std::uint8_t const * end,
|
||||
_olm_ed25519_key_pair *value
|
||||
) {
|
||||
pos = olm::unpickle_bytes(
|
||||
pos, end, value->public_key.public_key,
|
||||
sizeof(value->public_key.public_key)
|
||||
);
|
||||
pos = olm::unpickle_bytes(
|
||||
pos, end, value->private_key.private_key,
|
||||
sizeof(value->private_key.private_key)
|
||||
);
|
||||
return pos;
|
||||
}
|
||||
|
||||
uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value) {
|
||||
return olm::pickle(pos, value);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue