From 3baeb11a8fbcfcdbc31976d421f17b85503b3ecd Mon Sep 17 00:00:00 2001 From: WuKong Date: Fri, 4 Sep 2015 09:25:34 +0200 Subject: init attribute-based encryption Change-Id: Iba1a3d722110abf747a0fba366f3ebc911d25b25 --- moon-abe/pbc-0.5.14/gen/hilbertpoly.c | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 moon-abe/pbc-0.5.14/gen/hilbertpoly.c (limited to 'moon-abe/pbc-0.5.14/gen/hilbertpoly.c') diff --git a/moon-abe/pbc-0.5.14/gen/hilbertpoly.c b/moon-abe/pbc-0.5.14/gen/hilbertpoly.c new file mode 100644 index 00000000..2e73af4e --- /dev/null +++ b/moon-abe/pbc-0.5.14/gen/hilbertpoly.c @@ -0,0 +1,57 @@ +// Prints Hilbert polynomials H_D(X) +// +// Usage: hilbertpoly [LOWER [UPPER]] +// +// LOWER: +// Lower limit of D. Defaults to 3. +// UPPER: +// Upper limit of D. Defaults to LOWER. +// +// e.g. $ hilbertpoly 3 1000000 +#include +#include +#include // for intptr_t +#include //for atoi, exit +#include +#include "pbc_utils.h" +#include "pbc_hilbert.h" + +static void xpow(int degree) { + if (degree == 1) { + printf("X"); + } else if (degree) { + printf("X^%d", degree); + } +} + +int main(int argc, char **argv) { + int D = argc > 1 ? atoi(argv[1]) : 3; + if (D <= 0) pbc_die("D must be positive."); + + int Dlimit = argc > 2 ? atoi(argv[2]) : D; + + for(; D <= Dlimit; D++) { + mpz_t *coefflist; + int m = D % 4; + if (m == 1 || m == 2) continue; + printf("D = %d\n", D); + + int n = pbc_hilbert(&coefflist, D); + + printf(" "); + xpow(n - 1); + printf("\n"); + int i; + for (i = n - 2; i >= 0; i--) { + if (mpz_sgn(coefflist[i]) >= 0) { + printf("+"); + } + mpz_out_str(stdout, 0, coefflist[i]); + xpow(i); + printf("\n"); + } + pbc_hilbert_free(coefflist, n); + } + + return 0; +} -- cgit 1.2.3-korg