cangrepp

Some cryptographic attacks
Log | Files | Refs | README

commit eeac6f3367a26a7905ecd06132ad4bbf7bf8d82e
parent f536ff8b6ab00a78e4f644d279675528530f416f
Author: olikru <olikru@tkruger.se>
Date:   Tue, 16 Apr 2024 17:19:55 +0200

mostly reformatting

Diffstat:
Mfmpzio.c | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mfmpzio.h | 2++
Mtools/dbtool.c | 51++++++++++++++++++++++++++++++++-------------------
3 files changed, 115 insertions(+), 19 deletions(-)

diff --git a/fmpzio.c b/fmpzio.c @@ -1,8 +1,14 @@ +#include <assert.h> +#include <err.h> #include <fmpz.h> +#include <fmpz_vec.h> #include <stdio.h> +#include <stdlib.h> +#include <string.h> #include "fmpzio.h" +#define BASE_ALLOC 1024 #define LINE_SIZE_MAX 8192 int @@ -62,3 +68,78 @@ read_next_hex_fmpz(fmpz_t res) return fmpz_set_str(res, buffer, 16); } + +static char * +read_all_stdin(const size_t base_alloc) +{ + size_t rsize, cread = 0, current_size = base_alloc; + char *buffer = malloc(base_alloc * sizeof(*buffer)); + + if (buffer == NULL) + return NULL; + + rsize = fread(buffer, sizeof(*buffer), base_alloc, stdin); + + while (rsize + cread == current_size) { + cread = current_size; + current_size <<= 1; + buffer = realloc(buffer, current_size * sizeof(*buffer)); + + if (buffer == NULL) + return NULL; + + rsize = fread(&buffer[cread], sizeof(*buffer), cread, stdin); + } + + buffer[rsize + cread] = '\0'; + + return buffer; +} + +slong +read_hex_lines(fmpz **v) +{ + assert(v != NULL); + + slong i; + char *r = read_all_stdin(BASE_ALLOC); + + if (r == NULL) { + err(EXIT_FAILURE, "reading entire stdin failed"); + } + + char *s = r; + slong ntokens = 0, tokens_alloc = BASE_ALLOC; + char **tokens = malloc(tokens_alloc * sizeof(*tokens)); + + while ((tokens[ntokens] = strsep(&s, " \n\t")) != NULL) { + ntokens++; + + if (ntokens == tokens_alloc) { + tokens_alloc <<= 1; + tokens = realloc(tokens, tokens_alloc * sizeof(*tokens)); + + if (tokens == NULL) { + err(EXIT_FAILURE, "reallocating tokens failed"); + } + } + } + + *v = _fmpz_vec_init(ntokens); + + if (*v == NULL) { + err(EXIT_FAILURE, "creating vector in read_hex_lines failed"); + } + + for (i = 0; i < ntokens; i++) { + if (fmpz_set_str(&(*v)[i], tokens[i], 16) != 0) { + errx(EXIT_FAILURE, "could not interpret \"%s\" as hex integer", + tokens[i]); + } + } + + free(r); + free(tokens); + + return ntokens; +} diff --git a/fmpzio.h b/fmpzio.h @@ -19,4 +19,6 @@ int read_next_fmpz(fmpz_t res); */ int read_next_hex_fmpz(fmpz_t res); +slong read_hex_lines(fmpz** v); + #endif diff --git a/tools/dbtool.c b/tools/dbtool.c @@ -3,12 +3,15 @@ */ #include <err.h> +#include <fmpz.h> #include <sqlite3.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> +#include "fmpzio.h" + enum command { INSERT, CREATE, NONE }; static void @@ -27,12 +30,14 @@ create_tables(sqlite3 *db) { int rc; // create a moduli table - sqlite3_stmt* ppStmt; - rc = sqlite3_prepare(db, "CREATE TABLE moduli (product_id INTEGER, modulus BLOB);", -1, &ppStmt, NULL); + sqlite3_stmt *ppStmt; + rc = sqlite3_prepare( + db, "CREATE TABLE moduli (product_id INTEGER, modulus BLOB);", -1, + &ppStmt, NULL); if (rc != SQLITE_OK) { errx(EXIT_FAILURE, "prepare statement error: %s\n", - sqlite3_errmsg(db)); + sqlite3_errmsg(db)); } else { fprintf(stderr, "Prepared statement successfully\n"); } @@ -43,8 +48,7 @@ create_tables(sqlite3 *db) } if (rc != SQLITE_DONE) { - errx(EXIT_FAILURE, "step error: %s\n", - sqlite3_errmsg(db)); + errx(EXIT_FAILURE, "step error: %s\n", sqlite3_errmsg(db)); } else { fprintf(stderr, "Created moduli table\n"); } @@ -53,15 +57,17 @@ create_tables(sqlite3 *db) if (rc != SQLITE_OK) { errx(EXIT_FAILURE, "finalize prepared statement error: %s\n", - sqlite3_errmsg(db)); + sqlite3_errmsg(db)); } // create a product_trees table - rc = sqlite3_prepare(db, "CREATE TABLE product_trees (n_factors INTEGER, tree BLOB);", -1, &ppStmt, NULL); + rc = sqlite3_prepare( + db, "CREATE TABLE product_trees (n_factors INTEGER, tree BLOB);", + -1, &ppStmt, NULL); if (rc != SQLITE_OK) { errx(EXIT_FAILURE, "prepare statement error: %s\n", - sqlite3_errmsg(db)); + sqlite3_errmsg(db)); } else { fprintf(stderr, "Prepared statement successfully\n"); } @@ -72,8 +78,7 @@ create_tables(sqlite3 *db) } if (rc != SQLITE_DONE) { - errx(EXIT_FAILURE, "step error: %s\n", - sqlite3_errmsg(db)); + errx(EXIT_FAILURE, "step error: %s\n", sqlite3_errmsg(db)); } else { fprintf(stderr, "Created product_tree table\n"); } @@ -82,10 +87,17 @@ create_tables(sqlite3 *db) if (rc != SQLITE_OK) { errx(EXIT_FAILURE, "finalize prepared statement error: %s\n", - sqlite3_errmsg(db)); + sqlite3_errmsg(db)); } } +static void +insert(sqlite3 *db) +{ + fmpz *v; + read_hex_lines(&v); +} + static enum command get_command(char *str) { @@ -124,14 +136,15 @@ main(int argc, char *argv[]) } switch (com) { - case CREATE: - create_tables(db); - break; - case INSERT: - fprintf(stderr, "insert not implemented\n"); - break; - default: - break; + case CREATE: + create_tables(db); + break; + case INSERT: + insert(db); + fprintf(stderr, "insert not implemented\n"); + break; + default: + break; } while (sqlite3_close(db) != SQLITE_OK) {