2015-10-26 14:54:21 +00:00
|
|
|
/**********************************************************************
|
|
|
|
* Copyright (c) 2013, 2014, 2015 Thomas Daede, Cory Fields *
|
|
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
|
|
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define USE_BASIC_CONFIG 1
|
|
|
|
|
|
|
|
#include "basic-config.h"
|
|
|
|
#include "include/secp256k1.h"
|
2019-05-28 12:23:28 +00:00
|
|
|
#include "util.h"
|
2015-10-26 14:54:21 +00:00
|
|
|
#include "field_impl.h"
|
|
|
|
#include "scalar_impl.h"
|
|
|
|
#include "group_impl.h"
|
|
|
|
#include "ecmult_gen_impl.h"
|
|
|
|
|
|
|
|
static void default_error_callback_fn(const char* str, void* data) {
|
|
|
|
(void)data;
|
|
|
|
fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str);
|
|
|
|
abort();
|
|
|
|
}
|
|
|
|
|
2019-12-11 15:55:00 +00:00
|
|
|
static const rustsecp256k1_v0_1_1_callback default_error_callback = {
|
2015-10-26 14:54:21 +00:00
|
|
|
default_error_callback_fn,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
|
|
|
int main(int argc, char **argv) {
|
2019-12-11 15:55:00 +00:00
|
|
|
rustsecp256k1_v0_1_1_ecmult_gen_context ctx;
|
2019-05-28 12:23:28 +00:00
|
|
|
void *prealloc, *base;
|
2015-10-26 14:54:21 +00:00
|
|
|
int inner;
|
|
|
|
int outer;
|
|
|
|
FILE* fp;
|
|
|
|
|
|
|
|
(void)argc;
|
|
|
|
(void)argv;
|
|
|
|
|
|
|
|
fp = fopen("src/ecmult_static_context.h","w");
|
|
|
|
if (fp == NULL) {
|
|
|
|
fprintf(stderr, "Could not open src/ecmult_static_context.h for writing!\n");
|
|
|
|
return -1;
|
|
|
|
}
|
2019-05-28 12:23:28 +00:00
|
|
|
|
2015-10-26 14:54:21 +00:00
|
|
|
fprintf(fp, "#ifndef _SECP256K1_ECMULT_STATIC_CONTEXT_\n");
|
|
|
|
fprintf(fp, "#define _SECP256K1_ECMULT_STATIC_CONTEXT_\n");
|
2018-07-09 11:17:44 +00:00
|
|
|
fprintf(fp, "#include \"src/group.h\"\n");
|
2015-10-26 14:54:21 +00:00
|
|
|
fprintf(fp, "#define SC SECP256K1_GE_STORAGE_CONST\n");
|
2019-12-11 15:55:00 +00:00
|
|
|
fprintf(fp, "static const rustsecp256k1_v0_1_1_ge_storage rustsecp256k1_v0_1_1_ecmult_static_context[64][16] = {\n");
|
2015-10-26 14:54:21 +00:00
|
|
|
|
2019-05-28 12:23:28 +00:00
|
|
|
base = checked_malloc(&default_error_callback, SECP256K1_ECMULT_GEN_CONTEXT_PREALLOCATED_SIZE);
|
|
|
|
prealloc = base;
|
2019-12-11 15:55:00 +00:00
|
|
|
rustsecp256k1_v0_1_1_ecmult_gen_context_init(&ctx);
|
|
|
|
rustsecp256k1_v0_1_1_ecmult_gen_context_build(&ctx, &prealloc);
|
2015-10-26 14:54:21 +00:00
|
|
|
for(outer = 0; outer != 64; outer++) {
|
|
|
|
fprintf(fp,"{\n");
|
|
|
|
for(inner = 0; inner != 16; inner++) {
|
|
|
|
fprintf(fp," SC(%uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu)", SECP256K1_GE_STORAGE_CONST_GET((*ctx.prec)[outer][inner]));
|
|
|
|
if (inner != 15) {
|
|
|
|
fprintf(fp,",\n");
|
|
|
|
} else {
|
|
|
|
fprintf(fp,"\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (outer != 63) {
|
|
|
|
fprintf(fp,"},\n");
|
|
|
|
} else {
|
|
|
|
fprintf(fp,"}\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fprintf(fp,"};\n");
|
2019-12-11 15:55:00 +00:00
|
|
|
rustsecp256k1_v0_1_1_ecmult_gen_context_clear(&ctx);
|
2019-05-28 12:23:28 +00:00
|
|
|
free(base);
|
|
|
|
|
2015-10-26 14:54:21 +00:00
|
|
|
fprintf(fp, "#undef SC\n");
|
|
|
|
fprintf(fp, "#endif\n");
|
|
|
|
fclose(fp);
|
2019-05-28 12:23:28 +00:00
|
|
|
|
2015-10-26 14:54:21 +00:00
|
|
|
return 0;
|
|
|
|
}
|