aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard van der Hoff <github@rvanderhoff.org.uk>2016-09-06 11:08:04 +0100
committerGitHub <noreply@github.com>2016-09-06 11:08:04 +0100
commit7c84ce8098f58b28e9996f8644caafef8d32d308 (patch)
tree3ffbabe907b4a3f46d740d01114016add4539300
parent8912d13b0b856e5eb3e43594260dd5da3ad6535c (diff)
parent833ecd3c736cea71a693cd9dedec4f1bffa87000 (diff)
Merge pull request #18 from matrix-org/rav/pickle_ed25519_in_c
Convert ed25519 pickling functions to C
-rw-r--r--include/olm/pickle.h40
-rw-r--r--include/olm/pickle.hh34
-rw-r--r--src/account.cpp7
-rw-r--r--src/pickle.cpp55
4 files changed, 71 insertions, 65 deletions
diff --git a/include/olm/pickle.h b/include/olm/pickle.h
index c1e8192..0e668bb 100644
--- a/include/olm/pickle.h
+++ b/include/olm/pickle.h
@@ -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
diff --git a/include/olm/pickle.hh b/include/olm/pickle.hh
index a09b8a1..4cf3f36 100644
--- a/include/olm/pickle.hh
+++ b/include/olm/pickle.hh
@@ -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
diff --git a/src/account.cpp b/src/account.cpp
index c77f95c..248f3d1 100644
--- a/src/account.cpp
+++ b/src/account.cpp
@@ -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;
}
diff --git a/src/pickle.cpp b/src/pickle.cpp
index e9708b7..b6ee4c5 100644
--- a/src/pickle.cpp
+++ b/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
+////// pickle.h implementations
+
+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,
- const _olm_ed25519_public_key & value
+ const _olm_ed25519_public_key *value
) {
pos = olm::pickle_bytes(
- pos, value.public_key, sizeof(value.public_key)
+ pos, value->public_key, sizeof(value->public_key)
);
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,
- _olm_ed25519_public_key & value
+ _olm_ed25519_public_key * value
) {
pos = olm::unpickle_bytes(
- pos, end, value.public_key, sizeof(value.public_key)
+ pos, end, value->public_key, sizeof(value->public_key)
);
return pos;
-
}
-std::size_t olm::pickle_length(
- const _olm_ed25519_key_pair & value
+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);
+ return sizeof(value->public_key.public_key)
+ + sizeof(value->private_key.private_key);
}
-std::uint8_t * olm::pickle(
+std::uint8_t * _olm_pickle_ed25519_key_pair(
std::uint8_t * pos,
- const _olm_ed25519_key_pair & value
+ const _olm_ed25519_key_pair *value
) {
pos = olm::pickle_bytes(
- pos, value.public_key.public_key,
- sizeof(value.public_key.public_key)
+ 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)
+ pos, value->private_key.private_key,
+ sizeof(value->private_key.private_key)
);
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,
- _olm_ed25519_key_pair & value
+ _olm_ed25519_key_pair *value
) {
pos = olm::unpickle_bytes(
- pos, end, value.public_key.public_key,
- sizeof(value.public_key.public_key)
+ 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)
+ pos, end, value->private_key.private_key,
+ sizeof(value->private_key.private_key)
);
return pos;
}
-////// pickle.h implementations
-
uint8_t * _olm_pickle_uint32(uint8_t * pos, uint32_t value) {
return olm::pickle(pos, value);
}