From 938b93b02b40afb0ac3448a4d5b726d9e43073c5 Mon Sep 17 00:00:00 2001 From: Alexey Stratulat <alexey.stratulat@demlabs.net> Date: Mon, 15 Jul 2019 13:29:28 +0700 Subject: [PATCH] [+] Added a list of keys for transferring a key to Python and receiving a key from it --- include/key_list.h | 18 +++++++++++++++ src/key_list.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 include/key_list.h create mode 100644 src/key_list.c diff --git a/include/key_list.h b/include/key_list.h new file mode 100644 index 00000000..adb0783c --- /dev/null +++ b/include/key_list.h @@ -0,0 +1,18 @@ +#include "dap_common.h" +#include "dap_enc_key.h" +#include <stdint.h> +#include <string.h> + +#undef LOG_TAG +#define LOG_TAG "key-list" + +typedef struct key_list{ + dap_enc_key_t **keys; + uint8_t lenght; +}key_list_t; + +key_list_t *key_list_init(); +void key_list_free(key_list_t* list); +uint8_t key_list_add_element(key_list_t *list, dap_enc_key_t* key); +bool key_list_del_element(key_list_t *list, uint8_t key); +dap_enc_key_t *key_list_get_key(key_list_t *list, uint8_t key); \ No newline at end of file diff --git a/src/key_list.c b/src/key_list.c new file mode 100644 index 00000000..9f09de1a --- /dev/null +++ b/src/key_list.c @@ -0,0 +1,57 @@ +#include "key_list.h" + +key_list_t *key_list_init() +{ + key_list_t *keyList = (key_list_t *)malloc(sizeof(key_list_t)); + keyList->lenght = 0; + return keyList; +} + +void key_list_free(key_list_t* list){ + for (int i=0; i < list->lenght;i++){ + free(list->keys[i]); + } + free(list); +} + +uint8_t key_list_add_element(key_list_t *list, dap_enc_key_t* key){ + uint8_t new_len = list->lenght; + new_len++; + dap_enc_key_t **new_keys = calloc(new_len, sizeof(dap_enc_key_t)); + if (list->lenght != 0) { + memcpy(new_keys, list->keys, list->lenght); + free(list->keys); + } + new_keys[new_len - 1] = key; + list->keys = new_keys; + list->lenght = new_len; + return new_len; + +} + +bool key_list_del_element(key_list_t *list, uint8_t key_id){ + if ((list->lenght-1) > 0) { + return false; + } + uint8_t new_len = list->lenght; + new_len--; + dap_enc_key_t **new_keys = calloc(new_len, sizeof(dap_enc_key_t)); + if (list->lenght - 1 == key_id){ + memcpy(new_keys, list->keys, key_id); + } else if (list->lenght > 1 && key_id < list->lenght) { + memcpy(new_keys, list->keys, key_id); + memcpy(new_keys + key_id, list->keys + (key_id + 1), list->lenght); + } + free(list->keys); + list->keys = new_keys; + list->lenght = new_len; + return true; +} + +dap_enc_key_t *key_list_get_key(key_list_t *list, uint8_t key){ + uint8_t index = key - 1; + if (list->lenght < index) { + return NULL; + } + return list->keys[index]; +} \ No newline at end of file -- GitLab