aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/curve25519/sodium
diff options
context:
space:
mode:
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};
}