aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/curve25519/sodium
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-09-01 13:07:57 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2016-09-01 14:05:40 +0200
commitdffdb1388991c5b5688139bfa093c8581a0f3a36 (patch)
treeaf0d82089d335e8b9eda6d6f754da4b2905eb901 /libcmix-crypto/curve25519/sodium
parent9d7701c370f06be663f2a485507d388ab5194ca8 (diff)
downloadcmix-dffdb1388991c5b5688139bfa093c8581a0f3a36.tar.gz
cmix-dffdb1388991c5b5688139bfa093c8581a0f3a36.tar.bz2
cmix-dffdb1388991c5b5688139bfa093c8581a0f3a36.zip
Added a sodium implementation for creating private and public keys.
Diffstat (limited to 'libcmix-crypto/curve25519/sodium')
-rw-r--r--libcmix-crypto/curve25519/sodium/CMakeLists.txt3
-rw-r--r--libcmix-crypto/curve25519/sodium/libsodium_curve25519.c21
2 files changed, 22 insertions, 2 deletions
diff --git a/libcmix-crypto/curve25519/sodium/CMakeLists.txt b/libcmix-crypto/curve25519/sodium/CMakeLists.txt
index 9fbf010..213a49f 100644
--- a/libcmix-crypto/curve25519/sodium/CMakeLists.txt
+++ b/libcmix-crypto/curve25519/sodium/CMakeLists.txt
@@ -2,6 +2,8 @@ include(get_target_name)
get_target_name(target_name)
+include(ImportSodium)
+
add_library(${target_name}
libsodium_curve25519.c
)
@@ -12,4 +14,5 @@ target_compile_options(${target_name}
target_link_libraries(${target_name}
PUBLIC curve25519-interface
+ PUBLIC Sodium
)
diff --git a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c
index 23dbf12..8fd087a 100644
--- a/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c
+++ b/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c
@@ -1,13 +1,30 @@
#include "curve25519.h"
+#include <sodium.h>
+
#include <stddef.h>
+#include <stdlib.h>
+
+void init() {
+ if(sodium_init() == -1) {
+ exit(-1);
+ }
+}
void sodium_curve25519_keypair_deleter(struct KeyPair* p) {
- free(p->sec);
+ sodium_free(p->sec);
free(p->pub);
}
struct KeyPair curve25519_create_keypair() {
- return (struct KeyPair){NULL, NULL, 0, 0, &sodium_curve25519_keypair_deleter};
+ init();
+
+ unsigned char* sec = (unsigned char*) sodium_malloc(crypto_box_SECRETKEYBYTES);
+ unsigned char* pub = (unsigned char*) malloc(crypto_box_PUBLICKEYBYTES);
+
+ randombytes_buf(sec, crypto_box_SECRETKEYBYTES);
+ crypto_scalarmult_base(pub, sec);
+
+ return (struct KeyPair){sec, pub, crypto_box_SECRETKEYBYTES, crypto_box_PUBLICKEYBYTES, &sodium_curve25519_keypair_deleter};
}