From 2da2e1bfd045b8c941818f0e7112da6845209a8c Mon Sep 17 00:00:00 2001
From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com>
Date: Tue, 17 Dec 2024 04:28:10 +0000
Subject: [PATCH 1/3] revert: stop tracking cmake dependency relic_conf.h.in
reverts:
- 02260cba57f5b28c35509fbd6168feac50a1980e.
---
.../depends/relic/include/relic_conf.h.in | 717 ++++++++++++++++++
1 file changed, 717 insertions(+)
create mode 100644 src/dashbls/depends/relic/include/relic_conf.h.in
diff --git a/src/dashbls/depends/relic/include/relic_conf.h.in b/src/dashbls/depends/relic/include/relic_conf.h.in
new file mode 100644
index 000000000000..7db6f5b509c4
--- /dev/null
+++ b/src/dashbls/depends/relic/include/relic_conf.h.in
@@ -0,0 +1,717 @@
+/*
+ * 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 */
From f6cad94faf4ecc53a65f167750b69b39c633bfe5 Mon Sep 17 00:00:00 2001
From: pasta
Date: Thu, 13 Aug 2026 14:09:00 -0500
Subject: [PATCH 2/3] Squashed 'src/dashbls/' changes from
6169ee9c9141..d36c482edfe9
d36c482edfe9 fix: cleanse BIP32 secret derivation state
git-subtree-dir: src/dashbls
git-subtree-split: d36c482edfe95c4e1db50dd60c2e53c95037c519
---
include/dashbls/chaincode.hpp | 5 +-
include/dashbls/util.hpp | 11 +++
src/chaincode.cpp | 39 ++++++++--
src/extendedprivatekey.cpp | 129 +++++++++++++++++++++++-----------
src/privatekey.cpp | 19 +++++
src/test.cpp | 29 ++++++++
6 files changed, 182 insertions(+), 50 deletions(-)
diff --git a/include/dashbls/chaincode.hpp b/include/dashbls/chaincode.hpp
index bd3e57b4d779..146df7f13f44 100644
--- a/include/dashbls/chaincode.hpp
+++ b/include/dashbls/chaincode.hpp
@@ -38,6 +38,8 @@ class ChainCode {
static ChainCode FromBytes(const Bytes& bytes);
ChainCode(const ChainCode &cc);
+ ChainCode& operator=(const ChainCode& cc);
+ ~ChainCode();
// Comparator implementation.
friend bool operator==(ChainCode const &a, ChainCode const &b);
@@ -48,7 +50,7 @@ class ChainCode {
std::vector Serialize() const;
// Prevent direct construction, use static constructor
- ChainCode() {}
+ ChainCode();
private:
bn_t chainCode;
@@ -56,4 +58,3 @@ class ChainCode {
} // end namespace bls
#endif // SRC_CHAINCODE_HPP_
-
diff --git a/include/dashbls/util.hpp b/include/dashbls/util.hpp
index 37fd8547a983..8422757e0cf6 100644
--- a/include/dashbls/util.hpp
+++ b/include/dashbls/util.hpp
@@ -95,6 +95,17 @@ class Util {
secureFreeCallback(ptr);
}
+ /*
+ * Overwrite sensitive memory through a volatile pointer so the writes are
+ * not removed as dead stores by the compiler.
+ */
+ static void SecureWipe(void* ptr, size_t size) noexcept {
+ volatile uint8_t* bytes = static_cast(ptr);
+ while (size-- > 0) {
+ *bytes++ = 0;
+ }
+ }
+
/*
* Converts one hex character to an int.
*/
diff --git a/src/chaincode.cpp b/src/chaincode.cpp
index efacdc95ae29..75c493ff1e04 100644
--- a/src/chaincode.cpp
+++ b/src/chaincode.cpp
@@ -20,17 +20,44 @@ ChainCode ChainCode::FromBytes(const Bytes& bytes) {
if (bytes.size() != ChainCode::SIZE) {
throw std::invalid_argument("ChainCode::FromBytes: Invalid size");
}
- ChainCode c = ChainCode();
- bn_new(c.chainCode);
+ ChainCode c;
bn_read_bin(c.chainCode, bytes.begin(), ChainCode::SIZE);
return c;
}
-ChainCode::ChainCode(const ChainCode &cc) {
- uint8_t bytes[ChainCode::SIZE];
- cc.Serialize(bytes);
+ChainCode::ChainCode() {
+ bn_null(chainCode);
bn_new(chainCode);
- bn_read_bin(chainCode, bytes, ChainCode::SIZE);
+ bn_zero(chainCode);
+}
+
+ChainCode::ChainCode(const ChainCode &cc) : ChainCode() {
+ bn_copy(chainCode, cc.chainCode);
+}
+
+ChainCode& ChainCode::operator=(const ChainCode& cc) {
+ if (this != &cc) {
+#if ALLOC == DYNAMIC
+ if (chainCode->dp != nullptr && chainCode->alloc > 0) {
+ Util::SecureWipe(chainCode->dp, chainCode->alloc * sizeof(dig_t));
+ }
+#elif ALLOC == AUTO
+ Util::SecureWipe(chainCode->dp, sizeof(chainCode->dp));
+#endif
+ bn_copy(chainCode, cc.chainCode);
+ }
+ return *this;
+}
+
+ChainCode::~ChainCode() {
+#if ALLOC == DYNAMIC
+ if (chainCode != nullptr && chainCode->dp != nullptr && chainCode->alloc > 0) {
+ Util::SecureWipe(chainCode->dp, chainCode->alloc * sizeof(dig_t));
+ }
+ bn_free(chainCode);
+#elif ALLOC == AUTO
+ Util::SecureWipe(chainCode, sizeof(chainCode));
+#endif
}
// Comparator implementation.
diff --git a/src/extendedprivatekey.cpp b/src/extendedprivatekey.cpp
index d5fe746ee690..7ed3b3af8308 100644
--- a/src/extendedprivatekey.cpp
+++ b/src/extendedprivatekey.cpp
@@ -13,47 +13,95 @@
// limitations under the License.
#include
+#include
#include "bls.hpp"
namespace bls {
+namespace {
+
+class SecureBytes {
+ public:
+ explicit SecureBytes(size_t size) : m_size(size), m_data(Util::SecAlloc(size)) {
+ if (m_data == nullptr) {
+ throw std::bad_alloc();
+ }
+ }
+
+ ~SecureBytes() {
+ Util::SecureWipe(m_data, m_size);
+ Util::SecFree(m_data);
+ }
+
+ SecureBytes(const SecureBytes&) = delete;
+ SecureBytes& operator=(const SecureBytes&) = delete;
+
+ uint8_t* data() { return m_data; }
+
+ private:
+ const size_t m_size;
+ uint8_t* const m_data;
+};
+
+class SecureRelicBn {
+ public:
+ SecureRelicBn() {
+ bn_null(m_value);
+ bn_new(m_value);
+ }
+
+ ~SecureRelicBn() {
+#if ALLOC == DYNAMIC
+ if (m_value != nullptr && m_value->dp != nullptr && m_value->alloc > 0) {
+ Util::SecureWipe(m_value->dp, m_value->alloc * sizeof(dig_t));
+ }
+ bn_free(m_value);
+#elif ALLOC == AUTO
+ Util::SecureWipe(m_value, sizeof(m_value));
+#endif
+ }
+
+ SecureRelicBn(const SecureRelicBn&) = delete;
+ SecureRelicBn& operator=(const SecureRelicBn&) = delete;
+
+ bn_st* get() { return m_value; }
+
+ private:
+ bn_t m_value;
+};
+
+} // namespace
ExtendedPrivateKey ExtendedPrivateKey::FromSeed(const Bytes& bytes) {
// "BLS HD seed" in ascii
const uint8_t prefix[] = {66, 76, 83, 32, 72, 68, 32, 115, 101, 101, 100};
- uint8_t* hashInput = Util::SecAlloc(bytes.size() + 1);
- std::memcpy(hashInput, bytes.begin(), bytes.size());
+ SecureBytes hashInput(bytes.size() + 1);
+ std::memcpy(hashInput.data(), bytes.begin(), bytes.size());
// 32 bytes for secret key, and 32 bytes for chaincode
- uint8_t* ILeft = Util::SecAlloc(
- PrivateKey::PRIVATE_KEY_SIZE);
- uint8_t IRight[ChainCode::SIZE];
+ SecureBytes ILeft(PrivateKey::PRIVATE_KEY_SIZE);
+ SecureBytes IRight(ChainCode::SIZE);
// Hash the seed into 64 bytes, half will be sk, half will be cc
- hashInput[bytes.size()] = 0;
- md_hmac(ILeft, hashInput, bytes.size() + 1, prefix, sizeof(prefix));
+ hashInput.data()[bytes.size()] = 0;
+ md_hmac(ILeft.data(), hashInput.data(), bytes.size() + 1, prefix, sizeof(prefix));
- hashInput[bytes.size()] = 1;
- md_hmac(IRight, hashInput, bytes.size() + 1, prefix, sizeof(prefix));
+ hashInput.data()[bytes.size()] = 1;
+ md_hmac(IRight.data(), hashInput.data(), bytes.size() + 1, prefix, sizeof(prefix));
// Make sure private key is less than the curve order
- bn_t* skBn = Util::SecAlloc(1);
- bn_t order;
- bn_new(order);
- g1_get_ord(order);
+ SecureRelicBn skBn;
+ SecureRelicBn order;
+ g1_get_ord(order.get());
- bn_new(*skBn);
- bn_read_bin(*skBn, ILeft, PrivateKey::PRIVATE_KEY_SIZE);
- bn_mod_basic(*skBn, *skBn, order);
- bn_write_bin(ILeft, PrivateKey::PRIVATE_KEY_SIZE, *skBn);
+ bn_read_bin(skBn.get(), ILeft.data(), PrivateKey::PRIVATE_KEY_SIZE);
+ bn_mod_basic(skBn.get(), skBn.get(), order.get());
+ bn_write_bin(ILeft.data(), PrivateKey::PRIVATE_KEY_SIZE, skBn.get());
ExtendedPrivateKey esk(ExtendedPublicKey::REVISION, 0, 0, 0,
- ChainCode::FromBytes(Bytes(IRight, ChainCode::SIZE)),
- PrivateKey::FromBytes(Bytes(ILeft, PrivateKey::PRIVATE_KEY_SIZE)));
+ ChainCode::FromBytes(Bytes(IRight.data(), ChainCode::SIZE)),
+ PrivateKey::FromBytes(Bytes(ILeft.data(), PrivateKey::PRIVATE_KEY_SIZE)));
- Util::SecFree(skBn);
- Util::SecFree(ILeft);
- Util::SecFree(hashInput);
return esk;
}
@@ -79,48 +127,45 @@ ExtendedPrivateKey ExtendedPrivateKey::PrivateChild(uint32_t i, const bool fLega
uint32_t cmp = (1 << 31);
bool hardened = i >= cmp;
- uint8_t* ILeft = Util::SecAlloc(PrivateKey::PRIVATE_KEY_SIZE);
- uint8_t IRight[ChainCode::SIZE];
+ SecureBytes ILeft(PrivateKey::PRIVATE_KEY_SIZE);
+ SecureBytes IRight(ChainCode::SIZE);
// Chain code is used as hmac key
- uint8_t hmacKey[ChainCode::SIZE];
- chainCode.Serialize(hmacKey);
+ SecureBytes hmacKey(ChainCode::SIZE);
+ chainCode.Serialize(hmacKey.data());
size_t inputLen = hardened ? PrivateKey::PRIVATE_KEY_SIZE + 4 + 1
: G1Element::SIZE + 4 + 1;
// Hmac input includes sk or pk, int i, and byte with 0 or 1
- uint8_t* hmacInput = Util::SecAlloc(inputLen);
+ SecureBytes hmacInput(inputLen);
// Fill the input with the required data
if (hardened) {
- sk.Serialize(hmacInput);
- Util::IntToFourBytes(hmacInput + PrivateKey::PRIVATE_KEY_SIZE, i);
+ sk.Serialize(hmacInput.data());
+ Util::IntToFourBytes(hmacInput.data() + PrivateKey::PRIVATE_KEY_SIZE, i);
} else {
- memcpy(hmacInput, sk.GetG1Element().Serialize(fLegacy).data(), G1Element::SIZE);
- Util::IntToFourBytes(hmacInput + G1Element::SIZE, i);
+ memcpy(hmacInput.data(), sk.GetG1Element().Serialize(fLegacy).data(), G1Element::SIZE);
+ Util::IntToFourBytes(hmacInput.data() + G1Element::SIZE, i);
}
- hmacInput[inputLen - 1] = 0;
+ hmacInput.data()[inputLen - 1] = 0;
- md_hmac(ILeft, hmacInput, inputLen,
- hmacKey, ChainCode::SIZE);
+ md_hmac(ILeft.data(), hmacInput.data(), inputLen,
+ hmacKey.data(), ChainCode::SIZE);
// Change 1 byte to generate a different sequence for chaincode
- hmacInput[inputLen - 1] = 1;
+ hmacInput.data()[inputLen - 1] = 1;
- md_hmac(IRight, hmacInput, inputLen,
- hmacKey, ChainCode::SIZE);
+ md_hmac(IRight.data(), hmacInput.data(), inputLen,
+ hmacKey.data(), ChainCode::SIZE);
- PrivateKey newSk = PrivateKey::FromBytes(Bytes(ILeft, PrivateKey::PRIVATE_KEY_SIZE), true);
+ PrivateKey newSk = PrivateKey::FromBytes(Bytes(ILeft.data(), PrivateKey::PRIVATE_KEY_SIZE), true);
newSk = PrivateKey::Aggregate({sk, newSk});
ExtendedPrivateKey esk(version, depth + 1,
sk.GetG1Element().GetFingerprint(), i,
- ChainCode::FromBytes(Bytes(IRight, ChainCode::SIZE)),
+ ChainCode::FromBytes(Bytes(IRight.data(), ChainCode::SIZE)),
newSk);
- Util::SecFree(ILeft);
- Util::SecFree(hmacInput);
-
return esk;
}
diff --git a/src/privatekey.cpp b/src/privatekey.cpp
index d07246d8575e..90cf2f535984 100644
--- a/src/privatekey.cpp
+++ b/src/privatekey.cpp
@@ -16,6 +16,20 @@
#include "legacy.hpp"
namespace bls {
+namespace {
+
+void SecureWipePrivateKey(bn_st* keydata) noexcept
+{
+#if ALLOC == DYNAMIC
+ if (keydata->dp != nullptr && keydata->alloc > 0) {
+ Util::SecureWipe(keydata->dp, keydata->alloc * sizeof(dig_t));
+ }
+#elif ALLOC == AUTO
+ Util::SecureWipe(keydata->dp, sizeof(keydata->dp));
+#endif
+}
+
+} // namespace
const size_t PrivateKey::PRIVATE_KEY_SIZE;
@@ -119,6 +133,7 @@ PrivateKey::~PrivateKey()
void PrivateKey::DeallocateKeyData()
{
if(keydata != nullptr) {
+ SecureWipePrivateKey(keydata);
Util::SecFree(keydata);
keydata = nullptr;
}
@@ -133,9 +148,13 @@ void PrivateKey::InvalidateCaches()
PrivateKey& PrivateKey::operator=(const PrivateKey& other)
{
+ if (this == &other) {
+ return *this;
+ }
CheckKeyData();
other.CheckKeyData();
InvalidateCaches();
+ SecureWipePrivateKey(keydata);
bn_copy(keydata, other.keydata);
return *this;
}
diff --git a/src/test.cpp b/src/test.cpp
index 7e9d5280b3b5..03e139d66323 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -14,6 +14,7 @@
// limitations under the License.
#define CATCH_CONFIG_RUNNER
+#include
#include
#include "bls.hpp"
@@ -73,6 +74,8 @@ TEST_CASE("class PrivateKey") {
REQUIRE(pk1.GetG1Element() == pk2.GetG1Element());
REQUIRE(pk1.GetG2Element() == pk2.GetG2Element());
REQUIRE(pk3 != pk2);
+ pk2 = pk2;
+ REQUIRE(pk1 == pk2);
}
SECTION("Move {constructor|assignment operator}") {
PrivateKey pk1 = PrivateKey::RandomPrivateKey();
@@ -1267,6 +1270,32 @@ TEST_CASE("Schemes") {
}
TEST_CASE("Legacy HD keys") {
+ SECTION("Chain code copy construction and assignment preserve value") {
+ std::array first{};
+ std::array second{};
+ first.front() = 1;
+ second.back() = 2;
+
+ const ChainCode source = ChainCode::FromBytes(Bytes(first));
+ ChainCode copy{source};
+ ChainCode assigned = ChainCode::FromBytes(Bytes(second));
+
+ assigned = source;
+ REQUIRE(copy == source);
+ REQUIRE(assigned == source);
+
+ assigned = assigned;
+ REQUIRE(assigned == source);
+
+#if ALLOC == AUTO
+ alignas(ChainCode) std::array storage;
+ storage.fill(0xa5);
+ auto* stored = new (storage.data()) ChainCode{source};
+ stored->~ChainCode();
+ REQUIRE(std::all_of(storage.begin(), storage.end(), [](uint8_t byte) { return byte == 0; }));
+#endif
+ }
+
SECTION("Should create an extended private key from seed") {
std::vector seed{1, 50, 6, 244, 24, 199, 1, 25};
ExtendedPrivateKey esk = ExtendedPrivateKey::FromSeed(Bytes(seed));
From 80554528c9d82b2f8873a1256619872458238b64 Mon Sep 17 00:00:00 2001
From: pasta
Date: Thu, 13 Aug 2026 14:09:24 -0500
Subject: [PATCH 3/3] build: stop tracking cmake dependency relic_conf.h.in
---
.../depends/relic/include/relic_conf.h.in | 717 ------------------
1 file changed, 717 deletions(-)
delete mode 100644 src/dashbls/depends/relic/include/relic_conf.h.in
diff --git a/src/dashbls/depends/relic/include/relic_conf.h.in b/src/dashbls/depends/relic/include/relic_conf.h.in
deleted file mode 100644
index 7db6f5b509c4..000000000000
--- a/src/dashbls/depends/relic/include/relic_conf.h.in
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * 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 */