diff --git a/package/gluon-lib-ecdsa/Makefile b/package/gluon-lib-ecdsa/Makefile deleted file mode 100644 index f084ebd6..00000000 --- a/package/gluon-lib-ecdsa/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=gluon-lib-ecdsa -PKG_VERSION=1 - -include ../gluon.mk - -define Package/gluon-lib-ecdsa - TITLE:=Lua bindings for ecdsautil - DEPENDS:=+liblua +libecdsautil -endef - -define Package/gluon-lib-ecdsa/install - $(Gluon/Build/Install) - - $(INSTALL_DIR) $(1)/usr/lib/lua/gluon - $(INSTALL_BIN) $(PKG_BUILD_DIR)/ecdsa.so $(1)/usr/lib/lua/gluon/ -endef - -$(eval $(call BuildPackageGluon,gluon-lib-ecdsa)) diff --git a/package/gluon-lib-ecdsa/src/Makefile b/package/gluon-lib-ecdsa/src/Makefile deleted file mode 100644 index 9e09bf10..00000000 --- a/package/gluon-lib-ecdsa/src/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -CFLAGS += -Wall -fPIC -LDFLAGS += -llua -lm -OBJ = hexutil.o ecdsa_util.o util.c ecdsa.o -LIB = ecdsa.so - -CFLAGS += $(shell pkg-config --cflags ecdsautil) -LDFLAGS += $(shell pkg-config --libs ecdsautil) - -%.o: %.c - $(CC) $(CPPFLAGS) $(CFLAGS) $(LUA_CFLAGS) $(CFLAGS) $(FPIC) -c -o $@ $< - -all: compile - -compile: $(OBJ) - $(CC) $(LDFLAGS) -fPIC -shared -o $(LIB) $(OBJ) $(LDFLAGS) - -install: compile - mkdir -p $(DESTDIR)/usr/lib/lua/gluon - cp $(LIB) $(DESTDIR)/usr/lib/lua/gluon/$(LIB) - -clean: - rm -f *.o *.so diff --git a/package/gluon-lib-ecdsa/src/ecdsa.c b/package/gluon-lib-ecdsa/src/ecdsa.c deleted file mode 100644 index a38ed118..00000000 --- a/package/gluon-lib-ecdsa/src/ecdsa.c +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2021 Maciej Krüger - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "ecdsa_util.h" - -#define ECDSA "gluon.ecdsa" - -// TODO: fix all the memory leaks - -static bool verify(lua_State *L, const char *data, const char *sig, const char *key) { - struct verify_params params = { - .good_signatures = 1 - }; - - if (!hash_data(¶ms, data)) { - return luaL_error(L, "failed hashing data"); - } - - if (!load_signatures(¶ms, 1, &sig, false)) { - return luaL_error(L, "failed loading signature"); - } - - if (!load_pubkeys(¶ms, 1, &key, false)) { - return luaL_error(L, "failed loading key"); - } - - return do_verify(¶ms); -} - -static int lua_verify(lua_State *L) { - lua_pushboolean(L, verify(L, luaL_checkstring(L, 1), luaL_checkstring(L, 2), luaL_checkstring(L, 3))); - return 1; -} - -static const luaL_reg ecdsa_methods[] = { - { "verify", lua_verify }, - - { } -}; - -int luaopen_gluon_ecdsa(lua_State *L) -{ - luaL_register(L, ECDSA, ecdsa_methods); - - return 1; -} diff --git a/package/gluon-lib-ecdsa/src/ecdsa_util.c b/package/gluon-lib-ecdsa/src/ecdsa_util.c deleted file mode 100644 index d5c319b3..00000000 --- a/package/gluon-lib-ecdsa/src/ecdsa_util.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "ecdsa_util.h" -#include "hexutil.h" -#include "util.h" - -#include -#include -#include -#include -#include -#include -#include - -bool do_verify(struct verify_params* params) { - ecdsa_verify_context_t ctxs[params->n_signatures]; - for (size_t i = 0; i < params->n_signatures; i++) - ecdsa_verify_prepare_legacy(&ctxs[i], ¶ms->hash, ¶ms->signatures[i]); - - long unsigned int good_signatures = ecdsa_verify_list_legacy(ctxs, params->n_signatures, params->pubkeys, params->n_pubkeys); - - if (good_signatures < params->good_signatures) { - return false; - } - - return true; -} - -int hash_data(struct verify_params* params, const char* data) { - ecdsa_sha256_context_t hash_ctx; - ecdsa_sha256_init(&hash_ctx); - ecdsa_sha256_update(&hash_ctx, data, strlen(data)); - - ecdsa_sha256_final(&hash_ctx, params->hash.p); - - return 1; -} - -int load_pubkeys(struct verify_params* params, const size_t n_pubkeys, const char **pubkeys_str, const bool ignore_pubkeys) { - params->pubkeys = safe_malloc(n_pubkeys * sizeof(ecc_25519_work_t)); - - size_t ignored_keys = 0; - - for (size_t i = 0; i < n_pubkeys; i++) { - ecc_int256_t pubkey_packed; - if (!pubkeys_str[i]) - goto pubkey_fail; - if (!parsehex(pubkey_packed.p, pubkeys_str[i], 32)) - goto pubkey_fail; - if (!ecc_25519_load_packed_legacy(¶ms->pubkeys[i-ignored_keys], &pubkey_packed)) - goto pubkey_fail; - if (!ecdsa_is_valid_pubkey(¶ms->pubkeys[i-ignored_keys])) - goto pubkey_fail; - continue; - -pubkey_fail: - if (ignore_pubkeys) { - fprintf(stderr, "warning: ignoring invalid public key %s\n", pubkeys_str[i]); - ignored_keys++; - } else { - return 0; - } - } - - params->n_pubkeys = n_pubkeys - ignored_keys; - - return 1; -} - -int load_signatures(struct verify_params* params, const size_t n_signatures, const char **signatures_str, const bool ignore_signatures) { - params->signatures = safe_malloc(n_signatures * sizeof(ecdsa_signature_t)); - - size_t ignored_signatures = 0; - - for (size_t i = 0; i < n_signatures; i++) { - if (!signatures_str[i]) - goto signature_fail; - if (!parsehex(¶ms->signatures[i-ignored_signatures], signatures_str[i], 64)) - goto signature_fail; - continue; - -signature_fail: - if (ignore_signatures) { - fprintf(stderr, "warning: ignoring invalid signature %s\n", signatures_str[i]); - ignored_signatures++; - } else { - return 0; - } - } - - params->n_signatures = n_signatures - ignored_signatures; - - return 1; -} diff --git a/package/gluon-lib-ecdsa/src/ecdsa_util.h b/package/gluon-lib-ecdsa/src/ecdsa_util.h deleted file mode 100644 index 55490365..00000000 --- a/package/gluon-lib-ecdsa/src/ecdsa_util.h +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -struct verify_params { - ecc_int256_t hash; - - size_t n_signatures; - ecdsa_signature_t *signatures; - - size_t n_pubkeys; - ecc_25519_work_t *pubkeys; - - unsigned long good_signatures; -}; - -bool do_verify(struct verify_params* params); -int hash_data(struct verify_params* params, const char* data); -int load_pubkeys(struct verify_params* params, const size_t n_pubkeys, const char **pubkeys_str, const bool ignore_pubkeys); -int load_signatures(struct verify_params* params, const size_t n_signatures, const char **signatures_str, const bool ignore_signatures); diff --git a/package/gluon-lib-ecdsa/src/hexutil.c b/package/gluon-lib-ecdsa/src/hexutil.c deleted file mode 100644 index 7a3eb6ed..00000000 --- a/package/gluon-lib-ecdsa/src/hexutil.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2012, Nils Schneider - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "hexutil.h" - -#include -#include - -int parsehex(void *buffer, const char *string, size_t len) { - // number of digits must be even - if ((strlen(string) & 1) == 1) - return 0; - - // number of digits must be 2 * len - if (strlen(string) != 2 * len) - return 0; - - while (len--) { - int ret; - ret = sscanf(string, "%02hhx", (char*)(buffer++)); - string += 2; - - if (ret != 1) - break; - } - - if (len != -1) - return 0; - - return 1; -} - -void hexdump(FILE *stream, unsigned char *buffer, size_t len) { - while (len--) - fprintf(stream, "%02hhx", *(buffer++)); -} diff --git a/package/gluon-lib-ecdsa/src/hexutil.h b/package/gluon-lib-ecdsa/src/hexutil.h deleted file mode 100644 index 6d905f91..00000000 --- a/package/gluon-lib-ecdsa/src/hexutil.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (c) 2012, Nils Schneider - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#pragma once - -#include - - -/* Converts a string of hexadecimal digits and stores it in a given buffer. - * In order for this function to return successfully the decoded string - * must fit exactly into the buffer. - */ -int parsehex(void *buffer, const char *string, size_t len); - -/* Converts a byte array to a hexadecimal string. - */ -void hexdump(FILE *stream, unsigned char *buffer, size_t len); diff --git a/package/gluon-lib-ecdsa/src/util.c b/package/gluon-lib-ecdsa/src/util.c deleted file mode 100644 index ff21d4ff..00000000 --- a/package/gluon-lib-ecdsa/src/util.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright (c) 2017, Jan-Philipp Litza - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#include "util.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - - -void run_dir(const char *dir) { - char pat[strlen(dir) + 3]; - sprintf(pat, "%s/*", dir); - glob_t globbuf; - if (glob(pat, 0, NULL, &globbuf)) - return; - - for (size_t i = 0; i < globbuf.gl_pathc; i++) { - char *path = globbuf.gl_pathv[i]; - if (access(path, X_OK) < 0) - continue; - - pid_t pid = fork(); - if (pid < 0) { - fputs("autoupdater: warning: failed to fork: %m", stderr); - continue; - } - - if (pid == 0) { - execl(path, path, (char *)NULL); - exit(EXIT_FAILURE); - } - - int wstatus; - if (waitpid(pid, &wstatus, 0) != pid) { - fprintf(stderr, "autoupdater: warning: failed waiting for child %d corresponding to %s: ", pid, path); - perror(NULL); - } else if (!WIFEXITED(wstatus)) { - fprintf(stderr, "autoupdater: warning: execution of %s exited abnormally\n", path); - } else if (WEXITSTATUS(wstatus)) { - fprintf(stderr, "autoupdater: warning: execution of %s exited with status code %d\n", path, WEXITSTATUS(wstatus)); - } - } - - globfree(&globbuf); -} - - -void randomize(void) { - struct timespec tv; - if (clock_gettime(CLOCK_MONOTONIC, &tv)) { - perror("autoupdater: error: clock_gettime"); - exit(1); - } - - srandom(tv.tv_nsec); -} - - -float get_uptime(void) { - FILE *f = fopen("/proc/uptime", "r"); - if (f) { - float uptime; - int match = fscanf(f, "%f", &uptime); - fclose(f); - - if (match == 1) - return uptime; - } - - fputs("autoupdater: error: unable to determine uptime\n", stderr); - exit(1); -} - -void * safe_malloc(size_t size) { - void *ret = malloc(size); - if (!ret) { - fprintf(stderr, "autoupdater: error: failed to allocate memory\n"); - abort(); - } - - return ret; -} - -void * safe_realloc(void *ptr, size_t size) { - void *ret = realloc(ptr, size); - if (!ret) { - fprintf(stderr, "autoupdater: error: failed to allocate memory\n"); - abort(); - } - - return ret; -} diff --git a/package/gluon-lib-ecdsa/src/util.h b/package/gluon-lib-ecdsa/src/util.h deleted file mode 100644 index 305cc3a4..00000000 --- a/package/gluon-lib-ecdsa/src/util.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (c) 2017, Jan-Philipp Litza - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#pragma once - -#include - - -void run_dir(const char *dir); -void randomize(void); -float get_uptime(void); - -void * safe_malloc(size_t size); -void * safe_realloc(void *ptr, size_t size);