/* * RELIC is an Efficient LIbrary for Cryptography * Copyright (c) 2009 RELIC Authors * * This file is part of RELIC. RELIC is legal property of its developers, * whose names are not listed here. Please refer to the COPYRIGHT file * for contact information. * * RELIC is free software; you can redistribute it and/or modify it under the * terms of the version 2.1 (or later) of the GNU Lesser General Public License * as published by the Free Software Foundation; or version 2.0 of the Apache * License as published by the Apache Software Foundation. See the LICENSE files * for more details. * * RELIC is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the LICENSE files for more details. * * You should have received a copy of the GNU Lesser General Public or the * Apache License along with RELIC. If not, see * or . */ /** * @file * * Project configuration. * * @version $Id: relic_conf.h.in 45 2009-07-04 23:45:48Z dfaranha $ * @ingroup relic */ #ifndef RLC_CONF_H #define RLC_CONF_H /** Project version. */ #define RLC_VERSION "@VERSION@" /** Debugging support. */ #cmakedefine DEBUG /** Profiling support. */ #cmakedefine PROFL /** Error handling support. */ #cmakedefine CHECK /** Verbose error messages. */ #cmakedefine VERBS /** Build with overhead estimation. */ #cmakedefine OVERH /** Build documentation. */ #cmakedefine DOCUM /** Build only the selected algorithms. */ #cmakedefine STRIP /** Build with printing disabled. */ #cmakedefine QUIET /** Build with colored output. */ #cmakedefine COLOR /** Build with big-endian support. */ #cmakedefine BIGED /** Build shared library. */ #cmakedefine SHLIB /** Build static library. */ #cmakedefine STLIB /** Number of times each test is ran. */ #define TESTS @TESTS@ /** Number of times each benchmark is ran. */ #define BENCH @BENCH@ /** Number of available cores. */ #define CORES @CORES@ /** Atmel AVR ATMega128 8-bit architecture. */ #define AVR 1 /** MSP430 16-bit architecture. */ #define MSP 2 /** ARM 32-bit architecture. */ #define ARM 3 /** Intel x86-compatible 32-bit architecture. */ #define X86 4 /** AMD64-compatible 64-bit architecture. */ #define X64 5 /** Architecture. */ #cmakedefine ARCH @ARCH@ /** Size of word in this architecture. */ #define WSIZE @WSIZE@ /** Byte boundary to align digit vectors. */ #define ALIGN @ALIGN@ /** Build multiple precision integer module. */ #cmakedefine WITH_BN /** Build prime field module. */ #cmakedefine WITH_FP /** Build prime field extension module. */ #cmakedefine WITH_FPX /** Build binary field module. */ #cmakedefine WITH_FB /** Build prime elliptic curve module. */ #cmakedefine WITH_EP /** Build prime field extension elliptic curve module. */ #cmakedefine WITH_EPX /** Build binary elliptic curve module. */ #cmakedefine WITH_EB /** Build elliptic Edwards curve module. */ #cmakedefine WITH_ED /** Build elliptic curve cryptography module. */ #cmakedefine WITH_EC /** Build pairings over prime curves module. */ #cmakedefine WITH_PP /** Build pairing-based cryptography module. */ #cmakedefine WITH_PC /** Build block ciphers. */ #cmakedefine WITH_BC /** Build hash functions. */ #cmakedefine WITH_MD /** Build cryptographic protocols. */ #cmakedefine WITH_CP /** Build Multi-party computation primitives. */ #cmakedefine WITH_MPC /** Easy C-only backend. */ #define EASY 1 /** GMP backend. */ #define GMP 2 /** GMP constant-time backend. */ #define GMP_SEC 3 /** Arithmetic backend. */ #define ARITH @ARITH@ /** Required precision in bits. */ #define BN_PRECI @BN_PRECI@ /** A multiple precision integer can store w words. */ #define SINGLE 0 /** A multiple precision integer can store the result of an addition. */ #define CARRY 1 /** A multiple precision integer can store the result of a multiplication. */ #define DOUBLE 2 /** Effective size of a multiple precision integer. */ #define BN_MAGNI @BN_MAGNI@ /** Number of Karatsuba steps. */ #define BN_KARAT @BN_KARAT@ /** Schoolbook multiplication. */ #define BASIC 1 /** Comba multiplication. */ #define COMBA 2 /** Chosen multiple precision multiplication method. */ #define BN_MUL @BN_MUL@ /** Schoolbook squaring. */ #define BASIC 1 /** Comba squaring. */ #define COMBA 2 /** Reuse multiplication for squaring. */ #define MULTP 4 /** Chosen multiple precision multiplication method. */ #define BN_SQR @BN_SQR@ /** Division modular reduction. */ #define BASIC 1 /** Barrett modular reduction. */ #define BARRT 2 /** Montgomery modular reduction. */ #define MONTY 3 /** Pseudo-Mersenne modular reduction. */ #define PMERS 4 /** Chosen multiple precision modular reduction method. */ #define BN_MOD @BN_MOD@ /** Binary modular exponentiation. */ #define BASIC 1 /** Sliding window modular exponentiation. */ #define SLIDE 2 /** Montgomery powering ladder. */ #define MONTY 3 /** Chosen multiple precision modular exponentiation method. */ #define BN_MXP @BN_MXP@ /** Basic Euclidean GCD Algorithm. */ #define BASIC 1 /** Lehmer's fast GCD Algorithm. */ #define LEHME 2 /** Stein's binary GCD Algorithm. */ #define STEIN 3 /** Chosen multiple precision greatest common divisor method. */ #define BN_GCD @BN_GCD@ /** Basic prime generation. */ #define BASIC 1 /** Safe prime generation. */ #define SAFEP 2 /** Strong prime generation. */ #define STRON 3 /** Chosen prime generation algorithm. */ #define BN_GEN @BN_GEN@ /** Multiple precision arithmetic method */ #define BN_METHD "@BN_METHD@" /** Prime field size in bits. */ #define FP_PRIME @FP_PRIME@ /** Number of Karatsuba steps. */ #define FP_KARAT @FP_KARAT@ /** Prefer Pseudo-Mersenne primes over random primes. */ #cmakedefine FP_PMERS /** Use -1 as quadratic non-residue. */ #cmakedefine FP_QNRES /** Width of window processing for exponentiation methods. */ #define FP_WIDTH @FP_WIDTH@ /** Schoolbook addition. */ #define BASIC 1 /** Integrated modular addtion. */ #define INTEG 3 /** Chosen prime field multiplication method. */ #define FP_ADD @FP_ADD@ /** Schoolbook multiplication. */ #define BASIC 1 /** Comba multiplication. */ #define COMBA 2 /** Integrated modular multiplication. */ #define INTEG 3 /** Chosen prime field multiplication method. */ #define FP_MUL @FP_MUL@ /** Schoolbook squaring. */ #define BASIC 1 /** Comba squaring. */ #define COMBA 2 /** Integrated modular squaring. */ #define INTEG 3 /** Reuse multiplication for squaring. */ #define MULTP 4 /** Chosen prime field multiplication method. */ #define FP_SQR @FP_SQR@ /** Division-based reduction. */ #define BASIC 1 /** Fast reduction modulo special form prime. */ #define QUICK 2 /** Montgomery modular reduction. */ #define MONTY 3 /** Chosen prime field reduction method. */ #define FP_RDC @FP_RDC@ /** Inversion by Fermat's Little Theorem. */ #define BASIC 1 /** Binary inversion. */ #define BINAR 2 /** Integrated modular multiplication. */ #define MONTY 3 /** Extended Euclidean algorithm. */ #define EXGCD 4 /** Constant-time inversion by Bernstein-Yang division steps. */ #define DIVST 5 /** Use implementation provided by the lower layer. */ #define LOWER 8 /** Chosen prime field inversion method. */ #define FP_INV @FP_INV@ /** Binary modular exponentiation. */ #define BASIC 1 /** Sliding window modular exponentiation. */ #define SLIDE 2 /** Constant-time Montgomery powering ladder. */ #define MONTY 3 /** Chosen multiple precision modular exponentiation method. */ #define FP_EXP @FP_EXP@ /** Prime field arithmetic method */ #define FP_METHD "@FP_METHD@" /** Basic quadratic extension field arithmetic. */ #define BASIC 1 /** Integrated extension field arithmetic. */ #define INTEG 3 /* Chosen extension field arithmetic method. */ #define FPX_QDR @FPX_QDR@ /** Basic cubic extension field arithmetic. */ #define BASIC 1 /** Integrated extension field arithmetic. */ #define INTEG 3 /* Chosen extension field arithmetic method. */ #define FPX_CBC @FPX_CBC@ /** Basic quadratic extension field arithmetic. */ #define BASIC 1 /** Lazy-reduced extension field arithmetic. */ #define LAZYR 2 /* Chosen extension field arithmetic method. */ #define FPX_RDC @FPX_RDC@ /** Prime extension field arithmetic method */ #define FPX_METHD "@FPX_METHD@" /** Irreducible polynomial size in bits. */ #define FB_POLYN @FB_POLYN@ /** Number of Karatsuba steps. */ #define FB_KARAT @FB_KARAT@ /** Prefer trinomials over pentanomials. */ #cmakedefine FB_TRINO /** Prefer square-root friendly polynomials. */ #cmakedefine FB_SQRTF /** Precompute multiplication table for sqrt(z). */ #cmakedefine FB_PRECO /** Width of window processing for exponentiation methods. */ #define FB_WIDTH @FB_WIDTH@ /** Shift-and-add multiplication. */ #define BASIC 1 /** Lopez-Dahab multiplication. */ #define LODAH 2 /** Integrated modular multiplication. */ #define INTEG 3 /** Chosen binary field multiplication method. */ #define FB_MUL @FB_MUL@ /** Basic squaring. */ #define BASIC 1 /** Table-based squaring. */ #define QUICK 2 /** Integrated modular squaring. */ #define INTEG 3 /** Chosen binary field squaring method. */ #define FB_SQR @FB_SQR@ /** Shift-and-add modular reduction. */ #define BASIC 1 /** Fast reduction modulo a trinomial or pentanomial. */ #define QUICK 2 /** Chosen binary field modular reduction method. */ #define FB_RDC @FB_RDC@ /** Square root by repeated squaring. */ #define BASIC 1 /** Fast square root extraction. */ #define QUICK 2 /** Chosen binary field modular reduction method. */ #define FB_SRT @FB_SRT@ /** Trace by repeated squaring. */ #define BASIC 1 /** Fast trace computation. */ #define QUICK 2 /** Chosen trace computation method. */ #define FB_TRC @FB_TRC@ /** Solve by half-trace computation. */ #define BASIC 1 /** Solve with precomputed half-traces. */ #define QUICK 2 /** Chosen method to solve a quadratic equation. */ #define FB_SLV @FB_SLV@ /** Inversion by Fermat's Little Theorem. */ #define BASIC 1 /** Binary inversion. */ #define BINAR 2 /** Almost inverse algorithm. */ #define ALMOS 3 /** Extended Euclidean algorithm. */ #define EXGCD 4 /** Itoh-Tsuji inversion. */ #define ITOHT 5 /** Hardware-friendly inversion by Brunner-Curiger-Hofstetter.*/ #define BRUCH 6 /** Constant-time version of almost inverse. */ #define CTAIA 7 /** Use implementation provided by the lower layer. */ #define LOWER 8 /** Chosen binary field inversion method. */ #define FB_INV @FB_INV@ /** Binary modular exponentiation. */ #define BASIC 1 /** Sliding window modular exponentiation. */ #define SLIDE 2 /** Constant-time Montgomery powering ladder. */ #define MONTY 3 /** Chosen multiple precision modular exponentiation method. */ #define FB_EXP @FB_EXP@ /** Iterated squaring/square-root by consecutive squaring/square-root. */ #define BASIC 1 /** Iterated squaring/square-root by table-based method. */ #define QUICK 2 /** Chosen method to solve a quadratic equation. */ #define FB_ITR @FB_ITR@ /** Binary field arithmetic method */ #define FB_METHD "@FB_METHD@" /** Support for ordinary curves. */ #cmakedefine EP_PLAIN /** Support for supersingular curves. */ #cmakedefine EP_SUPER /** Support for prime curves with efficient endormorphisms. */ #cmakedefine EP_ENDOM /** Use mixed coordinates. */ #cmakedefine EP_MIXED /** Build precomputation table for generator. */ #cmakedefine EP_PRECO /** Enable isogeny map for SSWU map-to-curve. */ #cmakedefine EP_CTMAP /** Width of precomputation table for fixed point methods. */ #define EP_DEPTH @EP_DEPTH@ /** Width of window processing for unknown point methods. */ #define EP_WIDTH @EP_WIDTH@ /** Affine coordinates. */ #define BASIC 1 /** Projective coordinates. */ #define PROJC 2 /** Jacobian coordinates. */ #define JACOB 3 /** Chosen prime elliptic curve coordinate method. */ #define EP_ADD @EP_ADD@ /** Binary point multiplication. */ #define BASIC 1 /** Sliding window. */ #define SLIDE 2 /** Montgomery powering ladder. */ #define MONTY 3 /** Left-to-right Width-w NAF. */ #define LWNAF 4 /** Left-to-right Width-w NAF. */ #define LWREG 5 /** Chosen prime elliptic curve point multiplication method. */ #define EP_MUL @EP_MUL@ /** Binary point multiplication. */ #define BASIC 1 /** Single-table comb method. */ #define COMBS 2 /** Double-table comb method. */ #define COMBD 3 /** Left-to-right Width-w NAF. */ #define LWNAF 4 /** Chosen prime elliptic curve point multiplication method. */ #define EP_FIX @EP_FIX@ /** Basic simultaneouns point multiplication. */ #define BASIC 1 /** Shamir's trick. */ #define TRICK 2 /** Interleaving of w-(T)NAFs. */ #define INTER 3 /** Joint sparse form. */ #define JOINT 4 /** Chosen prime elliptic curve simulteanous point multiplication method. */ #define EP_SIM @EP_SIM@ /** Prime elliptic curve arithmetic method. */ #define EP_METHD "@EP_METHD@" /** Support for ordinary curves without endormorphisms. */ #cmakedefine EB_PLAIN /** Support for Koblitz anomalous binary curves. */ #cmakedefine EB_KBLTZ /** Use mixed coordinates. */ #cmakedefine EB_MIXED /** Build precomputation table for generator. */ #cmakedefine EB_PRECO /** Width of precomputation table for fixed point methods. */ #define EB_DEPTH @EB_DEPTH@ /** Width of window processing for unknown point methods. */ #define EB_WIDTH @EB_WIDTH@ /** Binary elliptic curve arithmetic method. */ #define EB_METHD "@EB_METHD@" /** Affine coordinates. */ #define BASIC 1 /** López-Dahab Projective coordinates. */ #define PROJC 2 /** Chosen binary elliptic curve coordinate method. */ #define EB_ADD @EB_ADD@ /** Binary point multiplication. */ #define BASIC 1 /** L�pez-Dahab point multiplication. */ #define LODAH 2 /** Halving. */ #define HALVE 3 /** Left-to-right width-w (T)NAF. */ #define LWNAF 4 /** Right-to-left width-w (T)NAF. */ #define RWNAF 5 /** Chosen binary elliptic curve point multiplication method. */ #define EB_MUL @EB_MUL@ /** Binary point multiplication. */ #define BASIC 1 /** Single-table comb method. */ #define COMBS 2 /** Double-table comb method. */ #define COMBD 3 /** Left-to-right Width-w NAF. */ #define LWNAF 4 /** Chosen binary elliptic curve point multiplication method. */ #define EB_FIX @EB_FIX@ /** Basic simultaneouns point multiplication. */ #define BASIC 1 /** Shamir's trick. */ #define TRICK 2 /** Interleaving of w-(T)NAFs. */ #define INTER 3 /** Joint sparse form. */ #define JOINT 4 /** Chosen binary elliptic curve simulteanous point multiplication method. */ #define EB_SIM @EB_SIM@ /** Build precomputation table for generator. */ #cmakedefine ED_PRECO /** Width of precomputation table for fixed point methods. */ #define ED_DEPTH @ED_DEPTH@ /** Width of window processing for unknown point methods. */ #define ED_WIDTH @ED_WIDTH@ /** Edwards elliptic curve arithmetic method. */ #define ED_METHD "@ED_METHD@" /** Affine coordinates. */ #define BASIC 1 /** Simple projective twisted Edwards coordinates */ #define PROJC 2 /** Extended projective twisted Edwards coordinates */ #define EXTND 3 /** Chosen binary elliptic curve coordinate method. */ #define ED_ADD @ED_ADD@ /** Binary point multiplication. */ #define BASIC 1 /** Sliding window. */ #define SLIDE 2 /** Montgomery powering ladder. */ #define MONTY 3 /** Left-to-right Width-w NAF. */ #define LWNAF 4 /** Left-to-right Width-w NAF. */ #define LWREG 5 /** Chosen prime elliptic twisted Edwards curve point multiplication method. */ #define ED_MUL @ED_MUL@ /** Binary point multiplication. */ #define BASIC 1 /** Single-table comb method. */ #define COMBS 2 /** Double-table comb method. */ #define COMBD 3 /** Left-to-right Width-w NAF. */ #define LWNAF 4 /** Chosen prime elliptic twisted Edwards curve point multiplication method. */ #define ED_FIX @ED_FIX@ /** Basic simultaneouns point multiplication. */ #define BASIC 1 /** Shamir's trick. */ #define TRICK 2 /** Interleaving of w-(T)NAFs. */ #define INTER 3 /** Joint sparse form. */ #define JOINT 4 /** Chosen prime elliptic curve simulteanous point multiplication method. */ #define ED_SIM @ED_SIM@ /** Prime curves. */ #define PRIME 1 /** Binary curves. */ #define CHAR2 2 /** Edwards curves */ #define EDDIE 3 /** Chosen elliptic curve type. */ #define EC_CUR @EC_CUR@ /** Chosen elliptic curve cryptography method. */ #define EC_METHD "@EC_METHD@" /** Prefer curves with efficient endomorphisms. */ #cmakedefine EC_ENDOM /** Basic quadratic extension field arithmetic. */ #define BASIC 1 /** Lazy-reduced extension field arithmetic. */ #define LAZYR 2 /* Chosen extension field arithmetic method. */ #define PP_EXT @PP_EXT@ /** Bilinear pairing method. */ #define PP_METHD "@PP_METHD@" /** Tate pairing. */ #define TATEP 1 /** Weil pairing. */ #define WEILP 2 /** Optimal ate pairing. */ #define OATEP 3 /** Chosen pairing method over prime elliptic curves. */ #define PP_MAP @PP_MAP@ /** SHA-224 hash function. */ #define SH224 2 /** SHA-256 hash function. */ #define SH256 3 /** SHA-384 hash function. */ #define SH384 4 /** SHA-512 hash function. */ #define SH512 5 /** BLAKE2s-160 hash function. */ #define B2S160 6 /** BLAKE2s-256 hash function. */ #define B2S256 7 /** Chosen hash function. */ #define MD_MAP @MD_MAP@ /** Choice of hash function. */ #define MD_METHD "@MD_METHD@" /** Chosen RSA method. */ #cmakedefine CP_CRT /** RSA without padding. */ #define BASIC 1 /** RSA PKCS#1 v1.5 padding. */ #define PKCS1 2 /** RSA PKCS#1 v2.1 padding. */ #define PKCS2 3 /** Chosen RSA padding method. */ #define CP_RSAPD @CP_RSAPD@ /** Automatic memory allocation. */ #define AUTO 1 /** Dynamic memory allocation. */ #define DYNAMIC 2 /** Chosen memory allocation policy. */ #define ALLOC @ALLOC@ /** NIST HASH-DRBG generator. */ #define HASHD 1 /** Intel RdRand instruction. */ #define RDRND 2 /** Operating system underlying generator. */ #define UDEV 3 /** Override library generator with the callback. */ #define CALL 4 /** Chosen random generator. */ #define RAND @RAND@ /** Standard C library generator. */ #define LIBC 1 /** Intel RdRand instruction. */ #define RDRND 2 /** Device node generator. */ #define UDEV 3 /** Use Windows' CryptGenRandom. */ #define WCGR 4 /** Chosen random generator seeder. */ #cmakedefine SEED @SEED@ /** GNU/Linux operating system. */ #define LINUX 1 /** FreeBSD operating system. */ #define FREEBSD 2 /** Windows operating system. */ #define MACOSX 3 /** Windows operating system. */ #define WINDOWS 4 /** Android operating system. */ #define DROID 5 /** Arduino platform. */ #define DUINO 6 /** OpenBSD operating system. */ #define OPENBSD 7 /** Detected operation system. */ #cmakedefine OPSYS @OPSYS@ /** OpenMP multithreading support. */ #define OPENMP 1 /** POSIX multithreading support. */ #define PTHREAD 2 /** Chosen multithreading API. */ #cmakedefine MULTI @MULTI@ /** Per-process high-resolution timer. */ #define HREAL 1 /** Per-process high-resolution timer. */ #define HPROC 2 /** Per-thread high-resolution timer. */ #define HTHRD 3 /** POSIX-compatible timer. */ #define POSIX 4 /** ANSI-compatible timer. */ #define ANSI 5 /** Cycle-counting timer. */ #define CYCLE 6 /** Performance monitoring framework. */ #define PERF 7 /** Chosen timer. */ #cmakedefine TIMER @TIMER@ /** Prefix to identity this build of the library. */ #cmakedefine LABEL @LABEL@ #ifndef ASM #include "relic_label.h" /** * Prints the project options selected at build time. */ void conf_print(void); #endif /* ASM */ #endif /* !RLC_CONF_H */