aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2017-02-26 14:31:42 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2017-02-26 14:31:42 +0100
commit4c748c1022ac898ed59ebd2a1884a62ce4063b39 (patch)
treefa6e1e2436fe3243c2140cd2e0e62de2253742b3
parent623dffe2c054d1639dbf9c8f21ddfb088c7950fb (diff)
downloadcmix-4c748c1022ac898ed59ebd2a1884a62ce4063b39.tar.gz
cmix-4c748c1022ac898ed59ebd2a1884a62ce4063b39.tar.bz2
cmix-4c748c1022ac898ed59ebd2a1884a62ce4063b39.zip
Enabled pointer tracing in ed25519 implementation.
-rw-r--r--libcmix-crypto/ed25519/gcrypt/gcrypt_ed25519.c112
-rw-r--r--libcmix-protobuf/CMakeLists.txt5
-rw-r--r--node/node_node.cpp30
-rwxr-xr-xrun.sh5
4 files changed, 88 insertions, 64 deletions
diff --git a/libcmix-crypto/ed25519/gcrypt/gcrypt_ed25519.c b/libcmix-crypto/ed25519/gcrypt/gcrypt_ed25519.c
index 54202be..4839ce5 100644
--- a/libcmix-crypto/ed25519/gcrypt/gcrypt_ed25519.c
+++ b/libcmix-crypto/ed25519/gcrypt/gcrypt_ed25519.c
@@ -68,6 +68,9 @@ void DEF(initialize)(void) {
g = gcry_mpi_ec_get_point("g", ctx, false);
p = gcry_mpi_ec_get_mpi("p", ctx, false);
+
+ TRACE(__FILE__, __LINE__, g)
+ TRACE(__FILE__, __LINE__, p)
}
struct KeyPair DEF(create_keypair)(void) {
@@ -97,6 +100,9 @@ struct KeyPair DEF(create_keypair)(void) {
gcry_sexp_release(key_gen_sexp);
gcry_sexp_release(key_pair);
+ TRACE(__FILE__, __LINE__, d)
+ TRACE(__FILE__, __LINE__, q)
+
return (struct KeyPair) {
.sec = d,
.pub = q
@@ -125,6 +131,8 @@ void DEF(element_to_array)(unsigned char** buffer, size_t* len, GroupElement ele
*len = nr_bytes * 2;
*buffer = (unsigned char*) calloc(*len, sizeof(unsigned char));
+ TRACE(__FILE__, __LINE__, buffer)
+
unsigned char* temp = (unsigned char*) calloc(nr_bytes, sizeof(unsigned char));
size_t nwritten = 0;
@@ -146,17 +154,13 @@ GroupElement DEF(message_to_element)(char const* buffer, size_t len, bool secure
(void) secure;
gcry_error_t error;
- assert(len == 31);
+ //assert(len == 31);
gcry_mpi_t mpi;
gcry_mpi_scan(&mpi, GCRYMPI_FMT_USG, buffer, len, NULL);
//mpi * stride
- gcry_mpi_dump(mpi);
- printf("\n");
gcry_mpi_lshift(mpi, mpi, (unsigned) lround(log2(stride)));
- gcry_mpi_dump(mpi);
- printf("\n");
char* encoded_point = (char*) calloc(nr_bytes+1, sizeof(char));
gcry_mpi_point_t point = gcry_mpi_point_new(0);
@@ -165,7 +169,6 @@ GroupElement DEF(message_to_element)(char const* buffer, size_t len, bool secure
encoded_point[0] = 0x40;
unsigned int byte_size = (unsigned) ceil(gcry_mpi_get_nbits(mpi) / 8.0);
- printf("byte_size: %i\n", byte_size);
//gcry_mpi_print(GCRYMPI_FMT_USG, (unsigned char*) encoded_point + 1 + (32 - byte_size), byte_size, NULL, mpi);
gcry_mpi_print(GCRYMPI_FMT_USG, (unsigned char*) encoded_point + 1, 32, NULL, mpi);
@@ -175,35 +178,14 @@ GroupElement DEF(message_to_element)(char const* buffer, size_t len, bool secure
encoded_point[32-i] = temp;
}
- for(int i = 0; i < nr_bytes+1; i++) {
- printf("%02x", 0xFF & (unsigned) encoded_point[i]);
- }
- printf("\n");
-
gcry_mpi_t encoded_mpi = gcry_mpi_new(0);
gcry_mpi_set_opaque_copy(encoded_mpi, encoded_point, (nr_bytes + 1) * sizeof(char) * 8);
error = gcry_mpi_ec_decode_point(point, encoded_mpi, ctx);
check(error);
- gcry_mpi_t x = gcry_mpi_new(0);
- gcry_mpi_t y = gcry_mpi_new(0);
- gcry_mpi_ec_get_affine(x, y, point, ctx);
-
gcry_mpi_release(encoded_mpi);
- printf("%i %i\n", count, stride);
- gcry_mpi_dump(x);
- printf(",\n");
- gcry_mpi_dump(y);
- printf("\n");
- gcry_mpi_dump(mpi);
- printf("\n");
- gcry_mpi_dump(encoded_mpi);
- printf("\n");
- gcry_mpi_dump(p);
- printf("\n");
- assert(gcry_mpi_cmp(mpi, p) == -1);
assert(count < stride);
gcry_mpi_add_ui(mpi, mpi, 1);
count++;
@@ -218,23 +200,31 @@ GroupElement DEF(message_to_element)(char const* buffer, size_t len, bool secure
gcry_mpi_release(mpi);
free(encoded_point);
+ TRACE(__FILE__, __LINE__, point)
+
return point;
}
+size_t DEF(get_message_size)(void);
+
void DEF(element_to_message)(unsigned char** buffer, const GroupElement el) {
gcry_mpi_t y = gcry_mpi_new(0);
gcry_mpi_ec_get_affine(NULL, y, (gcry_mpi_point_t) el, ctx);
gcry_mpi_rshift(y, y, (unsigned) lround(log2(stride)));
- size_t nr_written;
- gcry_mpi_aprint(GCRYMPI_FMT_USG, buffer, &nr_written, y);
+ size_t mes_len = DEF(get_message_size)();
+ *buffer = (unsigned char*) calloc(mes_len, sizeof(unsigned char));
- gcry_mpi_dump(y);
- printf("\n");
+ TRACE(__FILE__, __LINE__, buffer)
- assert(nr_written == 31);
+ unsigned char* buffer2;
+ size_t nr_written;
+ gcry_mpi_aprint(GCRYMPI_FMT_USG, &buffer2, &nr_written, y);
+ memcpy(*buffer, buffer2, mes_len);
+
+ gcry_free(buffer2);
gcry_mpi_release(y);
}
@@ -247,13 +237,6 @@ GroupElement DEF(array_to_element)(char const* buffer, size_t len, bool secure)
size_t error_pos;
gcry_error_t error;
- printf("%i\n", len);
- for(int i = 0; i < len; i++) {
- if(i == 32) { printf("\n"); }
- printf("%02x", 0xFF & buffer[i]);
- }
- printf("\n");
-
gcry_mpi_t x;
error = gcry_mpi_scan(&x, GCRYMPI_FMT_USG, buffer, len/2, &error_pos);
check(error);
@@ -261,15 +244,14 @@ GroupElement DEF(array_to_element)(char const* buffer, size_t len, bool secure)
gcry_mpi_t y;
error = gcry_mpi_scan(&y, GCRYMPI_FMT_USG, buffer + len/2, len/2, &error_pos);
- gcry_mpi_dump(y);
- printf("\n");
-
gcry_mpi_point_t point = gcry_mpi_point_new(nr_point_bits);
gcry_mpi_point_set(point, x, y, GCRYMPI_CONST_ONE);
gcry_mpi_release(x);
gcry_mpi_release(y);
+ TRACE(__FILE__, __LINE__, point)
+
return point;
}
@@ -293,16 +275,7 @@ void DEF(get_pub_key_hash)(char** buffer, size_t* len, GroupElement const pub) {
gcry_mpi_t x = gcry_mpi_new(0);
gcry_mpi_t y = gcry_mpi_new(0);
- gcry_mpi_point_get(x, y, NULL, (gcry_mpi_point_t)pub);
-
- printf("pub: %p\n", pub);
-
- fprintf(stderr, "lel1: ");
- gcry_mpi_dump(x);
- printf("\n");
- fprintf(stderr, "lel2: ");
- gcry_mpi_dump(y);
- printf("\n");
+ gcry_mpi_ec_get_affine(x, y, (gcry_mpi_point_t)pub, ctx);
*len = DEF(get_pub_key_hash_length)();
*buffer = (char*) calloc(*len, sizeof(char));
@@ -319,7 +292,9 @@ void DEF(get_pub_key_hash)(char** buffer, size_t* len, GroupElement const pub) {
gcry_free(temp);
TRACE(__FILE__, __LINE__, *buffer);
- //gcry_sexp_release(pubkey);
+
+ gcry_mpi_release(x);
+ gcry_mpi_release(y);
}
GroupElement DEF(get_group_element)(bool secure) {
@@ -335,10 +310,12 @@ GroupElement DEF(get_group_element)(bool secure) {
bytes = gcry_random_bytes_secure(nr_bytes, GCRY_VERY_STRONG_RANDOM);
TRACE(__FILE__, __LINE__, bytes);
error = gcry_mpi_scan(&a, GCRYMPI_FMT_USG, bytes, nr_bytes, &parse_error_offset);
+ TRACE(__FILE__,__LINE__, a);
check(error);
} while(gcry_mpi_cmp_ui(a, 0) == 0 || gcry_mpi_cmp(a, p) != -1);
char* encoded_point = (char*) calloc(nr_bytes+1, sizeof(char));
+ TRACE(__FILE__, __LINE__, encoded_point)
gcry_mpi_point_t point = gcry_mpi_point_new(0);
do {
encoded_point[0] = 0x40;
@@ -353,6 +330,7 @@ GroupElement DEF(get_group_element)(bool secure) {
}
gcry_mpi_t encoded_mpi = gcry_mpi_new(0);
+ TRACE(__FILE__, __LINE__, encoded_mpi)
gcry_mpi_set_opaque_copy(encoded_mpi, encoded_point, (nr_bytes + 1) * sizeof(char) * 8);
error = gcry_mpi_ec_decode_point(point, encoded_mpi, ctx);
@@ -371,6 +349,9 @@ GroupElement DEF(get_group_element)(bool secure) {
gcry_mpi_release(a);
gcry_free(bytes);
+ free(encoded_point);
+
+ TRACE(__FILE__, __LINE__, point);
return point;
}
@@ -384,6 +365,8 @@ GroupElement DEF(get_key_exchange_value)(GroupElement group_el) {
gcry_mpi_release(x);
+ TRACE(__FILE__, __LINE__, mult)
+
return mult;
}
@@ -391,6 +374,9 @@ GroupElement DEF(combine)(GroupElement lh, GroupElement rh, bool secure) {
(void) secure;
gcry_mpi_point_t addition = gcry_mpi_point_new(nr_point_bits);
gcry_mpi_ec_add(addition, (gcry_mpi_point_t)lh, (gcry_mpi_point_t)rh, ctx);
+
+ TRACE(__FILE__, __LINE__, addition)
+
return addition;
}
@@ -409,6 +395,8 @@ GroupElement DEF(invert)(GroupElement const el) {
gcry_mpi_release(x);
gcry_mpi_release(y);
+ TRACE(__FILE__, __LINE__, point)
+
return point;
}
@@ -419,11 +407,12 @@ void DEF(delete_group_element)(GroupElement element) {
GroupElement DEF(uncombine)(GroupElement lh, GroupElement rh, bool secure) {
(void) secure;
- gcry_mpi_point_t inv_rh = DEF(invert)(rh);
- gcry_mpi_point_t ret = DEF(combine)(lh, inv_rh, secure);
+ GroupElement inv_rh = DEF(invert)((gcry_mpi_point_t)rh);
+ GroupElement ret = DEF(combine)(lh, inv_rh, secure);
+ DEF(delete_group_element)(inv_rh);
+
+ TRACE(__FILE__, __LINE__, ret)
- //gcry_mpi_point_t ret = gcry_mpi_point_new(0);
- //gcry_mpi_ec_sub(ret, (gcry_mpi_point_t)lh, (gcry_mpi_point_t)rh, ctx);
return ret;
}
@@ -434,6 +423,7 @@ GroupElement DEF(get_decryption_share)(GroupElement r, GroupElement e) {
GroupElement d = DEF(invert)(inv_d);
gcry_mpi_point_release(inv_d);
+ TRACE(__FILE__, __LINE__, d)
return d;
}
@@ -448,6 +438,7 @@ size_t DEF(get_message_size)(void) {
void DEF(add_public_share)(GroupElement* el, char const* share, size_t in_len, GroupElement pubkey) {
GroupElement share_el = DEF(array_to_element)(share, in_len, false);
*el = DEF(combine)(share_el, pubkey, false);
+ TRACE(__FILE__, __LINE__, *el);
gcry_mpi_point_release((gcry_mpi_point_t)share_el);
}
@@ -464,6 +455,8 @@ GroupElement DEF(derive_shared_key)(struct KeyPair keypair, unsigned char const*
gcry_mpi_point_release((gcry_mpi_point_t) ga);
+ TRACE(__FILE__, __LINE__, gab);
+
return gab;
}
@@ -489,6 +482,11 @@ void DEF(encrypt)(GroupElement* random_element, GroupElement* message_element, G
gcry_mpi_release(random_mpi);
gcry_mpi_point_release(c2);
+ gcry_mpi_point_release(random);
+
+ TRACE(__FILE__, __LINE__, *random_element);
+ TRACE(__FILE__, __LINE__, *message_element);
+
}
unsigned int DEF(get_uniform_int)(unsigned int upper) {
diff --git a/libcmix-protobuf/CMakeLists.txt b/libcmix-protobuf/CMakeLists.txt
index c080220..27eff16 100644
--- a/libcmix-protobuf/CMakeLists.txt
+++ b/libcmix-protobuf/CMakeLists.txt
@@ -11,8 +11,13 @@ add_library(cmix-protobuf
${proto_headers} ${proto_sources}
)
+set_target_properties(cmix-protobuf PROPERTIES COMPILE_FLAGS -w)
+
target_include_directories(cmix-protobuf
PUBLIC ${Protobuf_INCLUDE_DIRS}
+)
+
+target_include_directories(cmix-protobuf SYSTEM
PUBLIC ${CMAKE_CURRENT_BINARY_DIR}
)
diff --git a/node/node_node.cpp b/node/node_node.cpp
index 05ca490..0bac4b3 100644
--- a/node/node_node.cpp
+++ b/node/node_node.cpp
@@ -455,16 +455,30 @@ void Node::handle_node_realpost(cmix_proto::RealPost const& realpost) {
for(auto i = 0u; i < cmix_ctx.nr_participants; i++) {
{
- std::stringstream ss;
- for(int j = 32; j < 64; j++) {
- ss << "\\" << std::setw(3) << std::setfill('0') << std::oct << (((unsigned int) msgs[i][j]) & 0xFF);
+ for(int j = 0; j < 32; j++) {
+ std::cout << std:: setw(4) << j;
}
- BOOST_LOG_TRIVIAL(trace) << ss.str();
+ std::cout << std::endl;
+
+ for(int j = 0; j < 32; j++) {
+ std::cout << std::setw(4) << (0xFF & (unsigned int) msgs[i][32+j]) ;
+ }
+ std::cout << std::endl;
}
char* message;
element_to_message(&cmix_ctx, (unsigned char**) &message, msgs[i]);
+ for(int i = 0; i < 31; i++) {
+ std::cout << std:: setw(4) << i;
+ }
+ std::cout << std::endl;
+
+ for(int i = 0; i < 31; i++) {
+ std::cout << std::setw(4) << (0xFF & (unsigned int) message[i]) ;
+ }
+ std::cout << std::endl;
+
char* dest;
size_t dest_len;
@@ -477,8 +491,12 @@ void Node::handle_node_realpost(cmix_proto::RealPost const& realpost) {
cmix_proto::Payload pay;
pay.set_payload(payload, payload_len);
- clients.at(dest_s).async_send(pay);
-
+ try {
+ clients.at(dest_s).async_send(pay);
+ } catch(...) {
+ exit(-1);
+ }
+
free(dest);
free(payload);
free(message);
diff --git a/run.sh b/run.sh
index 687c802..c7b9ec3 100755
--- a/run.sh
+++ b/run.sh
@@ -1,12 +1,15 @@
#!/bin/bash
build_dir=/home/dennis/projects/cmix/build-cmix-Desktop-Debug
+#build_dir=/home/dennis/projects/cmix/build-gcc
if [ $# == 0 ] ; then
tool=""
elif [ $1 == "benchmark" ] ; then
tool="valgrind --tool=cachegrind"
elif [ $1 == "valgrind" ] ; then
- tool="valgrind --leak-check=yes --track-origins=yes"
+ tool="valgrind --leak-check=yes --track-origins=yes --suppressions=../suppressions"
+elif [ $1 == "gensupp" ]; then
+ tool="valgrind --gen-suppressions=all"
elif [ $1 == "gdb" ] ; then
tool="gdb -ex run --args"
else