From 5cd610a07468137066ea4daa5176c3e7045113b0 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Wed, 5 Aug 2020 03:38:22 +0200 Subject: ecp moved to root; fixed utils and tests --- ecp/util/util.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 ecp/util/util.c (limited to 'ecp/util/util.c') diff --git a/ecp/util/util.c b/ecp/util/util.c new file mode 100644 index 0000000..4f4adc2 --- /dev/null +++ b/ecp/util/util.c @@ -0,0 +1,92 @@ +#include +#include +#include + +#include "core.h" +#include "cr.h" +#include "util.h" + +int ecp_util_key_save(ECPContext *ctx, ECPDHKey *key, char *filename) { + int fd; + ssize_t rv; + + if ((fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) < 0) return ECP_ERR; + rv = write(fd, ecp_cr_dh_pub_get_buf(&key->public), ECP_ECDH_SIZE_KEY); + if (rv != ECP_ECDH_SIZE_KEY) { + close(fd); + return ECP_ERR; + } + rv = write(fd, &key->private, sizeof(key->private)); + if (rv != sizeof(key->private)) { + close(fd); + return ECP_ERR; + } + close(fd); + return ECP_OK; +} + +int ecp_util_key_load(ECPContext *ctx, ECPDHKey *key, char *filename) { + int fd; + ssize_t rv; + unsigned char buf[ECP_ECDH_SIZE_KEY]; + + if ((fd = open(filename, O_RDONLY)) < 0) return ECP_ERR; + rv = read(fd, buf, ECP_ECDH_SIZE_KEY); + if (rv != ECP_ECDH_SIZE_KEY) { + close(fd); + return ECP_ERR; + } + rv = read(fd, &key->private, sizeof(key->private)); + if (rv != sizeof(key->private)) { + close(fd); + return ECP_ERR; + } + close(fd); + + ecp_cr_dh_pub_from_buf(&key->public, buf); + + key->valid = 1; + return ECP_OK; +} + +int ecp_util_node_save(ECPContext *ctx, ECPNode *node, char *filename) { + int fd; + ssize_t rv; + + if ((fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) < 0) return ECP_ERR; + rv = write(fd, ecp_cr_dh_pub_get_buf(&node->public), ECP_ECDH_SIZE_KEY); + if (rv != ECP_ECDH_SIZE_KEY) { + close(fd); + return ECP_ERR; + } + rv = write(fd, &node->addr, sizeof(node->addr)); + if (rv != sizeof(node->addr)) { + close(fd); + return ECP_ERR; + } + close(fd); + return ECP_OK; +} + +int ecp_util_node_load(ECPContext *ctx, ECPNode *node, char *filename) { + int fd; + ssize_t rv; + unsigned char buf[ECP_ECDH_SIZE_KEY]; + + if ((fd = open(filename, O_RDONLY)) < 0) return ECP_ERR; + rv = read(fd, buf, ECP_ECDH_SIZE_KEY); + if (rv != ECP_ECDH_SIZE_KEY) { + close(fd); + return ECP_ERR; + } + rv = read(fd, &node->addr, sizeof(node->addr)); + if (rv != sizeof(node->addr)) { + close(fd); + return ECP_ERR; + } + close(fd); + + ecp_cr_dh_pub_from_buf(&node->public, buf); + + return ECP_OK; +} \ No newline at end of file -- cgit v1.2.3