aboutsummaryrefslogtreecommitdiffstats
path: root/moon-abe/pbc-0.5.14/ecc/param.c
diff options
context:
space:
mode:
Diffstat (limited to 'moon-abe/pbc-0.5.14/ecc/param.c')
-rw-r--r--moon-abe/pbc-0.5.14/ecc/param.c220
1 files changed, 0 insertions, 220 deletions
diff --git a/moon-abe/pbc-0.5.14/ecc/param.c b/moon-abe/pbc-0.5.14/ecc/param.c
deleted file mode 100644
index 4fa25eef..00000000
--- a/moon-abe/pbc-0.5.14/ecc/param.c
+++ /dev/null
@@ -1,220 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h> // for intptr_t
-#include <string.h>
-#include <gmp.h>
-#include "pbc_utils.h"
-#include "pbc_memory.h"
-#include "pbc_param.h"
-#include "pbc_a_param.h"
-#include "pbc_mnt.h"
-#include "pbc_d_param.h"
-#include "pbc_e_param.h"
-#include "pbc_f_param.h"
-#include "pbc_a1_param.h"
-#include "pbc_g_param.h"
-#include "pbc_i_param.h"
-
-#include "misc/symtab.h"
-#include "ecc/param.h"
-
-// Parser that reads a bunch of strings and places them in a symbol table.
-// TODO: Replace with Flex/Bison?
-
-enum {
- token_none = 0,
- token_langle,
- token_langleslash,
- token_rangle,
- token_word,
- token_eof,
-};
-
-struct token_s {
- int type;
- char *s;
-};
-typedef struct token_s token_t[1];
-typedef struct token_s *token_ptr;
-
-// Reads next token from `input`.
-// Returns 1 on reaching `end` (if not NULL) or '\0' is read, 0 otherwise.
-static const char *token_get(token_t tok, const char *input, const char *end) {
- char *buf;
- int n = 32;
- int i;
- char c;
- #define get() (((!end || input < end) && *input) ? (c = *input++, 0) : 1)
- // Skip whitespace and comments.
- for(;;) {
- do {
- if (get()) {
- tok->type = token_eof;
- return input;
- }
- } while (strchr(" \t\r\n", c));
- if (c == '#') {
- do {
- if (get()) {
- tok->type = token_eof;
- return input;
- }
- } while (c != '\n');
- } else break;
- }
-
- tok->type = token_word;
- pbc_free(tok->s);
- buf = (char *) pbc_malloc(n);
- i = 0;
- for (;;) {
- buf[i] = c;
- i++;
- if (i == n) {
- n += 32;
- buf = (char *) pbc_realloc(buf, n);
- }
- if (get() || strchr(" \t\r\n</>", c)) break;
- }
- buf[i] = 0;
- tok->s = buf;
- return input;
- #undef get
-}
-
-static void token_init(token_t tok) {
- tok->type = token_none;
- tok->s = NULL;
-}
-
-static void token_clear(token_t tok) {
- pbc_free(tok->s);
-}
-
-static void read_symtab(symtab_t tab, const char *input, size_t limit) {
- token_t tok;
- const char *inputend = limit ? input + limit : NULL;
- token_init(tok);
- for (;;) {
- input = token_get(tok, input, inputend);
- if (tok->type != token_word) break;
- char *key = pbc_strdup(tok->s);
- input = token_get(tok, input, inputend);
- if (tok->type != token_word) {
- pbc_free(key);
- break;
- }
- symtab_put(tab, pbc_strdup(tok->s), key);
- pbc_free(key);
- }
- token_clear(tok);
-}
-
-// These functions have hidden visibility (see header).
-
-void param_out_type(FILE *stream, char *s) {
- fprintf(stream, "type %s\n", s);
-}
-
-void param_out_mpz(FILE *stream, char *s, mpz_t z) {
- fprintf(stream, "%s ", s);
- mpz_out_str(stream, 0, z);
- fprintf(stream, "\n");
-}
-
-void param_out_int(FILE *stream, char *s, int i) {
- mpz_t z;
- mpz_init(z);
-
- mpz_set_si(z, i);
- param_out_mpz(stream, s, z);
- mpz_clear(z);
-}
-
-static const char *lookup(symtab_t tab, const char *key) {
- if (!symtab_has(tab, key)) {
- pbc_error("missing param: `%s'", key);
- return NULL;
- }
- return symtab_at(tab, key);
-}
-
-int lookup_mpz(mpz_t z, symtab_t tab, const char *key) {
- const char *data = lookup(tab, key);
- if (!data) {
- pbc_error("missing param: `%s'", key);
- return 1;
- }
- mpz_set_str(z, data, 0);
- return 0;
-}
-
-int lookup_int(int *n, symtab_t tab, const char *key) {
- mpz_t z;
- const char *data = lookup(tab, key);
- if (!data) {
- pbc_error("missing param: `%s'", key);
- return 1;
- }
- mpz_init(z);
-
- mpz_set_str(z, data, 0);
- *n = mpz_get_si(z);
- mpz_clear(z);
-
- return 0;
-}
-
-static int param_set_tab(pbc_param_t par, symtab_t tab) {
- const char *s = lookup(tab, "type");
-
- static struct {
- char *s;
- int (*fun)(pbc_param_ptr, symtab_t tab);
- } funtab[] = {
- { "a", pbc_param_init_a },
- { "d", pbc_param_init_d },
- { "e", pbc_param_init_e },
- { "f", pbc_param_init_f },
- { "g", pbc_param_init_g },
- { "a1", pbc_param_init_a1 },
- { "i", pbc_param_init_i },
- };
-
- int res = 1;
- if (s) {
- unsigned int i;
- for(i = 0; i < sizeof(funtab)/sizeof(*funtab); i++) {
- if (!strcmp(s, funtab[i].s)) {
- res = funtab[i].fun(par, tab);
- if (res) pbc_error("bad pairing parameters");
- return res;
- }
- }
- }
-
- pbc_error("unknown pairing type");
- return res;
-}
-
-// Public functions:
-
-int pbc_param_init_set_str(pbc_param_t par, const char *input) {
- symtab_t tab;
- symtab_init(tab);
- read_symtab(tab, input, 0);
- int res = param_set_tab(par, tab);
- symtab_forall_data(tab, pbc_free);
- symtab_clear(tab);
- return res;
-}
-
-int pbc_param_init_set_buf(pbc_param_t par, const char *input, size_t len) {
- symtab_t tab;
- symtab_init(tab);
- read_symtab(tab, input, len);
- int res = param_set_tab(par, tab);
- symtab_forall_data(tab, pbc_free);
- symtab_clear(tab);
- return res;
-}