From 503ac614ea91b4fdd9d5f6f467a2efcad900a7e1 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Tue, 23 Apr 2024 18:07:21 +0200 Subject: added string key utilities --- ecp/util/util.c | 126 ++++++++++++++++++++------------------------------------ 1 file changed, 45 insertions(+), 81 deletions(-) (limited to 'ecp/util/util.c') diff --git a/ecp/util/util.c b/ecp/util/util.c index efcf152..abe562d 100644 --- a/ecp/util/util.c +++ b/ecp/util/util.c @@ -1,116 +1,80 @@ #include +#include +#include #include #include #include #include +#include #include "util.h" -int ecp_util_load_key(ecp_ecdh_public_t *public, ecp_ecdh_private_t *private, char *filename) { - int fd; +int ecp_util_read_key(int fd, ecp_ecdh_public_t *public, ecp_ecdh_private_t *private) { + char buffer[ECP_SIZE_ECDH_KEY_BUF]; ssize_t rv; + int _rv; - if ((fd = open(filename, O_RDONLY)) < 0) return ECP_ERR; - rv = read(fd, public, sizeof(ecp_ecdh_public_t)); - if (rv != sizeof(ecp_ecdh_public_t)) { - close(fd); - return ECP_ERR; - } - rv = read(fd, private, sizeof(ecp_ecdh_private_t)); - if (rv != sizeof(ecp_ecdh_private_t)) { - close(fd); - return ECP_ERR; - } - close(fd); - return ECP_OK; -} + memset(buffer, 0, sizeof(buffer)); + rv = read(fd, buffer, sizeof(buffer)); + if (rv < (ECP_SIZE_ECDH_KEY_BUF - 1)) return ECP_ERR; + if (buffer[ECP_SIZE_ECDH_KEY_BUF - 1] == '\n') buffer[ECP_SIZE_ECDH_KEY_BUF - 1] = '\0'; -int ecp_util_save_key(ecp_ecdh_public_t *public, ecp_ecdh_private_t *private, char *filename) { - int fd; - ssize_t rv; + _rv = ecp_str2key((uint8_t *)public, buffer); + if (_rv) return _rv; - if ((fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) < 0) return ECP_ERR; - rv = write(fd, public, sizeof(ecp_ecdh_public_t)); - if (rv != sizeof(ecp_ecdh_public_t)) { - close(fd); - return ECP_ERR; - } - rv = write(fd, private, sizeof(ecp_ecdh_private_t)); - if (rv != sizeof(ecp_ecdh_private_t)) { - close(fd); - return ECP_ERR; + if (private) { + memset(buffer, 0, sizeof(buffer)); + rv = read(fd, buffer, sizeof(buffer)); + if (rv < (ECP_SIZE_ECDH_KEY_BUF - 1)) return ECP_ERR; + if (buffer[ECP_SIZE_ECDH_KEY_BUF - 1] == '\n') buffer[ECP_SIZE_ECDH_KEY_BUF - 1] = '\0'; + + _rv = ecp_str2key((uint8_t *)private, buffer); + if (_rv) return _rv; } - close(fd); + return ECP_OK; } -int ecp_util_load_pub(ecp_ecdh_public_t *public, char *filename) { - int fd; +int ecp_util_write_key(int fd, ecp_ecdh_public_t *public, ecp_ecdh_private_t *private) { + char buffer[ECP_SIZE_ECDH_KEY_BUF]; ssize_t rv; - if ((fd = open(filename, O_RDONLY)) < 0) return ECP_ERR; - rv = read(fd, public, sizeof(ecp_ecdh_public_t)); - if (rv != sizeof(ecp_ecdh_public_t)) { - close(fd); - return ECP_ERR; - } - close(fd); - return ECP_OK; -} + ecp_key2str(buffer, (uint8_t *)public); + buffer[ECP_SIZE_ECDH_KEY_BUF - 1] = '\n'; -int ecp_util_save_pub(ecp_ecdh_public_t *public, char *filename) { - int fd; - ssize_t rv; + rv = write(fd, buffer, sizeof(buffer)); + if (rv != sizeof(buffer)) return ECP_ERR; - if ((fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) < 0) return ECP_ERR; - rv = write(fd, public, sizeof(ecp_ecdh_public_t)); - if (rv != sizeof(ecp_ecdh_public_t)) { - close(fd); - return ECP_ERR; + if (private) { + ecp_key2str(buffer, (uint8_t *)private); + buffer[ECP_SIZE_ECDH_KEY_BUF - 1] = '\n'; + + rv = write(fd, buffer, sizeof(buffer)); + if (rv != sizeof(buffer)) return ECP_ERR; } - close(fd); + return ECP_OK; } -int ecp_util_load_node(ECPNode *node, char *filename) { - int fd; - ssize_t rv; +int ecp_util_load_key(char *filename, ecp_ecdh_public_t *public, ecp_ecdh_private_t *private) { + int rv, fd; if ((fd = open(filename, O_RDONLY)) < 0) return ECP_ERR; - rv = read(fd, &node->key_perma.public, sizeof(node->key_perma.public)); - if (rv != sizeof(node->key_perma.public)) { - close(fd); - return ECP_ERR; - } - rv = read(fd, &node->addr, sizeof(node->addr)); - if (rv != sizeof(node->addr)) { - close(fd); - return ECP_ERR; - } + + rv = ecp_util_read_key(fd, public, private); close(fd); - node->key_perma.valid = 1; - return ECP_OK; + return rv; } -int ecp_util_save_node(ECPNode *node, char *filename) { - int fd; - ssize_t rv; - - if (!node->key_perma.valid) return ECP_ERR; +int ecp_util_save_key(char *filename, ecp_ecdh_public_t *public, ecp_ecdh_private_t *private) { + int rv, fd; if ((fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) < 0) return ECP_ERR; - rv = write(fd, &node->key_perma.public, sizeof(node->key_perma.public)); - if (rv != sizeof(node->key_perma.public)) { - close(fd); - return ECP_ERR; - } - rv = write(fd, &node->addr, sizeof(node->addr)); - if (rv != sizeof(node->addr)) { - close(fd); - return ECP_ERR; - } + + rv = ecp_util_write_key(fd, public, private); close(fd); - return ECP_OK; + + return rv; } -- cgit v1.2.3