Browse Source

add fbase.c

Michele Orrù 7 years ago
parent
commit
4c7485272b
1 changed files with 69 additions and 0 deletions
  1. 69 0
      src/fbase.c

+ 69 - 0
src/fbase.c

@@ -0,0 +1,69 @@
+#include <stdint.h>
+#include <stdlib.h>
+
+#include <gmp.h>
+
+#include "fbase.h"
+#include "group.h"
+
+
+fbase_ptr fb_init()
+{
+  fbase_ptr pb = (fbase_ptr) calloc(FB_FRAMES, sizeof(fbase_unit));
+
+  for (size_t j = 0; j < FB_FRAMES; j++) {
+    for (size_t i = 0; i <= 0xFF; i++) {
+      mpz_init(pb[j][i]);
+    }
+  }
+  return pb;
+}
+
+void fb_set_small(fbase_t pb, const mpz_t n)
+{
+  mpz_t e;
+  mpz_init(e);
+  for (size_t j = 0; j < FB_FRAMES/2; j++) {
+    for (size_t i = 0; i <= 0xFF; i++) {
+      uint64_t e =  (0x01 <<  8*j) * i;
+      powmp_ui(pb[j][i], n, e);
+    }
+  }
+  mpz_clear(e);
+}
+
+void fb_copy(fbase_t dst, fbase_t source)
+{
+  for (size_t j = 0; j < FB_FRAMES; j++) {
+    for (size_t i = 0; i <= 0xFF; i++) {
+      mpz_set(dst[j][i], source[j][i]);
+    }
+  }
+}
+
+void fb_set(fbase_t pb, const mpz_t n)
+{
+  mpz_t e;
+  mpz_init(e);
+  for (size_t j = 0; j < FB_FRAMES; j++) {
+    for (size_t i = 0; i <= 0xFF; i++) {
+      mpz_set_ui(e, 1);
+      mpz_mul_2exp(e, e, 8*j);
+      mpz_mul_ui(e, e, i);
+
+      mpz_powm(pb[j][i], n, e, p);
+    }
+  }
+  mpz_clear(e);
+}
+
+void fb_clear(fbase_t pb)
+{
+
+  for (size_t j = 0; j < FB_FRAMES; j++) {
+    for (size_t i = 0; i <= 0xFF; i++) {
+      mpz_clear(pb[j][i]);
+    }
+  }
+  free(pb);
+}