aboutsummaryrefslogtreecommitdiff
path: root/libcmix-crypto/curve25519/sodium/libsodium_curve25519.c
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/libsodium_curve25519.c
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/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};
}