aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcmix-crypto/curve25519/sodium/libsodium_curve25519.c')
-rw-r--r--libcmix-crypto/curve25519/sodium/libsodium_curve25519.c21
1 files changed, 19 insertions, 2 deletions
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};
}