Only support FIELD_ELEMENTS_PER_BLOB values that are a power of 2. (#249)

* Intentionally fail to compile with a FIELD_ELEMENTS_PER_BLOB value that is not a power of 2.
We do not want to support or maintain this case, so let us be explicit about it.

* Update src/c_kzg_4844.h

Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com>

* Update src/c_kzg_4844.h

Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com>

---------

Co-authored-by: George Kadianakis <desnacked@riseup.net>
Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com>
This commit is contained in:
Gottfried Herold 2023-03-27 17:02:01 +02:00 committed by GitHub
parent f384175810
commit 8de0aa54ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 0 deletions

View File

@ -49,6 +49,18 @@ extern "C" {
#error Invalid value of FIELD_ELEMENTS_PER_BLOB
#endif // FIELD_ELEMENTS_PER_BLOB
/**
* If FIELD_ELEMENTS_PER_BLOB is not a power of 2, the size of the FFT domain
* should be chosen as the the next-largest power of two and polynomials
* represented by their evaluations at a subset of the 2^i'th roots of unity.
* While the code in this library tries to take this into account,
* we do not need the case where FIELD_ELEMENTS_PER_BLOB is not a power of 2.
* As this case is neither maintained nor tested, we prefer to not support it.
*/
#if ((FIELD_ELEMENTS_PER_BLOB) & (FIELD_ELEMENTS_PER_BLOB)-1) != 0
#error FIELD_ELEMENTS_PER_BLOB is not a power of two
#endif
#define BYTES_PER_COMMITMENT 48
#define BYTES_PER_PROOF 48
#define BYTES_PER_FIELD_ELEMENT 32