diff options
author | 2015-09-04 07:35:06 +0000 | |
---|---|---|
committer | 2015-09-04 07:35:06 +0000 | |
commit | ca6aa8198d2335f8c326c3dd4d26bf5899064214 (patch) | |
tree | 6274a2d971fc0cac0896efe8583927d0190e3d20 /moon-abe/pbc-0.5.14/gen/hilbertpoly.c | |
parent | 92fd2dbfb672d7b2b1cdfd5dd5cf89f7716b3e12 (diff) | |
parent | 3baeb11a8fbcfcdbc31976d421f17b85503b3ecd (diff) |
Merge "init attribute-based encryption"
Diffstat (limited to 'moon-abe/pbc-0.5.14/gen/hilbertpoly.c')
-rw-r--r-- | moon-abe/pbc-0.5.14/gen/hilbertpoly.c | 57 |
1 files changed, 57 insertions, 0 deletions
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 <stdarg.h> +#include <stdio.h> +#include <stdint.h> // for intptr_t +#include <stdlib.h> //for atoi, exit +#include <gmp.h> +#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; +} |