diff --git a/contrib/libder/.gitignore b/contrib/libder/.gitignore new file mode 100644 --- /dev/null +++ b/contrib/libder/.gitignore @@ -0,0 +1,11 @@ +.*.swp +.depend* +*.a +*.so +*.so.* +*.o +*.pico +*.debug +*.full + +build/ diff --git a/contrib/libder/CMakeLists.txt b/contrib/libder/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/contrib/libder/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.18) + +project(libder) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + add_compile_options(-fsanitize=address,undefined -fstrict-aliasing) + add_link_options(-fsanitize=address,undefined -fstrict-aliasing) +endif() + +# AppleClang is excluded for the time being; the version used in GitHub Action +# runners doesn't seem to have that part of libclang_rt installed, though the +# -fsanitize=fuzzer-no-link instrumentation seems to be fine. Maybe re-evaluate +# this for MATCHES as a possibility later. +if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + set(BUILD_FUZZERS TRUE + CACHE BOOL "Build the libFuzzer fuzzers (needs llvm)") +else() + set(BUILD_FUZZERS FALSE + CACHE BOOL "Build the libFuzzer fuzzers (needs llvm)") +endif() + +add_subdirectory(libder) +add_subdirectory(derdump) +add_subdirectory(tests) diff --git a/contrib/libder/LICENSE b/contrib/libder/LICENSE new file mode 100644 --- /dev/null +++ b/contrib/libder/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2024 Kyle Evans + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/contrib/libder/README.md b/contrib/libder/README.md new file mode 100644 --- /dev/null +++ b/contrib/libder/README.md @@ -0,0 +1,23 @@ +# libder + +## What is libder? + +libder is a small library for encoding/decoding DER-encoded objects. It is +expected to be able to decode any BER-encoded buffer, and an attempt to +re-encode the resulting tree would apply any normalization expected by a DER +decoder. The author's use is primarily to decode/encode ECC keys for +interoperability with OpenSSL. + +## What is libder not? + +libder is not intended to be a general-purpose library for working with DER/BER +specified objects. It may provide some helpers for building more primitive +data types, but libder will quickly punt on anything even remotely complex and +require the library consumer to supply it as a type/payload/size triple that it +will treat as relatively opaque (modulo some encoding normalization rules that +can be applied without deeply understanding the data contained within). + +libder also doesn't do strict validation of what it reads in today, for better +or worse. e.g., a boolean may occupy more than one byte and libder will happily +present it to the application in that way. It would be normalized on +re-encoding to 0xff or 0x00 depending on whether any bits are set or not. diff --git a/contrib/libder/derdump/.gitignore b/contrib/libder/derdump/.gitignore new file mode 100644 --- /dev/null +++ b/contrib/libder/derdump/.gitignore @@ -0,0 +1 @@ +derdump diff --git a/contrib/libder/derdump/CMakeLists.txt b/contrib/libder/derdump/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/contrib/libder/derdump/CMakeLists.txt @@ -0,0 +1,6 @@ +file(GLOB derdump_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.c) + +add_executable(derdump ${derdump_SOURCES}) + +target_include_directories(derdump PRIVATE "${CMAKE_SOURCE_DIR}/libder") +target_link_libraries(derdump der_static) diff --git a/contrib/libder/derdump/derdump.1 b/contrib/libder/derdump/derdump.1 new file mode 100644 --- /dev/null +++ b/contrib/libder/derdump/derdump.1 @@ -0,0 +1,51 @@ +.\" +.\" SPDX-Copyright-Identifier: BSD-2-Clause +.\" +.\" Copyright (C) 2024 Kyle Evans +.\" +.Dd March 4, 2024 +.Dt DERDUMP 1 +.Os +.Sh NAME +.Nm derdump +.Nd dumping contents of DER encoded files +.Sh SYNOPSIS +.Nm +.Ar file1 +.Oo Ar fileN ... Oc +.Sh DESCRIPTION +The +.Nm +utility dumps the contents of one or more DER encoded +Ar file +in a more human readable format. +This is similar to the +.Xr asn1parse 1 +utility distributed with OpenSSL when used with the +.Fl inform +.Ar DER +option. +.Pp +A representation of the object will be output to +.Em stdout , +with indentation to denote objects that are encoded within other constructed +objects. +Note that +.Nm +does not make much attempt to interpret the contents of any particular object. +If an object uses one of the universal types, then a friendly name will be +displayed for that object. +If an object uses any other type, then +.Nm +will display the raw hex value of the type used. +Values of primitive objects are output as raw hex, and no effort is made to +try and print a friendly representation. +.Sh SEE ALSO +.Xr asn1parse 1 , +.Xr libder 3 +.Sh BUGS +.Nm +does not currently make any attempt to render a type that uses the long encoded +format. +Instead, it will render as +.Dq { ... } . diff --git a/contrib/libder/derdump/derdump.c b/contrib/libder/derdump/derdump.c new file mode 100644 --- /dev/null +++ b/contrib/libder/derdump/derdump.c @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +#include + +int +main(int argc, char *argv[]) +{ + FILE *fp; + struct libder_ctx *ctx; + struct libder_object *root; + size_t rootsz; + bool first = true; + + if (argc < 2) { + fprintf(stderr, "usage: %s file [file...]\n", argv[0]); + return (1); + } + + ctx = libder_open(); + libder_set_verbose(ctx, 2); + for (int i = 1; i < argc; i++) { + fp = fopen(argv[i], "rb"); + if (fp == NULL) { + warn("%s", argv[i]); + continue; + } + + if (!first) + fprintf(stderr, "\n"); + fprintf(stdout, "[%s]\n", argv[i]); + root = libder_read_file(ctx, fp, &rootsz); + if (root != NULL) { + libder_obj_dump(root, stdout); + libder_obj_free(root); + root = NULL; + } + + first = false; + fclose(fp); + } + + libder_close(ctx); + + return (0); +} diff --git a/contrib/libder/libder/CMakeLists.txt b/contrib/libder/libder/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/CMakeLists.txt @@ -0,0 +1,12 @@ +file(GLOB libder_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.c) + +add_library(der SHARED ${libder_SOURCES}) +add_library(der_static STATIC ${libder_SOURCES}) + +if(BUILD_FUZZERS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + target_compile_options(der PUBLIC -fsanitize=fuzzer-no-link) + target_link_options(der PUBLIC -fsanitize=fuzzer-no-link) + + target_compile_options(der_static PUBLIC -fsanitize=fuzzer-no-link) + target_link_options(der_static PUBLIC -fsanitize=fuzzer-no-link) +endif() diff --git a/contrib/libder/libder/libder.h b/contrib/libder/libder/libder.h new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder.h @@ -0,0 +1,181 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include +#include + +enum libder_ber_class { + BC_UNIVERSAL = 0, + BC_APPLICATION = 1, + BC_CONTEXT = 2, + BC_PRIVATE = 3, +}; + +enum libder_ber_type { + BT_RESERVED = 0x00, + BT_BOOLEAN = 0x01, + BT_INTEGER = 0x02, + BT_BITSTRING = 0x03, + BT_OCTETSTRING = 0x04, + BT_NULL = 0x05, + BT_OID = 0x06, + BT_OBJDESC = 0x07, + BT_EXTERNAL = 0x08, + BT_REAL = 0x09, + BT_ENUMERATED = 0x0a, + BT_PDV = 0x0b, + BT_UTF8STRING = 0x0c, + BT_RELOID = 0x0d, + + /* 0x10, 011 not usable */ + + BT_NUMERICSTRING = 0x012, + BT_STRING = 0x13, + BT_TELEXSTRING = 0x14, + BT_VIDEOTEXSTRING = 0x15, + BT_IA5STRING = 0x16, + BT_UTCTIME = 0x17, + BT_GENTIME = 0x18, + BT_GFXSTRING = 0x19, + BT_VISSTRING = 0x1a, + BT_GENSTRING = 0x1b, + BT_UNIVSTRING = 0x1c, + BT_CHARSTRING = 0x1d, + BT_BMPSTRING = 0x1e, + + BT_SEQUENCE = 0x30, + BT_SET = 0x31, +}; + +#define BER_TYPE_CONSTRUCTED_MASK 0x20 /* Bit 6 */ +#define BER_TYPE_CLASS_MASK 0xc0 /* Bits 7 and 8 */ + +/* + * The difference between the type and the full type is just that the full type + * will indicate the class of type, so it may be more useful for some operations. + */ +#define BER_FULL_TYPE(tval) \ + ((tval) & ~(BER_TYPE_CONSTRUCTED_MASK)) +#define BER_TYPE(tval) \ + ((tval) & ~(BER_TYPE_CLASS_MASK | BER_TYPE_CONSTRUCTED_MASK)) +#define BER_TYPE_CLASS(tval) \ + (((tval) & BER_TYPE_CLASS_MASK) >> 6) +#define BER_TYPE_CONSTRUCTED(tval) \ + (((tval) & BER_TYPE_CONSTRUCTED_MASK) != 0) + +enum libder_error { + LDE_NONE = 0x00, + LDE_NOMEM, /* Out of memory */ + LDE_INVAL, /* Invalid parameter */ + LDE_SHORTHDR, /* Header too short */ + LDE_BADVARLEN, /* Bad variable length encoding */ + LDE_LONGLEN, /* Encoded length too large (8 byte max) */ + LDE_SHORTDATA, /* Payload not available */ + LDE_GARBAGE, /* Garbage after encoded data */ + LDE_STREAMERR, /* Stream error */ + LDE_TRUNCVARLEN, /* Variable length object truncated */ + LDE_COALESCE_BADCHILD, /* Bad child encountered when coalescing */ + LDE_BADOBJECT, /* Payload not valid for object type */ + + /* Strict violations */ + LDE_STRICT_EOC, /* Strict: end-of-content violation */ + LDE_STRICT_TAG, /* Strict: tag violation */ + LDE_STRICT_PVARLEN, /* Strict: primitive using indefinite length */ + LDE_STRICT_BOOLEAN, /* Strict: boolean encoded incorrectly */ + LDE_STRICT_NULL, /* Strict: null encoded incorrectly */ + LDE_STRICT_PRIMITIVE, /* Strict: type must be primitive */ + LDE_STRICT_CONSTRUCTED, /* Strict: type must be constructed */ + LDE_STRICT_BITSTRING, /* Strict: malformed constructed bitstring */ +}; + +struct libder_ctx; +struct libder_tag; +struct libder_object; + +/* + * By default we normalize everything, but we allow some subset of the + * functionality to be disabled. Lengths are non-optional and will always be + * normalized to a fixed short or long length. The upper 32-bits of + * ctx->normalize are reserved for universal types so that we can quickly map + * those without assigning them names. + */ + +/* Normalize constructed types that should be coalesced (e.g., strings, time). */ +#define LIBDER_NORMALIZE_CONSTRUCTED 0x0000000000000001ULL + +/* + * Normalize tags on read. This is mostly a measure to ensure that + * normalization on write doesn't get thwarted; there's no reason anybody should + * be encoding low tags with the long form, but the spec doesn't appear to + * forbid it. + */ +#define LIBDER_NORMALIZE_TAGS 0x0000000000000002ULL + +/* Universal types (reserved) */ +#define LIBDER_NORMALIZE_TYPE_MASK 0xffffffff00000000ULL +#define LIBDER_NORMALIZE_TYPE_FLAG(val) ((1ULL << val) << 32ULL) + +/* All valid bits. */ +#define LIBDER_NORMALIZE_ALL \ + (LIBDER_NORMALIZE_TYPE_MASK | LIBDER_NORMALIZE_CONSTRUCTED | \ + LIBDER_NORMALIZE_TAGS) + +struct libder_ctx * libder_open(void); +void libder_close(struct libder_ctx *); +void libder_abort(struct libder_ctx *); +const char *libder_get_error(struct libder_ctx *); +bool libder_has_error(struct libder_ctx *); +uint64_t libder_get_normalize(struct libder_ctx *); +uint64_t libder_set_normalize(struct libder_ctx *, uint64_t); +bool libder_get_strict(struct libder_ctx *); +bool libder_set_strict(struct libder_ctx *, bool); +int libder_get_verbose(struct libder_ctx *); +int libder_set_verbose(struct libder_ctx *, int); + +struct libder_object *libder_read(struct libder_ctx *, const uint8_t *, size_t *); +struct libder_object *libder_read_fd(struct libder_ctx *, int, size_t *); +struct libder_object *libder_read_file(struct libder_ctx *, FILE *, size_t *); + +uint8_t *libder_write(struct libder_ctx *, struct libder_object *, uint8_t *, + size_t *); + +#define DER_CHILDREN(obj) libder_obj_children(obj) +#define DER_NEXT(obj) libder_obj_next(obj) + +#define DER_FOREACH_CHILD(var, obj) \ + for ((var) = DER_CHILDREN((obj)); \ + (var); \ + (var) = DER_NEXT((var))) +#define DER_FOREACH_CHILD_SAFE(var, obj, tvar) \ + for ((var) = DER_CHILDREN((obj)); \ + (var) && ((tvar) = DER_NEXT((var)), 1); \ + (var) = (tvar)) + +struct libder_object *libder_obj_alloc(struct libder_ctx *, struct libder_tag *, const uint8_t *, size_t); +struct libder_object *libder_obj_alloc_simple(struct libder_ctx *, uint8_t, const uint8_t *, + size_t); +void libder_obj_free(struct libder_object *); + +bool libder_obj_append(struct libder_object *, struct libder_object *); +struct libder_object *libder_obj_child(const struct libder_object *, size_t); +struct libder_object *libder_obj_children(const struct libder_object *); +struct libder_object *libder_obj_next(const struct libder_object *); +struct libder_tag *libder_obj_type(const struct libder_object *); +uint8_t libder_obj_type_simple(const struct libder_object *); +const uint8_t *libder_obj_data(const struct libder_object *, size_t *); + +/* Debugging aide -- probably shouldn't use. */ +void libder_obj_dump(const struct libder_object *, FILE *); + +struct libder_tag *libder_type_alloc_simple(struct libder_ctx *, uint8_t); +struct libder_tag *libder_type_dup(struct libder_ctx *, const struct libder_tag *); +void libder_type_free(struct libder_tag *); +#define libder_type_simple libder_type_simple_abi +uint8_t libder_type_simple(const struct libder_tag *); diff --git a/contrib/libder/libder/libder.3 b/contrib/libder/libder/libder.3 new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder.3 @@ -0,0 +1,179 @@ +.\" +.\" SPDX-Copyright-Identifier: BSD-2-Clause +.\" +.\" Copyright (C) 2024 Kyle Evans +.\" +.Dd March 2, 2024 +.Dt LIBDER 3 +.Os +.Sh NAME +.Nm libder , +.Nm libder_open , +.Nm libder_close , +.Nm libder_abort , +.Nm libder_get_error , +.Nm libder_has_error , +.Nm libder_get_normalize , +.Nm libder_set_normalize , +.Nm libder_get_strict , +.Nm libder_set_strict , +.Nm libder_get_verbose , +.Nm libder_set_verbose +.Nd DER encoding and decoding library +.Sh LIBRARY +.Lb libder +.Sh SYNOPSIS +.In libder.h +.Ft struct libder_ctx * +.Fn libder_open "void" +.Ft void +.Fn libder_close "struct libder_ctx *ctx" +.Ft void +.Fn libder_abort "struct libder_ctx *ctx" +.Ft const char * +.Fn libder_get_error "struct libder_ctx *ctx" +.Ft bool +.Fn libder_has_error "struct libder_ctx *ctx" +.Ft uint64_t +.Fn libder_get_normalize "struct libder_ctx *ctx" +.Ft uint64_t +.Fn libder_set_normalize "struct libder_ctx *ctx" "uint64_t normalize" +.Ft bool +.Fn libder_get_strict "struct libder_ctx *ctx" +.Ft bool +.Fn libder_set_strict "struct libder_ctx *ctx" "bool strict" +.Ft int +.Fn libder_get_verbose "struct libder_ctx *ctx" +.Ft int +.Fn libder_set_verbose "struct libder_ctx *ctx" "int verbose" +.Sh DESCRIPTION +The +.Nm +library provides functionality for decoding BER and DER encoded data, and +DER encoding data subjected to constraints outline in ITU-T +Recommendation X.690. +.Nm +will apply relevant normalization rules on write, unless they've been disabled +with +.Ft libder_set_normalize , +under the assumption that it may not be reading strictly DER encoded data. +.Pp +Note that not all of the DER rules are currently implemented. +.Nm +will coalesce constructed types that DER specifies should be primitive. +.Nm +will primarily normalize bitstrings, booleans, and integers. +This library was primarily written to be able to provide interoperability with +OpenSSL keys and signatures, so the library was written with that in mind. +Eventually it is intended that +.Nm +will support the full set of rules, but currently some responsibility is left +to the library user. +.Pp +Also note that +.Nm +does not necessarily provide +.Dq neat +ways to construct primitives. +For example, even booleans and integers currently work just by providing a +buffer that is expected to be formatted in a sane fashion. +The library user is expected to build the object tree and generally provide the +object data in a format reasonably encoded as the data for that type should be, +then +.Nm +will provide the proper framing on write and do any transformations that may +need to be done for strict conformance. +.Pp +The +.Fn libder_open +function allocates a new +.Nm +context. +The context does not hold any state about any particular structure. +All of the state held in the context is generally described in this manpage. +The +.Fn libder_close +function will free the context. +.Pp +The +.Fn libder_abort +function will abort an in-progress +.Xr libder_read_fd 3 +operation on the existing +.Fa ctx +if it is interrupted by a signal in the middle of a +.Xr read 2 +syscall. +See +.Xr libder_read_fd 3 +for further discussion. +.Pp +The +.Fn libder_get_error +function will return an error string appropriate for the current error, if any. +The +.Fn libder_has_error +function can be used to check if an error was raised in a previous operation. +.Pp +The +.Fn libder_get_normalize +and +.Fn libder_set_normalize +functions retrieve and manipulate any number of flags that detail how +functions may be used to check or set the normalization flags given +.Nm context , +which dictates how +.Nm +will normalize data on write. +The following normalization flags may be specified: +.Bl -column "LIBDER_NORMALIZE_CONSTRUCTED" +.It LIBDER_NORMALIZE_CONSTRUCTED Ta Coalesce types that may be primitive or constructed +.It LIBDER_NORMALIZE_TAGS Ta Pack tags into the lowest possible encoded value +.El +.Pp +The +.Fn LIBDER_NORMALIZE_TYPE_FLAG "enum libder_ber_type" +macaro may also be used to specify normalization of the given universal type. +By default, every valid normalization flag is enabled. +.Pp +The +.Fn libder_get_strict +and +.Fn libder_set_strict +functions may used to check or set the strict read state of the given +.Nm +context. +By default, +.Nm +operates in strict mode and rejects various methods of expressing data that are +valid looking but not strictly conformant. +The +.Va LDE_STRICT_* +constants in +.In libder.h +describe the various scenarios that strict mode may reject. +.Pp +The +.Fn libder_get_verbose +and +.Fn libder_set_verbose +functions may be used to check or set the verbosity of the given +.Nm +context. +This primarily controls how +.Nm +behaves when an error is encountered. +By default, the library will silently set the error state and return. +With a verbosity level of 1, an error will be printed when the error state is +set that contains the string that would be returned by +.Fn libder_get_error . +With a verbosity level of 2, the filename and line within +.Nm +that the error occurred in will be printed, which is primarily intended for +debugging +.Nm . +.Sh SEE ALSO +.Xr libder_obj 3 , +.Xr libder_read 3 , +.Xr libder_type 3 , +.Xr libder_write 3 diff --git a/contrib/libder/libder/libder.c b/contrib/libder/libder/libder.c new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder.c @@ -0,0 +1,119 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "libder_private.h" + +#include +#include + +/* + * Sets up the context, returns NULL on error. + */ +struct libder_ctx * +libder_open(void) +{ + struct libder_ctx *ctx; + + ctx = malloc(sizeof(*ctx)); + if (ctx == NULL) + return (NULL); + + /* Initialize */ + ctx->error = LDE_NONE; + ctx->buffer_size = 0; + ctx->verbose = 0; + ctx->normalize = LIBDER_NORMALIZE_ALL; + ctx->strict = true; + ctx->abort = 0; + + return (ctx); +} + +void +libder_abort(struct libder_ctx *ctx) +{ + + ctx->abort = 1; +} + +LIBDER_PRIVATE size_t +libder_get_buffer_size(struct libder_ctx *ctx) +{ + + if (ctx->buffer_size == 0) { + long psize; + + psize = sysconf(_SC_PAGESIZE); + if (psize <= 0) + psize = 4096; + + ctx->buffer_size = psize; + } + + return (ctx->buffer_size); +} + +uint64_t +libder_get_normalize(struct libder_ctx *ctx) +{ + + return (ctx->normalize); +} + +/* + * Set the normalization flags; returns the previous value. + */ +uint64_t +libder_set_normalize(struct libder_ctx *ctx, uint64_t nmask) +{ + uint64_t old = ctx->normalize; + + ctx->normalize = (nmask & LIBDER_NORMALIZE_ALL); + return (old); +} + +bool +libder_get_strict(struct libder_ctx *ctx) +{ + + return (ctx->strict); +} + +bool +libder_set_strict(struct libder_ctx *ctx, bool strict) +{ + bool oval = ctx->strict; + + ctx->strict = strict; + return (oval); +} + +int +libder_get_verbose(struct libder_ctx *ctx) +{ + + return (ctx->verbose); +} + +int +libder_set_verbose(struct libder_ctx *ctx, int verbose) +{ + int oval = ctx->verbose; + + ctx->verbose = verbose; + return (oval); +} + +void +libder_close(struct libder_ctx *ctx) +{ + + if (ctx == NULL) + return; + + free(ctx); +} + diff --git a/contrib/libder/libder/libder_error.c b/contrib/libder/libder/libder_error.c new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_error.c @@ -0,0 +1,76 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include "libder_private.h" + +#undef libder_set_error + +static const char libder_error_nodesc[] = "[Description not available]"; + +#define DESCRIBE(err, msg) { LDE_ ## err, msg } +static const struct libder_error_desc { + enum libder_error desc_error; + const char *desc_str; +} libder_error_descr[] = { + DESCRIBE(NONE, "No error"), + DESCRIBE(NOMEM, "Out of memory"), + DESCRIBE(INVAL, "Invalid parameter"), + DESCRIBE(SHORTHDR, "Header too short"), + DESCRIBE(BADVARLEN, "Bad variable length encoding"), + DESCRIBE(LONGLEN, "Encoded length too large (8 byte max)"), + DESCRIBE(SHORTDATA, "Payload not available (too short)"), + DESCRIBE(GARBAGE, "Garbage after encoded data"), + DESCRIBE(STREAMERR, "Stream error"), + DESCRIBE(TRUNCVARLEN, "Variable length object truncated"), + DESCRIBE(COALESCE_BADCHILD, "Bad child encountered when coalescing"), + DESCRIBE(BADOBJECT, "Payload not valid for object type"), + DESCRIBE(STRICT_EOC, "Strict: end-of-content violation"), + DESCRIBE(STRICT_TAG, "Strict: tag violation"), + DESCRIBE(STRICT_PVARLEN, "Strict: primitive using indefinite length"), + DESCRIBE(STRICT_BOOLEAN, "Strict: boolean encoded incorrectly"), + DESCRIBE(STRICT_NULL, "Strict: null encoded incorrectly"), + DESCRIBE(STRICT_PRIMITIVE, "Strict: type must be primitive"), + DESCRIBE(STRICT_CONSTRUCTED, "Strict: type must be constructed"), + DESCRIBE(STRICT_BITSTRING, "Strict: malformed constructed bitstring"), +}; + +const char * +libder_get_error(struct libder_ctx *ctx) +{ + const struct libder_error_desc *desc; + + for (size_t i = 0; i < nitems(libder_error_descr); i++) { + desc = &libder_error_descr[i]; + + if (desc->desc_error == ctx->error) + return (desc->desc_str); + } + + return (libder_error_nodesc); +} + +bool +libder_has_error(struct libder_ctx *ctx) +{ + + return (ctx->error != 0); +} + +LIBDER_PRIVATE void +libder_set_error(struct libder_ctx *ctx, int error, const char *file, int line) +{ + ctx->error = error; + + if (ctx->verbose >= 2) { + fprintf(stderr, "%s: [%s:%d]: %s (error %d)\n", + __func__, file, line, libder_get_error(ctx), error); + } else if (ctx->verbose >= 1) { + fprintf(stderr, "%s: %s (error %d)\n", __func__, + libder_get_error(ctx), error); + } +} diff --git a/contrib/libder/libder/libder_obj.3 b/contrib/libder/libder/libder_obj.3 new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_obj.3 @@ -0,0 +1,138 @@ +.\" +.\" SPDX-Copyright-Identifier: BSD-2-Clause +.\" +.\" Copyright (C) 2024 Kyle Evans +.\" +.Dd March 2, 2024 +.Dt LIBDER_OBJ 3 +.Os +.Sh NAME +.Nm libder_obj , +.Nm libder_obj_alloc , +.Nm libder_obj_alloc_simple , +.Nm libder_obj_free , +.Nm libder_obj_append , +.Nm libder_obj_child , +.Nm libder_obj_next , +.Nm libder_obj_type , +.Nm libder_obj_type_simple , +.Nm libder_obj_data , +.Nm libder_obj_dump +.Nd inspecting and creating libder objects +.Sh LIBRARY +.Lb libder +.Sh SYNOPSIS +.In libder.h +.Ft struct libder_object * +.Fn libder_obj_alloc "struct libder_ctx *ctx" "struct libder_tag *type" "const uint8_t *data" "size_t datasz" +.Ft struct libder_object * +.Fn libder_obj_alloc_simple "struct libder_ctx *ctx" "uint8_t type" "const uint8_t *data" "size_t datasz" +.Ft void +.Fn libder_obj_free "struct libder_object *ctx" +.Ft bool +.Fn libder_obj_append "struct libder_object *parent" "struct libder_object *child" +.Ft struct libder_object * +.Fn libder_obj_child "const struct libder_object *obj" "size_t which" +.Ft struct libder_object * +.Fn libder_obj_next "const struct libder_object *obj" +.Fn "DER_FOREACH_CHILD" "struct libder_obj *iter" "struct libder_obj *obj" +.Fn "DER_FOREACH_CHILD_SAFE" "struct libder_obj *iter" "struct libder_obj *obj" "struct libder_obj *tmp" +.Ft struct libder_tag * +.Fn libder_obj_type "const struct libder_object *obj" +.Ft uint8_t +.Fn libder_obj_type_simple "const struct libder_object *obj" +.Ft const uint8_t * +.Fn libder_obj_data "const struct libder_object *obj" "size_t *sz" +.Ft void +.Fn libder_obj_dump "const struct libder_object *obj" "FILE *fp" +.Sh DESCRIPTION +The +.Nm +family of functions may be used by the application to create its own objects and +object hierarchy, rather than reading them from an existing stream. +.Pp +The +.Fn libder_obj_alloc +and +.Fn libder_obj_alloc_simple +functions allocate a new object with the specified +.Fa type +and +.Fa data . +Most applications will likely prefer to use the +.Dq simple +variant to avoid having to manage a +.Xr libder_type 3 +lifecycle and associated boilerplate. +The base variant remains around for when +.Xr libder_type 3 +grows the necessary API to create arbitrarily large tags. +.Pp +The +.Fn libder_obj_append +function is used to append +.Fa obj +to the +.Fa parent +object's children. +For example, to add an object to a sequence. +.Pp +The +.Fn libder_obj_child +and +.Fn libder_obj_next +functions are used to iterate through the children of +.Fa obj . +The +.Fa which +argument to +.Fn libder_obj_child +specifies the index of the child requested, starting at +.Dv 0 . +The +.Fn DER_FOREACH_CHILD +and +.Fn DER_FOREACH_CHILD_SAFE +macros are provided for convenience. +The difference between these two is that it is safe to free the iterator in the +.Fn DER_FOREACH_CHILD_SAFE +loop body. +.Pp +The +.Fn libder_obj_type +and +.Fn libder_obj_type_simple +functions are used to get the type information about an +.Fa obj . +As usual, the +.Dq simple +variant will return the one-byte encoding of a tag between 0 and 30. +If the tag is actually larger than 30, then all of the lower 5 bits will be set +to indicate that it's a long tag, and that the application should have used +.Fn libder_obj_type +instead. +.Pp +The +.Fn libder_obj_data +function returns a pointer to the +.Fa data +from +.Fa obj , +and updates +.Fa *sz +with the data's size. +Note that the data is not copied out here, the application is responsible for +making its own copy of the returned buffer. +.Pp +The +.Fn libder_obj_dump +function is a debugging function that likely shouldn't be used. +A human readable representation of the provided +.Fa obj +will be written to the stream +.Fa fp . +.Sh SEE ALSO +.Xr libder 3 , +.Xr libder_read 3 , +.Xr libder_type 3 , +.Xr libder_write 3 diff --git a/contrib/libder/libder/libder_obj.c b/contrib/libder/libder/libder_obj.c new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_obj.c @@ -0,0 +1,1172 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +#include "libder_private.h" + +#undef DER_CHILDREN +#undef DER_NEXT + +#define DER_CHILDREN(obj) ((obj)->children) +#define DER_NEXT(obj) ((obj)->next) + +static uint8_t * +libder_obj_alloc_copy_payload(struct libder_ctx *ctx, const uint8_t *payload_in, + size_t length) +{ + uint8_t *payload; + + if ((length == 0 && payload_in != NULL) || + (length != 0 && payload_in == NULL)) { + libder_set_error(ctx, LDE_INVAL); + return (NULL); + } + + if (length > 0) { + payload = malloc(length); + if (payload == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (NULL); + } + + memcpy(payload, payload_in, length); + } else { + payload = NULL; + } + + return (payload); +} + +static bool +libder_obj_alloc_check(struct libder_ctx *ctx, struct libder_tag *type, + const uint8_t *payload_in, size_t length) +{ + /* + * In addition to our normal constraints, constructed objects coming in + * from lib users should not have payloads. + */ + if (!libder_is_valid_obj(ctx, type, payload_in, length, false) || + (type->tag_constructed && length != 0)) { + libder_set_error(ctx, LDE_BADOBJECT); + return (false); + } + + return (true); +} + +struct libder_object * +libder_obj_alloc(struct libder_ctx *ctx, struct libder_tag *type, + const uint8_t *payload_in, size_t length) +{ + struct libder_object *obj; + uint8_t *payload; + + if (!libder_obj_alloc_check(ctx, type, payload_in, length)) + return (NULL); + + payload = libder_obj_alloc_copy_payload(ctx, payload_in, length); + + obj = libder_obj_alloc_internal(ctx, type, payload, length, 0); + if (obj == NULL) { + free(payload); + libder_set_error(ctx, LDE_NOMEM); + } + + return (obj); +} + +struct libder_object * +libder_obj_alloc_simple(struct libder_ctx *ctx, uint8_t stype, + const uint8_t *payload_in, size_t length) +{ + struct libder_object *obj; + struct libder_tag *type; + uint8_t *payload; + + type = libder_type_alloc_simple(ctx, stype); + if (type == NULL) + return (NULL); + + if (!libder_obj_alloc_check(ctx, type, payload_in, length)) { + libder_type_free(type); + return (NULL); + } + + payload = libder_obj_alloc_copy_payload(ctx, payload_in, length); + + obj = libder_obj_alloc_internal(ctx, type, payload, length, LDO_OWNTAG); + if (obj == NULL) { + free(payload); + libder_type_free(type); + libder_set_error(ctx, LDE_NOMEM); + } + + return (obj); +} + +/* + * Returns an obj on success, NULL if out of memory. `obj` takes ownership of + * the payload on success. + */ +LIBDER_PRIVATE struct libder_object * +libder_obj_alloc_internal(struct libder_ctx *ctx, struct libder_tag *type, + uint8_t *payload, size_t length, uint32_t flags) +{ + struct libder_object *obj; + + assert((flags & ~(LDO_OWNTAG)) == 0); + + if (length != 0) + assert(payload != NULL); + else + assert(payload == NULL); + + obj = malloc(sizeof(*obj)); + if (obj == NULL) + return (NULL); + + if ((flags & LDO_OWNTAG) != 0) { + obj->type = type; + } else { + /* + * Deep copies the tag data, so that the caller can predict what + * it can do with the buffer. + */ + obj->type = libder_type_dup(ctx, type); + if (obj->type == NULL) { + free(obj); + return (NULL); + } + } + + obj->length = length; + obj->payload = payload; + obj->children = obj->next = obj->parent = NULL; + obj->nchildren = 0; + + return (obj); +} + +LIBDER_PRIVATE size_t +libder_size_length(size_t sz) +{ + size_t nbytes; + + /* + * With DER, we use the smallest encoding necessary: less than 0x80 + * can be encoded in one byte. + */ + if (sz < 0x80) + return (1); + + /* + * We can support up to 0x7f size bytes, but we don't really have a way + * to represent that right now. It's a good thing this function only + * takes a size_t, otherwise this would be a bit wrong. + */ + for (nbytes = 1; nbytes < sizeof(size_t); nbytes++) { + if ((sz & ~((1ULL << 8 * nbytes) - 1)) == 0) + break; + } + + /* Add one for the lead byte describing the length of the length. */ + return (nbytes + 1); +} + +/* + * Returns the size on-disk. If an object has children, we encode the size as + * the sum of their lengths recursively. Otherwise, we use the object's size. + * + * Returns 0 if the object size would overflow a size_t... perhaps we could + * lift this restriction later. + * + * Note that the size of the object will be set/updated to simplify later write + * calculations. + */ +LIBDER_PRIVATE size_t +libder_obj_disk_size(struct libder_object *obj, bool include_header) +{ + struct libder_object *walker; + size_t disk_size, header_size; + + disk_size = obj->length; + if (obj->children != NULL) { + /* We should have rejected these. */ + assert(obj->length == 0); + + DER_FOREACH_CHILD(walker, obj) { + size_t child_size; + + child_size = libder_obj_disk_size(walker, true); + if (SIZE_MAX - child_size < disk_size) + return (0); /* Overflow */ + disk_size += child_size; + } + } + + obj->disk_size = disk_size; + + /* + * Children always include the header above, we only include the header + * at the root if we're calculating how much space we need in total. + */ + if (include_header) { + /* Size of the length + the tag (arbitrary length) */ + header_size = libder_size_length(disk_size) + obj->type->tag_size; + if (obj->type->tag_encoded) + header_size++; /* Lead byte */ + if (SIZE_MAX - header_size < disk_size) + return (0); + + disk_size += header_size; + } + + return (disk_size); +} + +void +libder_obj_free(struct libder_object *obj) +{ + struct libder_object *child, *tmp; + + if (obj == NULL) + return; + + DER_FOREACH_CHILD_SAFE(child, obj, tmp) + libder_obj_free(child); + + free(obj->payload); + libder_type_free(obj->type); + free(obj); +} + +static void +libder_obj_unlink(struct libder_object *obj) +{ + struct libder_object *child, *parent, *prev; + + parent = obj->parent; + if (parent == NULL) + return; + + prev = NULL; + assert(parent->nchildren > 0); + DER_FOREACH_CHILD(child, parent) { + if (child == obj) { + if (prev == NULL) + parent->children = child->next; + else + prev->next = child->next; + parent->nchildren--; + child->parent = NULL; + return; + } + + prev = child; + } + + assert(0 && "Internal inconsistency: parent set, but child not found"); +} + +bool +libder_obj_append(struct libder_object *parent, struct libder_object *child) +{ + struct libder_object *end, *walker; + + if (!parent->type->tag_constructed) + return (false); + + /* XXX Type check */ + + if (child->parent != NULL) + libder_obj_unlink(child); + + if (parent->nchildren == 0) { + parent->children = child; + parent->nchildren++; + return (true); + } + + /* Walk the chain */ + DER_FOREACH_CHILD(walker, parent) { + end = walker; + } + + assert(end != NULL); + end->next = child; + parent->nchildren++; + child->parent = parent; + return (true); +} + +struct libder_object * +libder_obj_child(const struct libder_object *obj, size_t idx) +{ + struct libder_object *cur; + + DER_FOREACH_CHILD(cur, obj) { + if (idx-- == 0) + return (cur); + } + + return (NULL); +} + +struct libder_object * +libder_obj_children(const struct libder_object *obj) +{ + + return (obj->children); +} + +struct libder_object * +libder_obj_next(const struct libder_object *obj) +{ + + return (obj->next); +} + +struct libder_tag * +libder_obj_type(const struct libder_object *obj) +{ + + return (obj->type); +} + +uint8_t +libder_obj_type_simple(const struct libder_object *obj) +{ + struct libder_tag *type = obj->type; + uint8_t simple = type->tag_class << 6; + + if (type->tag_constructed) + simple |= BER_TYPE_CONSTRUCTED_MASK; + + if (type->tag_encoded) + simple |= 0x1f; /* Encode the "long tag" tag. */ + else + simple |= type->tag_short; + return (simple); +} + +const uint8_t * +libder_obj_data(const struct libder_object *obj, size_t *osz) +{ + + if (obj->type->tag_constructed) + return (NULL); + + *osz = obj->length; + return (obj->payload); +} + +static const char * +libder_type_name(const struct libder_tag *type) +{ + static char namebuf[128]; + + if (type->tag_encoded) { + return ("{ ... }"); + } + + if (type->tag_class != BC_UNIVERSAL) + goto fallback; + +#define UTYPE(val) case val: return (&(#val)[3]) + switch (type->tag_short) { + UTYPE(BT_RESERVED); + UTYPE(BT_BOOLEAN); + UTYPE(BT_INTEGER); + UTYPE(BT_BITSTRING); + UTYPE(BT_OCTETSTRING); + UTYPE(BT_NULL); + UTYPE(BT_OID); + UTYPE(BT_OBJDESC); + UTYPE(BT_EXTERNAL); + UTYPE(BT_REAL); + UTYPE(BT_ENUMERATED); + UTYPE(BT_PDV); + UTYPE(BT_UTF8STRING); + UTYPE(BT_RELOID); + UTYPE(BT_NUMERICSTRING); + UTYPE(BT_STRING); + UTYPE(BT_TELEXSTRING); + UTYPE(BT_VIDEOTEXSTRING); + UTYPE(BT_IA5STRING); + UTYPE(BT_UTCTIME); + UTYPE(BT_GENTIME); + UTYPE(BT_GFXSTRING); + UTYPE(BT_VISSTRING); + UTYPE(BT_GENSTRING); + UTYPE(BT_UNIVSTRING); + UTYPE(BT_CHARSTRING); + UTYPE(BT_BMPSTRING); + case BT_SEQUENCE & ~BER_TYPE_CONSTRUCTED_MASK: + case BT_SEQUENCE: return "SEQUENCE"; + case BT_SET & ~BER_TYPE_CONSTRUCTED_MASK: + case BT_SET: return "SET"; + } + +fallback: + snprintf(namebuf, sizeof(namebuf), "%.02x", libder_type_simple(type)); + return (&namebuf[0]); +} + +static void +libder_obj_dump_internal(const struct libder_object *obj, FILE *fp, int lvl) +{ + static char spacer[4096]; + const struct libder_object *child; + + /* Primitive, goofy, but functional. */ + if (spacer[0] == '\0') + memset(spacer, '\t', sizeof(spacer)); + + if (lvl >= (int)sizeof(spacer)) { + /* Too large, truncate the display. */ + fprintf(fp, "%.*s...\n", (int)sizeof(spacer), spacer); + return; + } + + if (obj->children == NULL) { + size_t col = lvl * 8; + + col += fprintf(fp, "%.*sOBJECT[type=%s, size=%zx]%s", + lvl, spacer, libder_type_name(obj->type), + obj->length, obj->length != 0 ? ": " : ""); + + if (obj->length != 0) { + uint8_t printb; + +#define LIBDER_CONTENTS_WRAP 80 + for (size_t i = 0; i < obj->length; i++) { + if (col + 3 >= LIBDER_CONTENTS_WRAP) { + fprintf(fp, "\n%.*s ", lvl, spacer); + col = (lvl * 8) + 4; + } + + if (obj->payload == NULL) + printb = 0; + else + printb = obj->payload[i]; + + col += fprintf(fp, "%.02x ", printb); + } + } + + fprintf(fp, "\n"); + + return; + } + + fprintf(fp, "%.*sOBJECT[type=%s]\n", lvl, spacer, + libder_type_name(obj->type)); + DER_FOREACH_CHILD(child, obj) + libder_obj_dump_internal(child, fp, lvl + 1); +} + +void +libder_obj_dump(const struct libder_object *root, FILE *fp) +{ + + libder_obj_dump_internal(root, fp, 0); +} + +LIBDER_PRIVATE bool +libder_is_valid_obj(struct libder_ctx *ctx, const struct libder_tag *type, + const uint8_t *payload, size_t payloadsz, bool varlen) +{ + + if (payload != NULL) { + assert(payloadsz > 0); + assert(!varlen); + } else { + assert(payloadsz == 0); + } + + /* No rules for non-universal types. */ + if (type->tag_class != BC_UNIVERSAL || type->tag_encoded) + return (true); + + if (ctx->strict && type->tag_constructed) { + /* Types that don't allow constructed */ + switch (libder_type_simple(type) & ~BER_TYPE_CONSTRUCTED_MASK) { + case BT_BOOLEAN: + case BT_INTEGER: + case BT_REAL: + case BT_NULL: + libder_set_error(ctx, LDE_STRICT_PRIMITIVE); + return (false); + default: + break; + } + } else if (ctx->strict) { + /* Types that cannot be primitive */ + switch (libder_type_simple(type) | BER_TYPE_CONSTRUCTED_MASK) { + case BT_SEQUENCE: + case BT_SET: + libder_set_error(ctx, LDE_STRICT_CONSTRUCTED); + return (false); + default: + break; + } + } + + /* Further validation */ + switch (libder_type_simple(type)) { + case BT_BOOLEAN: + if (ctx->strict && payloadsz != 1) { + libder_set_error(ctx, LDE_STRICT_BOOLEAN); + return (false); + } + break; + case BT_NULL: + if (ctx->strict && (payloadsz != 0 || varlen)) { + libder_set_error(ctx, LDE_STRICT_NULL); + return (false); + } + break; + case BT_BITSTRING: /* Primitive */ + /* + * Bit strings require more invasive parsing later during child + * coalescing or normalization, so we alway strictly enforce + * their form. + */ + if (payloadsz == 1 && payload[0] != 0) + return (false); + + /* We can't have more than seven unused bits. */ + return (payloadsz < 2 || payload[0] < 8); + case BT_RESERVED: + if (payloadsz != 0) { + libder_set_error(ctx, LDE_STRICT_EOC); + return (false); + } + break; + default: + break; + } + + return (true); +} + +LIBDER_PRIVATE bool +libder_obj_may_coalesce_children(const struct libder_object *obj) +{ + + /* No clue about non-universal types. */ + if (obj->type->tag_class != BC_UNIVERSAL || obj->type->tag_encoded) + return (false); + + /* Constructed types don't have children. */ + if (!obj->type->tag_constructed) + return (false); + + /* Strip the constructed bit off. */ + switch (libder_type_simple(obj->type)) { + case BT_OCTETSTRING: /* Raw data types */ + case BT_BITSTRING: + return (true); + case BT_UTF8STRING: /* String types */ + case BT_NUMERICSTRING: + case BT_STRING: + case BT_TELEXSTRING: + case BT_VIDEOTEXSTRING: + case BT_IA5STRING: + case BT_GFXSTRING: + case BT_VISSTRING: + case BT_GENSTRING: + case BT_UNIVSTRING: + case BT_CHARSTRING: + case BT_BMPSTRING: + return (true); + case BT_UTCTIME: /* Time types */ + case BT_GENTIME: + return (true); + default: + return (false); + } +} + +static size_t +libder_merge_bitstrings(uint8_t *buf, size_t offset, size_t bufsz, + const struct libder_object *child) +{ + const uint8_t *rhs = child->payload; + size_t rsz = child->disk_size, startoff = offset; + uint8_t rhsunused, unused; + + rhsunused = (rhs != NULL ? rhs[0] : 0); + + /* We have no unused bits if the buffer's empty as of yet. */ + if (offset == 0) + unused = 0; + else + unused = buf[0]; + + /* Shave the lead byte off if we have one. */ + if (rsz > 1) { + if (rhs != NULL) + rhs++; + rsz--; + } + + if (unused == 0) { + size_t extra = 0; + + /* + * In all cases we'll just write the unused byte separately, + * since we're copying way past it in the common case and can't + * just overwrite it as part of the memcpy(). + */ + if (offset == 0) { + offset = 1; + extra++; + } + + assert(rhsunused < 8); + assert(offset + rsz <= bufsz); + + buf[0] = rhsunused; + if (rhs == NULL) + memset(&buf[offset], 0, rsz); + else + memcpy(&buf[offset], rhs, rsz); + + return (rsz + extra); + } + + for (size_t i = 0; i < rsz; i++) { + uint8_t bits, next; + + if (rhs == NULL) + next = 0; + else + next = rhs[i]; + + /* Rotate the leading bits into the byte before it. */ + assert(unused < 8); + bits = next >> (8 - unused); + buf[offset - 1] |= bits; + + next <<= unused; + + /* + * Copy the new valid bits in; we shift over the old unused + * amount up until the very last bit, then we have to recalculate + * because we may be dropping it entirely. + */ + if (i == rsz - 1) { + assert(rhsunused < 8); + + /* + * Figure out how many unused bits we have between the two + * buffers, sum % 8 is the new # unused bits. It will be + * somewhere in the range of [0, 14], and if it's at or + * higher than a single byte then that's a clear indicator + * that we shifted some unused bits into the previous byte and + * can just halt here. + */ + unused += rhsunused; + buf[0] = unused % 8; + if (unused >= 8) + break; + } + + assert(offset < bufsz); + buf[offset++] = next; + } + + return (offset - startoff); +} + +LIBDER_PRIVATE bool +libder_obj_coalesce_children(struct libder_object *obj, struct libder_ctx *ctx) +{ + struct libder_object *child, *last_child, *tmp; + size_t new_size = 0, offset = 0; + uint8_t *coalesced_data; + uint8_t type; + bool need_payload = false, strict_violation = false; + + if (obj->nchildren == 0 || !libder_obj_may_coalesce_children(obj)) + return (true); + + assert(obj->type->tag_class == BC_UNIVERSAL); + assert(obj->type->tag_constructed); + assert(!obj->type->tag_encoded); + type = obj->type->tag_short; + + last_child = NULL; + DER_FOREACH_CHILD(child, obj) { + /* Sanity check and coalesce our children. */ + if (child->type->tag_class != BC_UNIVERSAL || + child->type->tag_short != obj->type->tag_short) { + libder_set_error(ctx, LDE_COALESCE_BADCHILD); + return (false); + } + + /* Recursively coalesce everything. */ + if (!libder_obj_coalesce_children(child, ctx)) + return (false); + + /* + * The child node will be disappearing anyways, so we stash the + * disk size sans header in its disk_size to reuse in the later + * loop. + */ + child->disk_size = libder_obj_disk_size(child, false); + + /* + * We strip the lead byte off of every element, and add it back + * in pre-allocation. + */ + if (type == BT_BITSTRING && child->disk_size > 1) + child->disk_size--; + if (child->disk_size > 0) + last_child = child; + + new_size += child->disk_size; + + if (child->payload != NULL) + need_payload = true; + } + + if (new_size != 0 && need_payload) { + if (type == BT_BITSTRING) + new_size++; + coalesced_data = malloc(new_size); + if (coalesced_data == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (false); + } + } else { + /* + * This would perhaps be a bit weird, but that's normalization + * for you. We shouldn't really have a UTF-8 string that's + * composed of a series of zero-length UTF-8 strings, but + * weirder things have happened. + */ + coalesced_data = NULL; + } + + /* Avoid leaking any children as we coalesce. */ + DER_FOREACH_CHILD_SAFE(child, obj, tmp) { + if (child->disk_size != 0) + assert(coalesced_data != NULL || !need_payload); + + /* + * Just free everything when we violate strict rules. + */ + if (strict_violation) + goto violated; + + if (child->disk_size != 0 && need_payload) { + assert(coalesced_data != NULL); + assert(offset + child->disk_size <= new_size); + + /* + * Bit strings are special, in that the first byte + * contains the number of unused bits at the end. We + * need to trim that off when concatenating bit strings + */ + if (type == BT_BITSTRING) { + if (ctx->strict && child != last_child && + child->disk_size > 1 && child->payload != NULL) { + /* + * Each child must have a multiple of 8, + * up until the final one. + */ + if (child->payload[0] != 0) { + libder_set_error(ctx, LDE_STRICT_BITSTRING); + strict_violation = true; + goto violated; + } + } + + offset += libder_merge_bitstrings(coalesced_data, + offset, new_size, child); + } else { + /* + * Write zeroes out if we don't have a payload. + */ + if (child->payload == NULL) { + memset(&coalesced_data[offset], 0, child->disk_size); + offset += child->disk_size; + } else { + memcpy(&coalesced_data[offset], child->payload, + child->disk_size); + offset += child->disk_size; + } + } + } + +violated: + libder_obj_free(child); + } + + assert(offset <= new_size); + + /* Zap the children, we've absorbed their bodies. */ + obj->children = NULL; + + if (strict_violation) { + free(coalesced_data); + return (false); + } + + /* Finally, swap out the payload. */ + free(obj->payload); + obj->length = offset; + obj->payload = coalesced_data; + obj->type->tag_constructed = false; + + return (true); +} + +static bool +libder_obj_normalize_bitstring(struct libder_object *obj) +{ + uint8_t *payload = obj->payload; + size_t length = obj->length; + uint8_t unused; + + if (payload == NULL || length < 2) + return (true); + + unused = payload[0]; + if (unused == 0) + return (true); + + /* Clear the unused bits completely. */ + payload[length - 1] &= ~((1 << unused) - 1); + return (true); +} + +static bool +libder_obj_normalize_boolean(struct libder_object *obj) +{ + uint8_t *payload = obj->payload; + size_t length = obj->length; + int sense = 0; + + assert(length > 0); + + /* + * Booleans must be collapsed down to a single byte, 0x00 or 0xff, + * indicating false or true respectively. + */ + if (length == 1 && (payload[0] == 0x00 || payload[0] == 0xff)) + return (true); + + for (size_t bpos = 0; bpos < length; bpos++) { + sense |= payload[bpos]; + if (sense != 0) + break; + } + + payload[0] = sense != 0 ? 0xff : 0x00; + obj->length = 1; + return (true); +} + +static bool +libder_obj_normalize_integer(struct libder_object *obj) +{ + uint8_t *payload = obj->payload; + size_t length = obj->length; + size_t strip = 0; + + /* + * Strip any leading sign-extended looking bytes, but note that + * we can't strip a leading byte unless it matches the sign bit + * on the next byte. + */ + for (size_t bpos = 0; bpos < length - 1; bpos++) { + if (payload[bpos] != 0 && payload[bpos] != 0xff) + break; + + if (payload[bpos] == 0xff) { + /* Only if next byte indicates signed. */ + if ((payload[bpos + 1] & 0x80) == 0) + break; + } else { + /* Only if next byte indicates unsigned. */ + if ((payload[bpos + 1] & 0x80) != 0) + break; + } + + strip++; + } + + if (strip != 0) { + payload += strip; + length -= strip; + + memmove(&obj->payload[0], payload, length); + obj->length = length; + } + + return (true); +} + +static int +libder_obj_tag_compare(const struct libder_tag *lhs, const struct libder_tag *rhs) +{ + const uint8_t *lbits, *rbits; + size_t delta, end, lsz, rsz; + uint8_t lbyte, rbyte; + + /* Highest bits: tag class, libder_ber_class has the same bit ordering. */ + if (lhs->tag_class < rhs->tag_class) + return (-1); + if (lhs->tag_class > rhs->tag_class) + return (1); + + /* Next bit: constructed vs. primitive */ + if (!lhs->tag_constructed && rhs->tag_constructed) + return (-1); + if (lhs->tag_constructed && rhs->tag_constructed) + return (1); + + /* + * Finally: tag data; we can use the size as a first-order heuristic + * because we store tags in the shortest possible representation. + */ + if (lhs->tag_size < rhs->tag_size) + return (-1); + else if (lhs->tag_size > rhs->tag_size) + return (1); + + if (!lhs->tag_encoded) { + lbits = (const void *)&lhs->tag_short; + lsz = sizeof(uint64_t); + } else { + lbits = lhs->tag_long; + lsz = lhs->tag_size; + } + + if (!rhs->tag_encoded) { + rbits = (const void *)&rhs->tag_short; + rsz = sizeof(uint64_t); + } else { + rbits = rhs->tag_long; + rsz = rhs->tag_size; + } + + delta = 0; + end = MAX(lsz, rsz); + if (lsz > rsz) + delta = lsz - rsz; + else if (lsz < rsz) + delta = rsz - lsz; + for (size_t i = 0; i < end; i++) { + /* Zero-extend the short one the difference. */ + if (lsz < rsz && i < delta) + lbyte = 0; + else + lbyte = lbits[i - delta]; + + if (lsz > rsz && i < delta) + rbyte = 0; + else + rbyte = rbits[i - delta]; + + if (lbyte < rbyte) + return (-1); + else if (lbyte > rbyte) + return (-1); + } + + return (0); +} + +/* + * Similar to strcmp(), returns -1, 0, or 1. + */ +static int +libder_obj_compare(const struct libder_object *lhs, const struct libder_object *rhs) +{ + size_t end; + int cmp; + uint8_t lbyte, rbyte; + + cmp = libder_obj_tag_compare(lhs->type, rhs->type); + if (cmp != 0) + return (cmp); + + /* + * We'll compare up to the longer of the two; the shorter payload is + * zero-extended at the end for comparison purposes. + */ + end = MAX(lhs->length, rhs->length); + for (size_t pos = 0; pos < end; pos++) { + if (lhs->payload != NULL && pos < lhs->length) + lbyte = lhs->payload[pos]; + else + lbyte = 0; + if (rhs->payload != NULL && pos < rhs->length) + rbyte = rhs->payload[pos]; + else + rbyte = 0; + + if (lbyte < rbyte) + return (-1); + else if (lbyte > rbyte) + return (1); + } + + return (0); +} + +static int +libder_obj_normalize_set_cmp(const void *lhs_entry, const void *rhs_entry) +{ + const struct libder_object *lhs = + *__DECONST(const struct libder_object **, lhs_entry); + const struct libder_object *rhs = + *__DECONST(const struct libder_object **, rhs_entry); + + return (libder_obj_compare(lhs, rhs)); +} + +static bool +libder_obj_normalize_set(struct libder_object *obj, struct libder_ctx *ctx) +{ + struct libder_object **sorting; + struct libder_object *child; + size_t offset = 0; + + if (obj->nchildren < 2) + return (true); + + /* + * Kind of goofy, but we'll just take advantage of a standardized + * qsort() rather than rolling our own sort -- we have no idea how large + * of a dataset we're working with. + */ + sorting = calloc(obj->nchildren, sizeof(*sorting)); + if (sorting == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (false); + } + + DER_FOREACH_CHILD(child, obj) { + sorting[offset++] = child; + } + + assert(offset == obj->nchildren); + qsort(sorting, offset, sizeof(*sorting), libder_obj_normalize_set_cmp); + + obj->children = sorting[0]; + sorting[offset - 1]->next = NULL; + for (size_t i = 0; i < offset - 1; i++) { + sorting[i]->next = sorting[i + 1]; + } + + free(sorting); + + return (true); +} + +LIBDER_PRIVATE bool +libder_obj_normalize(struct libder_object *obj, struct libder_ctx *ctx) +{ + uint8_t *payload = obj->payload; + size_t length = obj->length; + + if (obj->type->tag_constructed) { + /* + * For constructed types, we'll see if we can coalesce their + * children into them, then we'll proceed with whatever normalization + * rules we can apply to the children. + */ + if (DER_NORMALIZING(ctx, CONSTRUCTED) && !libder_obj_coalesce_children(obj, ctx)) + return (false); + + /* + * We may not be a constructed object anymore after the above coalescing + * happened, so we check it again here. Constructed objects need not go + * any further, but the now-primitive coalesced types still need to be + * normalized. + */ + if (obj->type->tag_constructed) { + struct libder_object *child; + + DER_FOREACH_CHILD(child, obj) { + if (!libder_obj_normalize(child, ctx)) + return (false); + } + + /* Sets must be sorted. */ + if (obj->type->tag_short != BT_SET) + return (true); + + return (libder_obj_normalize_set(obj, ctx)); + } + } + + /* We only have normalization rules for universal types. */ + if (obj->type->tag_class != BC_UNIVERSAL || obj->type->tag_encoded) + return (true); + + if (!libder_normalizing_type(ctx, obj->type)) + return (true); + + /* + * We are clear to normalize this object, check for some easy cases that + * don't need normalization. + */ + switch (libder_type_simple(obj->type)) { + case BT_BITSTRING: + case BT_BOOLEAN: + case BT_INTEGER: + /* + * If we have a zero payload, then we need to encode them as a + * single zero byte. + */ + if (payload == NULL) { + if (length != 1) + obj->length = 1; + + return (true); + } + + break; + case BT_NULL: + if (payload != NULL) { + free(payload); + + obj->payload = NULL; + obj->length = 0; + } + + return (true); + default: + /* + * If we don't have a payload, we'll just leave it alone. + */ + if (payload == NULL) + return (true); + break; + } + + switch (libder_type_simple(obj->type)) { + case BT_BITSTRING: + return (libder_obj_normalize_bitstring(obj)); + case BT_BOOLEAN: + return (libder_obj_normalize_boolean(obj)); + case BT_INTEGER: + return (libder_obj_normalize_integer(obj)); + default: + break; + } + + return (true); +} diff --git a/contrib/libder/libder/libder_private.h b/contrib/libder/libder/libder_private.h new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_private.h @@ -0,0 +1,162 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +#include +#include +#include + +#include "libder.h" + +/* FreeBSD's sys/cdefs.h */ +#ifndef __DECONST +#define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var)) +#endif +#ifndef __unused +#define __unused __attribute__((__unused__)) +#endif + +/* FreeBSD's sys/params.h */ +#ifndef nitems +#define nitems(x) (sizeof((x)) / sizeof((x)[0])) +#endif +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +struct libder_ctx; +struct libder_object; + +struct libder_ctx { + uint64_t normalize; + size_t buffer_size; + enum libder_error error; + int verbose; + bool strict; + volatile sig_atomic_t abort; +}; + +struct libder_tag { + union { + uint8_t tag_short; + uint8_t *tag_long; + }; + size_t tag_size; + enum libder_ber_class tag_class; + bool tag_constructed; + bool tag_encoded; +}; + +struct libder_object { + struct libder_tag *type; + size_t length; + size_t nchildren; + size_t disk_size; + uint8_t *payload; /* NULL for sequences */ + struct libder_object *children; + struct libder_object *parent; + struct libder_object *next; +}; + +static inline sig_atomic_t +libder_check_abort(struct libder_ctx *ctx) +{ + + return (ctx->abort); +} + +static inline void +libder_clear_abort(struct libder_ctx *ctx) +{ + + ctx->abort = 1; +} + +#define LIBDER_PRIVATE __attribute__((__visibility__("hidden"))) + +#define DER_NORMALIZING(ctx, bit) \ + (((ctx)->normalize & (LIBDER_NORMALIZE_ ## bit)) != 0) + +static inline bool +libder_normalizing_type(const struct libder_ctx *ctx, const struct libder_tag *type) +{ + uint8_t tagval; + + assert(!type->tag_constructed); + assert(!type->tag_encoded); + assert(type->tag_class == BC_UNIVERSAL); + assert(type->tag_short < 0x1f); + + tagval = type->tag_short; + return ((ctx->normalize & LIBDER_NORMALIZE_TYPE_FLAG(tagval)) != 0); +} + +/* All of the lower bits set. */ +#define BER_TYPE_LONG_MASK 0x1f + +/* + * Check if the type matches one of our universal types. + */ +static inline bool +libder_type_is(const struct libder_tag *type, uint8_t utype) +{ + + if (type->tag_class != BC_UNIVERSAL || type->tag_encoded) + return (false); + if ((utype & BER_TYPE_CONSTRUCTED_MASK) != type->tag_constructed) + return (false); + + utype &= ~BER_TYPE_CONSTRUCTED_MASK; + return (utype == type->tag_short); +} + +/* + * We'll use this one a decent amount, so we'll keep it inline. There's also + * an _abi version that we expose as public interface via a 'libder_type_simple' + * macro. + */ +#undef libder_type_simple + +static inline uint8_t +libder_type_simple(const struct libder_tag *type) +{ + uint8_t encoded = type->tag_class << 6; + + assert(!type->tag_encoded); + if (type->tag_constructed) + encoded |= BER_TYPE_CONSTRUCTED_MASK; + + encoded |= type->tag_short; + return (encoded); +} + +size_t libder_get_buffer_size(struct libder_ctx *); +void libder_set_error(struct libder_ctx *, int, const char *, int); + +#define libder_set_error(ctx, error) \ + libder_set_error((ctx), (error), __FILE__, __LINE__) + +struct libder_object *libder_obj_alloc_internal(struct libder_ctx *, + struct libder_tag *, uint8_t *, size_t, uint32_t); +#define LDO_OWNTAG 0x0001 /* Object owns passed in tag */ + +size_t libder_size_length(size_t); +bool libder_is_valid_obj(struct libder_ctx *, + const struct libder_tag *, const uint8_t *, size_t, bool); +size_t libder_obj_disk_size(struct libder_object *, bool); +bool libder_obj_may_coalesce_children(const struct libder_object *); +bool libder_obj_coalesce_children(struct libder_object *, struct libder_ctx *); +bool libder_obj_normalize(struct libder_object *, struct libder_ctx *); + +struct libder_tag *libder_type_alloc(void); +void libder_type_release(struct libder_tag *); +void libder_normalize_type(struct libder_ctx *, struct libder_tag *); diff --git a/contrib/libder/libder/libder_read.3 b/contrib/libder/libder/libder_read.3 new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_read.3 @@ -0,0 +1,101 @@ +.\" +.\" SPDX-Copyright-Identifier: BSD-2-Clause +.\" +.\" Copyright (C) 2024 Kyle Evans +.\" +.Dd March 2, 2024 +.Dt LIBDER_READ 3 +.Os +.Sh NAME +.Nm libder_read , +.Nm libder_read_fd , +.Nm libder_read_file +.Nd reading DER encoded streams +.Sh LIBRARY +.Lb libder +.Sh SYNOPSIS +.In libder.h +.Ft struct libder_object * +.Fn libder_read "struct libder_ctx *ctx" "const uint8_t *buf" "size_t *bufsz" +.Ft struct libder_object * +.Fn libder_read_fd "struct libder_ctx *ctx" "int fd" "size_t *readsz" +.Ft struct libder_object * +.Fn libder_read_file "struct libder_ctx *ctx" "FILE *fp" "size_t *readsz" +.Sh DESCRIPTION +The +.Nm +family of functions are used to parse BER/DER encoded data into an object tree +that +.Xr libder 3 +can work with. +All of these functions will return an object on success and update +.Fa *readsz +with the number of bytes consumed, or +.Dv NULL +on failure. +.Pp +The +.Fn libder_read +function will read from a buffer +.Fa buf +of known size +.Fa bufsz . +It is not considered an error for +.Fa buf +to have contents past the first valid object encountered. +The application is +expected to check +.Fa *bufsz +upon success and determine if any residual buffer exists, and if that residual +is OK. +.Pp +.Xr libder 3 +can also stream a BER encoded object with either of the +.Fn libder_read_fd +or +.Fn libder_read_file +functions from a file descriptor or +.Xr stdio 3 +stream respectively. +Both functions will try very hard not to over-read from the stream to avoid +putting it in a precarious state, but bogus looking data may still cause them +to consume more of the stream than intended. +.Pp +Note that +.Fn libder_read_fd +will ignore an +.Ev EINTR +return value from +.Xr read 2 +by default and continue reading from the +.Fa fd . +If the application is signalled, it can abort the +.Xr read 2 +operation instead with +.Xr libder_abort 3 . +Note that +.Nm libder +does not currently have other points that an abort can be signalled from, so if +.Fn libder_read_fd +is not specifically waiting for data from the +.Va fd +when a signal hits, then the operation will continue until successful with +one exception. +If +.Xr libder_abort 3 +is called at any other point in the middle of +.Fn libder_read_fd , +then the abort flag will not be cleared until it does receive an interrupted +.Xr read 2 +call, or until the next call to one of the +.Nm +family of functions. +In the future, +.Nm +may support resuming an aborted operation and allow cancellation at other +specific points within the operation. +.Sh SEE ALSO +.Xr libder 3 , +.Xr libder_obj 3 , +.Xr libder_type 3 , +.Xr libder_write 3 diff --git a/contrib/libder/libder/libder_read.c b/contrib/libder/libder/libder_read.c new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_read.c @@ -0,0 +1,818 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libder_private.h" + +enum libder_stream_type { + LDST_NONE, + LDST_FD, + LDST_FILE, +}; + +struct libder_payload { + bool payload_heap; + uint8_t *payload_data; + size_t payload_size; +}; + +struct libder_stream { + enum libder_stream_type stream_type; + struct libder_ctx *stream_ctx; + uint8_t *stream_buf; + size_t stream_bufsz; + + size_t stream_offset; + size_t stream_resid; + size_t stream_consumed; + size_t stream_last_commit; + + union { + const uint8_t *stream_src_buf; + FILE *stream_src_file; + int stream_src_fd; + }; + + int stream_error; + bool stream_eof; +}; + +static uint8_t * +payload_move(struct libder_payload *payload, size_t *sz) +{ + uint8_t *data; + size_t datasz; + + data = NULL; + datasz = payload->payload_size; + if (payload->payload_heap) { + data = payload->payload_data; + } else if (datasz > 0) { + data = malloc(datasz); + if (data == NULL) + return (NULL); + + memcpy(data, payload->payload_data, datasz); + } + + payload->payload_heap = false; + payload->payload_data = NULL; + payload->payload_size = 0; + + *sz = datasz; + return (data); +} + +static void +payload_free(struct libder_payload *payload) +{ + + if (!payload->payload_heap) + return; + + free(payload->payload_data); + + payload->payload_heap = false; + payload->payload_data = NULL; + payload->payload_size = 0; +} + +static bool +libder_stream_init(struct libder_ctx *ctx, struct libder_stream *stream) +{ + size_t buffer_size; + + stream->stream_ctx = ctx; + stream->stream_error = 0; + stream->stream_eof = false; + stream->stream_offset = 0; + stream->stream_consumed = 0; + stream->stream_last_commit = 0; + if (stream->stream_type == LDST_NONE) { + assert(stream->stream_src_buf != NULL); + assert(stream->stream_bufsz != 0); + assert(stream->stream_resid != 0); + + return (true); + } + + buffer_size = libder_get_buffer_size(ctx); + assert(buffer_size != 0); + + stream->stream_buf = malloc(buffer_size); + if (stream->stream_buf == NULL) { + libder_set_error(ctx, LDE_NOMEM); + } else { + stream->stream_bufsz = buffer_size; + stream->stream_resid = 0; /* Nothing read yet */ + } + + return (stream->stream_buf != NULL); +} + +static void +libder_stream_free(struct libder_stream *stream) +{ + free(stream->stream_buf); +} + +static void +libder_stream_commit(struct libder_stream *stream) +{ + + if (stream->stream_offset <= stream->stream_last_commit) + return; + + stream->stream_consumed += stream->stream_offset - stream->stream_last_commit; + stream->stream_last_commit = stream->stream_offset; +} + +static bool +libder_stream_dynamic(const struct libder_stream *stream) +{ + + return (stream->stream_type != LDST_NONE); +} + +static bool +libder_stream_eof(const struct libder_stream *stream) +{ + + /* + * We're not EOF until we're both EOF and have processed all of the data + * remaining in the buffer. + */ + return (stream->stream_eof && stream->stream_resid == 0); +} + +static void +libder_stream_repack(struct libder_stream *stream) +{ + + /* + * Nothing to do, data's already at the beginning. + */ + if (stream->stream_offset == 0) + return; + + /* + * If there's data in-flight, we'll repack it back to the beginning so + * that we can store more with fewer calls to refill. If there's no + * data in-flight, we naturally just reset the offset. + */ + if (stream->stream_resid != 0) { + uint8_t *dst = &stream->stream_buf[0]; + uint8_t *src = &stream->stream_buf[stream->stream_offset]; + + memmove(dst, src, stream->stream_resid); + } + + stream->stream_last_commit -= stream->stream_offset; + stream->stream_offset = 0; +} + +static const uint8_t * +libder_stream_refill(struct libder_stream *stream, size_t req) +{ + size_t offset = stream->stream_offset; + const uint8_t *src; +#ifndef NDEBUG + const uint8_t *bufend; +#endif + uint8_t *refill_buf; + size_t bufleft, freadsz, needed, totalsz; + ssize_t readsz; + + /* + * For non-streaming, we just fulfill requests straight out of + * the source buffer. + */ + if (stream->stream_type == LDST_NONE) + src = stream->stream_src_buf; + else + src = stream->stream_buf; + + if (stream->stream_resid >= req) { + stream->stream_offset += req; + stream->stream_resid -= req; + return (&src[offset]); + } + + /* Cannot refill the non-streaming type. */ + if (stream->stream_type == LDST_NONE) { + stream->stream_eof = true; + return (NULL); + } + + bufleft = stream->stream_bufsz - (stream->stream_offset + stream->stream_resid); + + /* + * If we can't fit all of our data in the remainder of the buffer, we'll + * try to repack it to just fit as much as we can in. + */ + if (req > bufleft && stream->stream_offset != 0) { + libder_stream_repack(stream); + + bufleft = stream->stream_bufsz - stream->stream_resid; + offset = stream->stream_offset; + } + + refill_buf = &stream->stream_buf[offset + stream->stream_resid]; + needed = req - stream->stream_resid; + + assert(needed <= bufleft); + +#ifndef NDEBUG + bufend = &stream->stream_buf[stream->stream_bufsz]; +#endif + totalsz = 0; + + switch (stream->stream_type) { + case LDST_FILE: + assert(stream->stream_src_file != NULL); + + while (needed != 0) { + assert(refill_buf + needed <= bufend); + + freadsz = fread(refill_buf, 1, needed, stream->stream_src_file); + if (freadsz == 0) { + /* + * Error always put us into EOF state. + */ + stream->stream_eof = true; + if (ferror(stream->stream_src_file)) + stream->stream_error = 1; + break; + } + + stream->stream_resid += freadsz; + refill_buf += freadsz; + needed -= freadsz; + totalsz += freadsz; + } + break; + case LDST_FD: + assert(stream->stream_src_fd >= 0); + + while (needed != 0) { + assert(refill_buf + needed <= bufend); + + readsz = read(stream->stream_src_fd, refill_buf, needed); + if (readsz <= 0) { + /* + * In the future, we should likely make this + * configurable in some sense, but for now this + * seems fine. If, e.g., we caught a SIGINT, + * the application could always just close the + * fd on us if we should bail out. The problem + * right now is that we have no way to resume a + * partial transfer. + */ + if (readsz < 0 && errno == EINTR && + !libder_check_abort(stream->stream_ctx)) + continue; + stream->stream_eof = true; + if (readsz < 0) { + stream->stream_ctx->abort = false; + stream->stream_error = errno; + if (stream->stream_ctx->verbose > 0) + warn("libder_read"); + } + break; + } + + stream->stream_resid += readsz; + refill_buf += readsz; + needed -= readsz; + totalsz += readsz; + } + + break; + case LDST_NONE: + assert(0 && "Unrecognized stream type"); + break; + } + + /* + * For streaming types, we commit as soon as we refill the buffer because + * we can't just rewind. + */ + stream->stream_consumed += totalsz; + stream->stream_last_commit += totalsz; + + if (needed != 0) { + if (stream->stream_error != 0) + libder_set_error(stream->stream_ctx, LDE_STREAMERR); + return (NULL); + } else { + stream->stream_offset += req; + stream->stream_resid -= req; + } + + return (&stream->stream_buf[offset]); +} + +#define BER_TYPE_LONG_BATCH 0x04 + +static bool +der_read_structure_tag(struct libder_ctx *ctx, struct libder_stream *stream, + struct libder_tag *type) +{ + const uint8_t *buf; + uint8_t *longbuf = NULL, val; + size_t longbufsz = 0, offset = 0, received = 0; + + for (;;) { + /* + * We have to refill one byte at a time to avoid overreading + * into the structure size. + */ + if ((buf = libder_stream_refill(stream, 1)) == NULL) { + free(longbuf); + if (!libder_stream_eof(stream)) + libder_set_error(ctx, LDE_SHORTHDR); + return (false); + } + + received++; + val = buf[0]; + if (received == 1) { + /* Deconstruct the class and p/c */ + type->tag_class = BER_TYPE_CLASS(val); + type->tag_constructed = BER_TYPE_CONSTRUCTED(val); + + /* Long form, or short form? */ + if (BER_TYPE(val) != BER_TYPE_LONG_MASK) { + type->tag_short = BER_TYPE(val); + type->tag_size = sizeof(uint8_t); + type->tag_encoded = false; + + return (true); + } + + /* + * No content from this one, grab another byte. + */ + type->tag_encoded = true; + continue; + } + + /* We might normalize it later, depending on flags. */ + if (offset == 0 && (val & 0x7f) == 0 && ctx->strict) { + libder_set_error(ctx, LDE_STRICT_TAG); + return (false); + } + + /* XXX Impose a max size? Perhaps configurable. */ + if (offset == longbufsz) { + uint8_t *next; + size_t nextsz; + + nextsz = longbufsz + BER_TYPE_LONG_BATCH; + next = realloc(longbuf, nextsz * sizeof(*longbuf)); + if (next == NULL) { + free(longbuf); + libder_set_error(ctx, LDE_NOMEM); + return (false); + } + + longbuf = next; + longbufsz = nextsz; + } + + longbuf[offset++] = val; + + if ((val & 0x80) == 0) + break; + } + + type->tag_long = longbuf; + type->tag_size = offset; + + libder_normalize_type(ctx, type); + + return (true); +} + +static int +der_read_structure(struct libder_ctx *ctx, struct libder_stream *stream, + struct libder_tag *type, struct libder_payload *payload, bool *varlen) +{ + const uint8_t *buf; + size_t rsz, offset, resid; + uint8_t bsz; + + rsz = 0; + if (!der_read_structure_tag(ctx, stream, type)) { + return (-1); + } + + if ((buf = libder_stream_refill(stream, 1)) == NULL) { + if (!libder_stream_eof(stream)) + libder_set_error(ctx, LDE_SHORTHDR); + goto failed; + } + + bsz = *buf++; + +#define LENBIT_LONG 0x80 + *varlen = false; + if ((bsz & LENBIT_LONG) != 0) { + /* Long or long form, bsz describes how many bytes we have. */ + bsz &= ~LENBIT_LONG; + if (bsz != 0) { + /* Long */ + if (bsz > sizeof(rsz)) { + libder_set_error(ctx, LDE_LONGLEN); + goto failed; /* Only support up to long bytes. */ + } else if ((buf = libder_stream_refill(stream, bsz)) == NULL) { + libder_set_error(ctx, LDE_SHORTHDR); + goto failed; + } + + rsz = 0; + for (int i = 0; i < bsz; i++) { + if (i != 0) + rsz <<= 8; + rsz |= *buf++; + } + } else { + if (ctx->strict && !type->tag_constructed) { + libder_set_error(ctx, LDE_STRICT_PVARLEN); + goto failed; + } + + *varlen = true; + } + } else { + /* Short form */ + rsz = bsz; + } + + if (rsz != 0) { + assert(!*varlen); + + /* + * If we're not running a dynamic stream, we can just use a + * pointer into the buffer. The caller may copy the payload out + * anyways, but there's no sense in doing it up-front in case we + * hit an error in between then and now. + */ + if (!libder_stream_dynamic(stream)) { + /* + * This is a little dirty, but the caller won't mutate + * the data -- it'll either strictly read it, or it will + * copy it out to a known-mutable region. + */ + payload->payload_data = + __DECONST(void *, libder_stream_refill(stream, rsz)); + payload->payload_heap = false; + if (payload->payload_data == NULL) { + libder_set_error(ctx, LDE_SHORTDATA); + goto failed; + } + } else { + uint8_t *payload_data; + + payload_data = NULL; + + offset = 0; + resid = rsz; + while (resid != 0) { + uint8_t *next_data; + size_t req; + + req = MIN(stream->stream_bufsz, resid); + if ((buf = libder_stream_refill(stream, req)) == NULL) { + free(payload_data); + + libder_set_error(ctx, LDE_SHORTDATA); + goto failed; + } + + next_data = realloc(payload_data, offset + req); + if (next_data == NULL) { + free(payload_data); + + libder_set_error(ctx, LDE_NOMEM); + goto failed; + } + + payload_data = next_data; + next_data = NULL; + + memcpy(&payload_data[offset], buf, req); + offset += req; + resid -= req; + } + + payload->payload_heap = true; + payload->payload_data = payload_data; + } + + payload->payload_size = rsz; + } + + libder_stream_commit(stream); + return (0); + +failed: + libder_type_release(type); + return (-1); +} + +static struct libder_object * +libder_read_object(struct libder_ctx *ctx, struct libder_stream *stream) +{ + struct libder_payload payload = { 0 }; + struct libder_object *child, **next, *obj; + struct libder_stream memstream, *childstream; + struct libder_tag type; + int error; + bool varlen; + + /* Peel off one structure. */ + obj = NULL; + error = der_read_structure(ctx, stream, &type, &payload, &varlen); + if (error != 0) { + assert(payload.payload_data == NULL); + return (NULL); /* Error already set, if needed. */ + } + + if (!libder_is_valid_obj(ctx, &type, payload.payload_data, + payload.payload_size, varlen)) { + /* + * libder_is_valid_obj may set a more specific error, e.g., a + * strict mode violation. + */ + if (ctx->error == LDE_NONE) + libder_set_error(ctx, LDE_BADOBJECT); + goto out; + } + + if (!type.tag_constructed) { + uint8_t *payload_data; + size_t payloadsz; + + /* + * Primitive types cannot use the indefinite form, they must + * have an encoded size. + */ + if (varlen) { + libder_set_error(ctx, LDE_BADVARLEN); + goto out; + } + + /* + * Copy the payload out now if it's not heap-allocated. + */ + payload_data = payload_move(&payload, &payloadsz); + if (payload_data == NULL) { + libder_set_error(ctx, LDE_NOMEM); + goto out; + } + + obj = libder_obj_alloc_internal(ctx, &type, payload_data, + payloadsz, 0); + if (obj == NULL) { + free(payload_data); + libder_set_error(ctx, LDE_NOMEM); + goto out; + } + + libder_type_release(&type); + return (obj); + } + + obj = libder_obj_alloc_internal(ctx, &type, NULL, 0, 0); + if (obj == NULL) { + libder_set_error(ctx, LDE_NOMEM); + goto out; + } + + if (varlen) { + childstream = stream; + } else { + memstream = (struct libder_stream){ + .stream_type = LDST_NONE, + .stream_bufsz = payload.payload_size, + .stream_resid = payload.payload_size, + .stream_src_buf = payload.payload_data, + }; + + childstream = &memstream; + } + + /* Enumerate children */ + next = &obj->children; + for (;;) { + child = libder_read_object(ctx, childstream); + if (child == NULL) { + /* + * We may not know how much data we have, so this is our + * normal terminal condition. + */ + if (ctx->error != LDE_NONE) { + /* Free everything and bubble the error up. */ + libder_obj_free(obj); + obj = NULL; + } + break; + } + + if (libder_type_is(child->type, BT_RESERVED) && + child->length == 0) { + /* + * This child is just a marker; free it, don't leak it, + * and stop here. + */ + libder_obj_free(child); + + /* Malformed: shall not be present */ + if (!varlen) { + if (ctx->strict) { + libder_set_error(ctx, LDE_STRICT_EOC); + libder_obj_free(obj); + obj = NULL; + break; + } + + continue; + } + + /* Error detection */ + varlen = false; + break; + } + + obj->nchildren++; + child->parent = obj; + *next = child; + next = &child->next; + } + + if (varlen) { + libder_set_error(ctx, LDE_TRUNCVARLEN); + libder_obj_free(obj); + obj = NULL; + } + +out: + libder_type_release(&type); + payload_free(&payload); + return (obj); +} + +static struct libder_object * +libder_read_stream(struct libder_ctx *ctx, struct libder_stream *stream) +{ + struct libder_object *root; + + ctx->error = LDE_NONE; + root = libder_read_object(ctx, stream); + + if (root != NULL && libder_type_is(root->type, BT_RESERVED) && + root->length == 0) { + /* Strict violation: must not appear. */ + if (ctx->strict) + libder_set_error(ctx, LDE_STRICT_EOC); + libder_obj_free(root); + root = NULL; + } + if (root != NULL) + assert(stream->stream_consumed != 0); + return (root); +} + +/* + * Read the DER-encoded `data` into `ctx`. + * + * Returns an object on success, or NULL on failure. *datasz is updated to + * indicate the number of bytes consumed either way -- it will only be updated + * in the failure case if at least one object was valid. + */ +struct libder_object * +libder_read(struct libder_ctx *ctx, const uint8_t *data, size_t *datasz) +{ + struct libder_stream *stream; + struct libder_object *root; + + stream = malloc(sizeof(*stream)); + if (stream == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (NULL); + } + + *stream = (struct libder_stream){ + .stream_type = LDST_NONE, + .stream_bufsz = *datasz, + .stream_resid = *datasz, + .stream_src_buf = data, + }; + + libder_clear_abort(ctx); + ctx->error = LDE_NONE; + if (!libder_stream_init(ctx, stream)) { + free(stream); + return (NULL); + } + + root = libder_read_stream(ctx, stream); + if (stream->stream_consumed != 0) + *datasz = stream->stream_consumed; + + libder_stream_free(stream); + free(stream); + + return (root); +} + +/* + * Ditto above, but with an fd. *consumed is not ignored on entry, and returned + * with the number of bytes read from fd if consumed is not NULL. libder(3) + * tries to not over-read if an invalid structure is detected. + */ +struct libder_object * +libder_read_fd(struct libder_ctx *ctx, int fd, size_t *consumed) +{ + struct libder_stream *stream; + struct libder_object *root; + + stream = malloc(sizeof(*stream)); + if (stream == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (NULL); + } + + *stream = (struct libder_stream){ + .stream_type = LDST_FD, + .stream_src_fd = fd, + }; + + root = NULL; + libder_clear_abort(ctx); + ctx->error = LDE_NONE; + if (!libder_stream_init(ctx, stream)) { + free(stream); + return (NULL); + } + + root = libder_read_stream(ctx, stream); + if (consumed != NULL && stream->stream_consumed != 0) + *consumed = stream->stream_consumed; + + libder_stream_free(stream); + free(stream); + return (root); +} + +/* + * Ditto above, but with a FILE instead of an fd. + */ +struct libder_object * +libder_read_file(struct libder_ctx *ctx, FILE *fp, size_t *consumed) +{ + struct libder_stream *stream; + struct libder_object *root; + + stream = malloc(sizeof(*stream)); + if (stream == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (NULL); + } + + *stream = (struct libder_stream){ + .stream_type = LDST_FILE, + .stream_src_file = fp, + }; + + root = NULL; + libder_clear_abort(ctx); + ctx->error = LDE_NONE; + if (!libder_stream_init(ctx, stream)) { + free(stream); + return (NULL); + } + + root = libder_read_stream(ctx, stream); + if (consumed != NULL && stream->stream_consumed != 0) + *consumed = stream->stream_consumed; + + libder_stream_free(stream); + free(stream); + + return (root); +} diff --git a/contrib/libder/libder/libder_type.3 b/contrib/libder/libder/libder_type.3 new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_type.3 @@ -0,0 +1,71 @@ +.\" +.\" SPDX-Copyright-Identifier: BSD-2-Clause +.\" +.\" Copyright (C) 2024 Kyle Evans +.\" +.Dd March 2, 2024 +.Dt LIBDER_TYPE 3 +.Os +.Sh NAME +.Nm libder_type , +.Nm libder_type_alloc_simple , +.Nm libder_type_dup , +.Nm libder_type_free , +.Nm libder_type_simple +.Nd creating DER types +.Sh LIBRARY +.Lb libder +.Sh SYNOPSIS +.In libder.h +.Ft struct libder_tag * +.Fn libder_type_alloc_simple "struct libder_ctx *ctx" "uint8_t type" +.Ft struct libder_tag * +.Fn libder_type_dup "struct libder_ctx *ctx" "const struct libder_tag *type" +.Ft void +.Fn libder_type_free "struct libder_tag *type" +.Ft uint8_t +.Fn libder_type_simple "const struct libder_tag *type" +.Sh DESCRIPTION +The +.Nm +family of functions operate on the +.Xr libder 3 +type primitive. +These functions are largely useless as currently implemented, as +.Xr libder_obj 3 +has a method for allocating an object using a simple tag directly. +In the future, +.Nm +will have an API for importing encoded tags that need more than the +.Dq simple +one byte form (tags 0-30). +.Pp +The +.Fn libder_type_alloc_simple +function allocates a new type from the +.Dq simple +one byte form. +This type may be subsequently passed to +.Xr libder_obj_alloc 3 . +.Pp +The +.Fn libder_type_dup +function duplicates an existing type, and the +.Fn libder_type_free +function frees the type. +.Pp +The +.Ft libder_type_simple +function encodes the given +.Fa type +in the +.Dq simple +one byte buffer form. +In this form, the class bits and the primitive and constructed bits are encoded +in the three most significant bits, and the lower five bits are used to encode +a tag number between 0 and 30. +.Sh SEE ALSO +.Xr libder 3 , +.Xr libder_obj 3 , +.Xr libder_read 3 , +.Xr libder_write 3 diff --git a/contrib/libder/libder/libder_type.c b/contrib/libder/libder/libder_type.c new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_type.c @@ -0,0 +1,150 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +#include "libder_private.h" + +uint8_t +libder_type_simple_abi(const struct libder_tag *type) +{ + + return (libder_type_simple(type)); +} + +/* + * We'll likely expose this in the form of libder_type_import(), which validates + * and allocates a tag. + */ +LIBDER_PRIVATE struct libder_tag * +libder_type_alloc(void) +{ + + return (calloc(1, sizeof(struct libder_tag))); +} + +struct libder_tag * +libder_type_dup(struct libder_ctx *ctx, const struct libder_tag *dtype) +{ + struct libder_tag *type; + + type = libder_type_alloc(); + if (type == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (NULL); + } + + memcpy(type, dtype, sizeof(*dtype)); + + if (type->tag_encoded) { + uint8_t *tdata; + + /* Deep copy the tag data. */ + tdata = malloc(type->tag_size); + if (tdata == NULL) { + libder_set_error(ctx, LDE_NOMEM); + + /* + * Don't accidentally free the caller's buffer; it may + * be an external user of the API. + */ + type->tag_long = NULL; + type->tag_size = 0; + libder_type_free(type); + return (NULL); + } + + memcpy(tdata, dtype->tag_long, dtype->tag_size); + type->tag_long = tdata; + } + + return (type); +} + +struct libder_tag * +libder_type_alloc_simple(struct libder_ctx *ctx, uint8_t typeval) +{ + struct libder_tag *type; + + type = libder_type_alloc(); + if (type == NULL) { + libder_set_error(ctx, LDE_NOMEM); + return (NULL); + } + + type->tag_size = sizeof(typeval); + type->tag_class = BER_TYPE_CLASS(typeval); + type->tag_constructed = BER_TYPE_CONSTRUCTED(typeval); + type->tag_short = BER_TYPE(typeval); + return (type); +} + +LIBDER_PRIVATE void +libder_type_release(struct libder_tag *type) +{ + + if (type->tag_encoded) { + free(type->tag_long); + type->tag_long = NULL; + + /* + * Leaving type->tag_encoded set in case it helps us catch some + * bogus re-use of the type; we'd surface that as a null ptr + * deref as they think they should be using tag_long. + */ + } +} + +void +libder_type_free(struct libder_tag *type) +{ + + if (type == NULL) + return; + + libder_type_release(type); + free(type); +} + +LIBDER_PRIVATE void +libder_normalize_type(struct libder_ctx *ctx, struct libder_tag *type) +{ + uint8_t tagval; + size_t offset; + + if (!type->tag_encoded || !DER_NORMALIZING(ctx, TAGS)) + return; + + /* + * Strip any leading 0's off -- not possible in strict mode. + */ + for (offset = 0; offset < type->tag_size - 1; offset++) { + if ((type->tag_long[offset] & 0x7f) != 0) + break; + } + + assert(offset == 0 || !ctx->strict); + if (offset != 0) { + type->tag_size -= offset; + memmove(&type->tag_long[0], &type->tag_long[offset], + type->tag_size); + } + + /* + * We might be able to strip it down to a unencoded tag_short, if only + * the lower 5 bits are in use. + */ + if (type->tag_size != 1 || (type->tag_long[0] & ~0x1e) != 0) + return; + + tagval = type->tag_long[0]; + + free(type->tag_long); + type->tag_short = tagval; + type->tag_encoded = false; +} diff --git a/contrib/libder/libder/libder_write.3 b/contrib/libder/libder/libder_write.3 new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_write.3 @@ -0,0 +1,54 @@ +.\" +.\" SPDX-Copyright-Identifier: BSD-2-Clause +.\" +.\" Copyright (C) 2024 Kyle Evans +.\" +.Dd March 2, 2024 +.Dt LIBDER_WRITE 3 +.Os +.Sh NAME +.Nm libder_write +.Nd writing DER encoded buffers +.Sh LIBRARY +.Lb libder +.Sh SYNOPSIS +.In libder.h +.Ft uint8_t * +.Fn libder_write "struct libder_ctx *ctx" "struct libder_object *root" "uint8_t *buf" "size_t *bufsize" +.Sh DESCRIPTION +The +.Fn libder_write +writes the specified +.Fa root +into the given +.Fa buf +of size +.Fa bufsize . +If a +.Dv NULL +and +.Dv 0 +are passed in, then +.Fn libder_write +will alllocate a buffer just large enough to fit the encoded +.Fa root . +Upon successful write, +.Fn libder_write +will return a pointer to the buffer used, and +.Fa *bufsize +is updated to indicate how many bytes were written. +On failure, +.Dv NULL +is returned and +.Fa *bufsize +will remain unmodified. +.Pp +Normalization rules are applied at write time, if specified via +.Xr libder_set_normalize 3 . +Note that applications do not typically need to enable normalization, as they +are all enabled by default. +.Sh SEE ALSO +.Xr libder 3 , +.Xr libder_obj 3 , +.Xr libder_read 3 , +.Xr libder_type 3 diff --git a/contrib/libder/libder/libder_write.c b/contrib/libder/libder/libder_write.c new file mode 100644 --- /dev/null +++ b/contrib/libder/libder/libder_write.c @@ -0,0 +1,228 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +#include "libder.h" +#include "libder_private.h" + +struct memory_write_data { + uint8_t *buf; + size_t bufsz; + size_t offset; +}; + +typedef bool (write_buffer_t)(void *, const uint8_t *, size_t); + +static bool +libder_write_object_tag(struct libder_ctx *ctx __unused, + const struct libder_object *obj, write_buffer_t *write_buffer, void *cookie) +{ + const struct libder_tag *type = obj->type; + uint8_t value; + + if (!type->tag_encoded) { + value = libder_type_simple(type); + return (write_buffer(cookie, &value, sizeof(value))); + } + + /* Write out the tag info first. */ + value = BER_TYPE_LONG_MASK; + value |= type->tag_class << 6; + if (type->tag_constructed) + value |= BER_TYPE_CONSTRUCTED_MASK; + + if (!write_buffer(cookie, &value, sizeof(value))) + return (false); + + /* Write out the encoded tag next. */ + return (write_buffer(cookie, type->tag_long, type->tag_size)); +} + +static bool +libder_write_object_header(struct libder_ctx *ctx, struct libder_object *obj, + write_buffer_t *write_buffer, void *cookie) +{ + size_t size; + uint8_t sizelen, value; + + if (!libder_write_object_tag(ctx, obj, write_buffer, cookie)) + return (false); + + size = obj->disk_size; + sizelen = libder_size_length(size); + + if (sizelen == 1) { + assert((size & ~0x7f) == 0); + + value = size; + if (!write_buffer(cookie, &value, sizeof(value))) + return (false); + } else { + /* + * Protocol supports at most 0x7f size bytes, but we can only + * do up to a size_t. + */ + uint8_t sizebuf[sizeof(size_t)], *sizep; + + sizelen--; /* Remove the lead byte. */ + + value = 0x80 | sizelen; + if (!write_buffer(cookie, &value, sizeof(value))) + return (false); + + sizep = &sizebuf[0]; + for (uint8_t i = 0; i < sizelen; i++) + *sizep++ = (size >> ((sizelen - i - 1) * 8)) & 0xff; + + if (!write_buffer(cookie, &sizebuf[0], sizelen)) + return (false); + } + + return (true); +} + +static bool +libder_write_object_payload(struct libder_ctx *ctx __unused, + struct libder_object *obj, write_buffer_t *write_buffer, void *cookie) +{ + uint8_t *payload = obj->payload; + size_t length = obj->length; + + /* We don't expect `obj->payload` to be valid for a zero-size value. */ + if (length == 0) + return (true); + + /* + * We allow a NULL payload with a non-zero length to indicate that an + * object should write zeroes out, we just didn't waste the memory on + * these small allocations. Ideally if it's more than just one or two + * zeroes we're instead allocating a buffer for it and doing some more + * efficient copying from there. + */ + if (payload == NULL) { + uint8_t zero = 0; + + for (size_t i = 0; i < length; i++) { + if (!write_buffer(cookie, &zero, 1)) + return (false); + } + + return (true); + } + + return (write_buffer(cookie, payload, length)); +} + +static bool +libder_write_object(struct libder_ctx *ctx, struct libder_object *obj, + write_buffer_t *write_buffer, void *cookie) +{ + struct libder_object *child; + + if (DER_NORMALIZING(ctx, CONSTRUCTED) && !libder_obj_coalesce_children(obj, ctx)) + return (false); + + /* Write out this object's header first */ + if (!libder_write_object_header(ctx, obj, write_buffer, cookie)) + return (false); + + /* Write out the payload. */ + if (obj->children == NULL) + return (libder_write_object_payload(ctx, obj, write_buffer, cookie)); + + assert(obj->type->tag_constructed); + + /* Recurse on each child. */ + DER_FOREACH_CHILD(child, obj) { + if (!libder_write_object(ctx, child, write_buffer, cookie)) + return (false); + } + + return (true); +} + +static bool +memory_write(void *cookie, const uint8_t *data, size_t datasz) +{ + struct memory_write_data *mwrite = cookie; + uint8_t *dst = &mwrite->buf[mwrite->offset]; + size_t left; + + /* Small buffers should have been rejected long before now. */ + left = mwrite->bufsz - mwrite->offset; + assert(datasz <= left); + + memcpy(dst, data, datasz); + mwrite->offset += datasz; + return (true); +} + +/* + * Writes the object rooted at `root` to the buffer. If `buf` == NULL and + * `*bufsz` == 0, we'll allocate a buffer just large enough to hold the result + * and pass the size back via `*bufsz`. If a pre-allocated buffer is passed, + * we may still update `*bufsz` if normalization made the buffer smaller. + * + * If the buffer is too small, *bufsz will be set to the size of buffer needed. + */ +uint8_t * +libder_write(struct libder_ctx *ctx, struct libder_object *root, uint8_t *buf, + size_t *bufsz) +{ + struct memory_write_data mwrite = { 0 }; + size_t needed; + + /* + * We shouldn't really see buf == NULL with *bufsz != 0 or vice-versa. + * Combined, they mean that we should allocate whatever buffer size we + * need. + */ + if ((buf == NULL && *bufsz != 0) || (buf != NULL && *bufsz == 0)) + return (NULL); /* XXX Surface error? */ + + /* + * If we're doing any normalization beyond our standard size + * normalization, we apply those rules up front since they may alter our + * disk size every so slightly. + */ + if (ctx->normalize != 0 && !libder_obj_normalize(root, ctx)) + return (NULL); + + needed = libder_obj_disk_size(root, true); + if (needed == 0) + return (NULL); /* Overflow */ + + /* Allocate if we weren't passed a buffer. */ + if (*bufsz == 0) { + *bufsz = needed; + buf = malloc(needed); + if (buf == NULL) + return (NULL); + } else if (needed > *bufsz) { + *bufsz = needed; + return (NULL); /* Insufficient space */ + } + + /* Buffer large enough, write into it. */ + mwrite.buf = buf; + mwrite.bufsz = *bufsz; + if (!libder_write_object(ctx, root, &memory_write, &mwrite)) { + free(buf); + return (NULL); /* XXX Error */ + } + + /* + * We don't normalize the in-memory representation of the tree, we do + * that as we're writing into the buffer. It could be the case that we + * didn't need the full buffer as a result of normalization. + */ + *bufsz = mwrite.offset; + + return (buf); +} diff --git a/contrib/libder/tests/.gitignore b/contrib/libder/tests/.gitignore new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/.gitignore @@ -0,0 +1,12 @@ +CORPUS* +crash-* +leak-* +oom-* +*.log + +fuzz_* +test_* +!*.c +!*.h + +make_corpus diff --git a/contrib/libder/tests/CMakeLists.txt b/contrib/libder/tests/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/CMakeLists.txt @@ -0,0 +1,41 @@ +set(FUZZERS fuzz_parallel fuzz_stream fuzz_write) +set(UTILS ) +set(TESTS test_privkey test_pubkey) + +set(ALL_TESTS ${UTILS} ${TESTS}) + +if(BUILD_FUZZERS) + set(UTILS ${UTILS} make_corpus) + set(ALL_TESTS ${ALL_TESTS} ${FUZZERS} make_corpus) + + foreach(fuzzer IN LISTS FUZZERS) + add_executable(${fuzzer} ${fuzzer}.c) + + target_compile_options(${fuzzer} PUBLIC -fsanitize=fuzzer) + target_link_options(${fuzzer} PUBLIC -fsanitize=fuzzer) + endforeach() + + target_link_options(fuzz_parallel PUBLIC -pthread) +endif() + +foreach(prog IN LISTS UTILS TESTS) + add_executable(${prog} ${prog}.c) +endforeach() + +foreach(prog IN LISTS ALL_TESTS) + target_include_directories(${prog} PRIVATE ${CMAKE_SOURCE_DIR}/libder) + target_link_libraries(${prog} der_static) +endforeach() + +add_custom_command(TARGET test_privkey POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/repo.priv ${CMAKE_CURRENT_BINARY_DIR}/repo.priv) +add_custom_command(TARGET test_pubkey POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/repo.pub ${CMAKE_CURRENT_BINARY_DIR}/repo.pub) + +add_custom_target(check + DEPENDS test_pubkey test_privkey + COMMAND "${CMAKE_CURRENT_BINARY_DIR}/test_pubkey" + COMMAND "${CMAKE_CURRENT_BINARY_DIR}/test_privkey" +) diff --git a/contrib/libder/tests/fuzz_parallel.c b/contrib/libder/tests/fuzz_parallel.c new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/fuzz_parallel.c @@ -0,0 +1,111 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "fuzzers.h" + +struct fuzz_frame { + uint8_t frame_threads; +}; + +struct thread_input { + const uint8_t *data; + size_t datasz; +}; + +static void * +thread_main(void *cookie) +{ + const struct thread_input *input = cookie; + struct libder_ctx *ctx; + struct libder_object *obj; + const uint8_t *data = input->data; + size_t readsz, sz = input->datasz; + + ctx = libder_open(); + readsz = sz; + obj = libder_read(ctx, data, &readsz); + if (obj == NULL || readsz != sz) + goto out; + + if (obj != NULL) { + uint8_t *buf = NULL; + size_t bufsz = 0; + + /* + * If we successfully read it, then it shouldn't + * overflow. We're letting libder allocate the buffer, + * so we shouldn't be able to hit the 'too small' bit. + * + * I can't imagine what other errors might happen, so + * we'll just assert on it. + */ + buf = libder_write(ctx, obj, buf, &bufsz); + if (buf == NULL) + goto out; + + assert(bufsz != 0); + + free(buf); + } + +out: + libder_obj_free(obj); + libder_close(ctx); + return (NULL); +} + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t sz) +{ + const struct fuzz_frame *frame; + pthread_t *threads; + struct thread_input inp; + size_t nthreads; + + if (sz <= sizeof(*frame)) + return (-1); + + frame = (const void *)data; + data += sizeof(*frame); + sz -= sizeof(*frame); + + if (frame->frame_threads < 2) + return (-1); + + threads = malloc(sizeof(*threads) * frame->frame_threads); + if (threads == NULL) + return (-1); + + inp.data = data; + inp.datasz = sz; + + for (nthreads = 0; nthreads < frame->frame_threads; nthreads++) { + if (pthread_create(&threads[nthreads], NULL, thread_main, + &inp) != 0) + break; + } + + for (uint8_t i = 0; i < nthreads; i++) + pthread_join(threads[i], NULL); + + free(threads); + + return (0); +} diff --git a/contrib/libder/tests/fuzz_stream.c b/contrib/libder/tests/fuzz_stream.c new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/fuzz_stream.c @@ -0,0 +1,246 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "fuzzers.h" + +struct supply_data { + const uint8_t *data; + volatile size_t datasz; + int socket; +}; + +static void * +supply_thread(void *data) +{ + struct supply_data *sdata = data; + size_t sz = sdata->datasz; + ssize_t writesz; + + do { + writesz = write(sdata->socket, sdata->data, sz); + + data += writesz; + sz -= writesz; + } while (sz != 0 && writesz > 0); + + sdata->datasz = sz; + shutdown(sdata->socket, SHUT_RDWR); + close(sdata->socket); + + return (NULL); +} + +static int +fuzz_fd(const struct fuzz_params *fparams, const uint8_t *data, size_t sz) +{ + struct supply_data sdata; + struct libder_ctx *ctx; + struct libder_object *obj; + size_t totalsz; + int sockets[2]; + pid_t pid; + int ret; + + ret = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, + &sockets[0]); + if (ret == -1) + return (-1); + + sdata.data = data; + sdata.datasz = sz; + sdata.socket = sockets[1]; + signal(SIGCHLD, SIG_IGN); + pid = fork(); + if (pid == -1) { + close(sockets[0]); + close(sockets[1]); + return (-1); + } + + if (pid == 0) { + close(sockets[0]); + supply_thread(&sdata); + _exit(0); + } else { + close(sockets[1]); + } + + totalsz = 0; + ret = 0; + ctx = libder_open(); + libder_set_strict(ctx, !!fparams->strict); + while (totalsz < sz) { + size_t readsz = 0; + + obj = libder_read_fd(ctx, sockets[0], &readsz); + libder_obj_free(obj); + + /* + * Even invalid reads should consume at least one byte. + */ + assert(readsz != 0); + + totalsz += readsz; + if (readsz == 0) + break; + } + + assert(totalsz == sz); + libder_close(ctx); + close(sockets[0]); + + return (ret); +} + +static int +fuzz_file(const struct fuzz_params *fparams, const uint8_t *data, size_t sz) +{ + FILE *fp; + struct libder_ctx *ctx; + struct libder_object *obj; + size_t totalsz; + int ret; + + if (fparams->buftype >= BUFFER_END) + return (-1); + + fp = fmemopen(__DECONST(void *, data), sz, "rb"); + assert(fp != NULL); + + switch (fparams->buftype) { + case BUFFER_NONE: + setvbuf(fp, NULL, 0, _IONBF); + break; + case BUFFER_FULL: + setvbuf(fp, NULL, 0, _IOFBF); + break; + case BUFFER_END: + assert(0); + } + + totalsz = 0; + ret = 0; + ctx = libder_open(); + libder_set_strict(ctx, !!fparams->strict); + while (!feof(fp)) { + size_t readsz = 0; + + obj = libder_read_file(ctx, fp, &readsz); + libder_obj_free(obj); + + if (obj == NULL) + assert(readsz != 0 || feof(fp)); + else + assert(readsz != 0); + + totalsz += readsz; + } + + assert(totalsz == sz); + libder_close(ctx); + fclose(fp); + + return (ret); +} + +static int +fuzz_plain(const struct fuzz_params *fparams, const uint8_t *data, size_t sz) +{ + struct libder_ctx *ctx; + struct libder_object *obj; + int ret; + + if (sz == 0) + return (-1); + + ret = 0; + ctx = libder_open(); + libder_set_strict(ctx, !!fparams->strict); + do { + size_t readsz; + + readsz = sz; + obj = libder_read(ctx, data, &readsz); + libder_obj_free(obj); + + if (obj == NULL) + assert(readsz != 0 || readsz == sz); + else + assert(readsz != 0); + + /* + * If we hit an entirely invalid segment of the buffer, we'll + * just skip a byte and try again. + */ + data += MAX(1, readsz); + sz -= MAX(1, readsz); + } while (sz != 0); + + libder_close(ctx); + + return (ret); +}; + +static bool +validate_padding(const struct fuzz_params *fparams) +{ + const uint8_t *end = (const void *)(fparams + 1); + const uint8_t *pad = (const uint8_t *)&fparams->PARAM_PAD_START; + + while (pad < end) { + if (*pad++ != 0) + return (false); + } + + return (true); +} + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t sz) +{ + const struct fuzz_params *fparams; + + if (sz <= sizeof(*fparams)) + return (-1); + + fparams = (const void *)data; + if (fparams->type >= STREAM_END) + return (-1); + + if (!validate_padding(fparams)) + return (-1); + + data += sizeof(*fparams); + sz -= sizeof(*fparams); + + if (fparams->type != STREAM_FILE && fparams->buftype != BUFFER_NONE) + return (-1); + + switch (fparams->type) { + case STREAM_FD: + return (fuzz_fd(fparams, data, sz)); + case STREAM_FILE: + return (fuzz_file(fparams, data, sz)); + case STREAM_PLAIN: + return (fuzz_plain(fparams, data, sz)); + case STREAM_END: + assert(0); + } + + __builtin_trap(); +} diff --git a/contrib/libder/tests/fuzz_write.c b/contrib/libder/tests/fuzz_write.c new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/fuzz_write.c @@ -0,0 +1,79 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "fuzzers.h" + +int +LLVMFuzzerTestOneInput(const uint8_t *data, size_t sz) +{ + struct libder_ctx *ctx; + struct libder_object *obj; + size_t readsz; + int ret; + bool strict; + + if (sz < 2) + return (-1); + + /* + * I worked this in originally by just using the high bit of the first + * byte, but then I realized that encoding it that way would make it + * impossible to get strict validation of universal and application + * tags. The former is a bit more important than the latter. + */ + strict = !!data[0]; + data++; + sz--; + + ctx = libder_open(); + libder_set_strict(ctx, strict); + ret = -1; + readsz = sz; + obj = libder_read(ctx, data, &readsz); + if (obj == NULL || readsz != sz) + goto out; + + if (obj != NULL) { + uint8_t *buf = NULL; + size_t bufsz = 0; + + /* + * If we successfully read it, then it shouldn't + * overflow. We're letting libder allocate the buffer, + * so we shouldn't be able to hit the 'too small' bit. + * + * I can't imagine what other errors might happen, so + * we'll just assert on it. + */ + buf = libder_write(ctx, obj, buf, &bufsz); + if (buf == NULL) + goto out; + + assert(bufsz != 0); + + free(buf); + } + + ret = 0; + +out: + libder_obj_free(obj); + libder_close(ctx); + + return (ret); +} diff --git a/contrib/libder/tests/fuzzers.h b/contrib/libder/tests/fuzzers.h new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/fuzzers.h @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +enum stream_type { + STREAM_FD = 0, /* read_fd() type */ + STREAM_FILE = 1, /* read_file() type */ + STREAM_PLAIN = 2, + + STREAM_END +} __attribute__((packed)); + +enum stream_buffer { + BUFFER_NONE = 0, + BUFFER_FULL = 1, + + BUFFER_END, +} __attribute__((packed)); + +struct fuzz_params { + enum stream_type type; + enum stream_buffer buftype; + +#define PARAM_PAD_START _pad0 + uint8_t strict; + uint8_t _pad0[5]; + + /* Give me plenty of padding. */ + uint64_t padding[3]; +}; + +_Static_assert(sizeof(struct fuzz_params) == 32, + "fuzz_params ABI broken, will invalidate CORPUS"); + diff --git a/contrib/libder/tests/make_corpus.c b/contrib/libder/tests/make_corpus.c new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/make_corpus.c @@ -0,0 +1,137 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#undef NDEBUG +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "fuzzers.h" + +#define LARGE_SIZE (1024 * 64) + +static const uint8_t empty_seq[] = { BT_SEQUENCE, 0x00 }; +static const uint8_t long_size[21] = { BT_OCTETSTRING, 0x83, 0x00, 0x00, 0x10 }; + +/* 64k */ +#define LARGE_SIZE_ENCODING 0x83, 0x01, 0x00, 0x00 +static const uint8_t large_octet[LARGE_SIZE + 5] = { BT_OCTETSTRING, LARGE_SIZE_ENCODING }; + +#define VARLEN_SEQ BT_OCTETSTRING, 0x04, 0x01, 0x02, 0x03, 0x04 +#define VARLEN_CHILDREN VARLEN_SEQ, VARLEN_SEQ, VARLEN_SEQ +static const uint8_t varlen[] = { BT_SEQUENCE, 0x80, + VARLEN_CHILDREN, 0x00, 0x00 }; + +#define BITSTRING1 BT_BITSTRING, 0x04, 0x03, 0xc0, 0xc0, 0xcc +#define BITSTRING2 BT_BITSTRING, 0x04, 0x05, 0xdd, 0xdd, 0xff +static const uint8_t constructed_bitstring[] = { 0x20 | BT_BITSTRING, + 2 * 6, BITSTRING1, BITSTRING2 }; + +#define FUZZER_SEED(seq) { #seq, sizeof(seq), seq } +static const struct seed { + const char *seed_name; + size_t seed_seqsz; + const uint8_t *seed_seq; +} seeds[] = { + FUZZER_SEED(empty_seq), + FUZZER_SEED(long_size), + FUZZER_SEED(large_octet), + FUZZER_SEED(varlen), + FUZZER_SEED(constructed_bitstring), +}; + +static void +usage(void) +{ + fprintf(stderr, "usage: %s [-H] \n", getprogname()); + exit(1); +} + +static void +write_one(const struct fuzz_params *params, const struct seed *seed, int dirfd, + bool striphdr) +{ + char *name; + int fd = -1; + + assert(asprintf(&name, "base_%d_%d_%d_%s", params->type, + params->buftype, params->strict, seed->seed_name) != -1); + + fd = openat(dirfd, name, O_RDWR | O_TRUNC | O_CREAT, 0644); + assert(fd != -1); + + /* + * Write our params + seed; if we're stripping the header we won't have + * the full params, but we'll still have our signal byte for strict + * mode. + */ + if (!striphdr) + assert(write(fd, ¶ms, sizeof(params)) == sizeof(params)); + else + assert(write(fd, ¶ms->strict, sizeof(params->strict)) == sizeof(params->strict)); + + assert(write(fd, seed->seed_seq, seed->seed_seqsz) == seed->seed_seqsz); + + free(name); + close(fd); +} + +int +main(int argc, char *argv[]) +{ + struct fuzz_params params; + const struct seed *seed; + const char *seed_dir; + int dirfd = -1; + bool striphdr = false; + + if (argc < 2 || argc > 3) + usage(); + + if (argc == 3 && strcmp(argv[1], "-H") != 0) + usage(); + + striphdr = argc == 3; + seed_dir = argv[argc - 1]; + + dirfd = open(seed_dir, O_SEARCH); + if (dirfd == -1) + err(1, "%s: open", seed_dir); + + memset(¶ms, 0, sizeof(params)); + + for (int type = 0; type < STREAM_END; type++) { + params.type = type; + + for (int buffered = 0; buffered < BUFFER_END; buffered++) { + params.buftype = buffered; + + for (uint8_t strict = 0; strict < 2; strict++) { + params.strict = strict; + + for (size_t i = 0; i < nitems(seeds); i++) { + seed = &seeds[i]; + + write_one(¶ms, seed, dirfd, striphdr); + } + } + + if (type != STREAM_FILE) + break; + } + } + + close(dirfd); +} diff --git a/contrib/libder/tests/repo.priv b/contrib/libder/tests/repo.priv new file mode 100644 index 0000000000000000000000000000000000000000..74a030b6802c7a3a83de957d7ecb78958a1b094a GIT binary patch literal 64 zc$@)10Kfk*J^}#&1P-P3Dpq0RSaw`b){S6Ppa%v8D}e+62B9DW9smTcX+aH~oANaF WEqsyT$A2TBgfv_@CfLuu_uPu5hZxZS literal 0 Hc$@ + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include + +static inline int +open_progdir(const char *prog) +{ + char pdir[PATH_MAX], *resolved; + int dfd; + + resolved = realpath(prog, &pdir[0]); + assert(resolved != NULL); + + resolved = dirname(&pdir[0]); + assert(resolved != NULL); + + dfd = open(resolved, O_DIRECTORY); + assert(dfd != -1); + + return (dfd); +} diff --git a/contrib/libder/tests/test_privkey.c b/contrib/libder/tests/test_privkey.c new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/test_privkey.c @@ -0,0 +1,175 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "test_common.h" + +/* + * Note that the choice of secp112r1 is completely arbitrary. I was mainly + * shooting for something pretty weak to avoid people trying to "catch me" + * checking in private key material, even though it's very incredibly clearly + * just for a test case. + */ +static const uint8_t oid_secp112r1[] = + { 0x2b, 0x81, 0x04, 0x00, 0x06 }; + +static const uint8_t privdata[] = { 0xa5, 0xf5, 0x2a, 0x56, 0x61, 0xe3, 0x58, + 0x76, 0x5c, 0x4f, 0xd6, 0x8d, 0x60, 0x54 }; + +static const uint8_t pubdata[] = { 0x00, 0x04, 0xae, 0x69, 0x41, 0x0d, 0x9c, + 0x9b, 0xf2, 0x34, 0xf6, 0x2d, 0x7c, 0x91, 0xe1, 0xc7, 0x7f, 0x23, 0xa0, + 0x84, 0x34, 0x5c, 0x38, 0x26, 0xd8, 0xcf, 0xbe, 0xf7, 0xdc, 0x8a }; + +static void +test_interface(struct libder_object *root) +{ + const uint8_t *data; + size_t datasz; + struct libder_object *keystring, *oid; + + /* Grab the oid first. */ + oid = libder_obj_child(root, 2); + assert(oid != NULL); /* Actually just the container... */ + assert(libder_obj_type_simple(oid) == 0xa0); + + oid = libder_obj_child(oid, 0); + assert(oid != NULL); /* Now *that*'s an OID. */ + assert(libder_obj_type_simple(oid) == BT_OID); + data = libder_obj_data(oid, &datasz); + assert(datasz == sizeof(oid_secp112r1)); + assert(memcmp(oid_secp112r1, data, datasz) == 0); + + keystring = libder_obj_child(root, 1); + assert(keystring != NULL); + assert(libder_obj_type_simple(keystring) == BT_OCTETSTRING); + + data = libder_obj_data(keystring, &datasz); + assert(datasz == sizeof(privdata)); + assert(memcmp(privdata, data, datasz) == 0); +} + +/* buf and bufszs are just our reference */ +static void +test_construction(struct libder_ctx *ctx, const uint8_t *buf, size_t bufsz) +{ + uint8_t *out; + struct libder_object *obj, *oidp, *pubp, *root; + struct libder_object *keystring; + size_t outsz; + uint8_t data; + + root = libder_obj_alloc_simple(ctx, BT_SEQUENCE, NULL, 0); + assert(root != NULL); + + data = 1; + obj = libder_obj_alloc_simple(ctx, BT_INTEGER, &data, 1); + assert(obj != NULL); + assert(libder_obj_append(root, obj)); + + /* Private key material */ + obj = libder_obj_alloc_simple(ctx, BT_OCTETSTRING, privdata, sizeof(privdata)); + assert(obj != NULL); + assert(libder_obj_append(root, obj)); + + /* Now throw in the OID and pubkey containers */ + oidp = libder_obj_alloc_simple(ctx, + (BC_CONTEXT << 6) | BER_TYPE_CONSTRUCTED_MASK | 0, NULL, 0); + assert(oidp != NULL); + assert(libder_obj_append(root, oidp)); + + pubp = libder_obj_alloc_simple(ctx, + (BC_CONTEXT << 6) | BER_TYPE_CONSTRUCTED_MASK | 1, NULL, 0); + assert(pubp != NULL); + assert(libder_obj_append(root, pubp)); + + /* Actually add the OID */ + obj = libder_obj_alloc_simple(ctx, BT_OID, oid_secp112r1, sizeof(oid_secp112r1)); + assert(obj != NULL); + assert(libder_obj_append(oidp, obj)); + + /* Finally, add the pubkey */ + obj = libder_obj_alloc_simple(ctx, BT_BITSTRING, pubdata, sizeof(pubdata)); + assert(obj != NULL); + assert(libder_obj_append(pubp, obj)); + + out = NULL; + outsz = 0; + out = libder_write(ctx, root, out, &outsz); + assert(out != NULL); + assert(outsz == bufsz); + + assert(memcmp(out, buf, bufsz) == 0); + + libder_obj_free(root); + free(out); +} + +int +main(int argc, char *argv[]) +{ + struct stat sb; + struct libder_ctx *ctx; + struct libder_object *root; + uint8_t *buf, *out; + size_t bufsz, outsz, rootsz; + ssize_t readsz; + int dfd, error, fd; + + dfd = open_progdir(argv[0]); + + fd = openat(dfd, "repo.priv", O_RDONLY); + assert(fd >= 0); + + close(dfd); + dfd = -1; + + error = fstat(fd, &sb); + assert(error == 0); + + bufsz = sb.st_size; + buf = malloc(bufsz); + assert(buf != NULL); + + readsz = read(fd, buf, bufsz); + close(fd); + + assert(readsz == bufsz); + + ctx = libder_open(); + rootsz = bufsz; + libder_set_verbose(ctx, 2); + root = libder_read(ctx, buf, &rootsz); + + assert(root != NULL); + assert(rootsz == bufsz); + + test_interface(root); + test_construction(ctx, buf, bufsz); + + outsz = 0; + out = NULL; + out = libder_write(ctx, root, out, &outsz); + assert(out != NULL); + assert(outsz == bufsz); + + assert(memcmp(buf, out, outsz) == 0); + + free(out); + free(buf); + libder_obj_free(root); + libder_close(ctx); +} diff --git a/contrib/libder/tests/test_pubkey.c b/contrib/libder/tests/test_pubkey.c new file mode 100644 --- /dev/null +++ b/contrib/libder/tests/test_pubkey.c @@ -0,0 +1,143 @@ +/*- + * Copyright (c) 2024 Kyle Evans + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "test_common.h" + +static const uint8_t oid_ecpubkey[] = + { 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01 }; +static const uint8_t oid_secp256k1[] = + { 0x2b, 0x81, 0x04, 0x00, 0x0a }; + +static const uint8_t pubdata[] = { 0x00, 0x04, 0xd1, 0x76, 0x20, 0x39, 0xe5, 0x3e, + 0x67, 0x7d, 0x8d, 0xfd, 0xc4, 0x21, 0x20, 0xcd, 0xb0, 0xbf, 0x47, 0x87, 0x6a, + 0xf8, 0x07, 0x73, 0xbe, 0xbe, 0xd5, 0xbb, 0x3c, 0xbc, 0x32, 0x93, 0xd9, 0xdf, + 0x96, 0x25, 0xb7, 0x0e, 0x3c, 0x55, 0x12, 0xee, 0x7a, 0x02, 0x39, 0x0f, 0xee, + 0x7b, 0xfe, 0x1a, 0x93, 0x76, 0xf7, 0xc2, 0xac, 0x05, 0xba, 0x9a, 0x83, 0x37, + 0xf5, 0xcd, 0x55, 0x57, 0x39, 0x6f }; + +static void +test_interface(struct libder_object *root) +{ + const uint8_t *data; + size_t datasz; + struct libder_object *keystring; + + keystring = libder_obj_child(root, 1); + assert(keystring != NULL); + assert(libder_obj_type_simple(keystring) == BT_BITSTRING); + + data = libder_obj_data(keystring, &datasz); + assert(datasz == sizeof(pubdata)); + assert(memcmp(pubdata, data, datasz) == 0); +} + +/* buf and bufszs are just our reference */ +static void +test_construction(struct libder_ctx*ctx, const uint8_t *buf, size_t bufsz) +{ + uint8_t *out; + struct libder_object *obj, *params, *root; + struct libder_object *keystring; + size_t outsz; + + root = libder_obj_alloc_simple(ctx, BT_SEQUENCE, NULL, 0); + assert(root != NULL); + + params = libder_obj_alloc_simple(ctx, BT_SEQUENCE, NULL, 0); + assert(params != NULL); + assert(libder_obj_append(root, params)); + + keystring = libder_obj_alloc_simple(ctx, BT_BITSTRING, pubdata, sizeof(pubdata)); + assert(keystring != NULL); + assert(libder_obj_append(root, keystring)); + + /* Now go back and build the two params, id and curve */ + obj = libder_obj_alloc_simple(ctx, BT_OID, oid_ecpubkey, sizeof(oid_ecpubkey)); + assert(obj != NULL); + assert(libder_obj_append(params, obj)); + + obj = libder_obj_alloc_simple(ctx, BT_OID, oid_secp256k1, sizeof(oid_secp256k1)); + assert(obj != NULL); + assert(libder_obj_append(params, obj)); + + out = NULL; + outsz = 0; + out = libder_write(ctx, root, out, &outsz); + assert(out != NULL); + assert(outsz == bufsz); + assert(memcmp(out, buf, bufsz) == 0); + + libder_obj_free(root); + free(out); +} + +int +main(int argc, char *argv[]) +{ + struct stat sb; + struct libder_ctx *ctx; + struct libder_object *root; + uint8_t *buf, *out; + size_t bufsz, outsz, rootsz; + ssize_t readsz; + int dfd, error, fd; + + dfd = open_progdir(argv[0]); + + fd = openat(dfd, "repo.pub", O_RDONLY); + assert(fd >= 0); + + close(dfd); + dfd = -1; + + error = fstat(fd, &sb); + assert(error == 0); + + bufsz = sb.st_size; + buf = malloc(bufsz); + assert(buf != NULL); + + readsz = read(fd, buf, bufsz); + close(fd); + + assert(readsz == bufsz); + + ctx = libder_open(); + rootsz = bufsz; + libder_set_verbose(ctx, 2); + root = libder_read(ctx, buf, &rootsz); + + assert(root != NULL); + assert(rootsz == bufsz); + + test_interface(root); + test_construction(ctx, buf, bufsz); + + outsz = 0; + out = NULL; + out = libder_write(ctx, root, out, &outsz); + assert(out != NULL); + assert(outsz == bufsz); + + assert(memcmp(buf, out, outsz) == 0); + + free(out); + free(buf); + libder_obj_free(root); + libder_close(ctx); +} diff --git a/crypto/libecc/.github/workflows/libecc_cifuzz.yml b/crypto/libecc/.github/workflows/libecc_cifuzz.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_cifuzz.yml @@ -0,0 +1,26 @@ +name: CIFuzz +on: [pull_request] +jobs: + Fuzzing: + runs-on: ubuntu-latest + steps: + - name: Build Fuzzers + id: build + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + with: + oss-fuzz-project-name: 'libecc' + dry-run: false + language: c++ + - name: Run Fuzzers + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master + with: + oss-fuzz-project-name: 'libecc' + fuzz-seconds: 300 + dry-run: false + language: c++ + - name: Upload Crash + uses: actions/upload-artifact@v3 + if: failure() && steps.build.outcome == 'success' + with: + name: artifacts + path: ./out/artifacts diff --git a/crypto/libecc/.github/workflows/libecc_compilation_tests.yml b/crypto/libecc/.github/workflows/libecc_compilation_tests.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_compilation_tests.yml @@ -0,0 +1,57 @@ +name: libecc + +# Run this workflow every time a new commit pushed to your repository +on: push + +jobs: + compilation_tests: + runs-on: ubuntu-22.04 + strategy: + #max-parallel: 10 + matrix: + cc: [gcc, clang, g++, clang++] + blinding: [0, 1] + complete: [0, 1] + ladder: [0, 1] + cryptofuzz: [0, 1] + optflags: ["-O3", "-O2", "-O1"] + steps: + # Checkout repository + - name: checkout repository + uses: actions/checkout@v2 + # Run actions + # libecc compilation tests + - name: libecc compilation tests + env: + CC: ${{ matrix.cc }} + BLINDING: ${{ matrix.blinding }} + COMPLETE: ${{ matrix.complete }} + LADDER: ${{ matrix.ladder }} + CRYPTOFUZZ: ${{ matrix.cryptofuzz }} + EXTRA_LIB_CFLAGS: ${{ matrix.optflags }} + EXTRA_BIN_CFLAGS: ${{ matrix.optflags }} + shell: bash + run: | + # Compilation tests of all cases + # + make && cd src/arithmetic_tests/ && make clean && make bin && make clean && cd -; + cd src/examples/ && make clean && make && cd - && make clean; + make 16; + cd src/examples/ && make clean && make 16 && cd - && make clean; + make 32; + cd src/examples/ && make clean && make 32 && cd - && make clean; + make 64; + cd src/examples/ && make clean && make 64 && cd - && make clean; + # We perform one test with the sanitizers + USE_SANITIZERS=1 make; + cd src/examples/ && make clean && USE_SANITIZERS=1 make && cd - && make clean; + # + make debug; + cd src/examples/ && make clean && make debug && cd - && make clean; + make debug16; + cd src/examples/ && make clean && make debug16 && cd - && make clean; + make debug32; + cd src/examples/ && make clean && make debug32 && cd - && make clean; + make debug64; + cd src/examples/ && make clean && make debug64 && cd - && make clean; + continue-on-error: false diff --git a/crypto/libecc/.github/workflows/libecc_crossarch_tests.yml b/crypto/libecc/.github/workflows/libecc_crossarch_tests.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_crossarch_tests.yml @@ -0,0 +1,55 @@ +name: libecc + +# Run this workflow every time a new commit pushed to your repository +on: push + +jobs: + cross_arch_tests: + runs-on: ubuntu-20.04 + strategy: + #max-parallel: 10 + matrix: + blinding: [0, 1] + complete: [1] + ladder: [1] + #cross_target: [arm-linux-gnueabi, arm-linux-gnueabihf, aarch64-linux-gnu, powerpc64le-linux-gnu, mipsel-linux-gnu, i686-w64-mingw32, x86_64-w64-mingw32, i386-apple-darwin, x86_64-apple-darwin, x86_64h-apple-darwin] + cross_target: [arm-linux-gnueabi, arm-linux-gnueabihf, aarch64-linux-gnu, powerpc64le-linux-gnu, mipsel-linux-gnu, i686-w64-mingw32, x86_64-w64-mingw32] + cross_size: [16, 32, 64] + steps: + # Add swap because of possible out of memory issues + - name: Set Swap Space + uses: pierotofy/set-swap-space@master + with: + swap-size-gb: 10 + # Checkout repository + - name: checkout repository + uses: actions/checkout@v2 + # Run actions + # Cross build and cross run tests + - name: libecc cross-arch tests + env: + BLINDING: ${{ matrix.blinding }} + COMPLETE: ${{ matrix.complete }} + LADDER: ${{ matrix.ladder }} + CROSS_TARGET: ${{ matrix.cross_target }} + CROSS_SIZE: ${{ matrix.cross_size }} + CRYPTOFUZZ: 1 + shell: bash + run: | + # Install stuff + sudo apt-get update; + # This oddity is due to ubuntu (18.04 and 20.04) issue with wine32 in + # githbub actions runners ... + sudo apt-get -y install software-properties-common; + sudo apt-add-repository "ppa:ondrej/php" -y; + sudo dpkg --add-architecture i386; + sudo apt-get update; + sudo apt-get -y install qemu-user-static wine-stable wine32 wine64; + # Cross build jobs + docker pull multiarch/crossbuild; + sh scripts/crossbuild.sh -triplet "${CROSS_TARGET}" "${CROSS_SIZE}"; + # Check for errors + [ ! -z "$(ls -A scripts/crossbuild_out/error_log/)" ] && exit -1; + # Test generated cross binaries through qemu-static; + sh scripts/crossrun.sh -triplet "${CROSS_TARGET}" "${CROSS_SIZE}"; + continue-on-error: false diff --git a/crypto/libecc/.github/workflows/libecc_examples.yml b/crypto/libecc/.github/workflows/libecc_examples.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_examples.yml @@ -0,0 +1,39 @@ +name: libecc + +# Run this workflow every time a new commit pushed to your repository +on: push + +jobs: + examples: + runs-on: ubuntu-22.04 + strategy: + #max-parallel: 10 + matrix: + cc: [gcc, clang] + blinding: [0, 1] + cryptofuzz: [1] + steps: + # Checkout repository + - name: checkout repository + uses: actions/checkout@v2 + # Run actions + # libecc examples tests + - name: libecc examples tests + env: + CC: ${{ matrix.cc }} + BLINDING: ${{ matrix.blinding }} + CRYPTOFUZZ: ${{ matrix.cryptofuzz }} + ASSERT_PRINT: 1 + # We want to parallelize self tests + OPENMP_SELF_TESTS: 1 + shell: bash + run: | + # Install OpenMP + sudo apt-get update; + sudo apt-get -y install libomp-dev; + # Compile and compile the tests + # + EXTRA_CFLAGS="-DUSER_NN_BIT_LEN=4096" make && cd src/examples/ && EXTRA_CFLAGS="-DUSER_NN_BIT_LEN=4096" make && ./sig/rsa/rsa && ./sig/dsa/dsa && ./sig/kcdsa/kcdsa && ./sig/sdsa/sdsa && ./sig/gostr34_10_94/gostr34_10_94 && ./sss/sss && ./basic/curve_basic_examples && ./basic/curve_ecdh && make clean && cd - && make clean; + make 32 && cd src/examples/ && make 32 && ./sss/sss && ./basic/curve_basic_examples && ./basic/curve_ecdh && make clean && cd - && make clean; + make 16 && cd src/examples/ && make 16 && ./sss/sss && ./basic/curve_basic_examples && ./basic/curve_ecdh && make clean && cd - && make clean; + continue-on-error: false diff --git a/crypto/libecc/.github/workflows/libecc_meson_build.yml b/crypto/libecc/.github/workflows/libecc_meson_build.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_meson_build.yml @@ -0,0 +1,37 @@ +name: libecc + +# Run this workflow every time a new commit pushed to your repository +on: push + +jobs: + compilation_tests: + runs-on: ubuntu-22.04 + strategy: + #max-parallel: 10 + matrix: + cc: [gcc, clang, g++, clang++] + blinding: [0, 1] + complete: [0, 1] + ladder: [0, 1] + cryptofuzz: [0, 1] + optflags: ["-O3", "-O2", "-O1"] + steps: + # Checkout repository + - name: checkout repository + uses: actions/checkout@v2 + # Run actions + # libecc compilation tests using meson + - name: libecc meson compilation tests + shell: bash + run: | + sudo apt-get update; + sudo apt-get -y install python3-pip; + pip install meson; + pip install ninja; + pip install dunamai; + # Compilation tests of all cases + # + rm -rf builddir/ && meson setup -Dwith_wordsize=16 builddir && cd builddir && meson dist && cd -; + rm -rf builddir/ && meson setup -Dwith_wordsize=32 builddir && cd builddir && meson dist && cd -; + rm -rf builddir/ && meson setup -Dwith_wordsize=64 builddir && cd builddir && meson dist && cd -; + continue-on-error: false diff --git a/crypto/libecc/.github/workflows/libecc_python_tests.yml b/crypto/libecc/.github/workflows/libecc_python_tests.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_python_tests.yml @@ -0,0 +1,43 @@ +name: libecc + +# Run this workflow every time a new commit pushed to your repository +on: push + +jobs: + runtime_tests: + runs-on: ubuntu-22.04 + strategy: + #max-parallel: 10 + matrix: + cc: [gcc, clang] + blinding: [0, 1] + cryptofuzz: [1] + steps: + # Checkout repository + - name: checkout repository + uses: actions/checkout@v2 + # Run actions + # libecc python tests + - name: libecc python tests + env: + CC: ${{ matrix.cc }} + BLINDING: ${{ matrix.blinding }} + CRYPTOFUZZ: ${{ matrix.cryptofuzz }} + ASSERT_PRINT: 1 + # We want to parallelize self tests + OPENMP_SELF_TESTS: 1 + shell: bash + run: | + # Install Python2 and OpenMP + sudo apt-get update; + sudo apt-get -y install python2 libomp-dev; + # Test our Python libecc expanding script + # Python3 + echo "y" | python3 scripts/expand_libecc.py --remove-all && PYTHON=python3 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors rand; + # Clean + echo "y" | python3 scripts/expand_libecc.py --remove-all && make clean; + # Python2 + echo "y" | python2 scripts/expand_libecc.py --remove-all && PYTHON=python2 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors rand; + # Clean + echo "y" | python2 scripts/expand_libecc.py --remove-all && make clean; + continue-on-error: false diff --git a/crypto/libecc/.github/workflows/libecc_runtime_tests.yml b/crypto/libecc/.github/workflows/libecc_runtime_tests.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.github/workflows/libecc_runtime_tests.yml @@ -0,0 +1,39 @@ +name: libecc + +# Run this workflow every time a new commit pushed to your repository +on: push + +jobs: + runtime_tests: + runs-on: ubuntu-22.04 + strategy: + #max-parallel: 10 + matrix: + cc: [gcc, clang] + blinding: [1] + cryptofuzz: [1] + wordsize: [64, 32, 16] + steps: + # Checkout repository + - name: checkout repository + uses: actions/checkout@v2 + # Run actions + # libecc runtime tests + - name: libecc runtime tests + env: + CC: ${{ matrix.cc }} + BLINDING: ${{ matrix.blinding }} + CRYPTOFUZZ: ${{ matrix.cryptofuzz }} + ASSERT_PRINT: 1 + # We want to parallelize self tests + OPENMP_SELF_TESTS: 1 + WORDSIZE: ${{ matrix.wordsize }} + shell: bash + run: | + # Install OpenMP + sudo apt-get update; + sudo apt-get -y install libomp-dev; + # Vanilla tests + # + make "${WORDSIZE}" && ./build/ec_self_tests vectors rand; + continue-on-error: false diff --git a/crypto/libecc/.gitignore b/crypto/libecc/.gitignore new file mode 100644 --- /dev/null +++ b/crypto/libecc/.gitignore @@ -0,0 +1,4 @@ +*.o +*.d +*~ +*.su \ No newline at end of file diff --git a/crypto/libecc/.travis.yml b/crypto/libecc/.travis.yml new file mode 100644 --- /dev/null +++ b/crypto/libecc/.travis.yml @@ -0,0 +1,287 @@ +language: c +os: linux +dist: + - bionic + +env: + global: + # COVERITY_SCAN_TOKEN + - secure: "jhz0JLrLjWABZfT/mWiwuddUMvJNdrkIWJEqFGtGLO/x/nbiFD8ooHl/Sb+JSOsr8obXYMVmO+7ubTOLeqAbfaqS/5OZSQZjKAl4G6vGK40qY8cm1F7PTv5H3533XJGG6u4SZkMMlecz1UwsdmQ/5uabhzZwa9vMhuWJPkFy6uwvv09+r7cu8p4sN1KKfkIqIwpdpWmoOoltxfLPKkaIuxhftKDCYrcpd9K82NfXm/9Whxfra35Wq9IcxZXfNt6QKw0OLGnwR70hQZrRsd0bQAzeerWHCnqAbY2neNtMjiV905GJkUaCvWTF6P2ZbTCzN3Jy6wGz/LMSyztnWy/0pa9+dEWdCOZPLsrg+BTcBZNwPBho/Lg/diA/8Dz9plDirvogTpz6O0vzqmLRTVUp6uqBsTAnPHvNS1iz7hUwwvuItSAWOywVeVlpZ2mxUsOUyVzp2iZ9VEr4yk15LLbeYTPIMY2QbwBuG6TkgYn5EiCwsaQlSmPeyJlkc2a5tji2Rgms0wcpOReBxyKKN30LqZyac+bdlkwl6IqzaSWGz0wle68+1vNura+a909kGONLAx/0dbBzL1t5pFrJfDN7brBuk1wJuurecn8owdts4iPMaowpje79BG2hTQot969Ig00j4mhg1BJv5kk7c/mO3TqbDW8tPAto5tcWrYfELu4=" + +before_install: + - echo -n | openssl s_client -connect https://scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca- + + +addons: + apt: + update: true + packages: + - make + - gcc + - clang + - qemu-user-static + - wine-stable + - wine32 + - wine64 + - python3 + + coverity_scan: + project: + name: "rb-anssi/libecc_local" + description: "Build submitted via Travis CI of libecc" + notification_email: ryadbenadjila@gmail.com + build_command: make + branch_pattern: coverity_scan + +cache: + apt: true + +# We use docker for the cross-build +services: + - docker + +# All our jobs +env: + matrix: + # Python libecc expand script test + - TEST_PYTHON_EXPAND_SCRIPT=1 + # Vanilla tests (on native plaform) + - BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=1 + - CC=clang BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=1 + - CC=clang BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=1 + - CC=clang BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=1 + - CC=clang BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=0 + - CC=clang BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=0 + - CC=clang BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=0 + - CC=clang BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=0 + - CC=clang BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=0 + # Cross compilation tests (using docker and qemu-static) + # arm-linux-gnueabi + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0 + # arm-linux-gnueabihf + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0 + # powerpc64le-linux-gnu + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0 + # aarch64-linux-gnu + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0 + # mipsel-linux-gnu + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=0 + # i386-apple-darwin + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=0 + # x86_64-apple-darwin + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=0 + # x86_64h-apple-darwin + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=0 + - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=0 + # i686-w64-mingw32 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=0 + # x86_64-w64-mingw32 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=1 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=0 + - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=0 + - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=0 + +script: + # Coverity scan static analysis + - if [ "${COVERITY_SCAN_BRANCH}" == 1 ]; then make; fi + - if [ "${COVERITY_SCAN_BRANCH}" == 1 ]; then exit 0; fi + # Test our Python libecc expanding script + # Python2 + - if [ "${TEST_PYTHON_EXPAND_SCRIPT}" == 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then echo "y" | python2 scripts/expand_libecc.py --remove-all && PYTHON=python2 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors && ./build/ec_self_tests rand; fi; + # Python3 + - if [ "${TEST_PYTHON_EXPAND_SCRIPT}" == 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then echo "y" | python3 scripts/expand_libecc.py --remove-all && PYTHON=python3 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors && ./build/ec_self_tests rand; fi; + # Clean + - if [ "${TEST_PYTHON_EXPAND_SCRIPT}" == 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then echo "y" | python2 scripts/expand_libecc.py --remove-all && make clean; fi; + # Vanilla tests + - if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then git fetch origin refs/pull/${TRAVIS_PULL_REQUEST}/head && git checkout FETCH_HEAD; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make 16 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make 16 && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make 16 && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make 32 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make 32 && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make 32 && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make 64 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make 64 && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make 64 && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make debug && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make debug && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make debug && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make debug16 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make debug16 && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make debug16 && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make debug32 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make debug32 && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make debug32 && cd - && make clean; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make debug64 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make debug64 && make clean && cd -; fi + - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make debug64 && cd - && make clean; fi + # Cross build jobs + - if [ "${CROSS_BUILD}" = 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then docker pull multiarch/crossbuild; fi + - if [ "${CROSS_BUILD}" = 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then sh scripts/crossbuild.sh -triplet "${CROSS_TARGET}" "${CROSS_SIZE}"; fi + # Test generated cross binaries through qemu-static + - if [ "${CROSS_BUILD}" = 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then sh scripts/crossrun.sh -triplet "${CROSS_TARGET}" "${CROSS_SIZE}"; fi + +notifications: + email: + recipients: + - ryadbenadjila@gmail.com + on_success: never + on_failure: always + on_pull_requests: always diff --git a/crypto/libecc/LICENSE b/crypto/libecc/LICENSE new file mode 100644 --- /dev/null +++ b/crypto/libecc/LICENSE @@ -0,0 +1,50 @@ +The files in this project are provided under a dual BSD/GPLv2 license. When +using or redistributing this software, you may do so under either license. + + +GPLv2 License summary +--------------------- + +Copyright (C) 2017 +All rights reserved. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program 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 +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +BSD License +----------- + +Copyright (C) 2017 +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/crypto/libecc/README.md b/crypto/libecc/README.md new file mode 100644 --- /dev/null +++ b/crypto/libecc/README.md @@ -0,0 +1,1345 @@ +[![compilation](https://github.com/libecc/libecc/actions/workflows/libecc_compilation_tests.yml/badge.svg?branch=master)](https://github.com/libecc/libecc/actions/workflows/libecc_compilation_tests.yml) +[![runtime](https://github.com/libecc/libecc/actions/workflows/libecc_runtime_tests.yml/badge.svg?branch=master)](https://github.com/libecc/libecc/actions/workflows/libecc_runtime_tests.yml) +[![crossarch](https://github.com/libecc/libecc/actions/workflows/libecc_crossarch_tests.yml/badge.svg?branch=master)](https://github.com/libecc/libecc/actions/workflows/libecc_crossarch_tests.yml) +[![python](https://github.com/libecc/libecc/actions/workflows/libecc_python_tests.yml/badge.svg?branch=master)](https://github.com/libecc/libecc/actions/workflows/libecc_python_tests.yml) +[![examples](https://github.com/libecc/libecc/actions/workflows/libecc_examples.yml/badge.svg?branch=master)](https://github.com/libecc/libecc/actions/workflows/libecc_examples.yml) + + +# libecc project + +## Copyright and license +Copyright (C) 2017-2023 + +This software is licensed under a dual BSD and GPL v2 license. +See [LICENSE](LICENSE) file at the root folder of the project. + +## Authors + + * Ryad BENADJILA () + * Arnaud EBALARD () + * Jean-Pierre FLORI () + +## Contributors + * Nicolas VIVET () + * Karim KHALFALLAH () + * Niels SAMWEL () + +## Description +This software implements a library for elliptic curves based +cryptography (ECC). The API supports signature algorithms specified +in the [ISO 14888-3:2018](https://www.iso.org/standard/76382.html) +standard and some other signature algorithms as well as ECDH primitives, with the following specific curves and hash functions: + + * **Signatures**: + * Core ISO 14888-3:2018 algorithms: ECDSA, ECKCDSA, ECGDSA, ECRDSA, EC{,O}SDSA, ECFSDSA, SM2. + * EdDSA (25519 and 448 as specified in [RFC 8032](https://datatracker.ietf.org/doc/html/rfc8032)). + * BIGN (as standardized in [STB 34.101.45-2013](https://github.com/bcrypto/bign)). We allow a more lax usage of + BIGN than in the standard as we allow any curve and any hash function. + * BIP0340, also known as the "Schnorr" Bitcoin proposal, as specified in [bip-0340](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki). + We allow a more lax usage of BIP0340 than the standard as we allow any curve and any hash function (the standard mandates SECP256K1 with SHA-256). + + * **ECDH**: + * ECC-CDH (Elliptic Curve Cryptography Cofactor Diffie-Hellman) as described in [section 5.7.1.2 of the NIST SP 800-56A Rev. 3](https://csrc.nist.gov/publications/detail/sp/800-56a/rev-3/final) standard. + * X25519 and X448 as specified in [RFC7748](https://datatracker.ietf.org/doc/html/rfc7748) (with some specificities, see the details below). + * **Curves**: SECP{192,224,256,384,521}R1, SECP{192,224,256}K1, BRAINPOOLP{192,224,256,320,384,512}{R1,T1}, + FRP256V1, GOST{256,512}, GOSTR3410-2001-CryptoPro{A,B,C,XchA,XchB,Test}-ParamSet, GOSTR3410-2012-{256,512}-ParamSet{A,B,C}, GOSTR3410-2012-256-ParamSetD, GOSTR3410-2012-512-ParamSetTest, SM2P256V1, SM2P{192,256}Test, WEI{25519,448}, BIGN{256,384,512}V1. The library can be easily expanded with + user defined curves using a standalone helper script. + * **Hash functions**: SHA-2 and SHA-3 hash functions (224, 256, 384, 512), SM3, RIPEMD-160, +GOST 34.11-2012 as described in [RFC 6986](https://datatracker.ietf.org/doc/html/rfc6986) +(also known as [Streebog](https://tc26.ru/en/events/research-projects-competition/streebog-competition.html)), +SHAKE256 in its restricted version with 114 bytes output (mainly for Ed448), BELT-HASH (as standardized in +[STB 34.101.31-2011](https://github.com/bcrypto/belt)), and BASH-{224,256,384,512} (as standardized in +[STB 34.101.77-2020](http://apmi.bsu.by/assets/files/std/bash-spec24.pdf)). +**HMAC** based on any of these hash functions is also included. + +ECDSA comes in two variants: the classical non-deterministic one, and the **deterministic** ECDSA +as described in [RFC 6979](https://datatracker.ietf.org/doc/html/rfc6979). The deterministic version +generates nonces using a HMAC-DRBG process, and is suitable for situations where there is +no RNG or where entropy sources are considered weak (please note that any leak on these nonces +bits can lead to devastating attacks exploiting the [Hidden Number Problem](https://eprint.iacr.org/2020/615.pdf)). +On the downside, the deterministic version of ECDSA is susceptible to [fault attacks](https://eprint.iacr.org/2017/1014.pdf). +Hence, one will have to **carefully select** the suitable version to use depending on the usage and +attack context (i.e. which of side-channel attacks or fault attacks are easier to perform). +The same applies to BIGN that comes in two flavours as standardized in [STB 34.101.45-2013](https://github.com/bcrypto/bign): +non-deterministic and deterministic (following an iterative generation process using the BELT hash function and its underlying block cipher). + +The library also supports EdDSA (Ed25519 and Ed448) as defined in [RFC 8032](https://datatracker.ietf.org/doc/html/rfc8032) with +all their variants (with context, pre-hashed). +Since the core of the library supports short Weierstrass curves, and as +EdDSA uses instead Twisted Edwards curves with dedicated formulas, we use +**isogenies** as described in the [lwig-curve-representations](https://datatracker.ietf.org/doc/html/draft-ietf-lwig-curve-representations) +draft. Isogenies are transformations (homomorphisms that are almost isomorphisms) between +curves models, allowing to implement operations on one model by operating with +formulas on another model. Concretely, in our case we perform computations on +the Weierstrass WEI25519 that is isogenic to Ed25519 (Twisted Edwards) +and Curve25519 (Montgomery) curves. This, of course, induces overheads in computations +while having the great benefit of keeping the library core mathematical foundations simple +and keep the defense-in-depth (regarding software security and side-channels) focused on +a rather limited part: see the discussions below on libecc efforts with regards to security. + +Please note that as for deterministic ECDSA and BIGN, EdDSA signatures are trivially susceptible to +[fault attacks](https://eprint.iacr.org/2017/1014.pdf) without having a non-deterministic +variant. Hence, when using EdDSA one will have to either ensure that the usage context naturally prevents +such attacks, that the platform implements countermeasures (e.g. using secure MCUs, etc.) or that +other means allow to detect/mitigate such attacks (e.g. on the compilation toolchain side). + +Please refer to [this CFRG thread](https://mailarchive.ietf.org/arch/browse/cfrg/?gbt=1&index=5l3XCLHLCVfOmnkcv4mo2-pEV94) +for more insight on why deterministic versus non-deterministic EC signature schemes is still an open debate +and how the usage context and **attack model** is **crucial** when choosing to use one or the other. + + +**Batch verification** is implemented for the signature algorithms that support it - the signature schemes +that preserve some "reversible" projective point coordinate information in the signature value. +This is the case for some "Schnorr" based schemes, namely ECFSDSA ("full Schnorr" from ISO14888-3), EdDSA and BIP0340. +Batch verification allows (thanks to the Bos-Coster algorithm) to bring speedups between 2 to 6.5 times +the regular verification for batches of at least 10 signatures, which is not negligible depending on the usage. +Beware that for the specific case of BIP0340, results might depend on the underlying prime of the curve, since +the batch verification makes heavy use of square root residues and the Tonelli-Shanks algorithm complexity +is sensitive to the prime "form" (e.g. is equal to 1 modulo 4, etc.). Finally, beware that the speedup of +batch verification comes at an increased memory cost: the Bos-Coster algorithm requires a scratchpad memory space +that increases linearly with the number of signatures to be checked. + + +Regarding the specific case of ECRDSA (the Russian standard), libecc implements by default the +[RFC 7091](https://datatracker.ietf.org/doc/html/rfc7091) and [draft-deremin-rfc4491-bis](https://datatracker.ietf.org/doc/html/draft-deremin-rfc4491-bis) +versions to comply with the standard test vectors (provided in the form of X.509 certificates). +This version of the algorithm **differs** from the ISO/IEC 14888-3 description and test vectors, +the main difference coming from the way the hash of the message to be signed/verified is processed: +in the RFCs, the little endian representation of the hash is taken as big number while in ISO/IEC the big endian +representation is used. This seems (to be confirmed) to be a discrepancy of ISO/IEC 14888-3 algorithm description +that must be fixed there. In order to allow users to still be able to reproduce the ISO/IEC behavior, we provide +a compilation toggle that will force this mode `USE_ISO14888_3_ECRDSA=1`: + +
+	$ USE_ISO14888_3_ECRDSA=1 make
+
+ +**ECDH (Elliptic Curve Diffie-Hellman)** variants are also implemented in the +library. Classical ECDH over Weierstrass curves is implemented in the form +of ECC-CDH (Elliptic Curve Cryptography Cofactor Diffie-Hellman) as described +in [section 5.7.1.2 of the NIST SP 800-56A Rev. 3](https://csrc.nist.gov/publications/detail/sp/800-56a/rev-3/final) standard. Montgomery curves +based algorithms (Curve25519 and Curve448) are included as specified in [RFC7748](https://datatracker.ietf.org/doc/html/rfc7748), +although the implementation somehow diverges from the canonical ones as u coordinates on the curve +quadratic twist are rejected (this is due to the underlying usage of isogenies to +handle Montgomery curves). This divergence does not impact the ECDH use case though. + + +Advanced usages of this library also include the possible implementation +of elliptic curve based protocols as well as any algorithm +on top of prime fields based elliptic curves (or prime fields, or rings +of integers). Many examples are present in the [src/examples](src/examples) +folder, notable ones being: + * Pollard-Rho, Miller-Rabin and square residues over finite fields. + * The RSA cryptosystem as defined in the PKCS#1 [RFC8017](https://datatracker.ietf.org/doc/html/rfc8017) +standard. This implementation also comes with the integration of deprecated hash +functions such as MD2, MD4, MD5, SHA-0, SHA-1, MDC-2, GOSTR34-11-94 and so on in order to be compliant with existing +signatures (e.g. in X.509). These primitives are **not** included in the core +library on purpose: they are **dangerous and broken** and must only be used for +tests purposes. + * The DSA cryptosystem as defined in [FIPS 186-4](https://csrc.nist.gov/publications/detail/fips/186/4/final). + * The SDSA (Schnorr DSA) as defined in ISO14888-3 + * The KCDSA (Korean DSA) as defined in ISO14888-3 + * The GOSTR34-10-94 function as defined in [RFC4491](https://www.rfc-editor.org/rfc/rfc4491) + * The SSS (Shamir Secret Sharing) algorithm over a prime field of 256 bits. + + +**NOTE**: for all the primitives (specifically relevant for signature primitives), a maximum +allowed size for big numbers is **4096 bits** with word size **64 bits** (this will be less +for word sizes 16 and 32 bits). This is due to an internal limitation of libecc +on big numbers allocation documented [here](include/libecc/nn/nn_config.h). We can live with +this limitation as the library is primarily intended to focus on ECC based algorithms. +However, one should be aware that for example RSA with modulus > 4096 will fail (as well +and DSA and other El-Gamal based algorithms): these primitives are only included as +examples and should be used with care. + +**NOTE**: handling 4096 bits NN numbers must be explicitly configured at compilation +time using the `-DUSER_NN_BIT_LEN=4096` toggle in the `CFLAGS` or `EXTRA_CFLAGS` as explained +in [the dedicated section](https://github.com/ANSSI-FR/libecc#modifying-the-big-numbers-size). + + +Compared to other cryptographic libraries providing such +features, the differentiating points are: + + * A focus on code readability and auditability. The code is pure C99, + with no dynamic allocation and includes pre/post-asserts in the code. + Hence, this library is a good candidate for embedded targets (it should be + easily portable accross various platforms). + * A clean layer separation for all needed mathematical abstractions and + operations. Strong typing (as "strong" as C99 allows, of course) of + mathematical objects has been used in each layer. + * The library has NOT been designed to break performance records, though + it does a decent job (see the [performance section discussion](#performance)). Similarly, + the library memory footprint (in terms of ROM and RAM usage) is not the + smallest achievable one (though some efforts have been made to limit it + and fit "common" platforms, see the [dedicated section](#constrained-devices)). + * libecc library core has **no external dependency** (not even the standard + libc library) to make it portable. See the + [section about portability](#compatibility-and-portability) for more information. + +## Building + +### Building the static libraries and the signature self tests + +The main [Makefile](Makefile) is in the root directory, and compiling is as simple as +executing: + +
+	$ make
+
+ +By default, compilation is quiet. **Verbose compilation** (i.e. showing all the compilation +executed commands) can be achieved using the `VERBOSE=1` toggle: + +
+	$ VERBOSE=1 make
+
+ +This will compile different elements in the [build](build/) directory: + + * Three **archive** static libraries, each one containing (based on) the previous ones: + * **libarith.a**: this library contains the Natural Numbers (NN) and Finite field over primes + (Fp) arithmetic layers. + * **libec.a**: this library is based on libarith.a and contains the EC curves implementation + (points abstraction, point addition/doubling formulas and scalar multiplication). + * **libsign.a**: this library is based on libec.a and contains all our ISO 14888-3 signature + algorithms over some statically defined curves and hash functions. + * Two binaries based on the libsign.a static library: + * **ec\_self\_tests**: the self tests for signature/verification algorithm of ISO 14888-3 + with known and random test vectors, as well as performance tests. Launching the self tests without + an argument will execute the three tests (known and fixed test vectors, random sign/verify + checks, and performance measurements). One can also launch each test separately. + +        For known test vectors: +
+	$ ./build/ec_self_tests vectors
+	======= Known test vectors test ===================
+	[+] ECDSA-SHA224/secp224r1 selftests: known test vectors sig/verif ok
+	[+] ECDSA-SHA256/secp256r1 selftests: known test vectors sig/verif ok
+	[+] ECDSA-SHA512/secp256r1 selftests: known test vectors sig/verif ok
+	...
+
+ +        For sign/verify checks (with random key pairs and random data): + +
+	$ ./build/ec_self_tests rand
+	======= Random sig/verif test ===================
+	[+]  ECDSA-SHA224/FRP256V1 randtests: random import/export with sig(0)/verif(0) ok
+	[+] ECDSA-SHA224/SECP224R1 randtests: random import/export with sig(0)/verif(0) ok
+	...
+
+ +        For performance measurements: + +
+	$ ./build/ec_self_tests perf
+	======= Performance test =====================
+	[+]  ECDSA-SHA224/FRP256V1 perf: 462 sign/s and 243 verif/s
+	[+] ECDSA-SHA224/SECP224R1 perf: 533 sign/s and 276 verif/s
+	...
+
+ +**NOTE**: it is possible to parallelize self tests (known and random) using the +[OpenMP](https://en.wikipedia.org/wiki/OpenMP) framework (usually packaged with +most distros) by using the `OPENMP_SELF_TESTS=1` compilation toggle. This requires +the `WITH_STDLIB` option (as it obviously uses the standard library). Performance +tests are not parallelized due to possible shared ressources exhaustion between CPUs and cores +(e.g. caches, Branch Prediction Units, etc.). + +- **ec\_utils**: a tool for signing and verifying user defined files, with a user +provided signature algorithm/curve/hash function triplet. The tool can also be +used to generate signature keys. + +        Generate keys for ECKCDSA over the BRAINPOOLP512R1 curve, with +the 'mykeypair' prefix: +
+	$ ./build/ec_utils gen_keys BRAINPOOLP512R1 ECKCDSA mykeypair
+
+ +        This will create four files. Two +binary '.bin' files corresponding to the private key (mykeypair\_private\_key.bin) +and the public key (mykeypair\_public\_key.bin). Two header '.h' files are also +created, corresponding to a C style header version of the keys so that these can +be included and used in a C program using libecc. Note that both kind of keys +(public and private) include leading metadata (type, algorithm, curve, etc) for +possible sanity checks when they are used (e.g. to detect passing of an ECDSA +private key to an ECKCDSA signature call, etc). + +        Once the key pair has been created, +one can sign a raw binary file named 'myfile' and store the signature in +'sig.bin'. In the example below, we use SHA3\_512 as the hash function for +the signature. BRAINPOOLP512R1 and ECKCDSA are explicitly given (matching the +type of key we generated during previous step). Note that the call would yield +an error if invalid parameters were given (thanks to the metadata elements +described above). +
+	$ ./build/ec_utils sign BRAINPOOLP512R1 ECKCDSA SHA3_512 myfile mykeypair_private_key.bin sig.bin
+
+        After this, a raw signature is created, mainly consisting of the ECKCDSA (r, s) big +numbers concatenated (the length of this file should be 1024 bits = 2 x 512 bits). The signature can now be verified with +the 'verify' command and the public key, the result being either **OK** or **failed**: +
+	$ ./build/ec_utils verify BRAINPOOLP512R1 ECKCDSA SHA3_512 myfile mykeypair_public_key.bin sig.bin
+	  Signature check of myfile OK
+
+ +        The ec\_utils tool can also be used to produce/verify **structured binaries** +containing a header, raw binary and their signature (see the 'struct\_sign' and 'struct\_verify' commands for a help on +this mode). The rationale behind these commands is to ease the production/verification of self-contained signed images +(which can be useful when dealing with embedded firmware updates for instance). + +### Building the user examples + +Since it is possible to use libecc as a NN (**positive** Natural Numbers), Fp (Finite field over primes) or EC curve layer library, +we provide some examples in the [src/examples](src/examples) folder. Compiling these examples is as simple as: +
+	$ cd src/examples
+	$ make
+
+ +* NN layer examples: + * [src/examples/basic/nn_miller_rabin.c](src/examples/basic/nn_miller_rabin.c): this example implements the + [Miller-Rabin](https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test) composition (or probabilistic primality) test as + described in the [Handbook of Applied Cryptography (4.29)](http://cacr.uwaterloo.ca/hac/about/chap4.pdf). + * [src/examples/basic/nn_pollard_rho.c](src/examples/nn_pollard_rho.c): this example is a straightforward + implementation of the [Pollard's Rho](https://en.wikipedia.org/wiki/Pollard%27s_rho_algorithm) integer factorization + algorithm as specified in the [Handbook of Applied Cryptography (3.9)](http://cacr.uwaterloo.ca/hac/about/chap3.pdf). + +* Fp layer examples: + * [src/examples/basic/fp_square_residue.c](src/examples/basic/fp_square_residue.c): this is an implementation of + the [Tonelli-Shanks](https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm) algorithm for finding quadratic residues + over a prime field Fp. Given a prime field element x, the algorithm finds y so that y2 = x (or informs that there + is no solution if this is the case). + +* Curves layer examples: + * [src/examples/basic/curve_basic_examples.c](src/examples/basic/curve_basic_examples.c): this example shows basic + features of libec for playing with elliptic curves group arithmetic, namely loading defined named curves, generating random points on + these curves, checking point addition and doubling formulas as well as scalar multiplication (both Montgomery and non Montgomery based). + + * [src/examples/basic/curve_ecdh.c](src/examples/basic/curve_ecdh.c): the purpose of this code is to provide a toy example of + how to implement an [Elliptic Curve Diffie-Hellman](https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman) protocol between two + entities 'Alice' and 'Bob' in order to produce a shared secret over a public channel. + +**WARNING**: these examples are **toy implementations** not to be used in a production environment (for instance, the code +has neither been designed to be efficient nor robust against side channel attacks). Their purpose is only to show basic usage of the +libarith and libec libraries. + +The **public headers** containing the functions to be used by higher level code are [include/libecc/libarith.h](include/libecc/libarith.h), +[include/libecc/libec.h](include/libecc/libec.h) and [include/libecc/libsig.h](include/libecc/libsig.h): they are respectively used for the NN and Fp arithmetic layers, +the Elliptic Curves layer, and the signature layer. + +More advanced examples are present in the examples folder: + +* Obsolete hash algorithms as an expansion to libecc core algorithms, in [src/examples/hash](src/examples/hash) (MD2, MD4, MD5, MDC2, SHA-0, +SHA-1, and TDES for supporting MDC2). Please **be careful** when using them, it is advised to use them as toy primitives in **non-production code** +(e.g. for checking old protocols and cipher suites). + +* Pre-ECC Signature schemes (based on Fp finite fields discrete logarithm) in [src/examples/sig](src/examples/sig) (RSA, DSA, SDSA, KCDSA, +GOSTR34-10-94). Beware that for these signatures, you will have to expand the NN size to bigger values than the default (e.g. supporting RSA 4096 +will need a size of at least 4096 bits for NN, see how to expand the size in the documentation [here](include/libecc/nn/nn_config.h)). Although some +efforts have been made when developing these signature algorithms, using them in production code should be decided with care (e.g. regarding +side-channel attack and so on). + +* SSS (Shamir Secret Sharing) in [src/examples/sss](src/examples/sss). + + +### Building the NN and Fp arithmetic tests + +libecc is provided with arithmetic random tests for the low level NN and Fp routines (addition, subtraction, logical +operations, multiplication and Montgomery multiplication, ...). + +These tests are located inside the [src/arithmetic_tests/](src/arithmetic_tests/) folder. More specifically, the tests +are split in two files: + +* [src/arithmetic_tests/arithmetic_tests.c](src/arithmetic_tests/arithmetic_tests.c): a '.c' file to be compiled and linked with libecc +static library and performing a set of tests given on the standard input or in a file. The tests have a specific ASCII +format with expected input/output as big numbers, and crafted **opcodes** defining the operation type (addition over +NN, over Fp, ...). +* [src/arithmetic_tests/arithmetic_tests_generator.py](src/arithmetic_tests/arithmetic_tests_generator.py): a python +script that generates a set of arithmetic tests. + +### Building with the meson build system + +In parallel to the `Makefile` build system, a migration to the newer and more user friendly `meson` build is a +**work in progress**. Compiling with `meson` can be simply achieved with: + +
+	$ meson setup builddir && cd builddir && meson dist
+
+ +Please note that you will need `meson`, `ninja` and `dunamai` (that can be installed from the Python `pip` installer). + +Most of libecc compilation options have been migrated, please check the output of the `meson configure` command to get +a complete list of these (in the 'Project options' category). For instance, compiling libecc with a word size of 32 and +a debug mode can be triggered with: + +
+	$ meson setup -Dwith_wordsize=32 -Dwith_debug=true builddir && cd builddir && meson dist
+
+ +## Configuring the libecc library + +### Basic configuration + +libecc can be statically configured at compilation time: the user can tune what curves, hash functions and signature +algorithms are embedded in 'libsign.a' and all the binaries using it. + +The main entry point to configure/tune the library is [include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h). By default libecc +embeds everything. In order to remove something, one has to **comment** the element to remove (i.e. comment the +`WITH_XXX` macro). For instance, removing +FRP256V1 is simply done by commenting the line: +
+	/* Supported curves */
+	/* #define WITH_CURVE_FRP256V1 */ /* REMOVING FRP256V1 */
+	#define WITH_CURVE_SECP192R1
+	#define WITH_CURVE_SECP224R1
+	#define WITH_CURVE_SECP256R1
+	#define WITH_CURVE_SECP384R1
+	#define WITH_CURVE_SECP521R1
+	#define WITH_CURVE_BRAINPOOLP224R1
+	#define WITH_CURVE_BRAINPOOLP256R1
+	#define WITH_CURVE_BRAINPOOLP384R1
+	#define WITH_CURVE_BRAINPOOLP512R1
+	#define WITH_CURVE_GOST256
+	#define WITH_CURVE_GOST512
+	...
+
+ +As another example, if one wants to build a custom project supporting only +ECFSDA using SHA3-256 on BrainpoolP256R1, this can be done by keeping only the +following elements in +[include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h): + +
+	#define WITH_SIG_ECFSDSA
+	#define WITH_HASH_SHA3_256
+	#define WITH_CURVE_BRAINPOOLP256R1
+
+ +### Advanced configuration + +#### Modifying the word size + +libecc supports 16, 32 and 64 bits word sizes. Though this word size is usually inferred during compilation +and adapted depending on the detected platform (to fit the best performance), the user can force it in three ways: + +* Overloading the `WORDSIZE` macro in [include/libecc/words/words.h](include/libecc/words/words.h). +* Overloading the `WORDSIZE` macro in the Makefile `CFLAGS`. +* Use specific Makefile targets. + +Please refer to the [portability guide](#libecc-portability-guide) for details on this. + +#### Modifying the big numbers size + +libecc infers the Natural Numbers maximum length from the **curves** parameters that have been statically +defined in [include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h). Though this behaviour is perfectly fine and transparent +for the user when dealing with the elliptic curves and signature layers, this can become a limitation when building +code around the NN and Fp arithmetic layers. The user will be stuck with a hard coded maximum size of numbers depending +on the curve that is used by libecc, which can be a nonsense if he is only interested in the big number basic +algorithmic side (when the default curves are used, this maximum size is 521 bits, corresponding to SECP521 +parameters). + +libecc provides a way to **overload the NN maximum size**, with a strong limit depending on the word size (around +5300 bits for 64-bit words, around 2650 bits for 32-bit words, and around 1300 bits for 16-bit words). See +the comments in [include/libecc/nn/nn_config.h](include/libecc/nn/nn_config.h) for more details about this. In order to manually increase +the NN size, the user will have to define the macro `USER_NN_BIT_LEN`, either directly in +[include/libecc/nn/nn_config.h](include/libecc/nn/nn_config.h), or more appropriately through overloading the Makefile `CFLAGS` +with `-DUSER_NN_BIT_LEN=` (see [the dedicated section](#overloading-makefile-variables) for more on how to do this). + +**NOTE**: objects and binaries compiled with different word sizes and/or user defined NN maximum bit lengths **are not compatible**, +and could produce executables with dangerous runtime behaviour. In order to prevent possible honest mistakes, there is +a safety net function catching such situations **at compilation time** in [include/libecc/nn/nn_config.h](include/libecc/nn/nn_config.h): the +`nn_check_libconsistency` routine will throw an error. For instance, if 'libarith.a' has been compiled with +`WORDSIZE=64`, and one tries to compile the arithmetic tests with `WORDSIZE=32`, here is the error the compiler +should produce: + +
+...
+arithmetic_tests.c:(.text+0x3af21) : undefined reference to « nn_consistency_check_maxbitlen521wordsize32 »
+...
+
+ +#### Small RAM footprint devices (small stack usage) + +In order to squeeze the stack usage on very constrained devices, a `SMALLSTACK` toggle can be activated. Beware that this toggle +removes some countermeasures (Itoh et al. masking) in order to fit in 8KB of RAM stack usage. Also beware that this is incompatible +with EdDSA and X25519 as these specific functions need more than this amount of stack because of the isogenies usage (you should get +a compilation error when trying to activate them with `SMALLSTACK=1`). + +
+$ SMALLSTACK=1 make
+
+ + +## Expanding the libecc library + +Though libecc has been designed to be compiled with a static embedding of all its features (i.e. no dynamic modules +loading), its **static code extensibility** has been a matter of attention. The library can be: +* Easily expanded by **adding new curves**, with **zero coding effort**. Note that **only curves over prime fields are +supported**. +* Expanded with new hash functions and new signature algorithms with some coding effort, but clean and well defined +APIs should ease this task. + +### Adding user defined curves + +A companion python script [scripts/expand_libecc.py](scripts/expand_libecc.py) will transparently add (and remove) new +user defined curves in the source tree of the project. The '.h' headers defining the new curves +will be created in a dedicated folder: [include/libecc/curves/user_defined/](include/libecc/curves/user_defined/). + +The python script should have a self explanatory and complete help: +
+	$ python scripts/expand_libecc.py -h
+	This script is intented to *statically* expand the ECC library with user defined curves.
+	...
+
+ +In order to add a curve, one can give explicit parameters (prime, order, ...) on the command line or +provide a [RFC3279](https://www.ietf.org/rfc/rfc3279.txt) formatted ASN.1 file (DER or PEM) with the +parameters. Sanity checks are performed by the script. The script is also able to generate +**test vectors** for the new curve with the `--add-test-vectors` toggle. + +Let's show how we can add the BRAINPOOLP320R1 supported by OpenSSL. We use the `ecparam` option of +the `openssl` command line: + +
+	$ openssl ecparam -param_enc explicit -outform DER -name brainpoolP320r1 -out brainpoolP320r1.der
+
+ +This creates a DER file 'brainpoolP320r1.der' embedding the parameters (beware of the `-param_enc explicit` +option that is important here). Now, in order to add this new curve to libecc, we will execute: +
+	$ python scripts/expand_libecc.py --name="mynewcurve" --ECfile=brainpoolP320r1.der --add-test-vectors=1
+	Test vectors generation asked: this can take some time! Please wait ...
+	1/56
+
+ +This will create a new header file 'ec_params_user_defined_mynewcurve.h' in the [include/libecc/curves/user_defined/](include/libecc/curves/user_defined/) +folder, and it will modify some libecc core files to transparently add this curve for the next compilation (modified files +are [include/libecc/curves/curves_list.h](include/libecc/curves/curves_list.h), [src/tests/ec_self_tests_core.h](src/tests/ec_self_tests_core.h), +[include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h) and [include/libecc/lib_ecc_types.h](include/libecc/lib_ecc_types.h)). + +The test vectors generation can take some time since all the possible triplets (curve, hash function, signature algorithm) are +processed with the new curve. + +After compiling the library, the new curve should show up in the self tests: +
+	$ ./build/ec_self_tests
+	======= Known test vectors test =================
+	...
+	[+] ECDSA_SHA224_USER_DEFINED_MYNEWCURVE_0 selftests: known test vectors sig/verif ok
+	...
+	======= Random sig/verif test ===================
+	...
+	[+] ECDSA-SHA224/USER_DEFINED_MYNEWCURVE randtests: random import/export with sig/verif ok
+	...
+	======= Performance test ========================
+	...
+	[+] ECDSA-SHA224/USER_DEFINED_MYNEWCURVE perf: 269 sign/s and 141 verif/s
+	...
+
+ +It should also appear in the `ec_utils` help: +
+	$ ./build/ec_utils sign
+	Bad args number for ./build/ec_utils sign:
+	arg1 = curve name: FRP256V1 USER_DEFINED_MYNEWCURVE ...
+	arg2 = signature algorithm type: ECDSA ...
+	arg3 = hash algorithm type: SHA224 ...
+	arg4 = input file to sign
+	arg5 = input file containing the private key (in raw binary format)
+	arg6 = output file containing the signature
+        
+
+ +It is possible to remove a user defined curve by using the python script and its name: +
+	$ python scripts/expand_libecc.py --remove --name mynewcurve
+	You asked to remove everything related to user defined mynewcurve curve. Enter y to confirm, n to cancel [y/n]. y
+	Removing user defined curve mynewcurve ...
+
+ +It is also possible to remove **all** the user defined curves at once: +
+	$ python scripts/expand_libecc.py --remove-all
+
+ +Finally, two companion shell scripts are provided along with the expanding python script in order to show its basic usage: + +* [scripts/gen_curves_tests.sh](scripts/gen_curves_tests.sh): this script generates the default libecc curves +with explicit parameters given on the command line. Of course, since these curves are already embedded in +libecc, there is no real use of generating them - the script is only here to serve as a showcase for expanding +the library with explicit parameters. +* [scripts/gen_openssl_curves_tests.sh](scripts/gen_openssl_curves_tests.sh): this script enumerates all OpenSSL +named curves, generates a DER file with their parameters, and adds them to libecc. + +### Adding new hash and signature algorithms + +Obviously, adding new algorithms (hash or signature) will require adding new code. + +#### Adding new hash functions +We detail hereafter the necessary steps to add a new hash function. The main file listing all the hash functions is [include/libecc/hash/hash_algs.h](include/libecc/hash/hash_algs.h). The new hash +algorithm should be added here in compliance with the API described in the `hash_mapping struct`. This API includes: + + * The digest and block sizes and a pretty print name for the algorithm. + * `hfunc_init`: the hash function initialization routine. + * `hfunc_update`: the hash function update routine. + * `hfunc_finalize`: the hash function finalization routine. + * `hfunc_scattered`: this function applies the hash function (i.e. compute the digest) on multiple messages + (it takes as input an array of pointers to message chunks, and an array of sizes). + +These libecc API functions are in fact redirections to the core routines of the hash algorithm, and +the user is expected to add the specific implementation in '.c' and '.h' files inside the [src/hash/](src/hash/) +folder. See [src/hash/sha224.c](src/hash/sha224.c) and [include/libecc/hash/sha224.h](include/libecc/hash/sha224.h) for a practical +example of how to do this with SHA-224. + +Finally, the user is expected to update the libecc main configuration file [include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h) +with the `WITH_MY_NEW_HASH` toggle ('my_new_hash' being the new hash function). + +#### Adding new signature algorithms +In order to add a new elliptic curve based signature algorithm, here is the needed work: +* The main file listing all the signature algorithms is [include/libecc/sig/sig_algs_internal.h](include/libecc/sig/sig_algs_internal.h). +The signature algorithm should be added in compliance with the API described in the `ec_sig_mapping struct`. This +API includes: + * The signature type and a pretty print name. + * `siglen`: a function giving the length of the produced signature. + * `init_pub_key`: a routine producing a public key when given a corresponding private key. + * `sign_init`, `sign_update` and `sign_finalize`: the usual functions initializing a signature, updating it with + input buffers, and finalizing it to produce an output signature. + * `verify_init`, `verify_update` and `verify_finalize`: the usual functions initializing a signature verification, updating + it with input buffers, and finalizing it to produce a check status (i.e. signature OK or not OK). + +These libecc APIs have to be plugged to the core signature functions, and the user is expected to handle this implementation +with adding the specific '.c' files inside the [src/sig](src/sig) folder and the specific '.h' files inside the [include/libecc/sig](include/libecc/sig) folder. See [src/sig/ecdsa.c](src/sig/ecdsa.c) and [include/libecc/sig/ecdsa.h](include/libecc/sig/ecdsa.h) for a practical example of how to do this with ECDSA. + +Finally, the user is expected to update the libecc main configuration file [include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h) +with the `WITH_MY_NEW_SIGN_ALG` toggle ('my_new_sign_alg' being the new signature algorithm). + +## Performance + +As already stated, libecc has not been designed with performance in mind, but +with **simplicity** and **portability** as guiding principles; this implies +several things when it comes to performance: + +* libecc does not intend to compete with libraries developed with platform specific accelerations, such as the use of **assembly** +routines or the adaptation to CPUs quirks at execution time (e.g. a CPU with very slow shift instructions). [OpenSSL](https://www.openssl.org/) +is an example of such libraries with good and homogeneous performance in mind on most heterogeneous platforms (with the lack of +portability on very small embedded platforms though). +* Some algorithmic tricks on specific prime curves are not implemented: the same algorithms are used for all the curves. +This means for instance that curves using pseudo-Mersenne primes (such as NIST's SECP curves) won't be faster than +curves using generic random primes (such as Brainpool curves), though pseudo-Mersenne primes can benefit from a +dedicated reduction algorithm, yielding **orders of magnitude faster field arithmetic** (around five to ten times faster). See +[here](https://tls.mbed.org/kb/cryptography/elliptic-curve-performance-nist-vs-brainpool) for further discussions on this. +Consequently, we will only focus on performance comparison with other libraries using the Brainpool curves. +* We use a very straightforward elliptic curve arithmetic implementation, without using literature generic algorithmic optimizations +such as [windowing](https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Windowed_method) or +[fixed-base comb](https://link.springer.com/chapter/10.1007/3-540-45537-X_21) precomputations. + +Nonetheless and despite all these elements, **libecc is on par with some other general purpose and portable cryptographic +libraries** such as [mbedTLS](https://tls.mbed.org) (see the performance figures given below). + +We present hereafter the ECDSA performance comparison of libecc with mbedTLS and OpenSSL on various platforms representing +different CPU flavours. Here are some information about the tested version when not stated otherwise: + +* mbedTLS: stable version 2.4.2, the figures have been gathered with the builtin benchmark. +* OpenSSL: debian packaged version 1.1.0e. Since OpenSSL builtin ECDSA benchmark does not handle Brainpool curves, +a basic C code using "named curves" have been compiled against the installed dynamic library. + +### Performance oriented platforms + +* **Core i7-5500U** (Broadwell family) is a typical x86 mid-range current laptop CPU. +* **Xeon E3-1535M** (Skylake family) is a typical x86 high-end CPU. +* **Power-7** is a typical server CPU of the previous generation (2010) with +a PowerPC architecture. + +For all the platforms in this subsection, the CPUs have been tested in 64-bit mode. + + +| **libecc** | Core i7-5500U @ 2.40GHz | Xeon E3-1535M v5 @ 2.90GHz | Power-7 | +|-----------------|:----------------------------|:------------------------------|:--------------------------| +| BP256R1 | 583 sign/s - 300 verif/s | 700 sign/s - 355 verif/s | 213 sign/s - 110 verif/s | +| BP384R1 | 231 sign/s - 118 verif/s | 283 sign/s - 150 verif/s | 98 sign/s - 50 verif/s | +| BP512R1 | 111 sign/s - 56 verif/s | 133 sign/s - 68 verif/s | 51 sign/s - 26 verif/s | + +| **mbedTLS** | Core i7-5500U @ 2.40GHz | Xeon E3-1535M v5 @ 2.90GHz | Power-7 | +|-----------------|:----------------------------|:------------------------------|:--------------------------| +| BP256R1 | 426 sign/s - 106 verif/s | 552 sign/s - 141 verif/s | 178 sign/s - 45 verif/s | +| BP384R1 | 239 sign/s - 56 verif/s | 322 sign/s - 77 verif/s | 44 sign/s - 23 verif/s | +| BP512R1 | 101 sign/s - 26 verif/s | 155 sign/s - 34 verif/s | 38 sign/s - 12 verif/s | + +| **OpenSSL** | Core i7-5500U @ 2.40GHz | Xeon E3-1535M v5 @ 2.90GHz | Power-7 | +|-----------------|:----------------------------|:------------------------------|:--------------------------| +| BP256R1 | 2463 sign/s - 1757 verif/s | 2873 sign/s - 2551 verif/s | 1879 sign/s - 1655 verif/s| +| BP384R1 | 1091 sign/s - 966 verif/s | 1481 sign/s - 1265 verif/s | 792 sign/s - 704 verif/s| +| BP512R1 | 727 sign/s - 643 verif/s | 1029 sign/s - 892 verif/s | 574 sign/s - 520 verif/s| + +### Embedded platforms with moderate constraints +* **Marvel Armada A388** is a good representative of moderately constrained embedded devices, such as +IAD (Internet Access Devices), NAS (Network Attached Storage), STB (Set Top Boxes) and smartphones. +This SoC is built around a Cortex-A9 ARMv7-A 32-bit architecture. +* **BCM2837** is a Broadcom SoC built around the recent 64-bit ARMv8-A architecture, with a +Cortex-A53 core. This SoC can be found in the Raspberry Pi 3, and also represents what can +be found in recent Smartphones. +* **Atom D2700** is a small x86 CPU typically embedded in NAS devices. Though its "embedded" +coloration, it uses a 64-bit mode that we have tested here. + +| **libecc** | Marvell A388 @ 1.6GHz | BCM2837 (aarch64) @ 1.2GHz | Atom D2700 @ 2.13GHz | +|-----------------|:----------------------|----------------------------|:-----------------------| +| BP256R1 | 64 sign/s - 33 verif/s| 43 sign/s - 22 verif/s | 68 sign/s - 35 verif/s | +| BP384R1 | 24 sign/s - 12 verif/s| 17 sign/s - 9 verif/s | 25 sign/s - 13 verif/s | +| BP512R1 | 11 sign/s - 5 verif/s | 8 sign/s - 4 verif/s | 12 sign/s - 6 verif/s | + +| **mbedTLS** | Marvell A388 @ 1.6GHz | BCM2837 (aarch64) @ 1.2GHz | Atom D2700 @ 2.13GHz -| +|-----------------|:----------------------|----------------------------|:------------------------| +| BP256R1 | 33 sign/s - 8 verif/s | 14 sign/s - 4 verif/s | 87 sign/s - 22 verif/s| +| BP384R1 | 20 sign/s - 4 verif/s | 8 sign/s - 2 verif/s | 50 sign/s - 11 verif/s| +| BP512R1 | 10 sign/s - 2 verif/s | 4 sign/s - 1 verif/s | 23 sign/s - 5 verif/s | + +| **OpenSSL** | Marvell A388 @ 1.6GHz | BCM2837 (aarch64) @ 1.2GHz | Atom D2700 @ 2.13GHz | +|-----------------|:------------------------|----------------------------|:------------------------| +| BP256R1 | 369 sign/s - 332 verif/s| 124 sign/s - 112 verif/s | 372 sign/s - 334 verif/s| +| BP384R1 | 102 sign/s - 94 verif/s | 54 sign/s - 49 verif/s | 163 sign/s - 149 verif/s| +| BP512R1 | 87 sign/s - 81 verif/s | 31 sign/s - 29 verif/s | 92 sign/s - 83 verif/s | + + +### Very constrained embedded devices +The library, when configured for a 256-bit curve (SECP256R1, FRP256), SHA-256 and ECDSA signature fits in around +**30 Kilo Bytes of flash/EEPROM**, and uses around **8 Kilo Bytes of RAM** (stack) with variations depending on the +chosen WORDSIZE (16, 32, 64), the compilation options (optimization for space `-Os` or speed `-O3`) and the +target (depending on the instructions encoding, produced binary code can be more or less compact). +A 521-bit curve with SHA-256 hash function and ECDSA signature should fit in 38 Kilo Bytes of flash and around +16 Kilo Bytes of RAM (stack), with the same variations depending on the WORDSIZE and the compilation options. + +**Note**: libecc does not use any heap allocation, and the only global variables used are the **constant ones**. The +constant data should end up in the flash/EEPROM section with a read only access to them: no RAM memory should +be consumed by these. The libecc read/write data are only made of local variables on the stack. Hence, RAM +consumption (essentially made of arrays representing internal objects such as numbers, point on curves ...) +should be reasonably constant across platforms. **However**, some platforms using the +**[Harvard architecture](https://en.wikipedia.org/wiki/Harvard_architecture)** (as opposed to Von Neumann's one) +can have big limitations when accessing so called "program memory" as data. The 8-bit +[Atmel AVR](http://www.atmel.com/products/microcontrollers/avr/) MCU +is such an example. Compilers and toolchains for such architectures usually copy read only data in RAM at run time, +and/or provide [non-standard ways](http://www.atmel.com/webdoc/avrlibcreferencemanual/pgmspace_1pgmspace_strings.html) +to access read only data in flash/EEPROM program memory (through specific macros, pragmas, functions). The +first case means that the RAM consumption will increase for libecc compared to the stack only usage (because of +the runtime copy). The second case means that libecc code will have to be **adapted** to the platform if the user +want to keep RAM usage at its lowest. In any case, tracking where `const` qualified data reside will be important +when the amount of RAM is a critical matter. + +A full software stack containing a known test vector scenario has been compiled and tested on a **Cortex-M0** +([STM32F030R8T6](http://www.st.com/en/microcontrollers/stm32f030r8.html) @ 48MHz with 64KB of flash and 8KB of RAM). +It has also been compiled and tested on a **Cortex-M3** ([STM32F103C8T6](http://www.st.com/en/microcontrollers/stm32f103c8.html) +@ 72MHz with 64KB of flash and 20KB of RAM). The results of the flash/RAM occupancy are given in the table below, +as well as the timings of the ECDSA signature and verification operations. + +**Note**: The Cortex-M0 case is a bit special in the ARM family. Since this MCU lacks a 32-bit x 32-bit to 64-bit +multiplication instruction, the multiplication is implemented using a builtin software function. This yields +in poor performance with WORDSIZE=64 compared to WORDSIZE=32 (this might be explained by the calling cost to +the builtin function). + + +| **libecc** | STM32F103C8T6 (Cortex-M3 @ 72MHz) | STM32F030R8T6 (Cortex-M0 @ 48MHz) | +|-----------------|:----------------------------------|:----------------------------------| +| Flash size | 32KB | 30KB | +| RAM size | 8KB | 8KB | +| Sign time | 950ms | 2146ms | +| Verif time | 1850ms | 4182ms | + +In order to compare the libecc performance on these embedded platforms, we give figures for mbedTLS on +Cortex-M3 taken from a [recent study by ARM](http://csrc.nist.gov/groups/ST/lwc-workshop2015/presentations/session7-vincent.pdf). +As we have previously discussed, only the figures without NIST curves specific optimizations are of interest +for a fair comparison: + +| **mbedTLS** | LPC1768 (Cortex-M3 @ 92MHz)1 | +|-----------------|:------------------------------| +| Flash size | ?? | +| RAM size | 3KB2| +| Sign time | 1893ms | +| Verif time | 3788ms | + +1 Beware of the MCU frequency difference when comparing with libecc test case. + +2 This figure only includes heap usage (stack usage is unknown so this is only a +rough lower limit for RAM usage). + + +## Compatibility and Portability + +### libecc compatibility + +When dealing with the **portability** of a program across various platforms, many issues are +in fact hidden behind this property. This is due to the very complex nature of what a +**platform** is, namely: + +* A **core CPU** architecture (x86, ARM, MIPS, PowerPC, ...). +* A target **OS** (Linux, Windows, Mac OS, ...) or more low level firmware (including a **bare-metal** +programming model or exotic real-time OS for microcontrollers for instance). +* A proper compilation **(cross-)toolchain** producing binaries for the platform. This toolchain will usually +include a compiler and a linker, both with possibly specific flags and limitations. + +Regarding libecc, here are the main elements to be aware of when dealing with a "new" platform: + +* libecc is in pure C-99 (no assembly), so it should compile on **any platform** with a decent C-99 +compatible compiler. The code is **endian neutral**, meaning that libecc should work on little endian +and big endian platforms. +* The Makefile has been tested with clang and gcc under Linux, as well as gcc cross-compilation variants +such as **mingw** for Windows or gcc **Mac OS** version. In order to adapt the makefile behaviour when the +compiler is not gcc/clang compatible, the user can modify the CFLAGS as well as the LDFLAGS by exporting them. +* The library supports 16-bit/32-bit/64-bit word sizes, which should ensure compatibility with most of the platforms +for 8-bit MCUs to 64-bit CPUs. If the toolchain does not have a [`stdint.h`](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdint.h.html) +header, it is still possible to compile libecc by exporting LIBECC_NOSTDLIB=1: in this case, the code will try to +guess and fit to native C types or throw an error so that the user can adapt [src/words/types.h](src/words/types.h) to its specific case. +* The library core is platform independent. However, when the platform is not recognized (i.e. everything aside UNIX/Windows/Mac OS), +an error is thrown at compilation time asking the user to provide implementations for **external dependencies** +in [src/external_deps/](src/external_deps), namely: + * The printing helper in [src/external_deps/print.c](src/external_deps/print.c). This helper serves output debugging purposes. + * The timing helper in [src/external_deps/time.c](src/external_deps/time.c). This helper is used to measure performances of the + library in the performance self tests. + * The random helper in [src/external_deps/rand.c](src/external_deps/rand.c). This helper is used in the core library for the signature + schemes. One should notice that a **good random source** is **crucial** for the security of Elliptic Curve based signature schemes, + so great care must be taken when implementing this. + +Some other external dependencies could arise depending on the compilation chain and/or the platform. Such an example is the +implementation of the gcc and clang stack protection option, usually expecting the user to provide stack canaries generation +(with random values) and failover behavior. + + +### Compiling libecc for ARM Cortex-M with GNU gcc-arm + +Compiling for Cortex-M targets should be straightforward using the arm-gcc none-eabi (for bare metal) cross-compiler as +well as the specific Cortex-M target platform SDK. In order to compile the core libsign.a static library, the only thing to do is to execute +the makefile command by overloading `CROSS_COMPILE`, `CC` and the `CFLAGS`: +
+	$ CROSS_COMPILE=arm-none-eabi- CC=gcc CFLAGS="$(TARGET_OPTS) -W -Wextra -Wall -Wunreachable-code \
+	-pedantic -fno-builtin -std=c99 -Os \
+	-ffreestanding -fno-builtin -nostdlib -DWORDSIZE=64" \
+	make build/libsign.a
+
+ +where `$(TARGET_OPTS)` are the flags specific to the considered target: `-mcpu=cortex-m3 -mthumb` for Cortex-M3 for example. The word size +flag should be adapted to `-DWORDSIZE=32` for the specific case of Cortex-M0/M0+ as discussed in the [performance section](#performance) +(because of the lacking of 32-bit to 64-bit native multiplication instruction). The library can then be used to be linked against a file +containing the `main` calling function, and the linking part will depend on the +target platform (in addition to the target CPU): one will use the **linker scripts** provided by the platform/board manufacturer to produce +a firmware suitable for the target (ST for STM32, NXP for LPC, Atmel for SAM, ...). + +If the external dependencies have been implemented by the user, it is also possible to build a self-tests binary by adding the +GNU ld linker script specific to the target platform (`linker_script.ld` in the example below): +
+	$ CROSS_COMPILE=arm-none-eabi- CFLAGS="$(TARGET_OPTS) -W -Wextra -Wall -Wunreachable-code \
+	-pedantic -fno-builtin -std=c99 -Os \
+	-ffreestanding -fno-builtin -nostdlib -DWORDSIZE=64" \
+	LDFLAGS="-T linker_script.ld" \
+	make build/libsign.a
+
+ +**NOTE1**: By default, the linker scripts share the RAM between heap and stack. Since libecc only uses stack, it is convenient +(sometimes necessary, specifically on devices with very constrained RAM, such as Cortex-M0 with 8KB) to adapt the **stack base address** +so that no stack overflow errors occur. These errors can be tricky to detect since they generally produce hard faults silently at +run time. Also, a `SMALLSTACK=1` compilation toggle allows to limit stack consumption further: you can use it carefully if your device +does not have enough stack for the regular compilation options (use with care as some side channels countermeasures are deactivated, and this +mode is not compatible with the EdDSA signature and X25519 ECDH algorithm). + +**NOTE2**: It is up to the user to link against the libc (if standard functions are necessary) or not, but this will obviously influence the +program size in flash. As already stated, the libc footprint is not included in the figured that have been given in +the [performance section](#performance). + +**NOTE3**: libecc has also been successfully tested with other non-GNU compilation SDK and toolchains such as [Keil MDK](http://www.keil.com/) +configured to use the [ARM compiler](http://www2.keil.com/mdk5/compiler/5/). + +### libecc portability guide + +This section is dedicated to giving some more details on how to compile libecc when non-GNU compilers +are used (i.e. C compilers that do not support gcc syntax), and/or when compiling with environments that +do not provide a **GNU make** compilation style (this is generally the case for all-in-one IDEs such as +Visual Studio or other BSP and SDK provided by proprietary integrated circuits founders and board manufacturers). + +#### 1 - Compilers and C99 standard compliance + +As we have already stated, libecc requires a C99 compiler. More specifically, libecc makes use of +only four feature of the C99 standard (over the older C89/C90 standard), namely: +* The `long long int` type. +* Designated initializers for structures. +* The usage of the `inline` keyword. +* The usage of variadic macros. + +Hence, when compiling with a given compiler, one will have to check that the compiler is +**either fully C99 compliant**, or that these four features are at least **implemented as extensions**. +Such details are generally provided by the compiler documentation. + +**NOTE**: if one wants to adapt libecc for compilers where some of the necessary C99 features are missing, here is a +big picture of the necessary work: +* The `long long int` and structures initializers are used all over libecc code, so they are +**strong requirements**, and would imply deep code modifications. +* The `inline` keyword can be removed in most cases, except in the context of header files where it is used +to define `static inline` functions. These functions will have to be moved to '.c' files, and one will have to +deal with minor adaptations. +* The usage of variadic macros is marginal and can be removed with minimal efforts: these are only used +to deal with debug helpers in [src/utils](src/utils). + +#### 2 - Compiling with environments without GNU make + +libecc uses a GNU style [Makefile](Makefile) to automate the compilation process. One can however use other +compilation environments that are not GNU make compatible by implementing the following guidelines: +* Make the compilation toolchain compile into **'.o' objects** all the necessary '.c' files in [src/nn](src/nn), +[src/fp](src/fp), [src/curve](src/curve), [src/sig](src/sig), [src/utils](src/utils) and [src/hash](src/hash). +* Make the compilation toolchain **link** the necessary object files to generate the static libraries: +
+  libarith.a:
+  °°°°°°°°°°°
+  src/fp/fp_rand.o src/fp/fp_mul.o src/fp/fp_montgomery.o src/fp/fp_mul_redc1.o src/fp/fp_add.o src/fp/fp.o
+  src/fp/fp_pow.o src/nn/nn_mul.o src/nn/nn_mul_redc1.o src/nn/nn_logical.o src/nn/nn.o src/nn/nn_modinv.o
+  src/nn/nn_add.o src/nn/nn_rand.o src/nn/nn_div.o src/utils/print_nn.o src/utils/print_fp.o src/utils/print_keys.o
+  src/utils/print_curves.o src/utils/utils.o
+
+
+  libec.a:
+  °°°°°°°°
+  src/fp/fp_rand.o src/fp/fp_mul.o src/fp/fp_montgomery.o src/fp/fp_mul_redc1.o src/fp/fp_add.o src/fp/fp.o src/fp/fp_pow.o
+  src/nn/nn_mul.o src/nn/nn_mul_redc1.o src/nn/nn_logical.o src/nn/nn.o src/nn/nn_modinv.o src/nn/nn_add.o src/nn/nn_rand.o
+  src/nn/nn_div.o src/utils/print_nn.o src/utils/print_fp.o src/utils/print_keys.o src/utils/print_curves.o src/utils/utils.o
+  src/curves/prj_pt.o src/curves/curves.o src/curves/aff_pt.o src/curves/prj_pt_monty.o src/curves/ec_shortw.o src/curves/ec_params.o
+
+
+  libsign.a:
+  °°°°°°°°°°
+  src/fp/fp_rand.o src/fp/fp_mul.o src/fp/fp_montgomery.o src/fp/fp_mul_redc1.o src/fp/fp_add.o src/fp/fp.o src/fp/fp_pow.o
+  src/nn/nn_mul.o src/nn/nn_mul_redc1.o src/nn/nn_logical.o src/nn/nn.o src/nn/nn_modinv.o src/nn/nn_add.o src/nn/nn_rand.o
+  src/nn/nn_div.o src/utils/print_nn.o src/utils/print_fp.o src/utils/print_keys.o src/utils/print_curves.o src/utils/utils.o
+  src/curves/prj_pt.o src/curves/curves.o src/curves/aff_pt.o src/curves/prj_pt_monty.o src/curves/ec_shortw.o src/curves/ec_params.o
+  src/hash/sha384.o src/hash/sha3-512.o src/hash/sha512.o src/hash/sha3-256.o src/hash/sha3-224.o src/hash/sha3.o src/hash/sha256.o
+  src/hash/sha3-384.o src/hash/sha224.o src/hash/hash_algs.o src/sig/ecsdsa.o src/sig/ecdsa.o src/sig/ecrdsa.o src/sig/ecosdsa.o
+  src/sig/ecfsdsa.o src/sig/eckcdsa.o src/sig/ecgdsa.o src/sig/ecsdsa_common.o src/sig/sig_algs.o src/sig/ec_key.o
+
+ +Compiling binaries (such as `ec_self_tests` and `ec_utils`) is nothing more than compiling concerned '.c' files under [src/tests](src/tests) +and linking them with `libsign.a`. + +#### 3 - Dealing with the standard library and stdint + +Some important **preprocessor flags** are expected to be defined when compiling libecc: +* `WORDSIZE=`: this is a preprocessor flag defining libecc internal words size (16, 32, or 64). By default libecc will +detect the best size depending on the platform, but if the platform is not recognized the user is expected to +provide this flag. +* `WITH_STDLIB`: this flag is used for standard library usage inside libecc. Exporting the environment variable +`LIBECC_NOSTDLIB=1` will trigger the **non usage** of standard includes and libraries. Standard C library headers and files +are used for two things in the project: + * Defining standard types through the `stdint.h` header. +Though using this header helps libecc to properly define basic types in [include/libecc/words/types.h](include/libecc/words/types.h), it is not +required to use it and some heuristics can be used to define these types without standard headers (see explanations on that +in [include/libecc/words/types.h](include/libecc/words/types.h)) comments. + * Defining standard library functions used by external dependencies as well as `ec_utils`. Compiling without `WITH_STDLIB` +flag means that one has to provide these. + +In any case, if the user forgot to provide important preprocessing flags whenever they are necessary, **errors will be thrown** during +the compilation process. As explained in [include/libecc/words/types.h](include/libecc/words/types.h), when `stdint.h` is not used (i.e. `WITH_STDLIB` +not defined), heuristics are used to guess primitive types sizes. These heuristics can fail and the user will have to adapt the types +definitions accordingly depending on the platform. + +#### 4 - Overloading Makefile variables + +When compiling using compilers that are not compatible with the gcc syntax, but still using a GNU make +compilation environment, it is possible to **adpat the Makefile behavior**. In addition to the `LIBECC_NOSTDLIB=1` +environment variable previously described, here is the list of the variables that tune the compilation process: + +* `CC`: as usual, this overloads the compiler to be used. +* `CFLAGS` and `LDFLAGS`: these flags can be overloaded by user defined ones. The user defined flags will completely +shadow the default flags for both the static libraries (libarith.a, libec.a, libsign.a) and the produced binaries. +* `LIB_CFLAGS`, `BIN_CFLAGS`, `BIN_LDFLAGS`: when one wants to specifically tune compilation and linking flags for +the static libraries and the binaries, these flags can be used and they will shadow the `CFLAGS` and `LDFLAGS`. +* `AR` and `RANLIB`: these flags override the ar and ranlib tools used to generate the static library archives. + +As a simple example of when and how to use this environment variables overloading system, let's take the following case: +one wants to compile libecc with an old version of gcc that does not support the `-fstack-protector-strong` option +(this is the case for [gcc < 4.9](https://lwn.net/Articles/584225/)). Since this is the flag used by default in +libecc Makefile, an error will be triggered. It is possible to overcome this issue by overloading the `CFLAGS` with +the following: +
+	$ CFLAGS="-W -Werror -Wextra -Wall -Wunreachable-code -pedantic -fno-builtin -std=c99 -D_FORTIFY_SOURCE=2 \
+	-fstack-protector-all -O3 -DWITH_STDLIB -fPIC" make
+
+ +As we can see, we keep the other `CFLAGS` from default compilation while replacing `-fstack-protector-strong` with +the **less efficient but more compatible** `-fstack-protector-all`. + +In addition to compilation flags, it is also possible to overload the library **word sizes** as well as **debug** +modes through Makefile targets: +* `make debug` will compile a debug version of the library and binaries, with debugging symbols. +Setting the environment variable `VERBOSE_INNER_VALUES=1` will print out more values. +* `make 16`, `make 32` and `make 64` will respectively compile the library with 16, 32 and 64 bits word sizes. `make debug16`, +`make debug32` and `make debug64` will compile the debug versions of these. +* `make force_arch32` and `make force_arch64` will force 32-bit and 64-bit architectures compilation (`-m32` and `-m64` +flags under gcc). These targets allow cross-compilation for a 32-bit (respectively 64-bit) target under a 64-bit (respectively +32-bit) host: a typical example is compiling for i386 under x86\_64. + +**NOTE**: the targets that we have described here can be used in conjunction with overloading the `CFLAGS` and `LDFLAGS`. Hence, +a: `CFLAGS="-fstack-protector-all" make debug16` +will indeed compile all the binaries for debug, with a word size of 16 bits and a `-fstack-protector-all` stack protection option. + + +#### 5 - A concrete example with SDCC + +As an example to show how to adapt the compilation process to compilers that are not compatible with the +GNU compilers syntax, we will detail how to proceed by exploring the [SDCC](http://sdcc.sourceforge.net/) +(Small Device C Compiler) toolchain. Porting libecc to this compiler is interesting for many reasons: + +* The SDCC compiler uses some specific syntax, though it shares some similarities with +other compilers (`-c` flag to generate object files, `-o` flag to define output file). +* This compiler is "almost" C99 compliant: depending on the target, it has some C99 features +[partially implemented](http://sdcc.sourceforge.net/mediawiki/index.php/Standard_compliance). +* The compiler has "exotic" targets such as the Zilog Z80 MCU. + +We suppose that the user has also provided the **external dependencies** for print, random and time +functions (otherwise explicit errors will be thrown by #error directives). + +We will show how overloading the Makefile flags can be of use in this case. Say that we want +to compile libecc in order to embed it in a Game Boy ROM. The Game Boy console uses a proprietary +version of the Z80 MCU supported by SDCC under the target name `gbz80`. + +Hence, a first attempt at compilation would be to: +* Overload `CC=sdcc` to change the default compiler. +* Overload `AR=sdar` and `RANLIB=sdranlib` to overload the archives handling binaries (they are specific +to SDCC). +* Overload `CFLAGS="-mbgz80 --std-sdcc99"` to specify the target, and ask for the C99 compatibility mode. +* Overload `LDFLAGS=" "` with nothing since we do not want default gcc linking flags to break compilation. + +This first attempt will trigger an error: +
+	$ CC=sdcc AR=sdar RANLIB=sdranlib CFLAGS="-mgbz80 --std-sdcc99" LDFLAGS=" " make
+	...
+	src/external_deps/../words/words.h:62:2: error: #error "Unrecognized platform. \
+	Please specify the word size of your target (with make 16, make 32, make 64)"
+
+ +As we have explained, when the platform is not recognized one has to specify the word size. We will +do it by overloading `WORDSIZE=16`: the Z80 is an 8-bit CPU, so it seems reasonable to fit the word +size to 16-bit (8-bit half words). The second attempt will go further but will fail at some point when +trying to compile the final binaries: +
+	$ CC=sdcc AR=sdar RANLIB=sdranlib CFLAGS="-mgbz80 --std-sdcc99 -DWORDSIZE=16" LDFLAGS=" " make
+	...
+	at 1: error 119: don't know what to do with file 'src/tests/ec_self_tests_core.o'. file extension unsupported
+
+ +However, one can notice that the static libraries and some object files have been compiled, which is a +first step! Compiling a full binary is a bit technical due to the fact that SDCC does not know how +to deal with '.o' object files and '.a' archives. However, we can find our way out of this by renaming +the 'libsign.a' to 'libsign.lib', and adding missing objects in the library. Compiling the `ec_self_tests` +binary needs external dependencies ([src/external_deps/print.c](src/external_deps/print.c), +[src/external_deps/rand.c](src/external_deps/rand.c) and [src/external_deps/time.c](src/external_deps/time.c)) +as well as the two '.c' files [src/tests/ec_self_tests_core.c](src/tests/ec_self_tests_core.c) and +[src/tests/ec_self_tests.c](src/tests/ec_self_tests.c), the latter being the one containing the `main` +function. So we will first add the necessary objects files in the existing library with `sdar`: +
+	$ cp build/libsign.a build/libsign.lib
+	$ sdar q build/libsign.lib src/external_deps/print.o src/external_deps/rand.o src/external_deps/time.o src/tests/ec_self_tests_core.o
+
+ +Then, we compile and link [src/tests/ec_self_tests.c](src/tests/ec_self_tests.c) with the library: +
+	$ sdcc -mgbz80 -DWORDSIZE=16 --std-sdcc99 src/tests/ec_self_tests.c build/libsign.lib
+
+ +This should create a `ec_self_tests.ihx`, which has an [Intel HEX](https://fr.wikipedia.org/wiki/HEX_(Intel)) +file format for firmware programming. From this file, it is usually straightforward to create a Game Boy ROM file +that can be interpreted by an [emulator](http://m.peponas.free.fr/gngb/) (there are however some quirks related +to the Game Boy platform hardware architecture, see the note below). + +**NOTE**: the purpose of the section was to show how to adapt the compilation process to compilers non +compatible with the GNU C one. Consequently, fully porting libecc to the Game Boy platform is left as +a complementary work, and this is not a "so easy" task. Among other things, one will have to deal with +the ROM size limitation of 32KB that can be solved using [bank switching](http://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers), +which will involve some code and compilation tuning. Another issue would be the RAM size of 8KB and +properly handling the stack pointer base as described in the [previous sections](#compiling-libecc-for-arm-cortex-m-with-GNU-gcc-arm). + +## libecc, side channel attacks and constant time + +### Constant time + +Though **some efforts** have been made to have (most of) the core algorithms +constant time, turning libecc into a library shielded against side channel attacks +is still a **work in progress**. + +Beyond pure algorithmic considerations, many aspects of a program can turn +secret leakage resistance into a very complex problem, especially when writing +portable C code. Among other things, we can list the following: + +* Low level issues can arise when dealing with heterogeneous platforms (some +instructions might not be constant time) and compilers optimizations +(a C code that seems constant time is in fact compiled to a non constant time assembly). +* Any shared hardware resource can become a leakage source (the caches, the +branch prediction unit, ...). When dealing with a portable source code +meant to run on most platforms, it is not an easy task to think of all these +leakage sources. + +For a thorough discussion about cryptography and constant time challenges, +one can check [this page](https://bearssl.org/constanttime.html). + +### Signature algorithm blinding + +In order to avoid a range of attacks on the signature algorithm exploiting various +side channel attacks and leading to the recovery of the secret key +(see [here](https://www.nccgroup.trust/globalassets/our-research/us/whitepapers/2018/rohnp-return-of-the-hidden-number-problem.pdf) +for more details), **blinding** operations can be used. + +Since such security countermeasures have a **significant performance hit** on the signature algorithm, we have +decided to leave the activation of such countermeasures as a **voluntary decision** to the end user. +The performance impact might be acceptable or not depending on the context where the signature is performed, and whether attackers exploiting side channels +are indeed considered in the threat model of the specific use case. +Of course, for **security critical use cases we recommend the blinding usage +despite its performance cost**. + +Compiling the library with blinding is as simple as using the ``BLINDIG=1`` environment variable (or the ``-DUSE_SIG_BLINDING`` C flag): + +
+	$ BLINDING=1 make
+
+ +**NOTE**: if you are **unsure** about your current security context, use the ``BLINDING=1`` by default! + + +### Overview of SCA (Side Channel Attacks) countermeasures + +All in all, libecc has now the following approaches to limit SCA: + +* SPA (Simple Power Analysis) is thwarted using Montgomery Ladder (or Double and Add Always optionally using the ``ADALWAYS=1`` switch), plus complete formulas +(see [here](https://joostrenes.nl/publications/complete.pdf)) to avoid leaking point at infinity (by avoiding exceptions). Constant time +operations are (tentatively) used to limit leakage of different operations, +even though this task is very complex to achieve (especially in pure C). See +the discussion above. +* DDPA (Data DPA) is thwarted using blinding of the point (projective +coordinates) and of the scalar (with adding a random multiple of the +curve order with maximum entropy). Because of its major impact on +performance, blinding must be specifically turned on by the used using the +``BLINDING=1`` switch, see the discussion above. +* ADPA (Address-bit DPA) is limited using Itoh et al. Double and Add Always +masked variant. See the article "A Practical Countermeasure against +Address-Bit Differential Power Analysis" by Itoh, Izu and Takenaka for more information. + +All these countermeasures must, of course, be validated on the specific target +where the library runs with leakage assessments. Because of the very nature of +C code and CPU microarchitectural details, it is very complex without such a leakage +assessment (that again depends on the target) to be sure that SCA protection +is indeed efficient. + +### libecc against FIA (Fault Injection Attacks) + +Efforts made to render libecc robust against FIA are a **work in progress**, and +will require **substantial additions**. As for SCA robustness, many elements +might depend on the low-level compilation process and are difficult to handle +at high-level in pure C. + +For now, we check if points are on the curve when entering and leaving the +scalar multiplication algorithm, as well as when importing external public points. +Efforts are also made to sanity check the signature and verification contexts whenever possible, +as well as all the intermediate contexts (natural numbers, fields, hash functions, etc.). + +Currently, no specific effort has been made to render conditional operations robust +(e.g. using double if and limiting compilation optimization). + + +## Software architecture + +The public header of the libecc API are in the [include/libecc/](include/libecc/) +folder. Then, the source code is composed of eight main parts that consist of the +**core source code**: + + * [1] Machine code: in [src/words](src/words/) + + >Abstraction layer to handle word size depending + >on the target machine (the word size can also be forced during + >compilation). Some useful low level macros and functions are + >handled there. + + * [2] Natural Numbers layer: in [src/nn](src/nn/) + + >This part implements all the functions + >related to positive integers arithmetic (including modular + >arithmetic). + + * [3] Fp layer: in [src/fp](src/fp/) + + >Finite field of prime order (binary fields are + >intentionally not supported). + + * [4] Elliptic curves core: in [src/curves](src/curves/) + + >This layer implements all the primitives + >handling elliptic curves over prime fields, including point + >addition and doubling, affine and projective coordinates, ... + + * [5] Curves definitions: in [include/libecc/curves/known](include/libecc/curves/known) and + [include/libecc/curves/user_defined](include/libecc/curves/user_defined) + + >These are the definitions of some standard curves (SECP, Brainpool, + >FRP, ...). + + * [6] EC\*DSA signature algorithms: in [src/sig](src/sig/) + + >This layer implements the main + >elliptic curves based signature algorithms (ECSDSA, ECKCDSA, + >ECFSDSA, ECGDSA, ECRDSA, ECOSDSA). It exposes a sign and + >verify API with the standard Init/Update/Final logic. + + * [7] Hash functions: in [src/hash](src/hash/) + + >Hash functions (SHA-2 and SHA-3 based algorithms + >for now). + + * [8] Utils: in [src/utils](src/utils/) + + >Various useful libc functions (memcpy, memset, ...) as well as + >well as pretty printing functions for our NN, Fp and curves layers. + +In addition to the core source code of the library, various resources +are also present in the source tree. We describe them hereafter. + +Some self tests are provided for the signature algorithms over all the curves +and using all the hash functions [9], as well as tests targeting arithmetic +operations over NN and Fp more specifically [10]: + + * [9] Sig self tests: in [src/tests](src/tests/) + + >Functions to test that the compiled library is + >properly working with regard to the signature algorithms over + >the curves statically defined in the library. + >These tests consiste in known test vectors, random test + >vectors (i.e. random data sign/verify) as well as performance measurements. + + * [10] Arithmetic self tests: in [src/arithmetic](src/arithmetic_tests/) + + >Functions to test that the compiled arithmetic library is + >properly working in its basic operations (addition, subtraction, + >multiplication, ...). + +Some examples to help the user interact with the NN, Fp and cruves layers +are also provided: + + * [11] User examples: in [src/examples](src/examples/) + + >User examples for each of the NN, Fp and curves layers. These + >examples show what are headers to use, and how to interact with + >the abstract mathematical objects of each layer. Other examples beyond + >the basic ones (such as RSA signatures, SSS, etc.) are also present there. + +The configuration of the library [13] as well as an external dependencies +abstraction layer are also provided: + + * [12] External dependencies: in [src/external_deps](src/external_deps/) + + >These files contain the functions that + >are considered as external dependencies, meaning that their + >implementation is platform dependent (this concerns debug + >output on a console or file, random generation, time measurement). + >If no C standard library is provided, the user must implement + >those functions. + + * [13] Configuration files: in [include/libecc/lib_ecc_config.h](include/libecc/lib_ecc_config.h) + + >These are top C headers that are used for + >libecc configuration, i.e. activate given hash/curve/signature + >algorithms at compilation time through ifdefs. + +Finally, various useful scripts are provided: + + * [14] Scripts: in [scripts](scripts/) + + >Tools to expand the libecc with new user defined curves. + +Here is a big picture of the library architecture summarizing the links +between the modules previously described: + +
+    +-------------------------+
+    |EC*DSA signature         |
+    |algorithms               | <------------------+
+    |(ISO 14888-3)      [6]   |                    |
+    +-----------+-------------+                    |
+                ^                                  |
+                |                                  |
+    +-----------+-------------+         +----------+------------+
+    |Curves (SECP, Brainpool, |         |         Hash          |
+    |FRP, ...)                |         |       functions       |
+    |                   [5]   |         |                   [7] |
+    +-----------+-------------+         +-----------------------+
+                ^                    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+                |                    @ {Useful auxiliary modules}@
+    +-----------+-------------+      @ +------------------------+@
+    |  Elliptic curves  [4]   |      @ |         Utils      [8] |@
+    |  core (scalar mul, ...) |      @ +------------------------+@
+    +-----------+-------------+      @ |     Sig Self tests [9] |@
+                ^                    @ |  Arith Self tests [10] |@
+                |                    @ |     User Examples [11] |@
+                |                    @ +------------------------+@
+                |                    @ |    External deps  [12] |@
+    +-----------+-------------+      @ +------------------------+@
+    | Fp finite fields  [3]   |      @ | LibECC conf files [13] |@
+    | arithmetic              |      @ +------------------------+@
+    +-----------+-------------+      @ |        Scripts    [14] |@
+                ^                    @ +------------------------+@
+                |                    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    +-----------+-------------+        +------------------------+
+    | NN natural        [2]   | <------+   Machine related      |
+    | numbers arithmetic      |        |   (words, ...)     [1] |
+    +-------------------------+        +------------------------+
+
+
+ +## Integration with hardware acceleration: IPECC + +On the IPECC branch of the libecc repository, there is an integration +with the [IPECC](https://github.com/ANSSI-FR/IPECC) hardware accelerator +project. This project provides hardware acceleration for ECC points operations +(addition, doubling, scalar multiplication, etc.) with advanced SCA countermeasures. + +In order to use this accelerator, please follow these steps. First checkout the +IPECC branch: + +
+	$ git clone https://github.com/libecc/libecc
+	$ git checkout -b IPECC
+
+ +Then fetch the dedicated driver on the [IPECC repository](https://github.com/ANSSI-FR/IPECC) +(this will clone the current repository and place the IPECC drivers in the `src/curve` folder): + +
+	$ make install_hw_driver
+
+ +Then, you can compile the library with hardware acceleration by selecting the underlying platform: + +
+	$ make clean && CC=arm-linux-gnueabihf-gcc EXTRA_CFLAGS="-Wall -Wextra -O3 -g3 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -static" VERBOSE=1 USE_EC_HW=1 USE_EC_HW_DEVMEM=1 USE_EC_HW_LOCKING=1 BLINDING=1 make
+
+ +Please note that `USE_EC_HW=1` selects the hardware accelerator (this is mandatory to activate the hardware acceleration backend in libecc), +and `USE_EC_HW_DEVMEM=1` selects the DEVMEM backend (you can use `USE_EC_HW_STANDALONE=1` for the standalone mode, `USE_EC_HW_UIO=1` for UIO, +and `USE_EC_HW_SOCKET_EMUL=1` for the socket emulation using the Python server). +We also override the `CC` compiler to `arm-linux-gnueabihf-gcc` for the Zynq platform (adapt at your will depending on your +target), and add some necessary extra CFLAGS for the platform (as well as a `-static` binary compilation to avoid library dependency issues). +Finally, `USE_EC_HW_LOCKING=1` is used here for thread safety during hardware access: this flag is necessary for multi-threading. + +libecc has been successfully tested on a [Zynq Arty Z7](https://digilent.com/reference/programmable-logic/arty-z7/start) board with +a **factor 6** performance improvement compared to pure software on the same platform (with SCA countermeasures): + +
+az7-ecc-axi:/home/petalinux# ./ec_self_tests_sw perf
+======= Performance test ========================
+[+]          ECDSA-SHA224/FRP256V1 perf: 6 sign/s and 6 verif/s
+[+]         ECDSA-SHA224/SECP192R1 perf: 9 sign/s and 9 verif/s
+[+]         ECDSA-SHA224/SECP224R1 perf: 7 sign/s and 7 verif/s
+[+]         ECDSA-SHA224/SECP256R1 perf: 6 sign/s and 6 verif/s
+...
+
+az7-ecc-axi:/home/petalinux# ./ec_self_tests_hw perf
+======= Performance test ========================
+[+]          ECDSA-SHA224/FRP256V1 perf: 34 sign/s and 32 verif/s
+[+]         ECDSA-SHA224/SECP192R1 perf: 57 sign/s and 52 verif/s
+[+]         ECDSA-SHA224/SECP224R1 perf: 44 sign/s and 39 verif/s
+[+]         ECDSA-SHA224/SECP256R1 perf: 34 sign/s and 32 verif/s
+[+]         ECDSA-SHA224/SECP384R1 perf: 16 sign/s and 15 verif/s
+[+]         ECDSA-SHA224/SECP521R1 perf: 8 sign/s and 8 verif/s
+[+]   ECDSA-SHA224/BRAINPOOLP192R1 perf: 57 sign/s and 52 verif/s
+[+]   ECDSA-SHA224/BRAINPOOLP224R1 perf: 44 sign/s and 40 verif/s
+
+ diff --git a/crypto/libecc/build/.gitignore b/crypto/libecc/build/.gitignore new file mode 100644 --- /dev/null +++ b/crypto/libecc/build/.gitignore @@ -0,0 +1,3 @@ +# Ignore all files generated in this folder except this file +* +!.gitignore diff --git a/crypto/libecc/common.mk b/crypto/libecc/common.mk new file mode 100644 --- /dev/null +++ b/crypto/libecc/common.mk @@ -0,0 +1,349 @@ +# Detect mingw, since some versions throw a warning with the -fPIC option +# (which would be caught as an error in our case with -Werror) +# The ELF PIE related hardening flags are also non sense for Windows +MINGW := $(shell $(CROSS_COMPILE)$(CC) -dumpmachine 2>&1 | grep -v mingw) +# Detect Mac OS compilers: these usually don't like ELF pie related flags ... +APPLE := $(shell $(CROSS_COMPILE)$(CC) -dumpmachine 2>&1 | grep -v apple) +SYS_ROOT := +ifneq ($(MINGW),) + FPIC_CFLAG=-fPIC + ifneq ($(APPLE),) + FPIE_CFLAG=-fPIE + FPIE_LDFLAGS=-pie -Wl,-z,relro,-z,now + endif +endif + +ifeq ($(APPLE),) + SYS_ROOT_PATH := $(shell xcode-select --print-path) + ifneq ($(SYS_ROOT_PATH),) + SYS_ROOT_PATH := $(SYS_ROOT_PATH)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk + SYS_ROOT := --sysroot=$(SYS_ROOT_PATH) + $(info Using MacOS SDK $(SYS_ROOT_PATH)) + endif +endif + +# NOTE: with mingw, FORTIFY_SOURCE=2 must be used +# in conjuction with stack-protector as check functions +# are implemented in libssp +STACK_PROT_FLAG=-fstack-protector-strong +FORTIFY_FLAGS=-D_FORTIFY_SOURCE=2 + +# The first goal here is to define a meaningful set of CFLAGS based on compiler, +# debug mode, expected word size (16, 32, 64), etc. Those are then used to +# define two differents kinds of CFLAGS we will use for building our library +# (LIB_CFLAGS) and binaries (BIN_CFLAGS) objects. + +# Detect if we are using clang or gcc +CLANG := $(shell $(CROSS_COMPILE)$(CC) -v 2>&1 | grep clang) + +ifneq ($(CLANG),) + # get clang version e.g. 14.1.3 + CLANG_VERSION := $(shell $(CROSS_COMPILE)$(CC) -dumpversion) + # convert to single number e.g. 14 * 100 + 1 + CLANG_VERSION := $(shell echo $(CLANG_VERSION) | cut -f1-2 -d. | sed -e 's/\./*100+/g') + # Calculate value - e.g. 1401 + CLANG_VERSION := $(shell echo $$(($(CLANG_VERSION)))) + # Comparison results (true if true, empty if false) + CLANG_VERSION_GTE_12 := $(shell [ $(CLANG_VERSION) -ge 1200 ] && echo true) + CLANG_VERSION_GTE_13 := $(shell [ $(CLANG_VERSION) -ge 1300 ] && echo true) + CLANG_VERSION_GTE_16 := $(shell [ $(CLANG_VERSION) -ge 1600 ] && echo true) + CLANG_VERSION_GTE_17 := $(shell [ $(CLANG_VERSION) -ge 1700 ] && echo true) +endif + +# Default warning flags +# -Werror: treat warnings as errors +# +# Pedantic mode: enable more warnings +# -Wshadow: warn the user if a variable declaration shadows one from a parent context +# -Wdouble-promotion: warn about implicit conversion from float to double +# -Wformat=2: warn about format string vulnerabilities +# -fno-common: disallow global variables with same name and type +# -Wconversion: warn about implicit conversion +# -Wformat-security: warn about format string vulnerabilities +WARNING_CFLAGS = -Werror +ifeq ($(PEDANTIC),1) + WARNING_CFLAGS += -Wshadow -Wdouble-promotion -Wformat=2 -fno-common -Wconversion -Wformat-security +endif + +# Disable certain warnings: +# -Wno-unused-parameter: commonly a false positive. Functions may be required to have a certain signature. +# -Wno-declaration-after-statement: our C standard supports declaration after statements +WARNING_CFLAGS += -Wno-unused-parameter -Wno-declaration-after-statement + +# When compiler is *explicitly* set to clang, use its -Weverything option by +# default but disable the sepcific options we cannot support: +# +# -Wno-reserved-id-macro: our header files use __XXX___ protection macros. +# -Wno-padded: padding warnings +# -Wno-packed: warning about packed structure we want to keep that way +# -Wno-covered-switch-default +# -Wno-used-but-marked-unused +# +ifneq ($(CLANG),) + WARNING_CFLAGS += -Weverything \ + -Wno-reserved-id-macro -Wno-padded \ + -Wno-packed -Wno-covered-switch-default \ + -Wno-used-but-marked-unused -Wno-switch-enum + # Add warnings if we are in pedantic mode + ifeq ($(PEDANTIC),1) + WARNING_CFLAGS += -Walloca -Wcast-qual -Wnull-dereference -Wstack-protector -Wvla -Warray-bounds -Warray-bounds-pointer-arithmetic -Wassign-enum -Wbad-function-cast -Wconditional-uninitialized -Wfloat-equal -Wformat-type-confusion -Widiomatic-parentheses -Wimplicit-fallthrough -Wloop-analysis -Wpointer-arith -Wshift-sign-overflow -Wshorten-64-to-32 -Wtautological-constant-in-range-compare -Wunreachable-code-aggressive -Wthread-safety -Wthread-safety-beta -Wcomma + endif + ifeq ($(CLANG_VERSION_GTE_13), true) + # We have to do this because the '_' prefix seems now reserved to builtins + WARNING_CFLAGS += -Wno-reserved-identifier + endif + ifeq ($(CLANG_VERSION_GTE_16), true) + # NOTE: XXX: this is really a shame to remove this, but + # we have to wait until this is less sensitive and false positive + # prone to use it! + WARNING_CFLAGS += -Wno-unsafe-buffer-usage + endif +else + WARNING_CFLAGS += -W -Wextra -Wall -Wunreachable-code + # Add warnings if we are in pedantic mode + ifeq ($(PEDANTIC),1) + WARNING_CFLAGS += -Wpedantic -Wformat-overflow=2 -Wformat-truncation=2 -Wnull-dereference -Wstack-protector -Wtrampolines -Walloca -Wvla -Warray-bounds=2 -Wimplicit-fallthrough=3 -Wshift-overflow=2 -Wcast-qual -Wstringop-overflow=4 -Warith-conversion -Wlogical-op -Wduplicated-cond -Wduplicated-branches -Wformat-signedness -Wstrict-overflow=2 -Wundef -Wstrict-prototypes -Wswitch-default -Wcast-align=strict -Wjump-misses-init + endif +endif + +ifeq ($(WNOERROR), 1) + # Sometimes "-Werror" might be too much, this can be overriden + WARNING_CFLAGS := $(subst -Werror,,$(WARNING_CFLAGS)) +endif + +# If the user has overridden the CFLAGS or LDFLAGS, let's detect it +# and adapt our compilation process +ifdef CFLAGS +USER_DEFINED_CFLAGS = $(CFLAGS) +endif +ifdef LDFLAGS +USER_DEFINED_LDFLAGS = $(LDFLAGS) +endif + +CFLAGS ?= $(WARNING_CFLAGS) $(SYS_ROOT) -pedantic -fno-builtin -std=c99 \ + $(FORTIFY_FLAGS) $(STACK_PROT_FLAG) -O3 +LDFLAGS ?= + +# Default AR and RANLIB if not overriden by user +AR ?= ar +RANLIB ?= ranlib +# Default AR flags and RANLIB flags if not overriden by user +AR_FLAGS ?= rcs +RANLIB_FLAGS ?= + +# Our debug flags +DEBUG_CFLAGS = -DDEBUG -O -g + +ifeq ($(VERBOSE_INNER_VALUES),1) +CFLAGS += -DVERBOSE_INNER_VALUES +endif + +# Default all and clean target that will be expanded +# later in the Makefile +all: +clean: + +debug: CFLAGS += $(DEBUG_CFLAGS) +debug: clean all + +# Force 64-bit word size +64: CFLAGS += -DWORDSIZE=64 +64: clean all +debug64: CFLAGS += -DWORDSIZE=64 $(DEBUG_CFLAGS) +debug64: clean all + +# Force 32-bit word size +32: CFLAGS += -DWORDSIZE=32 +32: clean all +debug32: CFLAGS += -DWORDSIZE=32 $(DEBUG_CFLAGS) +debug32: clean all + +# Force 16-bit word size +16: CFLAGS += -DWORDSIZE=16 +16: clean all +debug16: CFLAGS += -DWORDSIZE=16 $(DEBUG_CFLAGS) +debug16: clean all + +# Force to compile with 64-bit arch +force_arch64: CFLAGS += -m64 +force_arch64: clean all + +# Force to compile with 32-bit arch +force_arch32: CFLAGS += -m32 +force_arch32: clean all + +# By default, we use an stdlib +ifneq ($(LIBECC_NOSTDLIB),1) +CFLAGS += -DWITH_STDLIB +endif + +# Let's now define the two kinds of CFLAGS we will use for building our +# library (LIB_CFLAGS) and binaries (BIN_CFLAGS) objects. +# If the user has not overriden the CFLAGS, we add the usual gcc/clang +# flags to produce binaries compatible with hardening technologies. +ifndef USER_DEFINED_CFLAGS +BIN_CFLAGS ?= $(CFLAGS) $(FPIE_CFLAG) -MMD -MP +LIB_CFLAGS ?= $(CFLAGS) $(FPIC_CFLAG) -MMD -MP -ffreestanding +else +BIN_CFLAGS ?= $(USER_DEFINED_CFLAGS) +LIB_CFLAGS ?= $(USER_DEFINED_CFLAGS) +endif +ifndef USER_DEFINED_LDFLAGS +BIN_LDFLAGS ?= $(LDFLAGS) $(FPIE_LDFLAGS) +else +BIN_LDFLAGS ?= $(USER_DEFINED_LDFLAGS) +endif + +# If the user wants to add extra flags to the existing flags, +# check it and add them +ifdef EXTRA_LIB_CFLAGS +LIB_CFLAGS += $(EXTRA_LIB_CFLAGS) +endif +ifdef EXTRA_LIB_DYN_LDFLAGS +LIB_DYN_LDFLAGS += $(EXTRA_LIB_DYN_LDFLAGS) +endif +ifdef EXTRA_BIN_CFLAGS +BIN_CFLAGS += $(EXTRA_BIN_CFLAGS) +endif +ifdef EXTRA_BIN_LDFLAGS +BIN_LDFLAGS += $(EXTRA_BIN_LDFLAGS) +endif +ifdef EXTRA_CFLAGS +CFLAGS += $(EXTRA_CFLAGS) +endif +ifdef EXTRA_LDFLAGS +LDFLAGS += $(EXTRA_LDFLAGS) +endif + +# Add the include folder +LIBECC_INCLUDE_FOLDER = include/ +LIB_CFLAGS += -I$(LIBECC_INCLUDE_FOLDER) +BIN_CFLAGS += -I$(LIBECC_INCLUDE_FOLDER) + +# Static libraries to produce or link to +LIBARITH = $(BUILD_DIR)/libarith.a +LIBEC = $(BUILD_DIR)/libec.a +LIBSIGN = $(BUILD_DIR)/libsign.a + +# Compile dynamic libraries if the user asked to +ifeq ($(WITH_DYNAMIC_LIBS),1) +# Dynamic libraries to produce or link to +LIBARITH_DYN = $(BUILD_DIR)/libarith.so +LIBEC_DYN = $(BUILD_DIR)/libec.so +LIBSIGN_DYN = $(BUILD_DIR)/libsign.so +# The ld flags to generate shared librarie +ifeq ($(APPLE),) +LIB_DYN_LDFLAGS ?= -shared -Wl,-undefined,dynamic_lookup +else +LIB_DYN_LDFLAGS ?= -shared -Wl,-z,relro,-z,now +endif +endif + +# Do we want to use blinding to secure signature against some side channels? +ifeq ($(BLINDING),1) +CFLAGS += -DUSE_SIG_BLINDING +endif + +# Use complete formulas for point addition and doubling +# NOTE: complete formulas are used as default since they are +# more resilient against side channel attacks and they do not +# have a major performance impact +ifeq ($(COMPLETE),0) +CFLAGS += -DNO_USE_COMPLETE_FORMULAS +endif + +# Force Double and Add always usage +ifeq ($(ADALWAYS), 1) +CFLAGS += -DUSE_DOUBLE_ADD_ALWAYS +endif +ifeq ($(ADALWAYS), 0) +CFLAGS += -DUSE_MONTY_LADDER +endif + +# Force Montgomery Ladder always usage +ifeq ($(LADDER), 1) +CFLAGS += -DUSE_MONTY_LADDER +endif +ifeq ($(LADDER), 0) +CFLAGS += -DUSE_DOUBLE_ADD_ALWAYS +endif + +# Force small stack usage +ifeq ($(SMALLSTACK), 1) +CFLAGS += -DUSE_SMALL_STACK +endif + +# Are we sure we will not execute known +# vectors self tests? +ifeq ($(NOKNOWNTESTS), 1) +CFLAGS += -DNO_KNOWN_VECTORS +endif + +# Specific version for fuzzing with Cryptofuzz +# Allow raw signature and verification APIs +# which is DANGEROUS. Do not activate in production +# mode! +ifeq ($(CRYPTOFUZZ), 1) +CFLAGS += -DUSE_CRYPTOFUZZ +endif + +ifeq ($(ASSERT_PRINT), 1) +CFLAGS += -DUSE_ASSERT_PRINT +endif + +# By default, we want to catch all unused functions return values by +# triggering a warning. We deactivate this is we are asked to by the user. +ifneq ($(NO_WARN_UNUSED_RET), 1) +CFLAGS += -DUSE_WARN_UNUSED_RET +endif + +# Do we want to use clang or gcc sanitizers? +ifeq ($(USE_SANITIZERS),1) +CFLAGS += -fsanitize=undefined -fsanitize=address -fsanitize=leak + ifneq ($(CLANG),) + # Clang version < 12 do not support unsigned-shift-base + ifeq ($(CLANG_VERSION_GTE_12), true) + CFLAGS += -fsanitize=integer -fno-sanitize=unsigned-integer-overflow -fno-sanitize=unsigned-shift-base + endif + endif +endif + +# Do we want to use the ISO14888-3 version of the +# ECRDSA algorithm with discrepancies from the Russian +# RFC references? +ifeq ($(USE_ISO14888_3_ECRDSA),1) +CFLAGS += -DUSE_ISO14888_3_ECRDSA +endif + +# Do we have a C++ compiler instead of a C compiler? +GPP := $(shell $(CROSS_COMPILE)$(CC) -v 2>&1 | grep g++) +CLANGPP := $(shell echo $(CROSS_COMPILE)$(CC) | grep clang++) + +# g++ case +ifneq ($(GPP),) +CFLAGS := $(patsubst -std=c99, -std=c++2a, $(CFLAGS)) +CFLAGS += -Wno-deprecated +# Remove C++ unused pedantic flags +CFLAGS := $(patsubst -Wstrict-prototypes,,$(CFLAGS)) +CFLAGS := $(patsubst -Wjump-misses-init,,$(CFLAGS)) +CFLAGS := $(patsubst -Wduplicated-branches,,$(CFLAGS)) +CFLAGS := $(patsubst -Wno-declaration-after-statement,,$(CFLAGS)) +endif +# clang++ case +ifneq ($(CLANGPP),) +CFLAGS := $(patsubst -std=c99, -std=c++2a, $(CFLAGS)) +CFLAGS += -Wno-deprecated -Wno-c++98-c++11-c++14-c++17-compat-pedantic -Wno-old-style-cast -Wno-zero-as-null-pointer-constant -Wno-c++98-compat-pedantic +endif + +# Makefile verbosity +ifeq ($(VERBOSE),1) +VERBOSE_MAKE= +else +VERBOSE_MAKE=@ +endif + +# Self tests parallelization +ifeq ($(OPENMP_SELF_TESTS),1) +CFLAGS += -DWITH_OPENMP_SELF_TESTS -fopenmp +LDFLAGS += -fopenmp +endif diff --git a/crypto/libecc/include/libecc/curves/aff_pt.h b/crypto/libecc/include/libecc/curves/aff_pt.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/aff_pt.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __AFF_PT_H__ +#define __AFF_PT_H__ + +#include +#include +#include +#include +#include + +typedef struct { + fp x; + fp y; + ec_shortw_crv_src_t crv; + word_t magic; +} aff_pt; + +typedef aff_pt *aff_pt_t; +typedef const aff_pt_t aff_pt_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_check_initialized(aff_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_init(aff_pt_t in, ec_shortw_crv_src_t curve); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_init_from_coords(aff_pt_t in, + ec_shortw_crv_src_t curve, + fp_src_t xcoord, fp_src_t ycoord); +void aff_pt_uninit(aff_pt_t in); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_y_from_x(fp_t y1, fp_t y2, fp_src_t x, ec_shortw_crv_src_t curve); +ATTRIBUTE_WARN_UNUSED_RET int is_on_shortw_curve(fp_src_t x, fp_src_t y, ec_shortw_crv_src_t curve, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_is_on_curve(aff_pt_src_t pt, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int ec_shortw_aff_copy(aff_pt_t out, aff_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int ec_shortw_aff_cmp(aff_pt_src_t in1, aff_pt_src_t in2, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int ec_shortw_aff_eq_or_opp(aff_pt_src_t in1, aff_pt_src_t in2, + int *eq_or_opp); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_import_from_buf(aff_pt_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_shortw_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_export_to_buf(aff_pt_src_t pt, u8 *pt_buf, u32 pt_buf_len); + +/*** Edwards curves related ***/ +typedef struct { + fp x; + fp y; + ec_edwards_crv_src_t crv; + word_t magic; +} aff_pt_edwards; + +typedef aff_pt_edwards *aff_pt_edwards_t; +typedef const aff_pt_edwards_t aff_pt_edwards_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_check_initialized(aff_pt_edwards_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_init(aff_pt_edwards_t in, ec_edwards_crv_src_t curve); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_init_from_coords(aff_pt_edwards_t in, + ec_edwards_crv_src_t curve, + fp_src_t ucoord, fp_src_t vcoord); +void aff_pt_edwards_uninit(aff_pt_edwards_t in); +ATTRIBUTE_WARN_UNUSED_RET int is_on_edwards_curve(fp_src_t u, fp_src_t v, ec_edwards_crv_src_t curve, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_is_on_curve(aff_pt_edwards_src_t pt, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int ec_edwards_aff_copy(aff_pt_edwards_t out, aff_pt_edwards_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int ec_edwards_aff_cmp(aff_pt_edwards_src_t in1, aff_pt_edwards_src_t in2, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_import_from_buf(aff_pt_edwards_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_edwards_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_export_to_buf(aff_pt_edwards_src_t pt, u8 *pt_buf, u32 pt_buf_len); + +ATTRIBUTE_WARN_UNUSED_RET int curve_edwards_to_montgomery(ec_edwards_crv_src_t edwards_crv, ec_montgomery_crv_t montgomery_crv, fp_src_t alpha_edwards); +ATTRIBUTE_WARN_UNUSED_RET int curve_edwards_montgomery_check(ec_edwards_crv_src_t edwards_crv, ec_montgomery_crv_src_t montgomery_crv, fp_src_t alpha_edwards); + +ATTRIBUTE_WARN_UNUSED_RET int curve_montgomery_to_edwards(ec_montgomery_crv_src_t montgomery_crv, ec_edwards_crv_t edwards_crv, fp_src_t alpha_edwards); + +ATTRIBUTE_WARN_UNUSED_RET int curve_edwards_to_shortw(ec_edwards_crv_src_t edwards_crv, ec_shortw_crv_t shortw_crv, fp_src_t alpha_edwards); +ATTRIBUTE_WARN_UNUSED_RET int curve_edwards_shortw_check(ec_edwards_crv_src_t edwards_crv, ec_shortw_crv_src_t shortw_crv, fp_src_t alpha_edwards); +ATTRIBUTE_WARN_UNUSED_RET int curve_shortw_to_edwards(ec_shortw_crv_src_t shortw_crv, ec_edwards_crv_t edwards_crv, fp_src_t alpha_montgomery, fp_src_t gamma_montgomery, fp_src_t alpha_edwards); + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_to_shortw(aff_pt_edwards_src_t in_edwards, ec_shortw_crv_src_t shortw_crv, aff_pt_t out_shortw, fp_src_t alpha_edwards); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_shortw_to_edwards(aff_pt_src_t in_shortw, ec_edwards_crv_src_t edwards_crv, aff_pt_edwards_t out_edwards, fp_src_t alpha_edwards); + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_y_from_x(fp_t y1, fp_t y2, fp_src_t x, ec_edwards_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_x_from_y(fp_t x1, fp_t x2, fp_src_t y, ec_edwards_crv_src_t crv); + +/*** Montgomery curves related ***/ +typedef struct { + fp u; + fp v; + ec_montgomery_crv_src_t crv; + word_t magic; +} aff_pt_montgomery; + +typedef aff_pt_montgomery *aff_pt_montgomery_t; +typedef const aff_pt_montgomery_t aff_pt_montgomery_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_check_initialized(aff_pt_montgomery_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_init(aff_pt_montgomery_t in, ec_montgomery_crv_src_t curve); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_init_from_coords(aff_pt_montgomery_t in, + ec_montgomery_crv_src_t curve, + fp_src_t ucoord, fp_src_t vcoord); +void aff_pt_montgomery_uninit(aff_pt_montgomery_t in); +ATTRIBUTE_WARN_UNUSED_RET int is_on_montgomery_curve(fp_src_t u, fp_src_t v, ec_montgomery_crv_src_t curve, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_is_on_curve(aff_pt_montgomery_src_t pt, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int ec_montgomery_aff_copy(aff_pt_montgomery_t out, aff_pt_montgomery_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int ec_montgomery_aff_cmp(aff_pt_montgomery_src_t in1, aff_pt_montgomery_src_t in2, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_import_from_buf(aff_pt_montgomery_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_montgomery_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_export_to_buf(aff_pt_montgomery_src_t pt, u8 *pt_buf, u32 pt_buf_len); + +ATTRIBUTE_WARN_UNUSED_RET int curve_montgomery_to_shortw(ec_montgomery_crv_src_t montgomery_crv, ec_shortw_crv_t shortw_crv); + +ATTRIBUTE_WARN_UNUSED_RET int curve_montgomery_shortw_check(ec_montgomery_crv_src_t montgomery_crv, ec_shortw_crv_src_t shortw_crv); +ATTRIBUTE_WARN_UNUSED_RET int curve_shortw_to_montgomery(ec_shortw_crv_src_t shortw_crv, ec_montgomery_crv_t montgomery_crv, fp_src_t alpha_montgomery, fp_src_t gamma_montgomery); + + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_to_shortw(aff_pt_montgomery_src_t in_montgomery, ec_shortw_crv_src_t shortw_crv, aff_pt_t out_shortw); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_shortw_to_montgomery(aff_pt_src_t in_shortw, ec_montgomery_crv_src_t montgomery_crv, aff_pt_montgomery_t out_montgomery); + + +/*****/ +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_to_montgomery(aff_pt_edwards_src_t in_edwards, ec_montgomery_crv_src_t montgomery_crv, aff_pt_montgomery_t out_montgomery, fp_src_t alpha); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_to_edwards(aff_pt_montgomery_src_t in_montgomery, ec_edwards_crv_src_t edwards_crv, aff_pt_edwards_t out_edwards, fp_src_t alpha); + +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_v_from_u(fp_t v1, fp_t v2, fp_src_t u, ec_montgomery_crv_src_t crv); + + #endif /* __AFF_PT_H__ */ diff --git a/crypto/libecc/include/libecc/curves/curves.h b/crypto/libecc/include/libecc/curves/curves.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/curves.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __CURVES_H__ +#define __CURVES_H__ + +#include + +ATTRIBUTE_WARN_UNUSED_RET int ec_get_curve_params_by_name(const u8 *ec_name, u8 ec_name_len, + const ec_str_params **ec_params); +ATTRIBUTE_WARN_UNUSED_RET int ec_get_curve_params_by_type(ec_curve_type ec_type, + const ec_str_params **ec_params); +ATTRIBUTE_WARN_UNUSED_RET int ec_get_curve_type_by_name(const u8 *ec_name, u8 ec_name_len, + ec_curve_type *ec_type); +ATTRIBUTE_WARN_UNUSED_RET int ec_get_curve_name_by_type(const ec_curve_type ec_type, u8 *out, u8 outlen); +ATTRIBUTE_WARN_UNUSED_RET int ec_check_curve_type_and_name(const ec_curve_type ec_type, + const u8 *ec_name, u8 ec_name_len); + +#endif /* __CURVES_H__ */ diff --git a/crypto/libecc/include/libecc/curves/curves_list.h b/crypto/libecc/include/libecc/curves/curves_list.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/curves_list.h @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __CURVES_LIST_H__ +#define __CURVES_LIST_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/* ADD curves header here */ +/* XXX: Do not remove the comment above, as it is + * used by external tools as a placeholder to add or + * remove automatically generated code. + */ + +#ifndef CURVES_MAX_P_BIT_LEN +#error "Max p bit length is 0; did you disable all curves in lib_ecc_config.h?" +#endif +#if (CURVES_MAX_P_BIT_LEN > 65535) +#error "Prime field length (in bytes) MUST fit on an u16!" +#endif + +#ifndef CURVES_MAX_Q_BIT_LEN +#error "Max q bit length is 0; did you disable all curves in lib_ecc_config.h?" +#endif +#if (CURVES_MAX_Q_BIT_LEN > 65535) +#error "Generator order length (in bytes) MUST fit on an u16!" +#endif + +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#error "Max curve order bit length is 0; did you disable all curves in lib_ecc_config.h?" +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN > 65535) +#error "Curve order length (in bytes) MUST fit on an u16!" +#endif + +typedef struct { + ec_curve_type type; + const ec_str_params *params; +} ec_mapping; + +static const ec_mapping ec_maps[] = { +#ifdef WITH_CURVE_FRP256V1 + {.type = FRP256V1,.params = &frp256v1_str_params}, +#endif /* WITH_CURVE_FRP256V1 */ +#ifdef WITH_CURVE_SECP192R1 + {.type = SECP192R1,.params = &secp192r1_str_params}, +#endif /* WITH_CURVE_SECP192R1 */ +#ifdef WITH_CURVE_SECP224R1 + {.type = SECP224R1,.params = &secp224r1_str_params}, +#endif /* WITH_CURVE_SECP224R1 */ +#ifdef WITH_CURVE_SECP256R1 + {.type = SECP256R1,.params = &secp256r1_str_params}, +#endif /* WITH_CURVE_SECP256R1 */ +#ifdef WITH_CURVE_SECP384R1 + {.type = SECP384R1,.params = &secp384r1_str_params}, +#endif /* WITH_CURVE_SECP384R1 */ +#ifdef WITH_CURVE_SECP521R1 + {.type = SECP521R1,.params = &secp521r1_str_params}, +#endif /* WITH_CURVE_SECP521R1 */ +#ifdef WITH_CURVE_BRAINPOOLP192R1 + {.type = BRAINPOOLP192R1,.params = &brainpoolp192r1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP192R1 */ +#ifdef WITH_CURVE_BRAINPOOLP224R1 + {.type = BRAINPOOLP224R1,.params = &brainpoolp224r1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP224R1 */ +#ifdef WITH_CURVE_BRAINPOOLP256R1 + {.type = BRAINPOOLP256R1,.params = &brainpoolp256r1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#ifdef WITH_CURVE_BRAINPOOLP384R1 + {.type = BRAINPOOLP384R1,.params = &brainpoolp384r1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#ifdef WITH_CURVE_BRAINPOOLP512R1 + {.type = BRAINPOOLP512R1,.params = &brainpoolp512r1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ +#ifdef WITH_CURVE_GOST256 + {.type = GOST256,.params = &GOST_256bits_curve_str_params}, +#endif /* WITH_CURVE_GOST256 */ +#ifdef WITH_CURVE_GOST512 + {.type = GOST512,.params = &GOST_512bits_curve_str_params}, +#endif /* WITH_CURVE_GOST512 */ +#ifdef WITH_CURVE_SM2P256TEST + {.type = SM2P256TEST,.params = &sm2p256test_str_params}, +#endif /* WITH_CURVE_SM2P256TEST */ +#ifdef WITH_CURVE_SM2P256V1 + {.type = SM2P256V1,.params = &sm2p256v1_str_params}, +#endif /* WITH_CURVE_SM2P256V1 */ +#ifdef WITH_CURVE_WEI25519 + {.type = WEI25519,.params = &wei25519_str_params}, +#endif /* WITH_CURVE_WEI25519 */ +#ifdef WITH_CURVE_WEI448 + {.type = WEI448,.params = &wei448_str_params}, +#endif /* WITH_CURVE_WEI448 */ +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETA + { .type = GOST_R3410_2012_256_PARAMSETA, .params = &gost_R3410_2012_256_paramSetA_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETA */ +#ifdef WITH_CURVE_SECP256K1 + {.type = SECP256K1,.params = &secp256k1_str_params}, +#endif /* WITH_CURVE_SECP256K1 */ +#ifdef WITH_CURVE_GOST_R3410_2001_TESTPARAMSET + { .type = GOST_R3410_2001_TESTPARAMSET, .params = &gost_R3410_2001_TestParamSet_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2001_TESTPARAMSET */ +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET + { .type = GOST_R3410_2001_CRYPTOPRO_A_PARAMSET, .params = &gost_R3410_2001_CryptoPro_A_ParamSet_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET */ +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET + { .type = GOST_R3410_2001_CRYPTOPRO_B_PARAMSET, .params = &gost_R3410_2001_CryptoPro_B_ParamSet_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET */ +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET + { .type = GOST_R3410_2001_CRYPTOPRO_C_PARAMSET, .params = &gost_R3410_2001_CryptoPro_C_ParamSet_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET */ +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET + { .type = GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET, .params = &gost_R3410_2001_CryptoPro_XchA_ParamSet_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET */ +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET + { .type = GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET, .params = &gost_R3410_2001_CryptoPro_XchB_ParamSet_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET */ +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETA + { .type = GOST_R3410_2012_256_PARAMSETA, .params = &gost_R3410_2012_256_paramSetA_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETA */ +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETB + { .type = GOST_R3410_2012_256_PARAMSETB, .params = &gost_R3410_2012_256_paramSetB_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETB */ +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETC + { .type = GOST_R3410_2012_256_PARAMSETC, .params = &gost_R3410_2012_256_paramSetC_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETC */ +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETD + { .type = GOST_R3410_2012_256_PARAMSETD, .params = &gost_R3410_2012_256_paramSetD_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETD */ +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETTEST + { .type = GOST_R3410_2012_512_PARAMSETTEST, .params = &gost_R3410_2012_512_paramSetTest_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETTEST */ +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETA + { .type = GOST_R3410_2012_512_PARAMSETA, .params = &gost_R3410_2012_512_paramSetA_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETA */ +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETB + { .type = GOST_R3410_2012_512_PARAMSETB, .params = &gost_R3410_2012_512_paramSetB_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETB */ +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETC + { .type = GOST_R3410_2012_512_PARAMSETC, .params = &gost_R3410_2012_512_paramSetC_str_params }, +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETC */ +#ifdef WITH_CURVE_SECP192K1 + {.type = SECP192K1,.params = &secp192k1_str_params}, +#endif /* WITH_CURVE_SECP192K1 */ +#ifdef WITH_CURVE_SECP224K1 + {.type = SECP224K1,.params = &secp224k1_str_params}, +#endif /* WITH_CURVE_SECP224K1 */ +#ifdef WITH_CURVE_BRAINPOOLP192T1 + {.type = BRAINPOOLP192T1,.params = &brainpoolp192t1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP192T1 */ +#ifdef WITH_CURVE_BRAINPOOLP224T1 + {.type = BRAINPOOLP224T1,.params = &brainpoolp224t1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP224T1 */ +#ifdef WITH_CURVE_BRAINPOOLP256T1 + {.type = BRAINPOOLP256T1,.params = &brainpoolp256t1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP256T1 */ +#ifdef WITH_CURVE_BRAINPOOLP320R1 + {.type = BRAINPOOLP320R1,.params = &brainpoolp320r1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP320R1 */ +#ifdef WITH_CURVE_BRAINPOOLP320T1 + {.type = BRAINPOOLP320T1,.params = &brainpoolp320t1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP320T1 */ +#ifdef WITH_CURVE_BRAINPOOLP384T1 + {.type = BRAINPOOLP384T1,.params = &brainpoolp384t1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP192T1 */ +#ifdef WITH_CURVE_BRAINPOOLP512T1 + {.type = BRAINPOOLP512T1,.params = &brainpoolp512t1_str_params}, +#endif /* WITH_CURVE_BRAINPOOLP512T1 */ +#ifdef WITH_CURVE_BIGN256V1 + {.type = BIGN256V1,.params = &bign256v1_str_params}, +#endif /* WITH_CURVE_BIGN256V1 */ +#ifdef WITH_CURVE_BIGN384V1 + {.type = BIGN384V1,.params = &bign384v1_str_params}, +#endif /* WITH_CURVE_BIGN384V1 */ +#ifdef WITH_CURVE_BIGN512V1 + {.type = BIGN512V1,.params = &bign512v1_str_params}, +#endif /* WITH_CURVE_BIGN512V1 */ +/* ADD curves mapping here */ +/* XXX: Do not remove the comment above, as it is + * used by external tools as a placeholder to add or + * remove automatically generated code. + */ +}; + +/* + * Number of cuvres supported by the lib, i.e. number of elements in + * ec_maps array above. + */ +#define EC_CURVES_NUM (sizeof(ec_maps) / sizeof(ec_mapping)) +#endif /* __CURVES_LIST_H__ */ diff --git a/crypto/libecc/include/libecc/curves/ec_edwards.h b/crypto/libecc/include/libecc/curves/ec_edwards.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/ec_edwards.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_EDWARDS_H__ +#define __EC_EDWARDS_H__ + +#include +#include +#include +#include +#include + +typedef struct { + fp a; + fp d; + nn order; + word_t magic; +} ec_edwards_crv; + +typedef ec_edwards_crv *ec_edwards_crv_t; +typedef const ec_edwards_crv *ec_edwards_crv_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int ec_edwards_crv_check_initialized(ec_edwards_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int ec_edwards_crv_init(ec_edwards_crv_t crv, fp_src_t a, fp_src_t b, nn_src_t order); +void ec_edwards_crv_uninit(ec_edwards_crv_t crv); + +#endif /* __EC_EDWARDS_H__ */ diff --git a/crypto/libecc/include/libecc/curves/ec_montgomery.h b/crypto/libecc/include/libecc/curves/ec_montgomery.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/ec_montgomery.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_MONTGOMERY_H__ +#define __EC_MONTGOMERY_H__ + +#include +#include +#include +#include +#include + +typedef struct { + fp A; + fp B; + nn order; + word_t magic; +} ec_montgomery_crv; + +typedef ec_montgomery_crv *ec_montgomery_crv_t; +typedef const ec_montgomery_crv *ec_montgomery_crv_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int ec_montgomery_crv_check_initialized(ec_montgomery_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int ec_montgomery_crv_init(ec_montgomery_crv_t crv, fp_src_t a, fp_src_t b, nn_src_t order); +void ec_montgomery_crv_uninit(ec_montgomery_crv_t crv); + +#endif /* __EC_MONTGOMERY_H__ */ diff --git a/crypto/libecc/include/libecc/curves/ec_params.h b/crypto/libecc/include/libecc/curves/ec_params.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/ec_params.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_PARAMS_H__ +#define __EC_PARAMS_H__ +#include +#include +#include + +/* Info: this include is here because an update on + * MAX_CURVE_OID_LEN and MAX_CURVE_NAME_LEN can be done + * through preprocessing of the curves at compile time. + */ +#include +/* These default sizes should be enough for the known curves */ +#ifdef MAX_CURVE_NAME_LEN +#if (MAX_CURVE_OID_LEN < 32) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 32 /* including trailing 0 */ +#endif +#else +#define MAX_CURVE_OID_LEN 32 /* including trailing 0 */ +#endif + +#ifdef MAX_CURVE_NAME_LEN +#if (MAX_CURVE_NAME_LEN < 32) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 32 /* including trailing 0 */ +#endif +#else +#define MAX_CURVE_NAME_LEN 32 +#endif + +/* + * Elliptic curves parameters. We only support + * curves defined on prime fields (i.e. Fp, + * with p prime). + */ +typedef struct { + /* Fp */ + fp_ctx ec_fp; + + /* Curve */ + ec_shortw_crv ec_curve; + + /* + * Generator G defining our group, in projective + * coordinates. + */ + prj_pt ec_gen; + + /* Number of points on group generated by G */ + nn ec_gen_order; + bitcnt_t ec_gen_order_bitlen; + + /* Curve cofactor */ + nn ec_gen_cofactor; + +#if !defined(USE_SMALL_STACK) + /* Optional transfer coefficients with Montgomery curves */ + fp ec_alpha_montgomery; + fp ec_gamma_montgomery; + /* Optional transfer coefficient with Edwards curves */ + fp ec_alpha_edwards; +#endif + + /* Object Identifier for the curve */ + u8 curve_oid[MAX_CURVE_OID_LEN]; + + /* Short name for the curve */ + u8 curve_name[MAX_CURVE_NAME_LEN]; + + /* Type of the curve */ + ec_curve_type curve_type; +} ec_params; + +ATTRIBUTE_WARN_UNUSED_RET int import_params(ec_params *out_params, const ec_str_params *in_str_params); + +#endif /* __EC_PARAMS_H__ */ diff --git a/crypto/libecc/include/libecc/curves/ec_shortw.h b/crypto/libecc/include/libecc/curves/ec_shortw.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/ec_shortw.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_SHORTW_H__ +#define __EC_SHORTW_H__ + +#include +#include +#include +#include +#include + +typedef struct { + fp a; + fp b; + fp a_monty; +#ifndef NO_USE_COMPLETE_FORMULAS + fp b3; + fp b_monty; + fp b3_monty; +#endif + nn order; /* curve order */ + word_t magic; +} ec_shortw_crv; + +typedef ec_shortw_crv *ec_shortw_crv_t; +typedef const ec_shortw_crv *ec_shortw_crv_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int ec_shortw_crv_check_initialized(ec_shortw_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int ec_shortw_crv_init(ec_shortw_crv_t crv, fp_src_t a, fp_src_t b, nn_src_t order); +void ec_shortw_crv_uninit(ec_shortw_crv_t crv); + +#endif /* __EC_SHORTW_H__ */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_bign256v1.h b/crypto/libecc/include/libecc/curves/known/ec_params_bign256v1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_bign256v1.h @@ -0,0 +1,315 @@ +#include +#ifdef WITH_CURVE_BIGN256V1 + +#ifndef __EC_PARAMS_BIGN256V1_H__ +#define __EC_PARAMS_BIGN256V1_H__ +#include +static const u8 bign256v1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, +}; + +TO_EC_STR_PARAM(bign256v1_p); + +#define CURVE_BIGN256V1_P_BITLEN 256 +static const u8 bign256v1_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 bign256v1_r[] = { + 0xbd, +}; + +TO_EC_STR_PARAM(bign256v1_r); + +static const u8 bign256v1_r_square[] = { + 0x8b, 0x89, +}; + +TO_EC_STR_PARAM(bign256v1_r_square); + +static const u8 bign256v1_mpinv[] = { + 0xa5, 0x3f, 0xa9, 0x4f, 0xea, 0x53, 0xfa, 0x95, +}; + +TO_EC_STR_PARAM(bign256v1_mpinv); + +static const u8 bign256v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_shift); + +static const u8 bign256v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, +}; + +TO_EC_STR_PARAM(bign256v1_p_normalized); + +static const u8 bign256v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 bign256v1_r[] = { + 0xbd, +}; + +TO_EC_STR_PARAM(bign256v1_r); + +static const u8 bign256v1_r_square[] = { + 0x8b, 0x89, +}; + +TO_EC_STR_PARAM(bign256v1_r_square); + +static const u8 bign256v1_mpinv[] = { + 0xea, 0x53, 0xfa, 0x95, +}; + +TO_EC_STR_PARAM(bign256v1_mpinv); + +static const u8 bign256v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_shift); + +static const u8 bign256v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, +}; + +TO_EC_STR_PARAM(bign256v1_p_normalized); + +static const u8 bign256v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 bign256v1_r[] = { + 0xbd, +}; + +TO_EC_STR_PARAM(bign256v1_r); + +static const u8 bign256v1_r_square[] = { + 0x8b, 0x89, +}; + +TO_EC_STR_PARAM(bign256v1_r_square); + +static const u8 bign256v1_mpinv[] = { + 0xfa, 0x95, +}; + +TO_EC_STR_PARAM(bign256v1_mpinv); + +static const u8 bign256v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_shift); + +static const u8 bign256v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, +}; + +TO_EC_STR_PARAM(bign256v1_p_normalized); + +static const u8 bign256v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 bign256v1_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, +}; + +TO_EC_STR_PARAM(bign256v1_a); + +static const u8 bign256v1_b[] = { + 0x77, 0xce, 0x6c, 0x15, 0x15, 0xf3, 0xa8, 0xed, + 0xd2, 0xc1, 0x3a, 0xab, 0xe4, 0xd8, 0xfb, 0xbe, + 0x4c, 0xf5, 0x50, 0x69, 0x97, 0x8b, 0x92, 0x53, + 0xb2, 0x2e, 0x7d, 0x6b, 0xd6, 0x9c, 0x03, 0xf1, +}; + +TO_EC_STR_PARAM(bign256v1_b); + +#define CURVE_BIGN256V1_CURVE_ORDER_BITLEN 256 +static const u8 bign256v1_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xd9, 0x5c, 0x8e, 0xd6, 0x0d, 0xfb, 0x4d, 0xfc, + 0x7e, 0x5a, 0xbf, 0x99, 0x26, 0x3d, 0x66, 0x07, +}; + +TO_EC_STR_PARAM(bign256v1_curve_order); + +static const u8 bign256v1_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_gx); + +static const u8 bign256v1_gy[] = { + 0x6b, 0xf7, 0xfc, 0x3c, 0xfb, 0x16, 0xd6, 0x9f, + 0x5c, 0xe4, 0xc9, 0xa3, 0x51, 0xd6, 0x83, 0x5d, + 0x78, 0x91, 0x39, 0x66, 0xc4, 0x08, 0xf6, 0x52, + 0x1e, 0x29, 0xcf, 0x18, 0x04, 0x51, 0x6a, 0x93, +}; + +TO_EC_STR_PARAM(bign256v1_gy); + +static const u8 bign256v1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(bign256v1_gz); + +static const u8 bign256v1_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xd9, 0x5c, 0x8e, 0xd6, 0x0d, 0xfb, 0x4d, 0xfc, + 0x7e, 0x5a, 0xbf, 0x99, 0x26, 0x3d, 0x66, 0x07, +}; + +TO_EC_STR_PARAM(bign256v1_gen_order); + +#define CURVE_BIGN256V1_Q_BITLEN 256 +static const u8 bign256v1_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(bign256v1_gen_order_bitlen); + +static const u8 bign256v1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(bign256v1_cofactor); + +static const u8 bign256v1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign256v1_alpha_montgomery, 0); + +static const u8 bign256v1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign256v1_gamma_montgomery, 0); + +static const u8 bign256v1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign256v1_alpha_edwards, 0); + +static const u8 bign256v1_name[] = "BIGN256V1"; +TO_EC_STR_PARAM(bign256v1_name); + +static const u8 bign256v1_oid[] = "1.2.112.0.2.0.34.101.45.3.1"; +TO_EC_STR_PARAM(bign256v1_oid); + +static const ec_str_params bign256v1_str_params = { + .p = &bign256v1_p_str_param, + .p_bitlen = &bign256v1_p_bitlen_str_param, + .r = &bign256v1_r_str_param, + .r_square = &bign256v1_r_square_str_param, + .mpinv = &bign256v1_mpinv_str_param, + .p_shift = &bign256v1_p_shift_str_param, + .p_normalized = &bign256v1_p_normalized_str_param, + .p_reciprocal = &bign256v1_p_reciprocal_str_param, + .a = &bign256v1_a_str_param, + .b = &bign256v1_b_str_param, + .curve_order = &bign256v1_curve_order_str_param, + .gx = &bign256v1_gx_str_param, + .gy = &bign256v1_gy_str_param, + .gz = &bign256v1_gz_str_param, + .gen_order = &bign256v1_gen_order_str_param, + .gen_order_bitlen = &bign256v1_gen_order_bitlen_str_param, + .cofactor = &bign256v1_cofactor_str_param, + .alpha_montgomery = &bign256v1_alpha_montgomery_str_param, + .gamma_montgomery = &bign256v1_gamma_montgomery_str_param, + .alpha_edwards = &bign256v1_alpha_edwards_str_param, + .oid = &bign256v1_oid_str_param, + .name = &bign256v1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BIGN256V1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BIGN256V1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BIGN256V1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BIGN256V1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BIGN256V1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BIGN256V1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 23) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 23 +#endif + +#endif /* __EC_PARAMS_BIGN256V1_H__ */ + +#endif /* WITH_CURVE_BIGN256V1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_bign384v1.h b/crypto/libecc/include/libecc/curves/known/ec_params_bign384v1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_bign384v1.h @@ -0,0 +1,337 @@ +#include +#ifdef WITH_CURVE_BIGN384V1 + +#ifndef __EC_PARAMS_BIGN384V1_H__ +#define __EC_PARAMS_BIGN384V1_H__ +#include +static const u8 bign384v1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc3, +}; + +TO_EC_STR_PARAM(bign384v1_p); + +#define CURVE_BIGN384V1_P_BITLEN 384 +static const u8 bign384v1_p_bitlen[] = { + 0x01, 0x80, +}; + +TO_EC_STR_PARAM(bign384v1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 bign384v1_r[] = { + 0x01, 0x3d, +}; + +TO_EC_STR_PARAM(bign384v1_r); + +static const u8 bign384v1_r_square[] = { + 0x01, 0x88, 0x89, +}; + +TO_EC_STR_PARAM(bign384v1_r_square); + +static const u8 bign384v1_mpinv[] = { + 0xec, 0x9e, 0x48, 0xae, 0x6f, 0x71, 0xde, 0x15, +}; + +TO_EC_STR_PARAM(bign384v1_mpinv); + +static const u8 bign384v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_p_shift); + +static const u8 bign384v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc3, +}; + +TO_EC_STR_PARAM(bign384v1_p_normalized); + +static const u8 bign384v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 bign384v1_r[] = { + 0x01, 0x3d, +}; + +TO_EC_STR_PARAM(bign384v1_r); + +static const u8 bign384v1_r_square[] = { + 0x01, 0x88, 0x89, +}; + +TO_EC_STR_PARAM(bign384v1_r_square); + +static const u8 bign384v1_mpinv[] = { + 0x6f, 0x71, 0xde, 0x15, +}; + +TO_EC_STR_PARAM(bign384v1_mpinv); + +static const u8 bign384v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_p_shift); + +static const u8 bign384v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc3, +}; + +TO_EC_STR_PARAM(bign384v1_p_normalized); + +static const u8 bign384v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 bign384v1_r[] = { + 0x01, 0x3d, +}; + +TO_EC_STR_PARAM(bign384v1_r); + +static const u8 bign384v1_r_square[] = { + 0x01, 0x88, 0x89, +}; + +TO_EC_STR_PARAM(bign384v1_r_square); + +static const u8 bign384v1_mpinv[] = { + 0xde, 0x15, +}; + +TO_EC_STR_PARAM(bign384v1_mpinv); + +static const u8 bign384v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_p_shift); + +static const u8 bign384v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc3, +}; + +TO_EC_STR_PARAM(bign384v1_p_normalized); + +static const u8 bign384v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 bign384v1_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xc0, +}; + +TO_EC_STR_PARAM(bign384v1_a); + +static const u8 bign384v1_b[] = { + 0x3c, 0x75, 0xdf, 0xe1, 0x95, 0x9c, 0xef, 0x20, + 0x33, 0x07, 0x5a, 0xab, 0x65, 0x5d, 0x34, 0xd2, + 0x71, 0x27, 0x48, 0xbb, 0x0f, 0xfb, 0xb1, 0x96, + 0xa6, 0x21, 0x6a, 0xf9, 0xe9, 0x71, 0x2e, 0x3a, + 0x14, 0xbd, 0xe2, 0xf0, 0xf3, 0xce, 0xbd, 0x7c, + 0xbc, 0xa7, 0xfc, 0x23, 0x68, 0x73, 0xbf, 0x64, +}; + +TO_EC_STR_PARAM(bign384v1_b); + +#define CURVE_BIGN384V1_CURVE_ORDER_BITLEN 384 +static const u8 bign384v1_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x6c, 0xcc, 0xc4, 0x03, 0x73, 0xaf, 0x7b, 0xbb, + 0x80, 0x46, 0xda, 0xe7, 0xa6, 0xa4, 0xff, 0x0a, + 0x3d, 0xb7, 0xdc, 0x3f, 0xf3, 0x0c, 0xa7, 0xb7, +}; + +TO_EC_STR_PARAM(bign384v1_curve_order); + +static const u8 bign384v1_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(bign384v1_gx); + +static const u8 bign384v1_gy[] = { + 0x5d, 0x43, 0x82, 0x24, 0xa8, 0x2e, 0x9e, 0x9e, + 0x63, 0x30, 0x11, 0x7e, 0x43, 0x2d, 0xbf, 0x89, + 0x3a, 0x72, 0x9a, 0x11, 0xdc, 0x86, 0xff, 0xa0, + 0x05, 0x49, 0xe7, 0x9e, 0x66, 0xb1, 0xd3, 0x55, + 0x84, 0x40, 0x3e, 0x27, 0x6b, 0x2a, 0x42, 0xf9, + 0xea, 0x5e, 0xcb, 0x31, 0xf7, 0x33, 0xc4, 0x51, +}; + +TO_EC_STR_PARAM(bign384v1_gy); + +static const u8 bign384v1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(bign384v1_gz); + +static const u8 bign384v1_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x6c, 0xcc, 0xc4, 0x03, 0x73, 0xaf, 0x7b, 0xbb, + 0x80, 0x46, 0xda, 0xe7, 0xa6, 0xa4, 0xff, 0x0a, + 0x3d, 0xb7, 0xdc, 0x3f, 0xf3, 0x0c, 0xa7, 0xb7, +}; + +TO_EC_STR_PARAM(bign384v1_gen_order); + +#define CURVE_BIGN384V1_Q_BITLEN 384 +static const u8 bign384v1_gen_order_bitlen[] = { + 0x01, 0x80, +}; + +TO_EC_STR_PARAM(bign384v1_gen_order_bitlen); + +static const u8 bign384v1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(bign384v1_cofactor); + +static const u8 bign384v1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign384v1_alpha_montgomery, 0); + +static const u8 bign384v1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign384v1_gamma_montgomery, 0); + +static const u8 bign384v1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign384v1_alpha_edwards, 0); + +static const u8 bign384v1_name[] = "BIGN384V1"; +TO_EC_STR_PARAM(bign384v1_name); + +static const u8 bign384v1_oid[] = "1.2.112.0.2.0.34.101.45.3.2"; +TO_EC_STR_PARAM(bign384v1_oid); + +static const ec_str_params bign384v1_str_params = { + .p = &bign384v1_p_str_param, + .p_bitlen = &bign384v1_p_bitlen_str_param, + .r = &bign384v1_r_str_param, + .r_square = &bign384v1_r_square_str_param, + .mpinv = &bign384v1_mpinv_str_param, + .p_shift = &bign384v1_p_shift_str_param, + .p_normalized = &bign384v1_p_normalized_str_param, + .p_reciprocal = &bign384v1_p_reciprocal_str_param, + .a = &bign384v1_a_str_param, + .b = &bign384v1_b_str_param, + .curve_order = &bign384v1_curve_order_str_param, + .gx = &bign384v1_gx_str_param, + .gy = &bign384v1_gy_str_param, + .gz = &bign384v1_gz_str_param, + .gen_order = &bign384v1_gen_order_str_param, + .gen_order_bitlen = &bign384v1_gen_order_bitlen_str_param, + .cofactor = &bign384v1_cofactor_str_param, + .alpha_montgomery = &bign384v1_alpha_montgomery_str_param, + .gamma_montgomery = &bign384v1_gamma_montgomery_str_param, + .alpha_edwards = &bign384v1_alpha_edwards_str_param, + .oid = &bign384v1_oid_str_param, + .name = &bign384v1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BIGN384V1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BIGN384V1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BIGN384V1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BIGN384V1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BIGN384V1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BIGN384V1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 23) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 23 +#endif + +#endif /* __EC_PARAMS_BIGN384V1_H__ */ + +#endif /* WITH_CURVE_BIGN384V1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_bign512v1.h b/crypto/libecc/include/libecc/curves/known/ec_params_bign512v1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_bign512v1.h @@ -0,0 +1,359 @@ +#include +#ifdef WITH_CURVE_BIGN512V1 + +#ifndef __EC_PARAMS_BIGN512V1_H__ +#define __EC_PARAMS_BIGN512V1_H__ +#include +static const u8 bign512v1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(bign512v1_p); + +#define CURVE_BIGN512V1_P_BITLEN 512 +static const u8 bign512v1_p_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 bign512v1_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(bign512v1_r); + +static const u8 bign512v1_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(bign512v1_r_square); + +static const u8 bign512v1_mpinv[] = { + 0x58, 0xa1, 0xf7, 0xe6, 0xce, 0x0f, 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(bign512v1_mpinv); + +static const u8 bign512v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_shift); + +static const u8 bign512v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(bign512v1_p_normalized); + +static const u8 bign512v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 bign512v1_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(bign512v1_r); + +static const u8 bign512v1_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(bign512v1_r_square); + +static const u8 bign512v1_mpinv[] = { + 0xce, 0x0f, 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(bign512v1_mpinv); + +static const u8 bign512v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_shift); + +static const u8 bign512v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(bign512v1_p_normalized); + +static const u8 bign512v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 bign512v1_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(bign512v1_r); + +static const u8 bign512v1_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(bign512v1_r_square); + +static const u8 bign512v1_mpinv[] = { + 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(bign512v1_mpinv); + +static const u8 bign512v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_shift); + +static const u8 bign512v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(bign512v1_p_normalized); + +static const u8 bign512v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 bign512v1_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc4, +}; + +TO_EC_STR_PARAM(bign512v1_a); + +static const u8 bign512v1_b[] = { + 0x6c, 0xb4, 0x59, 0x44, 0x93, 0x3b, 0x8c, 0x43, + 0xd8, 0x8c, 0x5d, 0x6a, 0x60, 0xfd, 0x58, 0x89, + 0x5b, 0xc6, 0xa9, 0xee, 0xdd, 0x5d, 0x25, 0x51, + 0x17, 0xce, 0x13, 0xe3, 0xda, 0xad, 0xb0, 0x88, + 0x27, 0x11, 0xdc, 0xb5, 0xc4, 0x24, 0x5e, 0x95, + 0x29, 0x33, 0x00, 0x8c, 0x87, 0xac, 0xa2, 0x43, + 0xea, 0x86, 0x22, 0x27, 0x3a, 0x49, 0xa2, 0x7a, + 0x09, 0x34, 0x69, 0x98, 0xd6, 0x13, 0x9c, 0x90, +}; + +TO_EC_STR_PARAM(bign512v1_b); + +#define CURVE_BIGN512V1_CURVE_ORDER_BITLEN 512 +static const u8 bign512v1_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xb2, 0xc0, 0x09, 0x2c, 0x01, 0x98, 0x00, 0x4e, + 0xf2, 0x6b, 0xeb, 0xb0, 0x2e, 0x21, 0x13, 0xf4, + 0x36, 0x1b, 0xca, 0xe5, 0x95, 0x56, 0xdf, 0x32, + 0xdc, 0xff, 0xad, 0x49, 0x0d, 0x06, 0x8e, 0xf1, +}; + +TO_EC_STR_PARAM(bign512v1_curve_order); + +static const u8 bign512v1_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_gx); + +static const u8 bign512v1_gy[] = { + 0xa8, 0x26, 0xff, 0x7a, 0xe4, 0x03, 0x76, 0x81, + 0xb1, 0x82, 0xe6, 0xf7, 0xa0, 0xd1, 0x8f, 0xab, + 0xb0, 0xab, 0x41, 0xb3, 0xb3, 0x61, 0xbc, 0xe2, + 0xd2, 0xed, 0xf8, 0x1b, 0x00, 0xcc, 0xca, 0xda, + 0x69, 0x73, 0xdd, 0xe2, 0x0e, 0xfa, 0x6f, 0xd2, + 0xff, 0x77, 0x73, 0x95, 0xee, 0xe8, 0x22, 0x61, + 0x67, 0xaa, 0x83, 0xb9, 0xc9, 0x4c, 0x0d, 0x04, + 0xb7, 0x92, 0xae, 0x6f, 0xce, 0xef, 0xed, 0xbd, +}; + +TO_EC_STR_PARAM(bign512v1_gy); + +static const u8 bign512v1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(bign512v1_gz); + +static const u8 bign512v1_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xb2, 0xc0, 0x09, 0x2c, 0x01, 0x98, 0x00, 0x4e, + 0xf2, 0x6b, 0xeb, 0xb0, 0x2e, 0x21, 0x13, 0xf4, + 0x36, 0x1b, 0xca, 0xe5, 0x95, 0x56, 0xdf, 0x32, + 0xdc, 0xff, 0xad, 0x49, 0x0d, 0x06, 0x8e, 0xf1, +}; + +TO_EC_STR_PARAM(bign512v1_gen_order); + +#define CURVE_BIGN512V1_Q_BITLEN 512 +static const u8 bign512v1_gen_order_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(bign512v1_gen_order_bitlen); + +static const u8 bign512v1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(bign512v1_cofactor); + +static const u8 bign512v1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign512v1_alpha_montgomery, 0); + +static const u8 bign512v1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign512v1_gamma_montgomery, 0); + +static const u8 bign512v1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(bign512v1_alpha_edwards, 0); + +static const u8 bign512v1_name[] = "BIGN512V1"; +TO_EC_STR_PARAM(bign512v1_name); + +static const u8 bign512v1_oid[] = "1.2.112.0.2.0.34.101.45.3.3"; +TO_EC_STR_PARAM(bign512v1_oid); + +static const ec_str_params bign512v1_str_params = { + .p = &bign512v1_p_str_param, + .p_bitlen = &bign512v1_p_bitlen_str_param, + .r = &bign512v1_r_str_param, + .r_square = &bign512v1_r_square_str_param, + .mpinv = &bign512v1_mpinv_str_param, + .p_shift = &bign512v1_p_shift_str_param, + .p_normalized = &bign512v1_p_normalized_str_param, + .p_reciprocal = &bign512v1_p_reciprocal_str_param, + .a = &bign512v1_a_str_param, + .b = &bign512v1_b_str_param, + .curve_order = &bign512v1_curve_order_str_param, + .gx = &bign512v1_gx_str_param, + .gy = &bign512v1_gy_str_param, + .gz = &bign512v1_gz_str_param, + .gen_order = &bign512v1_gen_order_str_param, + .gen_order_bitlen = &bign512v1_gen_order_bitlen_str_param, + .cofactor = &bign512v1_cofactor_str_param, + .alpha_montgomery = &bign512v1_alpha_montgomery_str_param, + .gamma_montgomery = &bign512v1_gamma_montgomery_str_param, + .alpha_edwards = &bign512v1_alpha_edwards_str_param, + .oid = &bign512v1_oid_str_param, + .name = &bign512v1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BIGN512V1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BIGN512V1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BIGN512V1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BIGN512V1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BIGN512V1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BIGN512V1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 23) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 23 +#endif + +#endif /* __EC_PARAMS_BIGN512V1_H__ */ + +#endif /* WITH_CURVE_BIGN512V1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp192r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp192r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp192r1.h @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_BRAINPOOLP192R1 + +#ifndef __EC_PARAMS_BRAINPOOLP192R1_H__ +#define __EC_PARAMS_BRAINPOOLP192R1_H__ +#include +static const u8 brainpoolp192r1_p[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p); + +#define CURVE_BRAINPOOLP192R1_P_BITLEN 192 +static const u8 brainpoolp192r1_p_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp192r1_r[] = { + 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, + 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, + 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_r); + +static const u8 brainpoolp192r1_r_square[] = { + 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, + 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, + 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_r_square); + +static const u8 brainpoolp192r1_mpinv[] = { + 0xe0, 0x84, 0x96, 0xdb, 0x56, 0xa2, 0xc2, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_mpinv); + +static const u8 brainpoolp192r1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_shift); + +static const u8 brainpoolp192r1_p_normalized[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_normalized); + +static const u8 brainpoolp192r1_p_reciprocal[] = { + 0x50, 0x0f, 0xea, 0x39, 0xff, 0x17, 0x28, 0xc8, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp192r1_r[] = { + 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, + 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, + 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_r); + +static const u8 brainpoolp192r1_r_square[] = { + 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, + 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, + 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_r_square); + +static const u8 brainpoolp192r1_mpinv[] = { + 0x56, 0xa2, 0xc2, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_mpinv); + +static const u8 brainpoolp192r1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_shift); + +static const u8 brainpoolp192r1_p_normalized[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_normalized); + +static const u8 brainpoolp192r1_p_reciprocal[] = { + 0x50, 0x0f, 0xea, 0x39, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp192r1_r[] = { + 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, + 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, + 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_r); + +static const u8 brainpoolp192r1_r_square[] = { + 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, + 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, + 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_r_square); + +static const u8 brainpoolp192r1_mpinv[] = { + 0xc2, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_mpinv); + +static const u8 brainpoolp192r1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_shift); + +static const u8 brainpoolp192r1_p_normalized[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_normalized); + +static const u8 brainpoolp192r1_p_reciprocal[] = { + 0x50, 0x0f, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp192r1_a[] = { + 0x6a, 0x91, 0x17, 0x40, 0x76, 0xb1, 0xe0, 0xe1, + 0x9c, 0x39, 0xc0, 0x31, 0xfe, 0x86, 0x85, 0xc1, + 0xca, 0xe0, 0x40, 0xe5, 0xc6, 0x9a, 0x28, 0xef, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_a); + +static const u8 brainpoolp192r1_b[] = { + 0x46, 0x9a, 0x28, 0xef, 0x7c, 0x28, 0xcc, 0xa3, + 0xdc, 0x72, 0x1d, 0x04, 0x4f, 0x44, 0x96, 0xbc, + 0xca, 0x7e, 0xf4, 0x14, 0x6f, 0xbf, 0x25, 0xc9, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_b); + +#define CURVE_BRAINPOOLP192R1_CURVE_ORDER_BITLEN 192 +static const u8 brainpoolp192r1_curve_order[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, + 0x5b, 0xe8, 0xf1, 0x02, 0x9a, 0xc4, 0xac, 0xc1, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_curve_order); + +static const u8 brainpoolp192r1_gx[] = { + 0xc0, 0xa0, 0x64, 0x7e, 0xaa, 0xb6, 0xa4, 0x87, + 0x53, 0xb0, 0x33, 0xc5, 0x6c, 0xb0, 0xf0, 0x90, + 0x0a, 0x2f, 0x5c, 0x48, 0x53, 0x37, 0x5f, 0xd6, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_gx); + +static const u8 brainpoolp192r1_gy[] = { + 0x14, 0xb6, 0x90, 0x86, 0x6a, 0xbd, 0x5b, 0xb8, + 0x8b, 0x5f, 0x48, 0x28, 0xc1, 0x49, 0x00, 0x02, + 0xe6, 0x77, 0x3f, 0xa2, 0xfa, 0x29, 0x9b, 0x8f, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_gy); + +static const u8 brainpoolp192r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_gz); + +static const u8 brainpoolp192r1_gen_order[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, + 0x5b, 0xe8, 0xf1, 0x02, 0x9a, 0xc4, 0xac, 0xc1, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_gen_order); + +#define CURVE_BRAINPOOLP192R1_Q_BITLEN 192 +static const u8 brainpoolp192r1_gen_order_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_gen_order_bitlen); + +static const u8 brainpoolp192r1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp192r1_cofactor); + +static const u8 brainpoolp192r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192r1_alpha_montgomery, 0); + +static const u8 brainpoolp192r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192r1_gamma_montgomery, 0); + +static const u8 brainpoolp192r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192r1_alpha_edwards, 0); + +static const u8 brainpoolp192r1_name[] = "BRAINPOOLP192R1"; +TO_EC_STR_PARAM(brainpoolp192r1_name); + +static const u8 brainpoolp192r1_oid[] = "1.3.36.3.3.2.8.1.1.3"; +TO_EC_STR_PARAM(brainpoolp192r1_oid); + +static const ec_str_params brainpoolp192r1_str_params = { + .p = &brainpoolp192r1_p_str_param, + .p_bitlen = &brainpoolp192r1_p_bitlen_str_param, + .r = &brainpoolp192r1_r_str_param, + .r_square = &brainpoolp192r1_r_square_str_param, + .mpinv = &brainpoolp192r1_mpinv_str_param, + .p_shift = &brainpoolp192r1_p_shift_str_param, + .p_normalized = &brainpoolp192r1_p_normalized_str_param, + .p_reciprocal = &brainpoolp192r1_p_reciprocal_str_param, + .a = &brainpoolp192r1_a_str_param, + .b = &brainpoolp192r1_b_str_param, + .curve_order = &brainpoolp192r1_curve_order_str_param, + .gx = &brainpoolp192r1_gx_str_param, + .gy = &brainpoolp192r1_gy_str_param, + .gz = &brainpoolp192r1_gz_str_param, + .gen_order = &brainpoolp192r1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp192r1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp192r1_cofactor_str_param, + .alpha_montgomery = &brainpoolp192r1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp192r1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp192r1_alpha_edwards_str_param, + .oid = &brainpoolp192r1_oid_str_param, + .name = &brainpoolp192r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP192R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP192R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP192R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP192R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP192R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP192R1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 28) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 28 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP192R1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP192R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp192t1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp192t1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp192t1.h @@ -0,0 +1,316 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP192T1 + +#ifndef __EC_PARAMS_BRAINPOOLP192T1_H__ +#define __EC_PARAMS_BRAINPOOLP192T1_H__ +#include +static const u8 brainpoolp192t1_p[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p); + +#define CURVE_BRAINPOOLP192T1_P_BITLEN 192 +static const u8 brainpoolp192t1_p_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp192t1_r[] = { + 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, + 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, + 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_r); + +static const u8 brainpoolp192t1_r_square[] = { + 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, + 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, + 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_r_square); + +static const u8 brainpoolp192t1_mpinv[] = { + 0xe0, 0x84, 0x96, 0xdb, 0x56, 0xa2, 0xc2, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_mpinv); + +static const u8 brainpoolp192t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_shift); + +static const u8 brainpoolp192t1_p_normalized[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_normalized); + +static const u8 brainpoolp192t1_p_reciprocal[] = { + 0x50, 0x0f, 0xea, 0x39, 0xff, 0x17, 0x28, 0xc8, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp192t1_r[] = { + 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, + 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, + 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_r); + +static const u8 brainpoolp192t1_r_square[] = { + 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, + 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, + 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_r_square); + +static const u8 brainpoolp192t1_mpinv[] = { + 0x56, 0xa2, 0xc2, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_mpinv); + +static const u8 brainpoolp192t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_shift); + +static const u8 brainpoolp192t1_p_normalized[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_normalized); + +static const u8 brainpoolp192t1_p_reciprocal[] = { + 0x50, 0x0f, 0xea, 0x39, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp192t1_r[] = { + 0x3c, 0xfd, 0x0b, 0xe2, 0x6c, 0xd5, 0xc9, 0x32, + 0x58, 0x5c, 0xb9, 0xcf, 0x6c, 0x2e, 0x72, 0x48, + 0x70, 0x31, 0xb8, 0x92, 0x1e, 0x57, 0x9d, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_r); + +static const u8 brainpoolp192t1_r_square[] = { + 0xb6, 0x22, 0x51, 0x26, 0xee, 0xd3, 0x4f, 0x10, + 0x33, 0xbf, 0x48, 0x46, 0x02, 0xc3, 0xfe, 0x69, + 0xe2, 0x47, 0x4c, 0x69, 0x72, 0xc7, 0xb2, 0x1a, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_r_square); + +static const u8 brainpoolp192t1_mpinv[] = { + 0xc2, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_mpinv); + +static const u8 brainpoolp192t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_shift); + +static const u8 brainpoolp192t1_p_normalized[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x97, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_normalized); + +static const u8 brainpoolp192t1_p_reciprocal[] = { + 0x50, 0x0f, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp192t1_a[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x30, 0x93, 0xd1, 0x8d, 0xb7, + 0x8f, 0xce, 0x47, 0x6d, 0xe1, 0xa8, 0x62, 0x94, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_a); + +static const u8 brainpoolp192t1_b[] = { + 0x13, 0xd5, 0x6f, 0xfa, 0xec, 0x78, 0x68, 0x1e, + 0x68, 0xf9, 0xde, 0xb4, 0x3b, 0x35, 0xbe, 0xc2, + 0xfb, 0x68, 0x54, 0x2e, 0x27, 0x89, 0x7b, 0x79, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_b); + +#define CURVE_BRAINPOOLP192T1_CURVE_ORDER_BITLEN 192 +static const u8 brainpoolp192t1_curve_order[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, + 0x5b, 0xe8, 0xf1, 0x02, 0x9a, 0xc4, 0xac, 0xc1, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_curve_order); + +static const u8 brainpoolp192t1_gx[] = { + 0x3a, 0xe9, 0xe5, 0x8c, 0x82, 0xf6, 0x3c, 0x30, + 0x28, 0x2e, 0x1f, 0xe7, 0xbb, 0xf4, 0x3f, 0xa7, + 0x2c, 0x44, 0x6a, 0xf6, 0xf4, 0x61, 0x81, 0x29, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_gx); + +static const u8 brainpoolp192t1_gy[] = { + 0x09, 0x7e, 0x2c, 0x56, 0x67, 0xc2, 0x22, 0x3a, + 0x90, 0x2a, 0xb5, 0xca, 0x44, 0x9d, 0x00, 0x84, + 0xb7, 0xe5, 0xb3, 0xde, 0x7c, 0xcc, 0x01, 0xc9, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_gy); + +static const u8 brainpoolp192t1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_gz); + +static const u8 brainpoolp192t1_gen_order[] = { + 0xc3, 0x02, 0xf4, 0x1d, 0x93, 0x2a, 0x36, 0xcd, + 0xa7, 0xa3, 0x46, 0x2f, 0x9e, 0x9e, 0x91, 0x6b, + 0x5b, 0xe8, 0xf1, 0x02, 0x9a, 0xc4, 0xac, 0xc1, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_gen_order); + +#define CURVE_BRAINPOOLP192T1_Q_BITLEN 192 +static const u8 brainpoolp192t1_gen_order_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_gen_order_bitlen); + +static const u8 brainpoolp192t1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp192t1_cofactor); + +static const u8 brainpoolp192t1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192t1_alpha_montgomery, 0); + +static const u8 brainpoolp192t1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192t1_gamma_montgomery, 0); + +static const u8 brainpoolp192t1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp192t1_alpha_edwards, 0); + +static const u8 brainpoolp192t1_name[] = "BRAINPOOLP192T1"; +TO_EC_STR_PARAM(brainpoolp192t1_name); + +static const u8 brainpoolp192t1_oid[] = "1.3.36.3.3.2.8.1.1.4"; +TO_EC_STR_PARAM(brainpoolp192t1_oid); + +static const ec_str_params brainpoolp192t1_str_params = { + .p = &brainpoolp192t1_p_str_param, + .p_bitlen = &brainpoolp192t1_p_bitlen_str_param, + .r = &brainpoolp192t1_r_str_param, + .r_square = &brainpoolp192t1_r_square_str_param, + .mpinv = &brainpoolp192t1_mpinv_str_param, + .p_shift = &brainpoolp192t1_p_shift_str_param, + .p_normalized = &brainpoolp192t1_p_normalized_str_param, + .p_reciprocal = &brainpoolp192t1_p_reciprocal_str_param, + .a = &brainpoolp192t1_a_str_param, + .b = &brainpoolp192t1_b_str_param, + .curve_order = &brainpoolp192t1_curve_order_str_param, + .gx = &brainpoolp192t1_gx_str_param, + .gy = &brainpoolp192t1_gy_str_param, + .gz = &brainpoolp192t1_gz_str_param, + .gen_order = &brainpoolp192t1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp192t1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp192t1_cofactor_str_param, + .alpha_montgomery = &brainpoolp192t1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp192t1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp192t1_alpha_edwards_str_param, + .oid = &brainpoolp192t1_oid_str_param, + .name = &brainpoolp192t1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP192T1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP192T1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP192T1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP192T1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP192T1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP192T1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP192T1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP192T1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp224r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp224r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp224r1.h @@ -0,0 +1,295 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_BRAINPOOLP224R1 + +#ifndef __EC_PARAMS_BRAINPOOLP224R1_H__ +#define __EC_PARAMS_BRAINPOOLP224R1_H__ +#include "ec_params_external.h" + +static const u8 brainpoolp224r1_p[] = { + 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, + 0x2A, 0x18, 0x30, 0x25, 0x75, 0xD1, 0xD7, 0x87, + 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5, + 0x7E, 0xC8, 0xC0, 0xFF +}; + +TO_EC_STR_PARAM(brainpoolp224r1_p); + +#define CURVE_BRAINPOOLP224R1_P_BITLEN 224 +static const u8 brainpoolp224r1_p_bitlen[] = { 0xE0 }; + +TO_EC_STR_PARAM(brainpoolp224r1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp224r1_p_normalized[] = { + 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, + 0x2A, 0x18, 0x30, 0x25, 0x75, 0xD1, 0xD7, 0x87, + 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5, + 0x7E, 0xC8, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00 +}; + +static const u8 brainpoolp224r1_r[] = { + 0x00, 0x00, 0x00, 0x00, 0x79, 0x36, 0x06, 0x11, + 0x1c, 0x3f, 0xb2, 0x44, 0x7b, 0x57, 0x6c, 0xf5, + 0xa8, 0xe8, 0x42, 0x8f, 0x5c, 0xbf, 0x03, 0x89, + 0xd6, 0x82, 0x78, 0x5e, 0x20, 0xb5, 0x62, 0xf7 +}; + +static const u8 brainpoolp224r1_r_square[] = { + 0x00, 0x00, 0x00, 0x00, 0x2b, 0x3d, 0x40, 0xdd, + 0x7e, 0xa5, 0x57, 0x7c, 0x77, 0xe3, 0xd7, 0xe4, + 0x76, 0xf9, 0xee, 0x46, 0xf6, 0x91, 0xd1, 0x05, + 0x3b, 0xfb, 0xc9, 0xbf, 0x6b, 0x3d, 0x58, 0xff +}; + +static const u8 brainpoolp224r1_p_shift[] = { + 0x20 +}; + +static const u8 brainpoolp224r1_mpinv[] = { + 0xE2, 0x4D, 0x21, 0x6A, 0xE1, 0x49, 0xC1, 0x01 +}; + +static const u8 brainpoolp224r1_p_reciprocal[] = { + 0x2F, 0xC0, 0x99, 0xF7, 0x8F, 0xD2, 0x22, 0x99 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp224r1_p_normalized[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xff +}; + +static const u8 brainpoolp224r1_r[] = { + 0x28, 0x3e, 0xcb, 0x55, 0xd9, 0xbc, 0x99, 0x79, + 0xd5, 0xe7, 0xcf, 0xda, 0x8a, 0x2e, 0x28, 0x78, + 0x4f, 0x60, 0xf8, 0xa8, 0x68, 0x25, 0x76, 0x0a, + 0x81, 0x37, 0x3f, 0x01 +}; + +static const u8 brainpoolp224r1_r_square[] = { + 0x05, 0x78, 0xfd, 0x59, 0x2e, 0x6a, 0x6c, 0xe4, + 0x3f, 0xe8, 0xa2, 0xaa, 0x96, 0xaf, 0x77, 0x4c, + 0x43, 0xc2, 0x0e, 0x72, 0x78, 0x67, 0xca, 0x80, + 0x64, 0xdc, 0xd0, 0x4f +}; + +static const u8 brainpoolp224r1_p_shift[] = { + 0x00 +}; + +static const u8 brainpoolp224r1_mpinv[] = { + 0xE1, 0x49, 0xC1, 0x01 +}; + +static const u8 brainpoolp224r1_p_reciprocal[] = { + 0x2F, 0xC0, 0x99, 0xF7 +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp224r1_p_normalized[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xff +}; + +static const u8 brainpoolp224r1_r[] = { + 0x28, 0x3e, 0xcb, 0x55, 0xd9, 0xbc, 0x99, 0x79, + 0xd5, 0xe7, 0xcf, 0xda, 0x8a, 0x2e, 0x28, 0x78, + 0x4f, 0x60, 0xf8, 0xa8, 0x68, 0x25, 0x76, 0x0a, + 0x81, 0x37, 0x3f, 0x01 +}; + +static const u8 brainpoolp224r1_r_square[] = { + 0x05, 0x78, 0xfd, 0x59, 0x2e, 0x6a, 0x6c, 0xe4, + 0x3f, 0xe8, 0xa2, 0xaa, 0x96, 0xaf, 0x77, 0x4c, + 0x43, 0xc2, 0x0e, 0x72, 0x78, 0x67, 0xca, 0x80, + 0x64, 0xdc, 0xd0, 0x4f +}; + +static const u8 brainpoolp224r1_p_shift[] = { + 0x00 +}; + +static const u8 brainpoolp224r1_mpinv[] = { + 0xC1, 0x01 +}; + +static const u8 brainpoolp224r1_p_reciprocal[] = { + 0x2F, 0xC0 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(brainpoolp224r1_p_normalized); +TO_EC_STR_PARAM(brainpoolp224r1_p_shift); +TO_EC_STR_PARAM(brainpoolp224r1_r); +TO_EC_STR_PARAM(brainpoolp224r1_r_square); +TO_EC_STR_PARAM(brainpoolp224r1_mpinv); +TO_EC_STR_PARAM(brainpoolp224r1_p_reciprocal); + +static const u8 brainpoolp224r1_a[] = { + 0x68, 0xA5, 0xE6, 0x2C, 0xA9, 0xCE, 0x6C, 0x1C, + 0x29, 0x98, 0x03, 0xA6, 0xC1, 0x53, 0x0B, 0x51, + 0x4E, 0x18, 0x2A, 0xD8, 0xB0, 0x04, 0x2A, 0x59, + 0xCA, 0xD2, 0x9F, 0x43 +}; + +TO_EC_STR_PARAM(brainpoolp224r1_a); + +static const u8 brainpoolp224r1_b[] = { + 0x25, 0x80, 0xF6, 0x3C, 0xCF, 0xE4, 0x41, 0x38, + 0x87, 0x07, 0x13, 0xB1, 0xA9, 0x23, 0x69, 0xE3, + 0x3E, 0x21, 0x35, 0xD2, 0x66, 0xDB, 0xB3, 0x72, + 0x38, 0x6C, 0x40, 0x0B +}; + +TO_EC_STR_PARAM(brainpoolp224r1_b); + +static const u8 brainpoolp224r1_curve_order[] = { + 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, + 0x2A, 0x18, 0x30, 0x25, 0x75, 0xD0, 0xFB, 0x98, + 0xD1, 0x16, 0xBC, 0x4B, 0x6D, 0xDE, 0xBC, 0xA3, + 0xA5, 0xA7, 0x93, 0x9F +}; + +TO_EC_STR_PARAM(brainpoolp224r1_curve_order); + +static const u8 brainpoolp224r1_gx[] = { + 0x0D, 0x90, 0x29, 0xAD, 0x2C, 0x7E, 0x5C, 0xF4, + 0x34, 0x08, 0x23, 0xB2, 0xA8, 0x7D, 0xC6, 0x8C, + 0x9E, 0x4C, 0xE3, 0x17, 0x4C, 0x1E, 0x6E, 0xFD, + 0xEE, 0x12, 0xC0, 0x7D +}; + +TO_EC_STR_PARAM(brainpoolp224r1_gx); + +static const u8 brainpoolp224r1_gy[] = { + 0x58, 0xAA, 0x56, 0xF7, 0x72, 0xC0, 0x72, 0x6F, + 0x24, 0xC6, 0xB8, 0x9E, 0x4E, 0xCD, 0xAC, 0x24, + 0x35, 0x4B, 0x9E, 0x99, 0xCA, 0xA3, 0xF6, 0xD3, + 0x76, 0x14, 0x02, 0xCD +}; + +TO_EC_STR_PARAM(brainpoolp224r1_gy); + +static const u8 brainpoolp224r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(brainpoolp224r1_gz); + +#define CURVE_BRAINPOOLP224R1_CURVE_ORDER_BITLEN 224 +static const u8 brainpoolp224r1_gen_order[] = { + 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, + 0x2A, 0x18, 0x30, 0x25, 0x75, 0xD0, 0xFB, 0x98, + 0xD1, 0x16, 0xBC, 0x4B, 0x6D, 0xDE, 0xBC, 0xA3, + 0xA5, 0xA7, 0x93, 0x9F +}; + +TO_EC_STR_PARAM(brainpoolp224r1_gen_order); + +#define CURVE_BRAINPOOLP224R1_Q_BITLEN 224 +static const u8 brainpoolp224r1_gen_order_bitlen[] = { 0xE0 }; + +TO_EC_STR_PARAM(brainpoolp224r1_gen_order_bitlen); + +static const u8 brainpoolp224r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(brainpoolp224r1_cofactor); + +static const u8 brainpoolp224r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp224r1_alpha_montgomery, 0); + +static const u8 brainpoolp224r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp224r1_gamma_montgomery, 0); + +static const u8 brainpoolp224r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp224r1_alpha_edwards, 0); + +static const u8 brainpoolp224r1_oid[] = "1.3.36.3.3.2.8.1.1.5"; +TO_EC_STR_PARAM(brainpoolp224r1_oid); + +static const u8 brainpoolp224r1_name[] = "BRAINPOOLP224R1"; +TO_EC_STR_PARAM(brainpoolp224r1_name); + +static const ec_str_params brainpoolp224r1_str_params = { + .p = &brainpoolp224r1_p_str_param, + .p_bitlen = &brainpoolp224r1_p_bitlen_str_param, + .r = &brainpoolp224r1_r_str_param, + .r_square = &brainpoolp224r1_r_square_str_param, + .mpinv = &brainpoolp224r1_mpinv_str_param, + .p_shift = &brainpoolp224r1_p_shift_str_param, + .p_normalized = &brainpoolp224r1_p_normalized_str_param, + .p_reciprocal = &brainpoolp224r1_p_reciprocal_str_param, + .a = &brainpoolp224r1_a_str_param, + .b = &brainpoolp224r1_b_str_param, + .curve_order = &brainpoolp224r1_curve_order_str_param, + .gx = &brainpoolp224r1_gx_str_param, + .gy = &brainpoolp224r1_gy_str_param, + .gz = &brainpoolp224r1_gz_str_param, + .gen_order = &brainpoolp224r1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp224r1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp224r1_cofactor_str_param, + .alpha_montgomery = &brainpoolp224r1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp224r1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp224r1_alpha_edwards_str_param, + .oid = &brainpoolp224r1_oid_str_param, + .name = &brainpoolp224r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP224R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP224R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP224R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP224R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP224R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP224R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP224R1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP224R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp224t1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp224t1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp224t1.h @@ -0,0 +1,333 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP224T1 + +#ifndef __EC_PARAMS_BRAINPOOLP224T1_H__ +#define __EC_PARAMS_BRAINPOOLP224T1_H__ +#include +static const u8 brainpoolp224t1_p[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xff, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p); + +#define CURVE_BRAINPOOLP224T1_P_BITLEN 224 +static const u8 brainpoolp224t1_p_bitlen[] = { + 0xe0, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp224t1_r[] = { + 0x79, 0x36, 0x06, 0x11, 0x1c, 0x3f, 0xb2, 0x44, + 0x7b, 0x57, 0x6c, 0xf5, 0xa8, 0xe8, 0x42, 0x8f, + 0x5c, 0xbf, 0x03, 0x89, 0xd6, 0x82, 0x78, 0x5e, + 0x20, 0xb5, 0x62, 0xf7, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_r); + +static const u8 brainpoolp224t1_r_square[] = { + 0x2b, 0x3d, 0x40, 0xdd, 0x7e, 0xa5, 0x57, 0x7c, + 0x77, 0xe3, 0xd7, 0xe4, 0x76, 0xf9, 0xee, 0x46, + 0xf6, 0x91, 0xd1, 0x05, 0x3b, 0xfb, 0xc9, 0xbf, + 0x6b, 0x3d, 0x58, 0xff, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_r_square); + +static const u8 brainpoolp224t1_mpinv[] = { + 0xe2, 0x4d, 0x21, 0x6a, 0xe1, 0x49, 0xc1, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_mpinv); + +static const u8 brainpoolp224t1_p_shift[] = { + 0x20, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_shift); + +static const u8 brainpoolp224t1_p_normalized[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_normalized); + +static const u8 brainpoolp224t1_p_reciprocal[] = { + 0x2f, 0xc0, 0x99, 0xf7, 0x8f, 0xd2, 0x22, 0x99, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp224t1_r[] = { + 0x28, 0x3e, 0xcb, 0x55, 0xd9, 0xbc, 0x99, 0x79, + 0xd5, 0xe7, 0xcf, 0xda, 0x8a, 0x2e, 0x28, 0x78, + 0x4f, 0x60, 0xf8, 0xa8, 0x68, 0x25, 0x76, 0x0a, + 0x81, 0x37, 0x3f, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_r); + +static const u8 brainpoolp224t1_r_square[] = { + 0x05, 0x78, 0xfd, 0x59, 0x2e, 0x6a, 0x6c, 0xe4, + 0x3f, 0xe8, 0xa2, 0xaa, 0x96, 0xaf, 0x77, 0x4c, + 0x43, 0xc2, 0x0e, 0x72, 0x78, 0x67, 0xca, 0x80, + 0x64, 0xdc, 0xd0, 0x4f, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_r_square); + +static const u8 brainpoolp224t1_mpinv[] = { + 0xe1, 0x49, 0xc1, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_mpinv); + +static const u8 brainpoolp224t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_shift); + +static const u8 brainpoolp224t1_p_normalized[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xff, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_normalized); + +static const u8 brainpoolp224t1_p_reciprocal[] = { + 0x2f, 0xc0, 0x99, 0xf7, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp224t1_r[] = { + 0x28, 0x3e, 0xcb, 0x55, 0xd9, 0xbc, 0x99, 0x79, + 0xd5, 0xe7, 0xcf, 0xda, 0x8a, 0x2e, 0x28, 0x78, + 0x4f, 0x60, 0xf8, 0xa8, 0x68, 0x25, 0x76, 0x0a, + 0x81, 0x37, 0x3f, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_r); + +static const u8 brainpoolp224t1_r_square[] = { + 0x05, 0x78, 0xfd, 0x59, 0x2e, 0x6a, 0x6c, 0xe4, + 0x3f, 0xe8, 0xa2, 0xaa, 0x96, 0xaf, 0x77, 0x4c, + 0x43, 0xc2, 0x0e, 0x72, 0x78, 0x67, 0xca, 0x80, + 0x64, 0xdc, 0xd0, 0x4f, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_r_square); + +static const u8 brainpoolp224t1_mpinv[] = { + 0xc1, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_mpinv); + +static const u8 brainpoolp224t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_shift); + +static const u8 brainpoolp224t1_p_normalized[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xff, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_normalized); + +static const u8 brainpoolp224t1_p_reciprocal[] = { + 0x2f, 0xc0, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp224t1_a[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd1, 0xd7, 0x87, + 0xb0, 0x9f, 0x07, 0x57, 0x97, 0xda, 0x89, 0xf5, + 0x7e, 0xc8, 0xc0, 0xfc, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_a); + +static const u8 brainpoolp224t1_b[] = { + 0x4b, 0x33, 0x7d, 0x93, 0x41, 0x04, 0xcd, 0x7b, + 0xef, 0x27, 0x1b, 0xf6, 0x0c, 0xed, 0x1e, 0xd2, + 0x0d, 0xa1, 0x4c, 0x08, 0xb3, 0xbb, 0x64, 0xf1, + 0x8a, 0x60, 0x88, 0x8d, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_b); + +#define CURVE_BRAINPOOLP224T1_CURVE_ORDER_BITLEN 224 +static const u8 brainpoolp224t1_curve_order[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd0, 0xfb, 0x98, + 0xd1, 0x16, 0xbc, 0x4b, 0x6d, 0xde, 0xbc, 0xa3, + 0xa5, 0xa7, 0x93, 0x9f, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_curve_order); + +static const u8 brainpoolp224t1_gx[] = { + 0x6a, 0xb1, 0xe3, 0x44, 0xce, 0x25, 0xff, 0x38, + 0x96, 0x42, 0x4e, 0x7f, 0xfe, 0x14, 0x76, 0x2e, + 0xcb, 0x49, 0xf8, 0x92, 0x8a, 0xc0, 0xc7, 0x60, + 0x29, 0xb4, 0xd5, 0x80, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_gx); + +static const u8 brainpoolp224t1_gy[] = { + 0x03, 0x74, 0xe9, 0xf5, 0x14, 0x3e, 0x56, 0x8c, + 0xd2, 0x3f, 0x3f, 0x4d, 0x7c, 0x0d, 0x4b, 0x1e, + 0x41, 0xc8, 0xcc, 0x0d, 0x1c, 0x6a, 0xbd, 0x5f, + 0x1a, 0x46, 0xdb, 0x4c, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_gy); + +static const u8 brainpoolp224t1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_gz); + +static const u8 brainpoolp224t1_gen_order[] = { + 0xd7, 0xc1, 0x34, 0xaa, 0x26, 0x43, 0x66, 0x86, + 0x2a, 0x18, 0x30, 0x25, 0x75, 0xd0, 0xfb, 0x98, + 0xd1, 0x16, 0xbc, 0x4b, 0x6d, 0xde, 0xbc, 0xa3, + 0xa5, 0xa7, 0x93, 0x9f, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_gen_order); + +#define CURVE_BRAINPOOLP224T1_Q_BITLEN 224 +static const u8 brainpoolp224t1_gen_order_bitlen[] = { + 0xe0, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_gen_order_bitlen); + +static const u8 brainpoolp224t1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp224t1_cofactor); + +static const u8 brainpoolp224t1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp224t1_alpha_montgomery, 0); + +static const u8 brainpoolp224t1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp224t1_gamma_montgomery, 0); + +static const u8 brainpoolp224t1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp224t1_alpha_edwards, 0); + +static const u8 brainpoolp224t1_name[] = "BRAINPOOLP224T1"; +TO_EC_STR_PARAM(brainpoolp224t1_name); + +static const u8 brainpoolp224t1_oid[] = "1.3.36.3.3.2.8.1.1.6"; +TO_EC_STR_PARAM(brainpoolp224t1_oid); + +static const ec_str_params brainpoolp224t1_str_params = { + .p = &brainpoolp224t1_p_str_param, + .p_bitlen = &brainpoolp224t1_p_bitlen_str_param, + .r = &brainpoolp224t1_r_str_param, + .r_square = &brainpoolp224t1_r_square_str_param, + .mpinv = &brainpoolp224t1_mpinv_str_param, + .p_shift = &brainpoolp224t1_p_shift_str_param, + .p_normalized = &brainpoolp224t1_p_normalized_str_param, + .p_reciprocal = &brainpoolp224t1_p_reciprocal_str_param, + .a = &brainpoolp224t1_a_str_param, + .b = &brainpoolp224t1_b_str_param, + .curve_order = &brainpoolp224t1_curve_order_str_param, + .gx = &brainpoolp224t1_gx_str_param, + .gy = &brainpoolp224t1_gy_str_param, + .gz = &brainpoolp224t1_gz_str_param, + .gen_order = &brainpoolp224t1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp224t1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp224t1_cofactor_str_param, + .alpha_montgomery = &brainpoolp224t1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp224t1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp224t1_alpha_edwards_str_param, + .oid = &brainpoolp224t1_oid_str_param, + .name = &brainpoolp224t1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP224T1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP224T1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP224T1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP224T1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP224T1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP224T1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP224T1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP224T1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp256r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp256r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp256r1.h @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_BRAINPOOLP256R1 + +#ifndef __EC_PARAMS_BRAINPOOLP256R1_H__ +#define __EC_PARAMS_BRAINPOOLP256R1_H__ +#include "ec_params_external.h" + +static const u8 brainpoolp256r1_p[] = { + 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, + 0x3E, 0x66, 0x0A, 0x90, 0x9D, 0x83, 0x8D, 0x72, + 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28, + 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x77 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_p); + +#define CURVE_BRAINPOOLP256R1_P_BITLEN 256 +static const u8 brainpoolp256r1_p_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(brainpoolp256r1_p_bitlen); + +static const u8 brainpoolp256r1_r[] = { + 0x56, 0x04, 0xa8, 0x24, 0x5e, 0x11, 0x56, 0x43, + 0xc1, 0x99, 0xf5, 0x6f, 0x62, 0x7c, 0x72, 0x8d, + 0x91, 0xc4, 0x09, 0xdc, 0x2a, 0xd9, 0xdf, 0xd7, + 0xdf, 0xec, 0xb7, 0xe2, 0xe0, 0x91, 0xac, 0x89 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_r); + +static const u8 brainpoolp256r1_r_square[] = { + 0x47, 0x17, 0xaa, 0x21, 0xe5, 0x95, 0x7f, 0xa8, + 0xa1, 0xec, 0xda, 0xcd, 0x6b, 0x1a, 0xc8, 0x07, + 0x5c, 0xce, 0x4c, 0x26, 0x61, 0x4d, 0x4f, 0x4d, + 0x8c, 0xfe, 0xdf, 0x7b, 0xa6, 0x46, 0x5b, 0x6c +}; + +TO_EC_STR_PARAM(brainpoolp256r1_r_square); + +static const u8 brainpoolp256r1_mpinv[] = { + 0xc6, 0xa7, 0x55, 0x90, 0xce, 0xfd, 0x89, 0xb9 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_mpinv); + +static const u8 brainpoolp256r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp256r1_p_reciprocal[] = { + 0x81, 0x8c, 0x11, 0x31, 0xa1, 0xc5, 0x5b, 0x7e +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp256r1_p_reciprocal[] = { + 0x81, 0x8c, 0x11, 0x31 +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp256r1_p_reciprocal[] = { + 0x81, 0x8c +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(brainpoolp256r1_p_reciprocal); + +static const u8 brainpoolp256r1_a[] = { + 0x7D, 0x5A, 0x09, 0x75, 0xFC, 0x2C, 0x30, 0x57, 0xEE, 0xF6, 0x75, 0x30, + 0x41, 0x7A, 0xFF, 0xE7, 0xFB, 0x80, 0x55, 0xC1, 0x26, 0xDC, 0x5C, 0x6C, + 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30, 0xB5, 0xD9 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_a); + +static const u8 brainpoolp256r1_b[] = { + 0x26, 0xDC, 0x5C, 0x6C, 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30, 0xB5, 0xD9, + 0xBB, 0xD7, 0x7C, 0xBF, 0x95, 0x84, 0x16, 0x29, 0x5C, 0xF7, 0xE1, 0xCE, + 0x6B, 0xCC, 0xDC, 0x18, 0xFF, 0x8C, 0x07, 0xB6 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_b); + +#define CURVE_BRAINPOOLP256R1_CURVE_ORDER_BITLEN 256 +static const u8 brainpoolp256r1_curve_order[] = { + 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90, + 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3, 0xB5, 0x61, 0xA6, 0xF7, + 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48, 0x56, 0xA7 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_curve_order); + +static const u8 brainpoolp256r1_gx[] = { + 0x8B, 0xD2, 0xAE, 0xB9, 0xCB, 0x7E, 0x57, 0xCB, 0x2C, 0x4B, 0x48, 0x2F, + 0xFC, 0x81, 0xB7, 0xAF, 0xB9, 0xDE, 0x27, 0xE1, 0xE3, 0xBD, 0x23, 0xC2, + 0x3A, 0x44, 0x53, 0xBD, 0x9A, 0xCE, 0x32, 0x62 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_gx); + +static const u8 brainpoolp256r1_gy[] = { + 0x54, 0x7E, 0xF8, 0x35, 0xC3, 0xDA, 0xC4, 0xFD, 0x97, 0xF8, 0x46, 0x1A, + 0x14, 0x61, 0x1D, 0xC9, 0xC2, 0x77, 0x45, 0x13, 0x2D, 0xED, 0x8E, 0x54, + 0x5C, 0x1D, 0x54, 0xC7, 0x2F, 0x04, 0x69, 0x97 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_gy); + +static const u8 brainpoolp256r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_gz); + +static const u8 brainpoolp256r1_gen_order[] = { + 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90, + 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3, 0xB5, 0x61, 0xA6, 0xF7, + 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48, 0x56, 0xA7 +}; + +TO_EC_STR_PARAM(brainpoolp256r1_gen_order); + +#define CURVE_BRAINPOOLP256R1_Q_BITLEN 256 +static const u8 brainpoolp256r1_gen_order_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(brainpoolp256r1_gen_order_bitlen); + +static const u8 brainpoolp256r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(brainpoolp256r1_cofactor); + +static const u8 brainpoolp256r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp256r1_alpha_montgomery, 0); + +static const u8 brainpoolp256r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp256r1_gamma_montgomery, 0); + +static const u8 brainpoolp256r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp256r1_alpha_edwards, 0); + +static const u8 brainpoolp256r1_oid[] = "1.3.36.3.3.2.8.1.1.7"; +TO_EC_STR_PARAM(brainpoolp256r1_oid); + +static const u8 brainpoolp256r1_name[] = "BRAINPOOLP256R1"; +TO_EC_STR_PARAM(brainpoolp256r1_name); + +static const ec_str_params brainpoolp256r1_str_params = { + .p = &brainpoolp256r1_p_str_param, + .p_bitlen = &brainpoolp256r1_p_bitlen_str_param, + .r = &brainpoolp256r1_r_str_param, + .r_square = &brainpoolp256r1_r_square_str_param, + .mpinv = &brainpoolp256r1_mpinv_str_param, + .p_shift = &brainpoolp256r1_p_shift_str_param, + .p_normalized = &brainpoolp256r1_p_str_param, + .p_reciprocal = &brainpoolp256r1_p_reciprocal_str_param, + .a = &brainpoolp256r1_a_str_param, + .b = &brainpoolp256r1_b_str_param, + .curve_order = &brainpoolp256r1_curve_order_str_param, + .gx = &brainpoolp256r1_gx_str_param, + .gy = &brainpoolp256r1_gy_str_param, + .gz = &brainpoolp256r1_gz_str_param, + .gen_order = &brainpoolp256r1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp256r1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp256r1_cofactor_str_param, + .alpha_montgomery = &brainpoolp256r1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp256r1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp256r1_alpha_edwards_str_param, + .oid = &brainpoolp256r1_oid_str_param, + .name = &brainpoolp256r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP256R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP256R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP256R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP256R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP256R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP256R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP256R1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp256t1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp256t1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp256t1.h @@ -0,0 +1,333 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP256T1 + +#ifndef __EC_PARAMS_BRAINPOOLP256T1_H__ +#define __EC_PARAMS_BRAINPOOLP256T1_H__ +#include +static const u8 brainpoolp256t1_p[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, + 0x6e, 0x3b, 0xf6, 0x23, 0xd5, 0x26, 0x20, 0x28, + 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e, 0x53, 0x77, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p); + +#define CURVE_BRAINPOOLP256T1_P_BITLEN 256 +static const u8 brainpoolp256t1_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp256t1_r[] = { + 0x56, 0x04, 0xa8, 0x24, 0x5e, 0x11, 0x56, 0x43, + 0xc1, 0x99, 0xf5, 0x6f, 0x62, 0x7c, 0x72, 0x8d, + 0x91, 0xc4, 0x09, 0xdc, 0x2a, 0xd9, 0xdf, 0xd7, + 0xdf, 0xec, 0xb7, 0xe2, 0xe0, 0x91, 0xac, 0x89, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_r); + +static const u8 brainpoolp256t1_r_square[] = { + 0x47, 0x17, 0xaa, 0x21, 0xe5, 0x95, 0x7f, 0xa8, + 0xa1, 0xec, 0xda, 0xcd, 0x6b, 0x1a, 0xc8, 0x07, + 0x5c, 0xce, 0x4c, 0x26, 0x61, 0x4d, 0x4f, 0x4d, + 0x8c, 0xfe, 0xdf, 0x7b, 0xa6, 0x46, 0x5b, 0x6c, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_r_square); + +static const u8 brainpoolp256t1_mpinv[] = { + 0xc6, 0xa7, 0x55, 0x90, 0xce, 0xfd, 0x89, 0xb9, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_mpinv); + +static const u8 brainpoolp256t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_shift); + +static const u8 brainpoolp256t1_p_normalized[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, + 0x6e, 0x3b, 0xf6, 0x23, 0xd5, 0x26, 0x20, 0x28, + 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e, 0x53, 0x77, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_normalized); + +static const u8 brainpoolp256t1_p_reciprocal[] = { + 0x81, 0x8c, 0x11, 0x31, 0xa1, 0xc5, 0x5b, 0x7e, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp256t1_r[] = { + 0x56, 0x04, 0xa8, 0x24, 0x5e, 0x11, 0x56, 0x43, + 0xc1, 0x99, 0xf5, 0x6f, 0x62, 0x7c, 0x72, 0x8d, + 0x91, 0xc4, 0x09, 0xdc, 0x2a, 0xd9, 0xdf, 0xd7, + 0xdf, 0xec, 0xb7, 0xe2, 0xe0, 0x91, 0xac, 0x89, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_r); + +static const u8 brainpoolp256t1_r_square[] = { + 0x47, 0x17, 0xaa, 0x21, 0xe5, 0x95, 0x7f, 0xa8, + 0xa1, 0xec, 0xda, 0xcd, 0x6b, 0x1a, 0xc8, 0x07, + 0x5c, 0xce, 0x4c, 0x26, 0x61, 0x4d, 0x4f, 0x4d, + 0x8c, 0xfe, 0xdf, 0x7b, 0xa6, 0x46, 0x5b, 0x6c, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_r_square); + +static const u8 brainpoolp256t1_mpinv[] = { + 0xce, 0xfd, 0x89, 0xb9, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_mpinv); + +static const u8 brainpoolp256t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_shift); + +static const u8 brainpoolp256t1_p_normalized[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, + 0x6e, 0x3b, 0xf6, 0x23, 0xd5, 0x26, 0x20, 0x28, + 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e, 0x53, 0x77, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_normalized); + +static const u8 brainpoolp256t1_p_reciprocal[] = { + 0x81, 0x8c, 0x11, 0x31, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp256t1_r[] = { + 0x56, 0x04, 0xa8, 0x24, 0x5e, 0x11, 0x56, 0x43, + 0xc1, 0x99, 0xf5, 0x6f, 0x62, 0x7c, 0x72, 0x8d, + 0x91, 0xc4, 0x09, 0xdc, 0x2a, 0xd9, 0xdf, 0xd7, + 0xdf, 0xec, 0xb7, 0xe2, 0xe0, 0x91, 0xac, 0x89, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_r); + +static const u8 brainpoolp256t1_r_square[] = { + 0x47, 0x17, 0xaa, 0x21, 0xe5, 0x95, 0x7f, 0xa8, + 0xa1, 0xec, 0xda, 0xcd, 0x6b, 0x1a, 0xc8, 0x07, + 0x5c, 0xce, 0x4c, 0x26, 0x61, 0x4d, 0x4f, 0x4d, + 0x8c, 0xfe, 0xdf, 0x7b, 0xa6, 0x46, 0x5b, 0x6c, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_r_square); + +static const u8 brainpoolp256t1_mpinv[] = { + 0x89, 0xb9, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_mpinv); + +static const u8 brainpoolp256t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_shift); + +static const u8 brainpoolp256t1_p_normalized[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, + 0x6e, 0x3b, 0xf6, 0x23, 0xd5, 0x26, 0x20, 0x28, + 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e, 0x53, 0x77, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_normalized); + +static const u8 brainpoolp256t1_p_reciprocal[] = { + 0x81, 0x8c, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp256t1_a[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x72, + 0x6e, 0x3b, 0xf6, 0x23, 0xd5, 0x26, 0x20, 0x28, + 0x20, 0x13, 0x48, 0x1d, 0x1f, 0x6e, 0x53, 0x74, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_a); + +static const u8 brainpoolp256t1_b[] = { + 0x66, 0x2c, 0x61, 0xc4, 0x30, 0xd8, 0x4e, 0xa4, + 0xfe, 0x66, 0xa7, 0x73, 0x3d, 0x0b, 0x76, 0xb7, + 0xbf, 0x93, 0xeb, 0xc4, 0xaf, 0x2f, 0x49, 0x25, + 0x6a, 0xe5, 0x81, 0x01, 0xfe, 0xe9, 0x2b, 0x04, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_b); + +#define CURVE_BRAINPOOLP256T1_CURVE_ORDER_BITLEN 256 +static const u8 brainpoolp256t1_curve_order[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x71, + 0x8c, 0x39, 0x7a, 0xa3, 0xb5, 0x61, 0xa6, 0xf7, + 0x90, 0x1e, 0x0e, 0x82, 0x97, 0x48, 0x56, 0xa7, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_curve_order); + +static const u8 brainpoolp256t1_gx[] = { + 0xa3, 0xe8, 0xeb, 0x3c, 0xc1, 0xcf, 0xe7, 0xb7, + 0x73, 0x22, 0x13, 0xb2, 0x3a, 0x65, 0x61, 0x49, + 0xaf, 0xa1, 0x42, 0xc4, 0x7a, 0xaf, 0xbc, 0x2b, + 0x79, 0xa1, 0x91, 0x56, 0x2e, 0x13, 0x05, 0xf4, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_gx); + +static const u8 brainpoolp256t1_gy[] = { + 0x2d, 0x99, 0x6c, 0x82, 0x34, 0x39, 0xc5, 0x6d, + 0x7f, 0x7b, 0x22, 0xe1, 0x46, 0x44, 0x41, 0x7e, + 0x69, 0xbc, 0xb6, 0xde, 0x39, 0xd0, 0x27, 0x00, + 0x1d, 0xab, 0xe8, 0xf3, 0x5b, 0x25, 0xc9, 0xbe, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_gy); + +static const u8 brainpoolp256t1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_gz); + +static const u8 brainpoolp256t1_gen_order[] = { + 0xa9, 0xfb, 0x57, 0xdb, 0xa1, 0xee, 0xa9, 0xbc, + 0x3e, 0x66, 0x0a, 0x90, 0x9d, 0x83, 0x8d, 0x71, + 0x8c, 0x39, 0x7a, 0xa3, 0xb5, 0x61, 0xa6, 0xf7, + 0x90, 0x1e, 0x0e, 0x82, 0x97, 0x48, 0x56, 0xa7, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_gen_order); + +#define CURVE_BRAINPOOLP256T1_Q_BITLEN 256 +static const u8 brainpoolp256t1_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_gen_order_bitlen); + +static const u8 brainpoolp256t1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp256t1_cofactor); + +static const u8 brainpoolp256t1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp256t1_alpha_montgomery, 0); + +static const u8 brainpoolp256t1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp256t1_gamma_montgomery, 0); + +static const u8 brainpoolp256t1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp256t1_alpha_edwards, 0); + +static const u8 brainpoolp256t1_name[] = "BRAINPOOLP256T1"; +TO_EC_STR_PARAM(brainpoolp256t1_name); + +static const u8 brainpoolp256t1_oid[] = "1.3.36.3.3.2.8.1.1.8"; +TO_EC_STR_PARAM(brainpoolp256t1_oid); + +static const ec_str_params brainpoolp256t1_str_params = { + .p = &brainpoolp256t1_p_str_param, + .p_bitlen = &brainpoolp256t1_p_bitlen_str_param, + .r = &brainpoolp256t1_r_str_param, + .r_square = &brainpoolp256t1_r_square_str_param, + .mpinv = &brainpoolp256t1_mpinv_str_param, + .p_shift = &brainpoolp256t1_p_shift_str_param, + .p_normalized = &brainpoolp256t1_p_normalized_str_param, + .p_reciprocal = &brainpoolp256t1_p_reciprocal_str_param, + .a = &brainpoolp256t1_a_str_param, + .b = &brainpoolp256t1_b_str_param, + .curve_order = &brainpoolp256t1_curve_order_str_param, + .gx = &brainpoolp256t1_gx_str_param, + .gy = &brainpoolp256t1_gy_str_param, + .gz = &brainpoolp256t1_gz_str_param, + .gen_order = &brainpoolp256t1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp256t1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp256t1_cofactor_str_param, + .alpha_montgomery = &brainpoolp256t1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp256t1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp256t1_alpha_edwards_str_param, + .oid = &brainpoolp256t1_oid_str_param, + .name = &brainpoolp256t1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP256T1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP256T1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP256T1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP256T1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP256T1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP256T1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP256T1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP256T1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp320r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp320r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp320r1.h @@ -0,0 +1,350 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP320R1 + +#ifndef __EC_PARAMS_BRAINPOOLP320R1_H__ +#define __EC_PARAMS_BRAINPOOLP320R1_H__ +#include +static const u8 brainpoolp320r1_p[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p); + +#define CURVE_BRAINPOOLP320R1_P_BITLEN 320 +static const u8 brainpoolp320r1_p_bitlen[] = { + 0x01, 0x40, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp320r1_r[] = { + 0x2c, 0xa1, 0xb8, 0xdf, 0xc9, 0x43, 0xb0, 0x48, + 0x1e, 0xc3, 0x87, 0xa1, 0x2d, 0xfe, 0x1f, 0x9a, + 0x06, 0x70, 0x30, 0x59, 0x09, 0x0b, 0xf2, 0x10, + 0xb0, 0x6d, 0x46, 0x13, 0x87, 0x6c, 0x13, 0xd7, + 0x03, 0x2b, 0xed, 0x4e, 0x0e, 0x4c, 0xd1, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_r); + +static const u8 brainpoolp320r1_r_square[] = { + 0xa2, 0x59, 0xba, 0x4a, 0x6c, 0x2d, 0x92, 0x52, + 0x54, 0x55, 0xa9, 0x64, 0xe6, 0x14, 0xd6, 0xd2, + 0x1f, 0x4c, 0x88, 0x1f, 0x30, 0xc5, 0xb6, 0x76, + 0xc2, 0x47, 0x8a, 0x8d, 0x90, 0x69, 0x78, 0xef, + 0x99, 0x4e, 0xe8, 0x8a, 0x74, 0x3b, 0x52, 0xf9, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_r_square); + +static const u8 brainpoolp320r1_mpinv[] = { + 0x3d, 0x1e, 0x9b, 0xa2, 0x2a, 0x8a, 0x9e, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_mpinv); + +static const u8 brainpoolp320r1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_shift); + +static const u8 brainpoolp320r1_p_normalized[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_normalized); + +static const u8 brainpoolp320r1_p_reciprocal[] = { + 0x36, 0x0e, 0x55, 0xa5, 0xaf, 0x1a, 0xa1, 0x20, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp320r1_r[] = { + 0x2c, 0xa1, 0xb8, 0xdf, 0xc9, 0x43, 0xb0, 0x48, + 0x1e, 0xc3, 0x87, 0xa1, 0x2d, 0xfe, 0x1f, 0x9a, + 0x06, 0x70, 0x30, 0x59, 0x09, 0x0b, 0xf2, 0x10, + 0xb0, 0x6d, 0x46, 0x13, 0x87, 0x6c, 0x13, 0xd7, + 0x03, 0x2b, 0xed, 0x4e, 0x0e, 0x4c, 0xd1, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_r); + +static const u8 brainpoolp320r1_r_square[] = { + 0xa2, 0x59, 0xba, 0x4a, 0x6c, 0x2d, 0x92, 0x52, + 0x54, 0x55, 0xa9, 0x64, 0xe6, 0x14, 0xd6, 0xd2, + 0x1f, 0x4c, 0x88, 0x1f, 0x30, 0xc5, 0xb6, 0x76, + 0xc2, 0x47, 0x8a, 0x8d, 0x90, 0x69, 0x78, 0xef, + 0x99, 0x4e, 0xe8, 0x8a, 0x74, 0x3b, 0x52, 0xf9, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_r_square); + +static const u8 brainpoolp320r1_mpinv[] = { + 0x2a, 0x8a, 0x9e, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_mpinv); + +static const u8 brainpoolp320r1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_shift); + +static const u8 brainpoolp320r1_p_normalized[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_normalized); + +static const u8 brainpoolp320r1_p_reciprocal[] = { + 0x36, 0x0e, 0x55, 0xa5, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp320r1_r[] = { + 0x2c, 0xa1, 0xb8, 0xdf, 0xc9, 0x43, 0xb0, 0x48, + 0x1e, 0xc3, 0x87, 0xa1, 0x2d, 0xfe, 0x1f, 0x9a, + 0x06, 0x70, 0x30, 0x59, 0x09, 0x0b, 0xf2, 0x10, + 0xb0, 0x6d, 0x46, 0x13, 0x87, 0x6c, 0x13, 0xd7, + 0x03, 0x2b, 0xed, 0x4e, 0x0e, 0x4c, 0xd1, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_r); + +static const u8 brainpoolp320r1_r_square[] = { + 0xa2, 0x59, 0xba, 0x4a, 0x6c, 0x2d, 0x92, 0x52, + 0x54, 0x55, 0xa9, 0x64, 0xe6, 0x14, 0xd6, 0xd2, + 0x1f, 0x4c, 0x88, 0x1f, 0x30, 0xc5, 0xb6, 0x76, + 0xc2, 0x47, 0x8a, 0x8d, 0x90, 0x69, 0x78, 0xef, + 0x99, 0x4e, 0xe8, 0x8a, 0x74, 0x3b, 0x52, 0xf9, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_r_square); + +static const u8 brainpoolp320r1_mpinv[] = { + 0x9e, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_mpinv); + +static const u8 brainpoolp320r1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_shift); + +static const u8 brainpoolp320r1_p_normalized[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_normalized); + +static const u8 brainpoolp320r1_p_reciprocal[] = { + 0x36, 0x0e, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp320r1_a[] = { + 0x3e, 0xe3, 0x0b, 0x56, 0x8f, 0xba, 0xb0, 0xf8, + 0x83, 0xcc, 0xeb, 0xd4, 0x6d, 0x3f, 0x3b, 0xb8, + 0xa2, 0xa7, 0x35, 0x13, 0xf5, 0xeb, 0x79, 0xda, + 0x66, 0x19, 0x0e, 0xb0, 0x85, 0xff, 0xa9, 0xf4, + 0x92, 0xf3, 0x75, 0xa9, 0x7d, 0x86, 0x0e, 0xb4, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_a); + +static const u8 brainpoolp320r1_b[] = { + 0x52, 0x08, 0x83, 0x94, 0x9d, 0xfd, 0xbc, 0x42, + 0xd3, 0xad, 0x19, 0x86, 0x40, 0x68, 0x8a, 0x6f, + 0xe1, 0x3f, 0x41, 0x34, 0x95, 0x54, 0xb4, 0x9a, + 0xcc, 0x31, 0xdc, 0xcd, 0x88, 0x45, 0x39, 0x81, + 0x6f, 0x5e, 0xb4, 0xac, 0x8f, 0xb1, 0xf1, 0xa6, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_b); + +#define CURVE_BRAINPOOLP320R1_CURVE_ORDER_BITLEN 320 +static const u8 brainpoolp320r1_curve_order[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa5, 0xb6, 0x8f, 0x12, 0xa3, + 0x2d, 0x48, 0x2e, 0xc7, 0xee, 0x86, 0x58, 0xe9, + 0x86, 0x91, 0x55, 0x5b, 0x44, 0xc5, 0x93, 0x11, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_curve_order); + +static const u8 brainpoolp320r1_gx[] = { + 0x43, 0xbd, 0x7e, 0x9a, 0xfb, 0x53, 0xd8, 0xb8, + 0x52, 0x89, 0xbc, 0xc4, 0x8e, 0xe5, 0xbf, 0xe6, + 0xf2, 0x01, 0x37, 0xd1, 0x0a, 0x08, 0x7e, 0xb6, + 0xe7, 0x87, 0x1e, 0x2a, 0x10, 0xa5, 0x99, 0xc7, + 0x10, 0xaf, 0x8d, 0x0d, 0x39, 0xe2, 0x06, 0x11, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_gx); + +static const u8 brainpoolp320r1_gy[] = { + 0x14, 0xfd, 0xd0, 0x55, 0x45, 0xec, 0x1c, 0xc8, + 0xab, 0x40, 0x93, 0x24, 0x7f, 0x77, 0x27, 0x5e, + 0x07, 0x43, 0xff, 0xed, 0x11, 0x71, 0x82, 0xea, + 0xa9, 0xc7, 0x78, 0x77, 0xaa, 0xac, 0x6a, 0xc7, + 0xd3, 0x52, 0x45, 0xd1, 0x69, 0x2e, 0x8e, 0xe1, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_gy); + +static const u8 brainpoolp320r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_gz); + +static const u8 brainpoolp320r1_gen_order[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa5, 0xb6, 0x8f, 0x12, 0xa3, + 0x2d, 0x48, 0x2e, 0xc7, 0xee, 0x86, 0x58, 0xe9, + 0x86, 0x91, 0x55, 0x5b, 0x44, 0xc5, 0x93, 0x11, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_gen_order); + +#define CURVE_BRAINPOOLP320R1_Q_BITLEN 320 +static const u8 brainpoolp320r1_gen_order_bitlen[] = { + 0x01, 0x40, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_gen_order_bitlen); + +static const u8 brainpoolp320r1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp320r1_cofactor); + +static const u8 brainpoolp320r1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp320r1_alpha_montgomery, 0); + +static const u8 brainpoolp320r1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp320r1_gamma_montgomery, 0); + +static const u8 brainpoolp320r1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp320r1_alpha_edwards, 0); + +static const u8 brainpoolp320r1_name[] = "BRAINPOOLP320R1"; +TO_EC_STR_PARAM(brainpoolp320r1_name); + +static const u8 brainpoolp320r1_oid[] = "1.3.36.3.3.2.8.1.1.9"; +TO_EC_STR_PARAM(brainpoolp320r1_oid); + +static const ec_str_params brainpoolp320r1_str_params = { + .p = &brainpoolp320r1_p_str_param, + .p_bitlen = &brainpoolp320r1_p_bitlen_str_param, + .r = &brainpoolp320r1_r_str_param, + .r_square = &brainpoolp320r1_r_square_str_param, + .mpinv = &brainpoolp320r1_mpinv_str_param, + .p_shift = &brainpoolp320r1_p_shift_str_param, + .p_normalized = &brainpoolp320r1_p_normalized_str_param, + .p_reciprocal = &brainpoolp320r1_p_reciprocal_str_param, + .a = &brainpoolp320r1_a_str_param, + .b = &brainpoolp320r1_b_str_param, + .curve_order = &brainpoolp320r1_curve_order_str_param, + .gx = &brainpoolp320r1_gx_str_param, + .gy = &brainpoolp320r1_gy_str_param, + .gz = &brainpoolp320r1_gz_str_param, + .gen_order = &brainpoolp320r1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp320r1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp320r1_cofactor_str_param, + .alpha_montgomery = &brainpoolp320r1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp320r1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp320r1_alpha_edwards_str_param, + .oid = &brainpoolp320r1_oid_str_param, + .name = &brainpoolp320r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP320R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP320R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP320R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP320R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP320R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP320R1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP320R1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP320R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp320t1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp320t1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp320t1.h @@ -0,0 +1,350 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP320T1 + +#ifndef __EC_PARAMS_BRAINPOOLP320T1_H__ +#define __EC_PARAMS_BRAINPOOLP320T1_H__ +#include +static const u8 brainpoolp320t1_p[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p); + +#define CURVE_BRAINPOOLP320T1_P_BITLEN 320 +static const u8 brainpoolp320t1_p_bitlen[] = { + 0x01, 0x40, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp320t1_r[] = { + 0x2c, 0xa1, 0xb8, 0xdf, 0xc9, 0x43, 0xb0, 0x48, + 0x1e, 0xc3, 0x87, 0xa1, 0x2d, 0xfe, 0x1f, 0x9a, + 0x06, 0x70, 0x30, 0x59, 0x09, 0x0b, 0xf2, 0x10, + 0xb0, 0x6d, 0x46, 0x13, 0x87, 0x6c, 0x13, 0xd7, + 0x03, 0x2b, 0xed, 0x4e, 0x0e, 0x4c, 0xd1, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_r); + +static const u8 brainpoolp320t1_r_square[] = { + 0xa2, 0x59, 0xba, 0x4a, 0x6c, 0x2d, 0x92, 0x52, + 0x54, 0x55, 0xa9, 0x64, 0xe6, 0x14, 0xd6, 0xd2, + 0x1f, 0x4c, 0x88, 0x1f, 0x30, 0xc5, 0xb6, 0x76, + 0xc2, 0x47, 0x8a, 0x8d, 0x90, 0x69, 0x78, 0xef, + 0x99, 0x4e, 0xe8, 0x8a, 0x74, 0x3b, 0x52, 0xf9, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_r_square); + +static const u8 brainpoolp320t1_mpinv[] = { + 0x3d, 0x1e, 0x9b, 0xa2, 0x2a, 0x8a, 0x9e, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_mpinv); + +static const u8 brainpoolp320t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_shift); + +static const u8 brainpoolp320t1_p_normalized[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_normalized); + +static const u8 brainpoolp320t1_p_reciprocal[] = { + 0x36, 0x0e, 0x55, 0xa5, 0xaf, 0x1a, 0xa1, 0x20, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp320t1_r[] = { + 0x2c, 0xa1, 0xb8, 0xdf, 0xc9, 0x43, 0xb0, 0x48, + 0x1e, 0xc3, 0x87, 0xa1, 0x2d, 0xfe, 0x1f, 0x9a, + 0x06, 0x70, 0x30, 0x59, 0x09, 0x0b, 0xf2, 0x10, + 0xb0, 0x6d, 0x46, 0x13, 0x87, 0x6c, 0x13, 0xd7, + 0x03, 0x2b, 0xed, 0x4e, 0x0e, 0x4c, 0xd1, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_r); + +static const u8 brainpoolp320t1_r_square[] = { + 0xa2, 0x59, 0xba, 0x4a, 0x6c, 0x2d, 0x92, 0x52, + 0x54, 0x55, 0xa9, 0x64, 0xe6, 0x14, 0xd6, 0xd2, + 0x1f, 0x4c, 0x88, 0x1f, 0x30, 0xc5, 0xb6, 0x76, + 0xc2, 0x47, 0x8a, 0x8d, 0x90, 0x69, 0x78, 0xef, + 0x99, 0x4e, 0xe8, 0x8a, 0x74, 0x3b, 0x52, 0xf9, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_r_square); + +static const u8 brainpoolp320t1_mpinv[] = { + 0x2a, 0x8a, 0x9e, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_mpinv); + +static const u8 brainpoolp320t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_shift); + +static const u8 brainpoolp320t1_p_normalized[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_normalized); + +static const u8 brainpoolp320t1_p_reciprocal[] = { + 0x36, 0x0e, 0x55, 0xa5, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp320t1_r[] = { + 0x2c, 0xa1, 0xb8, 0xdf, 0xc9, 0x43, 0xb0, 0x48, + 0x1e, 0xc3, 0x87, 0xa1, 0x2d, 0xfe, 0x1f, 0x9a, + 0x06, 0x70, 0x30, 0x59, 0x09, 0x0b, 0xf2, 0x10, + 0xb0, 0x6d, 0x46, 0x13, 0x87, 0x6c, 0x13, 0xd7, + 0x03, 0x2b, 0xed, 0x4e, 0x0e, 0x4c, 0xd1, 0xd9, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_r); + +static const u8 brainpoolp320t1_r_square[] = { + 0xa2, 0x59, 0xba, 0x4a, 0x6c, 0x2d, 0x92, 0x52, + 0x54, 0x55, 0xa9, 0x64, 0xe6, 0x14, 0xd6, 0xd2, + 0x1f, 0x4c, 0x88, 0x1f, 0x30, 0xc5, 0xb6, 0x76, + 0xc2, 0x47, 0x8a, 0x8d, 0x90, 0x69, 0x78, 0xef, + 0x99, 0x4e, 0xe8, 0x8a, 0x74, 0x3b, 0x52, 0xf9, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_r_square); + +static const u8 brainpoolp320t1_mpinv[] = { + 0x9e, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_mpinv); + +static const u8 brainpoolp320t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_shift); + +static const u8 brainpoolp320t1_p_normalized[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x27, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_normalized); + +static const u8 brainpoolp320t1_p_reciprocal[] = { + 0x36, 0x0e, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp320t1_a[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa6, 0xf6, 0xf4, 0x0d, 0xef, + 0x4f, 0x92, 0xb9, 0xec, 0x78, 0x93, 0xec, 0x28, + 0xfc, 0xd4, 0x12, 0xb1, 0xf1, 0xb3, 0x2e, 0x24, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_a); + +static const u8 brainpoolp320t1_b[] = { + 0xa7, 0xf5, 0x61, 0xe0, 0x38, 0xeb, 0x1e, 0xd5, + 0x60, 0xb3, 0xd1, 0x47, 0xdb, 0x78, 0x20, 0x13, + 0x06, 0x4c, 0x19, 0xf2, 0x7e, 0xd2, 0x7c, 0x67, + 0x80, 0xaa, 0xf7, 0x7f, 0xb8, 0xa5, 0x47, 0xce, + 0xb5, 0xb4, 0xfe, 0xf4, 0x22, 0x34, 0x03, 0x53, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_b); + +#define CURVE_BRAINPOOLP320T1_CURVE_ORDER_BITLEN 320 +static const u8 brainpoolp320t1_curve_order[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa5, 0xb6, 0x8f, 0x12, 0xa3, + 0x2d, 0x48, 0x2e, 0xc7, 0xee, 0x86, 0x58, 0xe9, + 0x86, 0x91, 0x55, 0x5b, 0x44, 0xc5, 0x93, 0x11, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_curve_order); + +static const u8 brainpoolp320t1_gx[] = { + 0x92, 0x5b, 0xe9, 0xfb, 0x01, 0xaf, 0xc6, 0xfb, + 0x4d, 0x3e, 0x7d, 0x49, 0x90, 0x01, 0x0f, 0x81, + 0x34, 0x08, 0xab, 0x10, 0x6c, 0x4f, 0x09, 0xcb, + 0x7e, 0xe0, 0x78, 0x68, 0xcc, 0x13, 0x6f, 0xff, + 0x33, 0x57, 0xf6, 0x24, 0xa2, 0x1b, 0xed, 0x52, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_gx); + +static const u8 brainpoolp320t1_gy[] = { + 0x63, 0xba, 0x3a, 0x7a, 0x27, 0x48, 0x3e, 0xbf, + 0x66, 0x71, 0xdb, 0xef, 0x7a, 0xbb, 0x30, 0xeb, + 0xee, 0x08, 0x4e, 0x58, 0xa0, 0xb0, 0x77, 0xad, + 0x42, 0xa5, 0xa0, 0x98, 0x9d, 0x1e, 0xe7, 0x1b, + 0x1b, 0x9b, 0xc0, 0x45, 0x5f, 0xb0, 0xd2, 0xc3, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_gy); + +static const u8 brainpoolp320t1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_gz); + +static const u8 brainpoolp320t1_gen_order[] = { + 0xd3, 0x5e, 0x47, 0x20, 0x36, 0xbc, 0x4f, 0xb7, + 0xe1, 0x3c, 0x78, 0x5e, 0xd2, 0x01, 0xe0, 0x65, + 0xf9, 0x8f, 0xcf, 0xa5, 0xb6, 0x8f, 0x12, 0xa3, + 0x2d, 0x48, 0x2e, 0xc7, 0xee, 0x86, 0x58, 0xe9, + 0x86, 0x91, 0x55, 0x5b, 0x44, 0xc5, 0x93, 0x11, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_gen_order); + +#define CURVE_BRAINPOOLP320T1_Q_BITLEN 320 +static const u8 brainpoolp320t1_gen_order_bitlen[] = { + 0x01, 0x40, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_gen_order_bitlen); + +static const u8 brainpoolp320t1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp320t1_cofactor); + +static const u8 brainpoolp320t1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp320t1_alpha_montgomery, 0); + +static const u8 brainpoolp320t1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp320t1_gamma_montgomery, 0); + +static const u8 brainpoolp320t1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp320t1_alpha_edwards, 0); + +static const u8 brainpoolp320t1_name[] = "BRAINPOOLP320T1"; +TO_EC_STR_PARAM(brainpoolp320t1_name); + +static const u8 brainpoolp320t1_oid[] = "1.3.36.3.3.2.8.1.1.10"; +TO_EC_STR_PARAM(brainpoolp320t1_oid); + +static const ec_str_params brainpoolp320t1_str_params = { + .p = &brainpoolp320t1_p_str_param, + .p_bitlen = &brainpoolp320t1_p_bitlen_str_param, + .r = &brainpoolp320t1_r_str_param, + .r_square = &brainpoolp320t1_r_square_str_param, + .mpinv = &brainpoolp320t1_mpinv_str_param, + .p_shift = &brainpoolp320t1_p_shift_str_param, + .p_normalized = &brainpoolp320t1_p_normalized_str_param, + .p_reciprocal = &brainpoolp320t1_p_reciprocal_str_param, + .a = &brainpoolp320t1_a_str_param, + .b = &brainpoolp320t1_b_str_param, + .curve_order = &brainpoolp320t1_curve_order_str_param, + .gx = &brainpoolp320t1_gx_str_param, + .gy = &brainpoolp320t1_gy_str_param, + .gz = &brainpoolp320t1_gz_str_param, + .gen_order = &brainpoolp320t1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp320t1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp320t1_cofactor_str_param, + .alpha_montgomery = &brainpoolp320t1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp320t1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp320t1_alpha_edwards_str_param, + .oid = &brainpoolp320t1_oid_str_param, + .name = &brainpoolp320t1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP320T1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP320T1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP320T1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP320T1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP320T1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP320T1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP320T1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP320T1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp384r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp384r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp384r1.h @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_BRAINPOOLP384R1 + +#ifndef __EC_PARAMS_BRAINPOOLP384R1_H__ +#define __EC_PARAMS_BRAINPOOLP384R1_H__ +#include "ec_params_external.h" + +static const u8 brainpoolp384r1_p[] = { + 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, + 0x0F, 0x5D, 0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, + 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4, + 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, + 0xAC, 0xD3, 0xA7, 0x29, 0x90, 0x1D, 0x1A, 0x71, + 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_p); + +#define CURVE_BRAINPOOLP384R1_P_BITLEN 384 +static const u8 brainpoolp384r1_p_bitlen[] = { 0x01, 0x80 }; + +TO_EC_STR_PARAM(brainpoolp384r1_p_bitlen); + +static const u8 brainpoolp384r1_r[] = { + 0x73, 0x46, 0xE1, 0x7D, 0x5C, 0xC7, 0x92, 0xD7, + 0xF0, 0xA2, 0x90, 0x81, 0xAF, 0x19, 0xBE, 0x20, + 0xEA, 0xD0, 0x8E, 0xF6, 0x12, 0xAB, 0xA9, 0x4B, + 0xED, 0x4E, 0x25, 0xE6, 0x80, 0x48, 0xEE, 0xDC, + 0x53, 0x2C, 0x58, 0xD6, 0x6F, 0xE2, 0xE5, 0x8E, + 0x78, 0xB8, 0xFF, 0xEC, 0xCE, 0xF8, 0x13, 0xAD +}; + +TO_EC_STR_PARAM(brainpoolp384r1_r); + +static const u8 brainpoolp384r1_r_square[] = { + 0x36, 0xBF, 0x68, 0x83, 0x17, 0x8D, 0xF8, 0x42, + 0xD5, 0xC6, 0xEF, 0x3B, 0xA5, 0x7E, 0x05, 0x2C, + 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xD5, 0xAF, + 0x8E, 0x28, 0xF9, 0x9C, 0xC9, 0x94, 0x08, 0x99, + 0x53, 0x52, 0x83, 0x34, 0x3D, 0x7F, 0xD9, 0x65, + 0x08, 0x7C, 0xEF, 0xFF, 0x40, 0xB6, 0x4B, 0xDE +}; + +TO_EC_STR_PARAM(brainpoolp384r1_r_square); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp384r1_mpinv[] = { + 0x9A, 0x6E, 0xA9, 0x6C, 0xEA, 0x9E, 0xC8, 0x25 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp384r1_mpinv[] = { + 0xEA, 0x9E, 0xC8, 0x25 +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp384r1_mpinv[] = { + 0xC8, 0x25 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +TO_EC_STR_PARAM(brainpoolp384r1_mpinv); + +static const u8 brainpoolp384r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp384r1_p_reciprocal[] = { + 0xD1, 0xB5, 0x75, 0xB1, 0x6D, 0x8E, 0xC6, 0xB8 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp384r1_p_reciprocal[] = { + 0xD1, 0xB5, 0x75, 0xB1 +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp384r1_p_reciprocal[] = { + 0xD1, 0xB5 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(brainpoolp384r1_p_reciprocal); + +static const u8 brainpoolp384r1_a[] = { + 0x7B, 0xC3, 0x82, 0xC6, 0x3D, 0x8C, 0x15, 0x0C, + 0x3C, 0x72, 0x08, 0x0A, 0xCE, 0x05, 0xAF, 0xA0, + 0xC2, 0xBE, 0xA2, 0x8E, 0x4F, 0xB2, 0x27, 0x87, + 0x13, 0x91, 0x65, 0xEF, 0xBA, 0x91, 0xF9, 0x0F, + 0x8A, 0xA5, 0x81, 0x4A, 0x50, 0x3A, 0xD4, 0xEB, + 0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_a); + +static const u8 brainpoolp384r1_b[] = { + 0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26, + 0x8B, 0x39, 0xB5, 0x54, 0x16, 0xF0, 0x44, 0x7C, + 0x2F, 0xB7, 0x7D, 0xE1, 0x07, 0xDC, 0xD2, 0xA6, + 0x2E, 0x88, 0x0E, 0xA5, 0x3E, 0xEB, 0x62, 0xD5, + 0x7C, 0xB4, 0x39, 0x02, 0x95, 0xDB, 0xC9, 0x94, + 0x3A, 0xB7, 0x86, 0x96, 0xFA, 0x50, 0x4C, 0x11 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_b); + +static const u8 brainpoolp384r1_curve_order[] = { + 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, + 0x0F, 0x5D, 0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, + 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB3, + 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04, 0x25, 0xA7, + 0xCF, 0x3A, 0xB6, 0xAF, 0x6B, 0x7F, 0xC3, 0x10, + 0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_curve_order); + +static const u8 brainpoolp384r1_gx[] = { + 0x1D, 0x1C, 0x64, 0xF0, 0x68, 0xCF, 0x45, 0xFF, + 0xA2, 0xA6, 0x3A, 0x81, 0xB7, 0xC1, 0x3F, 0x6B, + 0x88, 0x47, 0xA3, 0xE7, 0x7E, 0xF1, 0x4F, 0xE3, + 0xDB, 0x7F, 0xCA, 0xFE, 0x0C, 0xBD, 0x10, 0xE8, + 0xE8, 0x26, 0xE0, 0x34, 0x36, 0xD6, 0x46, 0xAA, + 0xEF, 0x87, 0xB2, 0xE2, 0x47, 0xD4, 0xAF, 0x1E +}; + +TO_EC_STR_PARAM(brainpoolp384r1_gx); + +static const u8 brainpoolp384r1_gy[] = { + 0x8A, 0xBE, 0x1D, 0x75, 0x20, 0xF9, 0xC2, 0xA4, + 0x5C, 0xB1, 0xEB, 0x8E, 0x95, 0xCF, 0xD5, 0x52, + 0x62, 0xB7, 0x0B, 0x29, 0xFE, 0xEC, 0x58, 0x64, + 0xE1, 0x9C, 0x05, 0x4F, 0xF9, 0x91, 0x29, 0x28, + 0x0E, 0x46, 0x46, 0x21, 0x77, 0x91, 0x81, 0x11, + 0x42, 0x82, 0x03, 0x41, 0x26, 0x3C, 0x53, 0x15 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_gy); + +static const u8 brainpoolp384r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_gz); + +#define CURVE_BRAINPOOLP384R1_CURVE_ORDER_BITLEN 384 +static const u8 brainpoolp384r1_gen_order[] = { + 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, + 0x0F, 0x5D, 0x6F, 0x7E, 0x50, 0xE6, 0x41, 0xDF, + 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB3, + 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04, 0x25, 0xA7, + 0xCF, 0x3A, 0xB6, 0xAF, 0x6B, 0x7F, 0xC3, 0x10, + 0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65 +}; + +TO_EC_STR_PARAM(brainpoolp384r1_gen_order); + +#define CURVE_BRAINPOOLP384R1_Q_BITLEN 384 +static const u8 brainpoolp384r1_gen_order_bitlen[] = { 0x01, 0x80 }; + +TO_EC_STR_PARAM(brainpoolp384r1_gen_order_bitlen); + +static const u8 brainpoolp384r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(brainpoolp384r1_cofactor); + +static const u8 brainpoolp384r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384r1_alpha_montgomery, 0); + +static const u8 brainpoolp384r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384r1_gamma_montgomery, 0); + +static const u8 brainpoolp384r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384r1_alpha_edwards, 0); + +static const u8 brainpoolp384r1_oid[] = "1.3.36.3.3.2.8.1.1.11"; +TO_EC_STR_PARAM(brainpoolp384r1_oid); + +static const u8 brainpoolp384r1_name[] = "BRAINPOOLP384R1"; +TO_EC_STR_PARAM(brainpoolp384r1_name); + +static const ec_str_params brainpoolp384r1_str_params = { + .p = &brainpoolp384r1_p_str_param, + .p_bitlen = &brainpoolp384r1_p_bitlen_str_param, + .r = &brainpoolp384r1_r_str_param, + .r_square = &brainpoolp384r1_r_square_str_param, + .mpinv = &brainpoolp384r1_mpinv_str_param, + .p_shift = &brainpoolp384r1_p_shift_str_param, + .p_normalized = &brainpoolp384r1_p_str_param, + .p_reciprocal = &brainpoolp384r1_p_reciprocal_str_param, + .a = &brainpoolp384r1_a_str_param, + .b = &brainpoolp384r1_b_str_param, + .curve_order = &brainpoolp384r1_curve_order_str_param, + .gx = &brainpoolp384r1_gx_str_param, + .gy = &brainpoolp384r1_gy_str_param, + .gz = &brainpoolp384r1_gz_str_param, + .gen_order = &brainpoolp384r1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp384r1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp384r1_cofactor_str_param, + .alpha_montgomery = &brainpoolp384r1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp384r1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp384r1_alpha_edwards_str_param, + .oid = &brainpoolp384r1_oid_str_param, + .name = &brainpoolp384r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP384R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP384R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP384R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP384R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP384R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP384R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP384R1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp384t1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp384t1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp384t1.h @@ -0,0 +1,367 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP384T1 + +#ifndef __EC_PARAMS_BRAINPOOLP384T1_H__ +#define __EC_PARAMS_BRAINPOOLP384T1_H__ +#include +static const u8 brainpoolp384t1_p[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, + 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, + 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, + 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p); + +#define CURVE_BRAINPOOLP384T1_P_BITLEN 384 +static const u8 brainpoolp384t1_p_bitlen[] = { + 0x01, 0x80, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp384t1_r[] = { + 0x73, 0x46, 0xe1, 0x7d, 0x5c, 0xc7, 0x92, 0xd7, + 0xf0, 0xa2, 0x90, 0x81, 0xaf, 0x19, 0xbe, 0x20, + 0xea, 0xd0, 0x8e, 0xf6, 0x12, 0xab, 0xa9, 0x4b, + 0xed, 0x4e, 0x25, 0xe6, 0x80, 0x48, 0xee, 0xdc, + 0x53, 0x2c, 0x58, 0xd6, 0x6f, 0xe2, 0xe5, 0x8e, + 0x78, 0xb8, 0xff, 0xec, 0xce, 0xf8, 0x13, 0xad, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_r); + +static const u8 brainpoolp384t1_r_square[] = { + 0x36, 0xbf, 0x68, 0x83, 0x17, 0x8d, 0xf8, 0x42, + 0xd5, 0xc6, 0xef, 0x3b, 0xa5, 0x7e, 0x05, 0x2c, + 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xd5, 0xaf, + 0x8e, 0x28, 0xf9, 0x9c, 0xc9, 0x94, 0x08, 0x99, + 0x53, 0x52, 0x83, 0x34, 0x3d, 0x7f, 0xd9, 0x65, + 0x08, 0x7c, 0xef, 0xff, 0x40, 0xb6, 0x4b, 0xde, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_r_square); + +static const u8 brainpoolp384t1_mpinv[] = { + 0x9a, 0x6e, 0xa9, 0x6c, 0xea, 0x9e, 0xc8, 0x25, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_mpinv); + +static const u8 brainpoolp384t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_shift); + +static const u8 brainpoolp384t1_p_normalized[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, + 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, + 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, + 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_normalized); + +static const u8 brainpoolp384t1_p_reciprocal[] = { + 0xd1, 0xb5, 0x75, 0xb1, 0x6d, 0x8e, 0xc6, 0xb8, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp384t1_r[] = { + 0x73, 0x46, 0xe1, 0x7d, 0x5c, 0xc7, 0x92, 0xd7, + 0xf0, 0xa2, 0x90, 0x81, 0xaf, 0x19, 0xbe, 0x20, + 0xea, 0xd0, 0x8e, 0xf6, 0x12, 0xab, 0xa9, 0x4b, + 0xed, 0x4e, 0x25, 0xe6, 0x80, 0x48, 0xee, 0xdc, + 0x53, 0x2c, 0x58, 0xd6, 0x6f, 0xe2, 0xe5, 0x8e, + 0x78, 0xb8, 0xff, 0xec, 0xce, 0xf8, 0x13, 0xad, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_r); + +static const u8 brainpoolp384t1_r_square[] = { + 0x36, 0xbf, 0x68, 0x83, 0x17, 0x8d, 0xf8, 0x42, + 0xd5, 0xc6, 0xef, 0x3b, 0xa5, 0x7e, 0x05, 0x2c, + 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xd5, 0xaf, + 0x8e, 0x28, 0xf9, 0x9c, 0xc9, 0x94, 0x08, 0x99, + 0x53, 0x52, 0x83, 0x34, 0x3d, 0x7f, 0xd9, 0x65, + 0x08, 0x7c, 0xef, 0xff, 0x40, 0xb6, 0x4b, 0xde, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_r_square); + +static const u8 brainpoolp384t1_mpinv[] = { + 0xea, 0x9e, 0xc8, 0x25, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_mpinv); + +static const u8 brainpoolp384t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_shift); + +static const u8 brainpoolp384t1_p_normalized[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, + 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, + 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, + 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_normalized); + +static const u8 brainpoolp384t1_p_reciprocal[] = { + 0xd1, 0xb5, 0x75, 0xb1, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp384t1_r[] = { + 0x73, 0x46, 0xe1, 0x7d, 0x5c, 0xc7, 0x92, 0xd7, + 0xf0, 0xa2, 0x90, 0x81, 0xaf, 0x19, 0xbe, 0x20, + 0xea, 0xd0, 0x8e, 0xf6, 0x12, 0xab, 0xa9, 0x4b, + 0xed, 0x4e, 0x25, 0xe6, 0x80, 0x48, 0xee, 0xdc, + 0x53, 0x2c, 0x58, 0xd6, 0x6f, 0xe2, 0xe5, 0x8e, + 0x78, 0xb8, 0xff, 0xec, 0xce, 0xf8, 0x13, 0xad, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_r); + +static const u8 brainpoolp384t1_r_square[] = { + 0x36, 0xbf, 0x68, 0x83, 0x17, 0x8d, 0xf8, 0x42, + 0xd5, 0xc6, 0xef, 0x3b, 0xa5, 0x7e, 0x05, 0x2c, + 0x62, 0x14, 0x01, 0x91, 0x99, 0x18, 0xd5, 0xaf, + 0x8e, 0x28, 0xf9, 0x9c, 0xc9, 0x94, 0x08, 0x99, + 0x53, 0x52, 0x83, 0x34, 0x3d, 0x7f, 0xd9, 0x65, + 0x08, 0x7c, 0xef, 0xff, 0x40, 0xb6, 0x4b, 0xde, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_r_square); + +static const u8 brainpoolp384t1_mpinv[] = { + 0xc8, 0x25, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_mpinv); + +static const u8 brainpoolp384t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_shift); + +static const u8 brainpoolp384t1_p_normalized[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, + 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, + 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, + 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x53, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_normalized); + +static const u8 brainpoolp384t1_p_reciprocal[] = { + 0xd1, 0xb5, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp384t1_a[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb4, + 0x12, 0xb1, 0xda, 0x19, 0x7f, 0xb7, 0x11, 0x23, + 0xac, 0xd3, 0xa7, 0x29, 0x90, 0x1d, 0x1a, 0x71, + 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xec, 0x50, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_a); + +static const u8 brainpoolp384t1_b[] = { + 0x7f, 0x51, 0x9e, 0xad, 0xa7, 0xbd, 0xa8, 0x1b, + 0xd8, 0x26, 0xdb, 0xa6, 0x47, 0x91, 0x0f, 0x8c, + 0x4b, 0x93, 0x46, 0xed, 0x8c, 0xcd, 0xc6, 0x4e, + 0x4b, 0x1a, 0xbd, 0x11, 0x75, 0x6d, 0xce, 0x1d, + 0x20, 0x74, 0xaa, 0x26, 0x3b, 0x88, 0x80, 0x5c, + 0xed, 0x70, 0x35, 0x5a, 0x33, 0xb4, 0x71, 0xee, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_b); + +#define CURVE_BRAINPOOLP384T1_CURVE_ORDER_BITLEN 384 +static const u8 brainpoolp384t1_curve_order[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb3, + 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04, 0x25, 0xa7, + 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10, + 0x3b, 0x88, 0x32, 0x02, 0xe9, 0x04, 0x65, 0x65, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_curve_order); + +static const u8 brainpoolp384t1_gx[] = { + 0x18, 0xde, 0x98, 0xb0, 0x2d, 0xb9, 0xa3, 0x06, + 0xf2, 0xaf, 0xcd, 0x72, 0x35, 0xf7, 0x2a, 0x81, + 0x9b, 0x80, 0xab, 0x12, 0xeb, 0xd6, 0x53, 0x17, + 0x24, 0x76, 0xfe, 0xcd, 0x46, 0x2a, 0xab, 0xff, + 0xc4, 0xff, 0x19, 0x1b, 0x94, 0x6a, 0x5f, 0x54, + 0xd8, 0xd0, 0xaa, 0x2f, 0x41, 0x88, 0x08, 0xcc, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_gx); + +static const u8 brainpoolp384t1_gy[] = { + 0x25, 0xab, 0x05, 0x69, 0x62, 0xd3, 0x06, 0x51, + 0xa1, 0x14, 0xaf, 0xd2, 0x75, 0x5a, 0xd3, 0x36, + 0x74, 0x7f, 0x93, 0x47, 0x5b, 0x7a, 0x1f, 0xca, + 0x3b, 0x88, 0xf2, 0xb6, 0xa2, 0x08, 0xcc, 0xfe, + 0x46, 0x94, 0x08, 0x58, 0x4d, 0xc2, 0xb2, 0x91, + 0x26, 0x75, 0xbf, 0x5b, 0x9e, 0x58, 0x29, 0x28, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_gy); + +static const u8 brainpoolp384t1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_gz); + +static const u8 brainpoolp384t1_gen_order[] = { + 0x8c, 0xb9, 0x1e, 0x82, 0xa3, 0x38, 0x6d, 0x28, + 0x0f, 0x5d, 0x6f, 0x7e, 0x50, 0xe6, 0x41, 0xdf, + 0x15, 0x2f, 0x71, 0x09, 0xed, 0x54, 0x56, 0xb3, + 0x1f, 0x16, 0x6e, 0x6c, 0xac, 0x04, 0x25, 0xa7, + 0xcf, 0x3a, 0xb6, 0xaf, 0x6b, 0x7f, 0xc3, 0x10, + 0x3b, 0x88, 0x32, 0x02, 0xe9, 0x04, 0x65, 0x65, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_gen_order); + +#define CURVE_BRAINPOOLP384T1_Q_BITLEN 384 +static const u8 brainpoolp384t1_gen_order_bitlen[] = { + 0x01, 0x80, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_gen_order_bitlen); + +static const u8 brainpoolp384t1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp384t1_cofactor); + +static const u8 brainpoolp384t1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384t1_alpha_montgomery, 0); + +static const u8 brainpoolp384t1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384t1_gamma_montgomery, 0); + +static const u8 brainpoolp384t1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp384t1_alpha_edwards, 0); + +static const u8 brainpoolp384t1_name[] = "BRAINPOOLP384T1"; +TO_EC_STR_PARAM(brainpoolp384t1_name); + +static const u8 brainpoolp384t1_oid[] = "1.3.36.3.3.2.8.1.1.12"; +TO_EC_STR_PARAM(brainpoolp384t1_oid); + +static const ec_str_params brainpoolp384t1_str_params = { + .p = &brainpoolp384t1_p_str_param, + .p_bitlen = &brainpoolp384t1_p_bitlen_str_param, + .r = &brainpoolp384t1_r_str_param, + .r_square = &brainpoolp384t1_r_square_str_param, + .mpinv = &brainpoolp384t1_mpinv_str_param, + .p_shift = &brainpoolp384t1_p_shift_str_param, + .p_normalized = &brainpoolp384t1_p_normalized_str_param, + .p_reciprocal = &brainpoolp384t1_p_reciprocal_str_param, + .a = &brainpoolp384t1_a_str_param, + .b = &brainpoolp384t1_b_str_param, + .curve_order = &brainpoolp384t1_curve_order_str_param, + .gx = &brainpoolp384t1_gx_str_param, + .gy = &brainpoolp384t1_gy_str_param, + .gz = &brainpoolp384t1_gz_str_param, + .gen_order = &brainpoolp384t1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp384t1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp384t1_cofactor_str_param, + .alpha_montgomery = &brainpoolp384t1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp384t1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp384t1_alpha_edwards_str_param, + .oid = &brainpoolp384t1_oid_str_param, + .name = &brainpoolp384t1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP384T1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP384T1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP384T1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP384T1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP384T1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP384T1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP384T1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP384T1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp512r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp512r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp512r1.h @@ -0,0 +1,276 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_BRAINPOOLP512R1 + +#ifndef __EC_PARAMS_BRAINPOOLP512R1_H__ +#define __EC_PARAMS_BRAINPOOLP512R1_H__ +#include "ec_params_external.h" + +static const u8 brainpoolp512r1_p[] = { + 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, + 0x3F, 0xD4, 0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, + 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E, + 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, + 0x7D, 0x4D, 0x9B, 0x00, 0x9B, 0xC6, 0x68, 0x42, + 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6, + 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, + 0x28, 0xAA, 0x60, 0x56, 0x58, 0x3A, 0x48, 0xF3 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_p); + +#define CURVE_BRAINPOOLP512R1_P_BITLEN 512 +static const u8 brainpoolp512r1_p_bitlen[] = { 0x02, 0x00 }; + +TO_EC_STR_PARAM(brainpoolp512r1_p_bitlen); + +static const u8 brainpoolp512r1_r[] = { + 0x55, 0x22, 0x62, 0x47, 0x24, 0x16, 0x3b, 0x74, + 0xc0, 0x2b, 0x19, 0x51, 0xcc, 0x36, 0x03, 0xf8, + 0x34, 0xcf, 0x72, 0x4c, 0x4c, 0x36, 0x2d, 0xf1, + 0x29, 0x9c, 0x63, 0x35, 0x8f, 0xcc, 0xf7, 0x8e, + 0x82, 0xb2, 0x64, 0xff, 0x64, 0x39, 0x97, 0xbd, + 0x51, 0x32, 0x5e, 0xd5, 0x19, 0x5c, 0x7f, 0x19, + 0xd7, 0x7e, 0x00, 0xd0, 0xd2, 0x7d, 0x39, 0x7a, + 0xd7, 0x55, 0x9f, 0xa9, 0xa7, 0xc5, 0xb7, 0x0d +}; + +TO_EC_STR_PARAM(brainpoolp512r1_r); + +static const u8 brainpoolp512r1_r_square[] = { + 0x3c, 0x4c, 0x9d, 0x05, 0xa9, 0xff, 0x64, 0x50, + 0x20, 0x2e, 0x19, 0x40, 0x20, 0x56, 0xee, 0xcc, + 0xa1, 0x6d, 0xaa, 0x5f, 0xd4, 0x2b, 0xff, 0x83, + 0x19, 0x48, 0x6f, 0xd8, 0xd5, 0x89, 0x80, 0x57, + 0xe0, 0xc1, 0x9a, 0x77, 0x83, 0x51, 0x4a, 0x25, + 0x53, 0xb7, 0xf9, 0xbc, 0x90, 0x5a, 0xff, 0xd3, + 0x79, 0x3f, 0xb1, 0x30, 0x27, 0x15, 0x79, 0x05, + 0x49, 0xad, 0x14, 0x4a, 0x61, 0x58, 0xf2, 0x05 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_r_square); + +/* + * mpinv is -p^-1 mod 2^(bitsizeof(hword_t)), this means it depends + * on word size. + */ +static const u8 brainpoolp512r1_mpinv[] = { + 0x83, 0x9b, 0x32, 0x20, 0x7d, 0x89, 0xef, 0xc5 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_mpinv); + +static const u8 brainpoolp512r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp512r1_p_reciprocal[] = { + 0x7f, 0x8d, 0x7f, 0x4e, 0xd6, 0xda, 0xeb, 0x8a +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp512r1_p_reciprocal[] = { + 0x7f, 0x8d, 0x7f, 0x4e +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp512r1_p_reciprocal[] = { + 0x7f, 0x8d +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(brainpoolp512r1_p_reciprocal); + +static const u8 brainpoolp512r1_a[] = { + 0x78, 0x30, 0xA3, 0x31, 0x8B, 0x60, 0x3B, 0x89, + 0xE2, 0x32, 0x71, 0x45, 0xAC, 0x23, 0x4C, 0xC5, + 0x94, 0xCB, 0xDD, 0x8D, 0x3D, 0xF9, 0x16, 0x10, + 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98, 0x63, 0xBC, + 0x2D, 0xED, 0x5D, 0x5A, 0xA8, 0x25, 0x3A, 0xA1, + 0x0A, 0x2E, 0xF1, 0xC9, 0x8B, 0x9A, 0xC8, 0xB5, + 0x7F, 0x11, 0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9, + 0xE7, 0xC1, 0xAC, 0x4D, 0x77, 0xFC, 0x94, 0xCA +}; + +TO_EC_STR_PARAM(brainpoolp512r1_a); + +static const u8 brainpoolp512r1_b[] = { + 0x3D, 0xF9, 0x16, 0x10, 0xA8, 0x34, 0x41, 0xCA, + 0xEA, 0x98, 0x63, 0xBC, 0x2D, 0xED, 0x5D, 0x5A, + 0xA8, 0x25, 0x3A, 0xA1, 0x0A, 0x2E, 0xF1, 0xC9, + 0x8B, 0x9A, 0xC8, 0xB5, 0x7F, 0x11, 0x17, 0xA7, + 0x2B, 0xF2, 0xC7, 0xB9, 0xE7, 0xC1, 0xAC, 0x4D, + 0x77, 0xFC, 0x94, 0xCA, 0xDC, 0x08, 0x3E, 0x67, + 0x98, 0x40, 0x50, 0xB7, 0x5E, 0xBA, 0xE5, 0xDD, + 0x28, 0x09, 0xBD, 0x63, 0x80, 0x16, 0xF7, 0x23 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_b); + +#define CURVE_BRAINPOOLP512R1_CURVE_ORDER_BITLEN 512 +static const u8 brainpoolp512r1_curve_order[] = { + 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, + 0x3F, 0xD4, 0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, + 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E, + 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x70, + 0x55, 0x3E, 0x5C, 0x41, 0x4C, 0xA9, 0x26, 0x19, + 0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47, + 0x1D, 0xB1, 0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, + 0xB5, 0x87, 0x96, 0x82, 0x9C, 0xA9, 0x00, 0x69 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_curve_order); + +static const u8 brainpoolp512r1_gx[] = { + 0x81, 0xAE, 0xE4, 0xBD, 0xD8, 0x2E, 0xD9, 0x64, + 0x5A, 0x21, 0x32, 0x2E, 0x9C, 0x4C, 0x6A, 0x93, + 0x85, 0xED, 0x9F, 0x70, 0xB5, 0xD9, 0x16, 0xC1, + 0xB4, 0x3B, 0x62, 0xEE, 0xF4, 0xD0, 0x09, 0x8E, + 0xFF, 0x3B, 0x1F, 0x78, 0xE2, 0xD0, 0xD4, 0x8D, + 0x50, 0xD1, 0x68, 0x7B, 0x93, 0xB9, 0x7D, 0x5F, + 0x7C, 0x6D, 0x50, 0x47, 0x40, 0x6A, 0x5E, 0x68, + 0x8B, 0x35, 0x22, 0x09, 0xBC, 0xB9, 0xF8, 0x22, +}; + +TO_EC_STR_PARAM(brainpoolp512r1_gx); + +static const u8 brainpoolp512r1_gy[] = { + 0x7D, 0xDE, 0x38, 0x5D, 0x56, 0x63, 0x32, 0xEC, + 0xC0, 0xEA, 0xBF, 0xA9, 0xCF, 0x78, 0x22, 0xFD, + 0xF2, 0x09, 0xF7, 0x00, 0x24, 0xA5, 0x7B, 0x1A, + 0xA0, 0x00, 0xC5, 0x5B, 0x88, 0x1F, 0x81, 0x11, + 0xB2, 0xDC, 0xDE, 0x49, 0x4A, 0x5F, 0x48, 0x5E, + 0x5B, 0xCA, 0x4B, 0xD8, 0x8A, 0x27, 0x63, 0xAE, + 0xD1, 0xCA, 0x2B, 0x2F, 0xA8, 0xF0, 0x54, 0x06, + 0x78, 0xCD, 0x1E, 0x0F, 0x3A, 0xD8, 0x08, 0x92 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_gy); + +static const u8 brainpoolp512r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_gz); + +static const u8 brainpoolp512r1_gen_order[] = { + 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, + 0x3F, 0xD4, 0xE6, 0xAE, 0x33, 0xC9, 0xFC, 0x07, + 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E, + 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x70, + 0x55, 0x3E, 0x5C, 0x41, 0x4C, 0xA9, 0x26, 0x19, + 0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47, + 0x1D, 0xB1, 0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, + 0xB5, 0x87, 0x96, 0x82, 0x9C, 0xA9, 0x00, 0x69 +}; + +TO_EC_STR_PARAM(brainpoolp512r1_gen_order); + +#define CURVE_BRAINPOOLP512R1_Q_BITLEN 512 +static const u8 brainpoolp512r1_gen_order_bitlen[] = { 0x02, 0x00 }; + +TO_EC_STR_PARAM(brainpoolp512r1_gen_order_bitlen); + +static const u8 brainpoolp512r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(brainpoolp512r1_cofactor); + +static const u8 brainpoolp512r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp512r1_alpha_montgomery, 0); + +static const u8 brainpoolp512r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp512r1_gamma_montgomery, 0); + +static const u8 brainpoolp512r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp512r1_alpha_edwards, 0); + +static const u8 brainpoolp512r1_oid[] = "1.3.36.3.3.2.8.1.1.13"; +TO_EC_STR_PARAM(brainpoolp512r1_oid); + +static const u8 brainpoolp512r1_name[] = "BRAINPOOLP512R1"; +TO_EC_STR_PARAM(brainpoolp512r1_name); + +static const ec_str_params brainpoolp512r1_str_params = { + .p = &brainpoolp512r1_p_str_param, + .p_bitlen = &brainpoolp512r1_p_bitlen_str_param, + .r = &brainpoolp512r1_r_str_param, + .r_square = &brainpoolp512r1_r_square_str_param, + .mpinv = &brainpoolp512r1_mpinv_str_param, + .p_shift = &brainpoolp512r1_p_shift_str_param, + .p_normalized = &brainpoolp512r1_p_str_param, + .p_reciprocal = &brainpoolp512r1_p_reciprocal_str_param, + .a = &brainpoolp512r1_a_str_param, + .b = &brainpoolp512r1_b_str_param, + .curve_order = &brainpoolp512r1_curve_order_str_param, + .gx = &brainpoolp512r1_gx_str_param, + .gy = &brainpoolp512r1_gy_str_param, + .gz = &brainpoolp512r1_gz_str_param, + .gen_order = &brainpoolp512r1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp512r1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp512r1_cofactor_str_param, + .alpha_montgomery = &brainpoolp512r1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp512r1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp512r1_alpha_edwards_str_param, + .oid = &brainpoolp512r1_oid_str_param, + .name = &brainpoolp512r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP512R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP512R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP512R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP512R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP512R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP512R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP512R1_H__ */ +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp512t1.h b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp512t1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_brainpoolp512t1.h @@ -0,0 +1,401 @@ +#include +#ifdef WITH_CURVE_BRAINPOOLP512T1 + +#ifndef __EC_PARAMS_BRAINPOOLP512T1_H__ +#define __EC_PARAMS_BRAINPOOLP512T1_H__ +#include +static const u8 brainpoolp512t1_p[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x71, + 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42, + 0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, + 0x28, 0x81, 0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, + 0x28, 0xaa, 0x60, 0x56, 0x58, 0x3a, 0x48, 0xf3, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p); + +#define CURVE_BRAINPOOLP512T1_P_BITLEN 512 +static const u8 brainpoolp512t1_p_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 brainpoolp512t1_r[] = { + 0x55, 0x22, 0x62, 0x47, 0x24, 0x16, 0x3b, 0x74, + 0xc0, 0x2b, 0x19, 0x51, 0xcc, 0x36, 0x03, 0xf8, + 0x34, 0xcf, 0x72, 0x4c, 0x4c, 0x36, 0x2d, 0xf1, + 0x29, 0x9c, 0x63, 0x35, 0x8f, 0xcc, 0xf7, 0x8e, + 0x82, 0xb2, 0x64, 0xff, 0x64, 0x39, 0x97, 0xbd, + 0x51, 0x32, 0x5e, 0xd5, 0x19, 0x5c, 0x7f, 0x19, + 0xd7, 0x7e, 0x00, 0xd0, 0xd2, 0x7d, 0x39, 0x7a, + 0xd7, 0x55, 0x9f, 0xa9, 0xa7, 0xc5, 0xb7, 0x0d, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_r); + +static const u8 brainpoolp512t1_r_square[] = { + 0x3c, 0x4c, 0x9d, 0x05, 0xa9, 0xff, 0x64, 0x50, + 0x20, 0x2e, 0x19, 0x40, 0x20, 0x56, 0xee, 0xcc, + 0xa1, 0x6d, 0xaa, 0x5f, 0xd4, 0x2b, 0xff, 0x83, + 0x19, 0x48, 0x6f, 0xd8, 0xd5, 0x89, 0x80, 0x57, + 0xe0, 0xc1, 0x9a, 0x77, 0x83, 0x51, 0x4a, 0x25, + 0x53, 0xb7, 0xf9, 0xbc, 0x90, 0x5a, 0xff, 0xd3, + 0x79, 0x3f, 0xb1, 0x30, 0x27, 0x15, 0x79, 0x05, + 0x49, 0xad, 0x14, 0x4a, 0x61, 0x58, 0xf2, 0x05, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_r_square); + +static const u8 brainpoolp512t1_mpinv[] = { + 0x83, 0x9b, 0x32, 0x20, 0x7d, 0x89, 0xef, 0xc5, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_mpinv); + +static const u8 brainpoolp512t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_shift); + +static const u8 brainpoolp512t1_p_normalized[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x71, + 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42, + 0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, + 0x28, 0x81, 0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, + 0x28, 0xaa, 0x60, 0x56, 0x58, 0x3a, 0x48, 0xf3, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_normalized); + +static const u8 brainpoolp512t1_p_reciprocal[] = { + 0x7f, 0x8d, 0x7f, 0x4e, 0xd6, 0xda, 0xeb, 0x8a, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 brainpoolp512t1_r[] = { + 0x55, 0x22, 0x62, 0x47, 0x24, 0x16, 0x3b, 0x74, + 0xc0, 0x2b, 0x19, 0x51, 0xcc, 0x36, 0x03, 0xf8, + 0x34, 0xcf, 0x72, 0x4c, 0x4c, 0x36, 0x2d, 0xf1, + 0x29, 0x9c, 0x63, 0x35, 0x8f, 0xcc, 0xf7, 0x8e, + 0x82, 0xb2, 0x64, 0xff, 0x64, 0x39, 0x97, 0xbd, + 0x51, 0x32, 0x5e, 0xd5, 0x19, 0x5c, 0x7f, 0x19, + 0xd7, 0x7e, 0x00, 0xd0, 0xd2, 0x7d, 0x39, 0x7a, + 0xd7, 0x55, 0x9f, 0xa9, 0xa7, 0xc5, 0xb7, 0x0d, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_r); + +static const u8 brainpoolp512t1_r_square[] = { + 0x3c, 0x4c, 0x9d, 0x05, 0xa9, 0xff, 0x64, 0x50, + 0x20, 0x2e, 0x19, 0x40, 0x20, 0x56, 0xee, 0xcc, + 0xa1, 0x6d, 0xaa, 0x5f, 0xd4, 0x2b, 0xff, 0x83, + 0x19, 0x48, 0x6f, 0xd8, 0xd5, 0x89, 0x80, 0x57, + 0xe0, 0xc1, 0x9a, 0x77, 0x83, 0x51, 0x4a, 0x25, + 0x53, 0xb7, 0xf9, 0xbc, 0x90, 0x5a, 0xff, 0xd3, + 0x79, 0x3f, 0xb1, 0x30, 0x27, 0x15, 0x79, 0x05, + 0x49, 0xad, 0x14, 0x4a, 0x61, 0x58, 0xf2, 0x05, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_r_square); + +static const u8 brainpoolp512t1_mpinv[] = { + 0x7d, 0x89, 0xef, 0xc5, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_mpinv); + +static const u8 brainpoolp512t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_shift); + +static const u8 brainpoolp512t1_p_normalized[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x71, + 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42, + 0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, + 0x28, 0x81, 0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, + 0x28, 0xaa, 0x60, 0x56, 0x58, 0x3a, 0x48, 0xf3, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_normalized); + +static const u8 brainpoolp512t1_p_reciprocal[] = { + 0x7f, 0x8d, 0x7f, 0x4e, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 brainpoolp512t1_r[] = { + 0x55, 0x22, 0x62, 0x47, 0x24, 0x16, 0x3b, 0x74, + 0xc0, 0x2b, 0x19, 0x51, 0xcc, 0x36, 0x03, 0xf8, + 0x34, 0xcf, 0x72, 0x4c, 0x4c, 0x36, 0x2d, 0xf1, + 0x29, 0x9c, 0x63, 0x35, 0x8f, 0xcc, 0xf7, 0x8e, + 0x82, 0xb2, 0x64, 0xff, 0x64, 0x39, 0x97, 0xbd, + 0x51, 0x32, 0x5e, 0xd5, 0x19, 0x5c, 0x7f, 0x19, + 0xd7, 0x7e, 0x00, 0xd0, 0xd2, 0x7d, 0x39, 0x7a, + 0xd7, 0x55, 0x9f, 0xa9, 0xa7, 0xc5, 0xb7, 0x0d, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_r); + +static const u8 brainpoolp512t1_r_square[] = { + 0x3c, 0x4c, 0x9d, 0x05, 0xa9, 0xff, 0x64, 0x50, + 0x20, 0x2e, 0x19, 0x40, 0x20, 0x56, 0xee, 0xcc, + 0xa1, 0x6d, 0xaa, 0x5f, 0xd4, 0x2b, 0xff, 0x83, + 0x19, 0x48, 0x6f, 0xd8, 0xd5, 0x89, 0x80, 0x57, + 0xe0, 0xc1, 0x9a, 0x77, 0x83, 0x51, 0x4a, 0x25, + 0x53, 0xb7, 0xf9, 0xbc, 0x90, 0x5a, 0xff, 0xd3, + 0x79, 0x3f, 0xb1, 0x30, 0x27, 0x15, 0x79, 0x05, + 0x49, 0xad, 0x14, 0x4a, 0x61, 0x58, 0xf2, 0x05, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_r_square); + +static const u8 brainpoolp512t1_mpinv[] = { + 0xef, 0xc5, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_mpinv); + +static const u8 brainpoolp512t1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_shift); + +static const u8 brainpoolp512t1_p_normalized[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x71, + 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42, + 0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, + 0x28, 0x81, 0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, + 0x28, 0xaa, 0x60, 0x56, 0x58, 0x3a, 0x48, 0xf3, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_normalized); + +static const u8 brainpoolp512t1_p_reciprocal[] = { + 0x7f, 0x8d, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 brainpoolp512t1_a[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x71, + 0x7d, 0x4d, 0x9b, 0x00, 0x9b, 0xc6, 0x68, 0x42, + 0xae, 0xcd, 0xa1, 0x2a, 0xe6, 0xa3, 0x80, 0xe6, + 0x28, 0x81, 0xff, 0x2f, 0x2d, 0x82, 0xc6, 0x85, + 0x28, 0xaa, 0x60, 0x56, 0x58, 0x3a, 0x48, 0xf0, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_a); + +static const u8 brainpoolp512t1_b[] = { + 0x7c, 0xbb, 0xbc, 0xf9, 0x44, 0x1c, 0xfa, 0xb7, + 0x6e, 0x18, 0x90, 0xe4, 0x68, 0x84, 0xea, 0xe3, + 0x21, 0xf7, 0x0c, 0x0b, 0xcb, 0x49, 0x81, 0x52, + 0x78, 0x97, 0x50, 0x4b, 0xec, 0x3e, 0x36, 0xa6, + 0x2b, 0xcd, 0xfa, 0x23, 0x04, 0x97, 0x65, 0x40, + 0xf6, 0x45, 0x00, 0x85, 0xf2, 0xda, 0xe1, 0x45, + 0xc2, 0x25, 0x53, 0xb4, 0x65, 0x76, 0x36, 0x89, + 0x18, 0x0e, 0xa2, 0x57, 0x18, 0x67, 0x42, 0x3e, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_b); + +#define CURVE_BRAINPOOLP512T1_CURVE_ORDER_BITLEN 512 +static const u8 brainpoolp512t1_curve_order[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x70, + 0x55, 0x3e, 0x5c, 0x41, 0x4c, 0xa9, 0x26, 0x19, + 0x41, 0x86, 0x61, 0x19, 0x7f, 0xac, 0x10, 0x47, + 0x1d, 0xb1, 0xd3, 0x81, 0x08, 0x5d, 0xda, 0xdd, + 0xb5, 0x87, 0x96, 0x82, 0x9c, 0xa9, 0x00, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_curve_order); + +static const u8 brainpoolp512t1_gx[] = { + 0x64, 0x0e, 0xce, 0x5c, 0x12, 0x78, 0x87, 0x17, + 0xb9, 0xc1, 0xba, 0x06, 0xcb, 0xc2, 0xa6, 0xfe, + 0xba, 0x85, 0x84, 0x24, 0x58, 0xc5, 0x6d, 0xde, + 0x9d, 0xb1, 0x75, 0x8d, 0x39, 0xc0, 0x31, 0x3d, + 0x82, 0xba, 0x51, 0x73, 0x5c, 0xdb, 0x3e, 0xa4, + 0x99, 0xaa, 0x77, 0xa7, 0xd6, 0x94, 0x3a, 0x64, + 0xf7, 0xa3, 0xf2, 0x5f, 0xe2, 0x6f, 0x06, 0xb5, + 0x1b, 0xaa, 0x26, 0x96, 0xfa, 0x90, 0x35, 0xda, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_gx); + +static const u8 brainpoolp512t1_gy[] = { + 0x5b, 0x53, 0x4b, 0xd5, 0x95, 0xf5, 0xaf, 0x0f, + 0xa2, 0xc8, 0x92, 0x37, 0x6c, 0x84, 0xac, 0xe1, + 0xbb, 0x4e, 0x30, 0x19, 0xb7, 0x16, 0x34, 0xc0, + 0x11, 0x31, 0x15, 0x9c, 0xae, 0x03, 0xce, 0xe9, + 0xd9, 0x93, 0x21, 0x84, 0xbe, 0xef, 0x21, 0x6b, + 0xd7, 0x1d, 0xf2, 0xda, 0xdf, 0x86, 0xa6, 0x27, + 0x30, 0x6e, 0xcf, 0xf9, 0x6d, 0xbb, 0x8b, 0xac, + 0xe1, 0x98, 0xb6, 0x1e, 0x00, 0xf8, 0xb3, 0x32, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_gy); + +static const u8 brainpoolp512t1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_gz); + +static const u8 brainpoolp512t1_gen_order[] = { + 0xaa, 0xdd, 0x9d, 0xb8, 0xdb, 0xe9, 0xc4, 0x8b, + 0x3f, 0xd4, 0xe6, 0xae, 0x33, 0xc9, 0xfc, 0x07, + 0xcb, 0x30, 0x8d, 0xb3, 0xb3, 0xc9, 0xd2, 0x0e, + 0xd6, 0x63, 0x9c, 0xca, 0x70, 0x33, 0x08, 0x70, + 0x55, 0x3e, 0x5c, 0x41, 0x4c, 0xa9, 0x26, 0x19, + 0x41, 0x86, 0x61, 0x19, 0x7f, 0xac, 0x10, 0x47, + 0x1d, 0xb1, 0xd3, 0x81, 0x08, 0x5d, 0xda, 0xdd, + 0xb5, 0x87, 0x96, 0x82, 0x9c, 0xa9, 0x00, 0x69, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_gen_order); + +#define CURVE_BRAINPOOLP512T1_Q_BITLEN 512 +static const u8 brainpoolp512t1_gen_order_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_gen_order_bitlen); + +static const u8 brainpoolp512t1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(brainpoolp512t1_cofactor); + +static const u8 brainpoolp512t1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp512t1_alpha_montgomery, 0); + +static const u8 brainpoolp512t1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp512t1_gamma_montgomery, 0); + +static const u8 brainpoolp512t1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(brainpoolp512t1_alpha_edwards, 0); + +static const u8 brainpoolp512t1_name[] = "BRAINPOOLP512T1"; +TO_EC_STR_PARAM(brainpoolp512t1_name); + +static const u8 brainpoolp512t1_oid[] = "1.3.36.3.3.2.8.1.1.14"; +TO_EC_STR_PARAM(brainpoolp512t1_oid); + +static const ec_str_params brainpoolp512t1_str_params = { + .p = &brainpoolp512t1_p_str_param, + .p_bitlen = &brainpoolp512t1_p_bitlen_str_param, + .r = &brainpoolp512t1_r_str_param, + .r_square = &brainpoolp512t1_r_square_str_param, + .mpinv = &brainpoolp512t1_mpinv_str_param, + .p_shift = &brainpoolp512t1_p_shift_str_param, + .p_normalized = &brainpoolp512t1_p_normalized_str_param, + .p_reciprocal = &brainpoolp512t1_p_reciprocal_str_param, + .a = &brainpoolp512t1_a_str_param, + .b = &brainpoolp512t1_b_str_param, + .curve_order = &brainpoolp512t1_curve_order_str_param, + .gx = &brainpoolp512t1_gx_str_param, + .gy = &brainpoolp512t1_gy_str_param, + .gz = &brainpoolp512t1_gz_str_param, + .gen_order = &brainpoolp512t1_gen_order_str_param, + .gen_order_bitlen = &brainpoolp512t1_gen_order_bitlen_str_param, + .cofactor = &brainpoolp512t1_cofactor_str_param, + .alpha_montgomery = &brainpoolp512t1_alpha_montgomery_str_param, + .gamma_montgomery = &brainpoolp512t1_gamma_montgomery_str_param, + .alpha_edwards = &brainpoolp512t1_alpha_edwards_str_param, + .oid = &brainpoolp512t1_oid_str_param, + .name = &brainpoolp512t1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_BRAINPOOLP512T1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_BRAINPOOLP512T1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_BRAINPOOLP512T1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_BRAINPOOLP512T1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_BRAINPOOLP512T1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_BRAINPOOLP512T1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 29) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 29 +#endif + +#endif /* __EC_PARAMS_BRAINPOOLP512T1_H__ */ + +#endif /* WITH_CURVE_BRAINPOOLP512T1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_external.h b/crypto/libecc/include/libecc/curves/known/ec_params_external.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_external.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_PARAMS_EXTERNAL_H__ +#define __EC_PARAMS_EXTERNAL_H__ +#include + +typedef struct { + const u8 *buf; + const u8 buflen; +} ec_str_param; + +#define TO_EC_STR_PARAM(pname) \ + static const ec_str_param pname##_str_param = { \ + .buf = pname, \ + .buflen = sizeof(pname) \ + } + + +#define TO_EC_STR_PARAM_FIXED_SIZE(pname, sz) \ + static const ec_str_param pname##_str_param = { \ + .buf = pname, \ + .buflen = (sz) \ + } + + +#define PARAM_BUF_LEN(param) ((param)->buflen) +#define PARAM_BUF_PTR(param) ((param)->buf) + +typedef struct { + /* + * Prime p: + * o p_bitlen = bitsizeof(p) + */ + const ec_str_param *p; + const ec_str_param *p_bitlen; + + /* + * Precomputed Montgomery parameters: + * o r = 2^bitsizeof(p) mod p + * o r_square = 2^(2*bitsizeof(p)) mod p + * o mpinv = -p^-1 mod B + * where B = 2^(bitsizeof(word_t)) + */ + const ec_str_param *r; + const ec_str_param *r_square; + const ec_str_param *mpinv; + + /* + * Precomputed division parameters: + * o p_shift = nn_clz(p) + * o p_normalized = p << p_shift + * o p_reciprocal = floor(B^3/(DMSW(p_normalized) + 1)) - B + * where B = 2^(bitsizeof(word_t)) + */ + const ec_str_param *p_shift; + const ec_str_param *p_normalized; + const ec_str_param *p_reciprocal; + + /* Curve coefficients and number of points */ + const ec_str_param *a; + const ec_str_param *b; + const ec_str_param *curve_order; + + /* + * Projective coordinates of generator + * and order and cofactor of associated subgroup. + */ + const ec_str_param *gx; + const ec_str_param *gy; + const ec_str_param *gz; + const ec_str_param *gen_order; + const ec_str_param *gen_order_bitlen; + const ec_str_param *cofactor; + + /* + * Optional transfert coefficients to Montgomery curve. + */ + const ec_str_param *alpha_montgomery; + const ec_str_param *gamma_montgomery; + + /* + * Optional transfert coefficient to Edwards curve. + */ + const ec_str_param *alpha_edwards; + + /* OID and pretty name */ + const ec_str_param *oid; + const ec_str_param *name; +} ec_str_params; + +#endif /* __EC_PARAMS_EXTERNAL_H__ */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_frp256v1.h b/crypto/libecc/include/libecc/curves/known/ec_params_frp256v1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_frp256v1.h @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_FRP256V1 + +#ifndef __EC_PARAMS_FRP256V1_H__ +#define __EC_PARAMS_FRP256V1_H__ +#include "ec_params_external.h" + +static const u8 frp256v1_p[] = { + 0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, + 0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, + 0x39, 0x61, 0xad, 0xbc, 0xab, 0xc8, 0xca, 0x6d, + 0xe8, 0xfc, 0xf3, 0x53, 0xd8, 0x6e, 0x9c, 0x03 +}; + +TO_EC_STR_PARAM(frp256v1_p); + +#define CURVE_FRP256V1_P_BITLEN 256 +static const u8 frp256v1_p_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(frp256v1_p_bitlen); + +static const u8 frp256v1_r[] = { + 0x0e, 0x02, 0xe8, 0x73, 0xf4, 0xc5, 0x2a, 0x70, + 0xef, 0xed, 0x92, 0x17, 0x31, 0xbd, 0xbc, 0xa4, + 0xc6, 0x9e, 0x52, 0x43, 0x54, 0x37, 0x35, 0x92, + 0x17, 0x03, 0x0c, 0xac, 0x27, 0x91, 0x63, 0xfd +}; + +TO_EC_STR_PARAM(frp256v1_r); + +static const u8 frp256v1_r_square[] = { + 0xb0, 0x2c, 0x8f, 0x9f, 0x88, 0xeb, 0x98, 0xac, + 0x62, 0xb7, 0x01, 0x2f, 0xce, 0x13, 0x7e, 0xee, + 0x84, 0x6f, 0x80, 0x83, 0x0c, 0x96, 0x0f, 0x92, + 0xb0, 0xc2, 0x4e, 0x77, 0xc9, 0x9f, 0x15, 0x13 +}; + +TO_EC_STR_PARAM(frp256v1_r_square); + +static const u8 frp256v1_mpinv[] = { + 0xc7, 0x97, 0x48, 0x3a, 0x16, 0x4e, 0x11, 0x55 +}; + +TO_EC_STR_PARAM(frp256v1_mpinv); + +static const u8 frp256v1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(frp256v1_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 frp256v1_p_reciprocal[] = { + 0x0e, 0xd2, 0x97, 0xdc, 0xc7, 0xd2, 0xb0, 0x40 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 frp256v1_p_reciprocal[] = { + 0x0e, 0xd2, 0x97, 0xdc +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 frp256v1_p_reciprocal[] = { + 0x0e, 0xd2 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(frp256v1_p_reciprocal); + +static const u8 frp256v1_a[] = { + 0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, + 0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, + 0x39, 0x61, 0xad, 0xbc, 0xab, 0xc8, 0xca, 0x6d, + 0xe8, 0xfc, 0xf3, 0x53, 0xd8, 0x6e, 0x9c, 0x00 +}; + +TO_EC_STR_PARAM(frp256v1_a); + +static const u8 frp256v1_b[] = { + 0xee, 0x35, 0x3f, 0xca, 0x54, 0x28, 0xa9, 0x30, + 0x0d, 0x4a, 0xba, 0x75, 0x4a, 0x44, 0xc0, 0x0f, + 0xdf, 0xec, 0x0c, 0x9a, 0xe4, 0xb1, 0xa1, 0x80, + 0x30, 0x75, 0xed, 0x96, 0x7b, 0x7b, 0xb7, 0x3f +}; + +TO_EC_STR_PARAM(frp256v1_b); + +#define CURVE_FRP256V1_CURVE_ORDER_BITLEN 256 +static const u8 frp256v1_curve_order[] = { + 0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, + 0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, + 0x53, 0xdc, 0x67, 0xe1, 0x40, 0xd2, 0xbf, 0x94, + 0x1f, 0xfd, 0xd4, 0x59, 0xc6, 0xd6, 0x55, 0xe1 +}; + +TO_EC_STR_PARAM(frp256v1_curve_order); + +static const u8 frp256v1_gx[] = { + 0xb6, 0xb3, 0xd4, 0xc3, 0x56, 0xc1, 0x39, 0xeb, + 0x31, 0x18, 0x3d, 0x47, 0x49, 0xd4, 0x23, 0x95, + 0x8c, 0x27, 0xd2, 0xdc, 0xaf, 0x98, 0xb7, 0x01, + 0x64, 0xc9, 0x7a, 0x2d, 0xd9, 0x8f, 0x5c, 0xff +}; + +TO_EC_STR_PARAM(frp256v1_gx); + +static const u8 frp256v1_gy[] = { + 0x61, 0x42, 0xe0, 0xf7, 0xc8, 0xb2, 0x04, 0x91, + 0x1f, 0x92, 0x71, 0xf0, 0xf3, 0xec, 0xef, 0x8c, + 0x27, 0x01, 0xc3, 0x07, 0xe8, 0xe4, 0xc9, 0xe1, + 0x83, 0x11, 0x5a, 0x15, 0x54, 0x06, 0x2c, 0xfb +}; + +TO_EC_STR_PARAM(frp256v1_gy); + +static const u8 frp256v1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(frp256v1_gz); + +static const u8 frp256v1_gen_order[] = { + 0xf1, 0xfd, 0x17, 0x8c, 0x0b, 0x3a, 0xd5, 0x8f, + 0x10, 0x12, 0x6d, 0xe8, 0xce, 0x42, 0x43, 0x5b, + 0x53, 0xdc, 0x67, 0xe1, 0x40, 0xd2, 0xbf, 0x94, + 0x1f, 0xfd, 0xd4, 0x59, 0xc6, 0xd6, 0x55, 0xe1 +}; + +TO_EC_STR_PARAM(frp256v1_gen_order); + +#define CURVE_FRP256V1_Q_BITLEN 256 +static const u8 frp256v1_gen_order_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(frp256v1_gen_order_bitlen); + +static const u8 frp256v1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(frp256v1_cofactor); + +static const u8 frp256v1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(frp256v1_alpha_montgomery, 0); + +static const u8 frp256v1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(frp256v1_gamma_montgomery, 0); + +static const u8 frp256v1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(frp256v1_alpha_edwards, 0); + +static const u8 frp256v1_oid[] = "1.2.250.1.223.101.256.1"; +TO_EC_STR_PARAM(frp256v1_oid); + +static const u8 frp256v1_name[] = "FRP256V1"; +TO_EC_STR_PARAM(frp256v1_name); + +static const ec_str_params frp256v1_str_params = { + .p = &frp256v1_p_str_param, + .p_bitlen = &frp256v1_p_bitlen_str_param, + .r = &frp256v1_r_str_param, + .r_square = &frp256v1_r_square_str_param, + .mpinv = &frp256v1_mpinv_str_param, + .p_shift = &frp256v1_p_shift_str_param, + .p_normalized = &frp256v1_p_str_param, + .p_reciprocal = &frp256v1_p_reciprocal_str_param, + .a = &frp256v1_a_str_param, + .b = &frp256v1_b_str_param, + .curve_order = &frp256v1_curve_order_str_param, + .gx = &frp256v1_gx_str_param, + .gy = &frp256v1_gy_str_param, + .gz = &frp256v1_gz_str_param, + .gen_order = &frp256v1_gen_order_str_param, + .gen_order_bitlen = &frp256v1_gen_order_bitlen_str_param, + .cofactor = &frp256v1_cofactor_str_param, + .alpha_montgomery = &frp256v1_alpha_montgomery_str_param, + .gamma_montgomery = &frp256v1_gamma_montgomery_str_param, + .alpha_edwards = &frp256v1_alpha_edwards_str_param, + .oid = &frp256v1_oid_str_param, + .name = &frp256v1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_FRP256V1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_FRP256V1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_FRP256V1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_FRP256V1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_FRP256V1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_FRP256V1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_FRP256V1_H__ */ + +#endif /* WITH_CURVE_FRP256V1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost256.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost256.h @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_GOST256 + +#ifndef __EC_PARAMS_GOST256_H__ +#define __EC_PARAMS_GOST256_H__ +#include "ec_params_external.h" + +static const u8 GOST_256bits_curve_p[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_p); + +#define CURVE_GOST256_P_BITLEN 256 +static const u8 GOST_256bits_curve_p_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(GOST_256bits_curve_p_bitlen); + +static const u8 GOST_256bits_curve_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xcf +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_r); + +static const u8 GOST_256bits_curve_r_square[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x45, 0x84 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_r_square); + +static const u8 GOST_256bits_curve_mpinv[] = { + 0xdb, 0xf9, 0x51, 0xd5, 0x88, 0x3b, 0x2b, 0x2f +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_mpinv); + +static const u8 GOST_256bits_curve_p_shift[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 GOST_256bits_curve_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 GOST_256bits_curve_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 GOST_256bits_curve_p_reciprocal[] = { + 0xff, 0xff +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(GOST_256bits_curve_p_reciprocal); + +static const u8 GOST_256bits_curve_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_a); + +static const u8 GOST_256bits_curve_b[] = { + 0x5F, 0xBF, 0xF4, 0x98, 0xAA, 0x93, 0x8C, 0xE7, + 0x39, 0xB8, 0xE0, 0x22, 0xFB, 0xAF, 0xEF, 0x40, + 0x56, 0x3F, 0x6E, 0x6A, 0x34, 0x72, 0xFC, 0x2A, + 0x51, 0x4C, 0x0C, 0xE9, 0xDA, 0xE2, 0x3B, 0x7E +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_b); + +#define CURVE_GOST256_CURVE_ORDER_BITLEN 256 +static const u8 GOST_256bits_curve_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x50, 0xFE, 0x8A, 0x18, 0x92, 0x97, 0x61, 0x54, + 0xC5, 0x9C, 0xFC, 0x19, 0x3A, 0xCC, 0xF5, 0xB3 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_order); + +static const u8 GOST_256bits_curve_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_gx); + +static const u8 GOST_256bits_curve_gy[] = { + 0x08, 0xE2, 0xA8, 0xA0, 0xE6, 0x51, 0x47, 0xD4, + 0xBD, 0x63, 0x16, 0x03, 0x0E, 0x16, 0xD1, 0x9C, + 0x85, 0xC9, 0x7F, 0x0A, 0x9C, 0xA2, 0x67, 0x12, + 0x2B, 0x96, 0xAB, 0xBC, 0xEA, 0x7E, 0x8F, 0xC8 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_gy); + +static const u8 GOST_256bits_curve_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_gz); + +static const u8 GOST_256bits_curve_gen_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x50, 0xFE, 0x8A, 0x18, 0x92, 0x97, 0x61, 0x54, + 0xC5, 0x9C, 0xFC, 0x19, 0x3A, 0xCC, 0xF5, 0xB3 +}; + +TO_EC_STR_PARAM(GOST_256bits_curve_gen_order); + +#define CURVE_GOST256_Q_BITLEN 256 +static const u8 GOST_256bits_curve_gen_order_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(GOST_256bits_curve_gen_order_bitlen); + +static const u8 GOST_256bits_curve_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(GOST_256bits_curve_cofactor); + +static const u8 GOST_256bits_curve_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(GOST_256bits_curve_alpha_montgomery, 0); + +static const u8 GOST_256bits_curve_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(GOST_256bits_curve_gamma_montgomery, 0); + +static const u8 GOST_256bits_curve_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(GOST_256bits_curve_alpha_edwards, 0); + +static const u8 GOST_256bits_curve_oid[] = "unknown"; +TO_EC_STR_PARAM(GOST_256bits_curve_oid); + +static const u8 GOST_256bits_curve_name[] = "GOST256"; +TO_EC_STR_PARAM(GOST_256bits_curve_name); + +static const ec_str_params GOST_256bits_curve_str_params = { + .p = &GOST_256bits_curve_p_str_param, + .p_bitlen = &GOST_256bits_curve_p_bitlen_str_param, + .r = &GOST_256bits_curve_r_str_param, + .r_square = &GOST_256bits_curve_r_square_str_param, + .mpinv = &GOST_256bits_curve_mpinv_str_param, + .p_shift = &GOST_256bits_curve_p_shift_str_param, + .p_normalized = &GOST_256bits_curve_p_str_param, + .p_reciprocal = &GOST_256bits_curve_p_reciprocal_str_param, + .a = &GOST_256bits_curve_a_str_param, + .b = &GOST_256bits_curve_b_str_param, + .curve_order = &GOST_256bits_curve_order_str_param, + .gx = &GOST_256bits_curve_gx_str_param, + .gy = &GOST_256bits_curve_gy_str_param, + .gz = &GOST_256bits_curve_gz_str_param, + .gen_order = &GOST_256bits_curve_gen_order_str_param, + .gen_order_bitlen = &GOST_256bits_curve_gen_order_bitlen_str_param, + .cofactor = &GOST_256bits_curve_cofactor_str_param, + .alpha_montgomery = &GOST_256bits_curve_alpha_montgomery_str_param, + .gamma_montgomery = &GOST_256bits_curve_gamma_montgomery_str_param, + .alpha_edwards = &GOST_256bits_curve_alpha_edwards_str_param, + .oid = &GOST_256bits_curve_oid_str_param, + .name = &GOST_256bits_curve_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST256_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST256_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST256_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST256_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST256_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST256_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_GOST256_H__ */ + +#endif /* WITH_CURVE_GOST256 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost512.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost512.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost512.h @@ -0,0 +1,286 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_GOST512 + +#ifndef __EC_PARAMS_GOST512_H__ +#define __EC_PARAMS_GOST512_H__ +#include "ec_params_external.h" + +static const u8 GOST_512bits_curve_p[] = { + 0x45, 0x31, 0xAC, 0xD1, 0xFE, 0x00, 0x23, 0xC7, + 0x55, 0x0D, 0x26, 0x7B, 0x6B, 0x2F, 0xEE, 0x80, + 0x92, 0x2B, 0x14, 0xB2, 0xFF, 0xB9, 0x0F, 0x04, + 0xD4, 0xEB, 0x7C, 0x09, 0xB5, 0xD2, 0xD1, 0x5D, + 0xF1, 0xD8, 0x52, 0x74, 0x1A, 0xF4, 0x70, 0x4A, + 0x04, 0x58, 0x04, 0x7E, 0x80, 0xE4, 0x54, 0x6D, + 0x35, 0xB8, 0x33, 0x6F, 0xAC, 0x22, 0x4D, 0xD8, + 0x16, 0x64, 0xBB, 0xF5, 0x28, 0xBE, 0x63, 0x73 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_p); + +#define CURVE_GOST512_P_BITLEN 512 +static const u8 GOST_512bits_curve_p_bitlen[] = { 0x01, 0xff }; + +TO_EC_STR_PARAM(GOST_512bits_curve_p_bitlen); + +static const u8 GOST_512bits_curve_p_normalized[] = { + 0x8a, 0x63, 0x59, 0xa3, 0xfc, 0x00, 0x47, 0x8e, + 0xaa, 0x1a, 0x4c, 0xf6, 0xd6, 0x5f, 0xdd, 0x01, + 0x24, 0x56, 0x29, 0x65, 0xff, 0x72, 0x1e, 0x09, + 0xa9, 0xd6, 0xf8, 0x13, 0x6b, 0xa5, 0xa2, 0xbb, + 0xe3, 0xb0, 0xa4, 0xe8, 0x35, 0xe8, 0xe0, 0x94, + 0x08, 0xb0, 0x08, 0xfd, 0x01, 0xc8, 0xa8, 0xda, + 0x6b, 0x70, 0x66, 0xdf, 0x58, 0x44, 0x9b, 0xb0, + 0x2c, 0xc9, 0x77, 0xea, 0x51, 0x7c, 0xc6, 0xe6 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_p_normalized); + +static const u8 GOST_512bits_curve_r[] = { + 0x30, 0x6a, 0xf9, 0x8a, 0x05, 0xff, 0x94, 0xaa, + 0x00, 0xd8, 0x8c, 0x8d, 0xbe, 0x70, 0x34, 0x7e, + 0x49, 0x7e, 0xc1, 0xe7, 0x00, 0xd4, 0xd2, 0xf1, + 0x81, 0x3d, 0x8b, 0xe2, 0xde, 0x87, 0x8b, 0xe6, + 0x2a, 0x77, 0x08, 0xa3, 0xaf, 0x22, 0xaf, 0x21, + 0xf2, 0xf7, 0xf2, 0x84, 0x7d, 0x53, 0x02, 0xb8, + 0x5e, 0xd7, 0x65, 0xb0, 0xfb, 0x99, 0x16, 0x77, + 0xbc, 0xd1, 0xcc, 0x20, 0x85, 0xc4, 0xd5, 0xa7 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_r); + +static const u8 GOST_512bits_curve_r_square[] = { + 0x1d, 0x88, 0x7d, 0xcd, 0x9c, 0xd1, 0x9c, 0x10, + 0x01, 0xfd, 0xe9, 0xca, 0x99, 0xde, 0x08, 0x52, + 0xfc, 0xd9, 0x83, 0xcf, 0xb7, 0xc6, 0x63, 0xd9, + 0xca, 0x0b, 0xc8, 0xaf, 0x77, 0xc8, 0x69, 0x0a, + 0x08, 0x15, 0xb9, 0xeb, 0x1e, 0x7d, 0xd3, 0x00, + 0xe4, 0x17, 0xd5, 0x8d, 0x20, 0x0c, 0x2a, 0xa0, + 0x4b, 0x90, 0x7a, 0x71, 0xe6, 0x47, 0xee, 0x63, + 0x00, 0x1c, 0x10, 0xbc, 0x2d, 0x00, 0x5b, 0x65 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_r_square); + +static const u8 GOST_512bits_curve_mpinv[] = { + 0xd6, 0x41, 0x2f, 0xf7, 0xc2, 0x9b, 0x86, 0x45 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_mpinv); + +static const u8 GOST_512bits_curve_p_shift[] = { 0x01 }; + +TO_EC_STR_PARAM(GOST_512bits_curve_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 GOST_512bits_curve_p_reciprocal[] = { + 0xd9, 0x91, 0x18, 0x3c, 0xe8, 0xbf, 0x25, 0x61 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 GOST_512bits_curve_p_reciprocal[] = { + 0xd9, 0x91, 0x18, 0x3c +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 GOST_512bits_curve_p_reciprocal[] = { + 0xd9, 0x91 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(GOST_512bits_curve_p_reciprocal); + +static const u8 GOST_512bits_curve_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_a); + +static const u8 GOST_512bits_curve_b[] = { + 0x1C, 0xFF, 0x08, 0x06, 0xA3, 0x11, 0x16, 0xDA, + 0x29, 0xD8, 0xCF, 0xA5, 0x4E, 0x57, 0xEB, 0x74, + 0x8B, 0xC5, 0xF3, 0x77, 0xE4, 0x94, 0x00, 0xFD, + 0xD7, 0x88, 0xB6, 0x49, 0xEC, 0xA1, 0xAC, 0x43, + 0x61, 0x83, 0x40, 0x13, 0xB2, 0xAD, 0x73, 0x22, + 0x48, 0x0A, 0x89, 0xCA, 0x58, 0xE0, 0xCF, 0x74, + 0xBC, 0x9E, 0x54, 0x0C, 0x2A, 0xDD, 0x68, 0x97, + 0xFA, 0xD0, 0xA3, 0x08, 0x4F, 0x30, 0x2A, 0xDC +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_b); + +#define CURVE_GOST512_CURVE_ORDER_BITLEN 511 +static const u8 GOST_512bits_curve_order[] = { + 0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, + 0x55, 0x0d, 0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, + 0x92, 0x2b, 0x14, 0xb2, 0xff, 0xb9, 0x0f, 0x04, + 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2, 0xd1, 0x5d, + 0xa8, 0x2f, 0x2d, 0x7e, 0xcb, 0x1d, 0xba, 0xc7, + 0x19, 0x90, 0x5c, 0x5e, 0xec, 0xc4, 0x23, 0xf1, + 0xd8, 0x6e, 0x25, 0xed, 0xbe, 0x23, 0xc5, 0x95, + 0xd6, 0x44, 0xaa, 0xf1, 0x87, 0xe6, 0xe6, 0xdf +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_order); + +static const u8 GOST_512bits_curve_gx[] = { + 0x24, 0xD1, 0x9C, 0xC6, 0x45, 0x72, 0xEE, 0x30, + 0xF3, 0x96, 0xBF, 0x6E, 0xBB, 0xFD, 0x7A, 0x6C, + 0x52, 0x13, 0xB3, 0xB3, 0xD7, 0x05, 0x7C, 0xC8, + 0x25, 0xF9, 0x10, 0x93, 0xA6, 0x8C, 0xD7, 0x62, + 0xFD, 0x60, 0x61, 0x12, 0x62, 0xCD, 0x83, 0x8D, + 0xC6, 0xB6, 0x0A, 0xA7, 0xEE, 0xE8, 0x04, 0xE2, + 0x8B, 0xC8, 0x49, 0x97, 0x7F, 0xAC, 0x33, 0xB4, + 0xB5, 0x30, 0xF1, 0xB1, 0x20, 0x24, 0x8A, 0x9A +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_gx); + +static const u8 GOST_512bits_curve_gy[] = { + 0x2B, 0xB3, 0x12, 0xA4, 0x3B, 0xD2, 0xCE, 0x6E, + 0x0D, 0x02, 0x06, 0x13, 0xC8, 0x57, 0xAC, 0xDD, + 0xCF, 0xBF, 0x06, 0x1E, 0x91, 0xE5, 0xF2, 0xC3, + 0xF3, 0x24, 0x47, 0xC2, 0x59, 0xF3, 0x9B, 0x2C, + 0x83, 0xAB, 0x15, 0x6D, 0x77, 0xF1, 0x49, 0x6B, + 0xF7, 0xEB, 0x33, 0x51, 0xE1, 0xEE, 0x4E, 0x43, + 0xDC, 0x1A, 0x18, 0xB9, 0x1B, 0x24, 0x64, 0x0B, + 0x6D, 0xBB, 0x92, 0xCB, 0x1A, 0xDD, 0x37, 0x1E +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_gy); + +static const u8 GOST_512bits_curve_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_gz); + +static const u8 GOST_512bits_curve_gen_order[] = { + 0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, + 0x55, 0x0d, 0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, + 0x92, 0x2b, 0x14, 0xb2, 0xff, 0xb9, 0x0f, 0x04, + 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2, 0xd1, 0x5d, + 0xa8, 0x2f, 0x2d, 0x7e, 0xcb, 0x1d, 0xba, 0xc7, + 0x19, 0x90, 0x5c, 0x5e, 0xec, 0xc4, 0x23, 0xf1, + 0xd8, 0x6e, 0x25, 0xed, 0xbe, 0x23, 0xc5, 0x95, + 0xd6, 0x44, 0xaa, 0xf1, 0x87, 0xe6, 0xe6, 0xdf +}; + +TO_EC_STR_PARAM(GOST_512bits_curve_gen_order); + +#define CURVE_GOST512_Q_BITLEN 511 +static const u8 GOST_512bits_curve_gen_order_bitlen[] = { 0x01, 0xff }; + +TO_EC_STR_PARAM(GOST_512bits_curve_gen_order_bitlen); + +static const u8 GOST_512bits_curve_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(GOST_512bits_curve_cofactor); + +static const u8 GOST_512bits_curve_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(GOST_512bits_curve_alpha_montgomery, 0); + +static const u8 GOST_512bits_curve_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(GOST_512bits_curve_gamma_montgomery, 0); + +static const u8 GOST_512bits_curve_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(GOST_512bits_curve_alpha_edwards, 0); + +static const u8 GOST_512bits_curve_oid[] = "unknown2"; + +TO_EC_STR_PARAM(GOST_512bits_curve_oid); + +static const u8 GOST_512bits_curve_name[] = "GOST512"; + +TO_EC_STR_PARAM(GOST_512bits_curve_name); + +static const ec_str_params GOST_512bits_curve_str_params = { + .p = &GOST_512bits_curve_p_str_param, + .p_bitlen = &GOST_512bits_curve_p_bitlen_str_param, + .r = &GOST_512bits_curve_r_str_param, + .r_square = &GOST_512bits_curve_r_square_str_param, + .mpinv = &GOST_512bits_curve_mpinv_str_param, + .p_shift = &GOST_512bits_curve_p_shift_str_param, + .p_normalized = &GOST_512bits_curve_p_normalized_str_param, + .p_reciprocal = &GOST_512bits_curve_p_reciprocal_str_param, + .a = &GOST_512bits_curve_a_str_param, + .b = &GOST_512bits_curve_b_str_param, + .curve_order = &GOST_512bits_curve_order_str_param, + .gx = &GOST_512bits_curve_gx_str_param, + .gy = &GOST_512bits_curve_gy_str_param, + .gz = &GOST_512bits_curve_gz_str_param, + .gen_order = &GOST_512bits_curve_gen_order_str_param, + .gen_order_bitlen = &GOST_512bits_curve_gen_order_bitlen_str_param, + .cofactor = &GOST_512bits_curve_cofactor_str_param, + .alpha_montgomery = &GOST_512bits_curve_alpha_montgomery_str_param, + .gamma_montgomery = &GOST_512bits_curve_gamma_montgomery_str_param, + .alpha_edwards = &GOST_512bits_curve_alpha_edwards_str_param, + .oid = &GOST_512bits_curve_oid_str_param, + .name = &GOST_512bits_curve_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST512_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST512_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST512_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST512_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST512_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST512_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_GOST512_H__ */ + +#endif /* WITH_CURVE_GOST512 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_A_ParamSet.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_A_ParamSet.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_A_ParamSet.h @@ -0,0 +1,315 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET + +#ifndef __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_H__ +#define __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_H__ +#include +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_P_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_mpinv[] = { + 0x46, 0xf3, 0x23, 0x44, 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_mpinv[] = { + 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_mpinv[] = { + 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_a); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_b); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x6c, 0x61, 0x10, 0x70, 0x99, 0x5a, 0xd1, 0x00, + 0x45, 0x84, 0x1b, 0x09, 0xb7, 0x61, 0xb8, 0x93, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_curve_order); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_gx); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_gy[] = { + 0x8d, 0x91, 0xe4, 0x71, 0xe0, 0x98, 0x9c, 0xda, + 0x27, 0xdf, 0x50, 0x5a, 0x45, 0x3f, 0x2b, 0x76, + 0x35, 0x29, 0x4f, 0x2d, 0xdf, 0x23, 0xe3, 0xb1, + 0x22, 0xac, 0xc9, 0x9c, 0x9e, 0x9f, 0x1e, 0x14, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_gy); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_gz); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x6c, 0x61, 0x10, 0x70, 0x99, 0x5a, 0xd1, 0x00, + 0x45, 0x84, 0x1b, 0x09, 0xb7, 0x61, 0xb8, 0x93, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_gen_order); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_Q_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_gen_order_bitlen); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_cofactor); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_A_ParamSet_alpha_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_A_ParamSet_gamma_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_A_ParamSet_alpha_edwards, 0); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_name[] = "GOST_R3410_2001_CRYPTOPRO_A_PARAMSET"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_name); + +static const u8 gost_R3410_2001_CryptoPro_A_ParamSet_oid[] = "1.2.643.2.2.35.1"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_A_ParamSet_oid); + +static const ec_str_params gost_R3410_2001_CryptoPro_A_ParamSet_str_params = { + .p = &gost_R3410_2001_CryptoPro_A_ParamSet_p_str_param, + .p_bitlen = &gost_R3410_2001_CryptoPro_A_ParamSet_p_bitlen_str_param, + .r = &gost_R3410_2001_CryptoPro_A_ParamSet_r_str_param, + .r_square = &gost_R3410_2001_CryptoPro_A_ParamSet_r_square_str_param, + .mpinv = &gost_R3410_2001_CryptoPro_A_ParamSet_mpinv_str_param, + .p_shift = &gost_R3410_2001_CryptoPro_A_ParamSet_p_shift_str_param, + .p_normalized = &gost_R3410_2001_CryptoPro_A_ParamSet_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2001_CryptoPro_A_ParamSet_p_reciprocal_str_param, + .a = &gost_R3410_2001_CryptoPro_A_ParamSet_a_str_param, + .b = &gost_R3410_2001_CryptoPro_A_ParamSet_b_str_param, + .curve_order = &gost_R3410_2001_CryptoPro_A_ParamSet_curve_order_str_param, + .gx = &gost_R3410_2001_CryptoPro_A_ParamSet_gx_str_param, + .gy = &gost_R3410_2001_CryptoPro_A_ParamSet_gy_str_param, + .gz = &gost_R3410_2001_CryptoPro_A_ParamSet_gz_str_param, + .gen_order = &gost_R3410_2001_CryptoPro_A_ParamSet_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2001_CryptoPro_A_ParamSet_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2001_CryptoPro_A_ParamSet_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2001_CryptoPro_A_ParamSet_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2001_CryptoPro_A_ParamSet_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2001_CryptoPro_A_ParamSet_alpha_edwards_str_param, + .oid = &gost_R3410_2001_CryptoPro_A_ParamSet_oid_str_param, + .name = &gost_R3410_2001_CryptoPro_A_ParamSet_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 17) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 17 +#endif +#if (MAX_CURVE_NAME_LEN < 52) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 52 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_B_ParamSet.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_B_ParamSet.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_B_ParamSet.h @@ -0,0 +1,324 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET + +#ifndef __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_H__ +#define __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_H__ +#include +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_P_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_r_square[] = { + 0x02, 0x7a, 0xcd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_mpinv[] = { + 0xbd, 0x66, 0x7a, 0xb8, 0xa3, 0x34, 0x78, 0x57, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_r_square[] = { + 0x02, 0x7a, 0xcd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_mpinv[] = { + 0xa3, 0x34, 0x78, 0x57, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_r_square[] = { + 0x02, 0x7a, 0xcd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_mpinv[] = { + 0x78, 0x57, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal[] = { + 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_a[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x96, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_a); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_b[] = { + 0x3e, 0x1a, 0xf4, 0x19, 0xa2, 0x69, 0xa5, 0xf8, + 0x66, 0xa7, 0xd3, 0xc2, 0x5c, 0x3d, 0xf8, 0x0a, + 0xe9, 0x79, 0x25, 0x93, 0x73, 0xff, 0x2b, 0x18, + 0x2f, 0x49, 0xd4, 0xce, 0x7e, 0x1b, 0xbc, 0x8b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_b); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_curve_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x5f, 0x70, 0x0c, 0xff, 0xf1, 0xa6, 0x24, 0xe5, + 0xe4, 0x97, 0x16, 0x1b, 0xcc, 0x8a, 0x19, 0x8f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_curve_order); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_gx); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_gy[] = { + 0x3f, 0xa8, 0x12, 0x43, 0x59, 0xf9, 0x66, 0x80, + 0xb8, 0x3d, 0x1c, 0x3e, 0xb2, 0xc0, 0x70, 0xe5, + 0xc5, 0x45, 0xc9, 0x85, 0x8d, 0x03, 0xec, 0xfb, + 0x74, 0x4b, 0xf8, 0xd7, 0x17, 0x71, 0x7e, 0xfc, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_gy); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_gz); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_gen_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x5f, 0x70, 0x0c, 0xff, 0xf1, 0xa6, 0x24, 0xe5, + 0xe4, 0x97, 0x16, 0x1b, 0xcc, 0x8a, 0x19, 0x8f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_gen_order); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_Q_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_gen_order_bitlen); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_cofactor); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_B_ParamSet_alpha_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_B_ParamSet_gamma_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_B_ParamSet_alpha_edwards, 0); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_name[] = "GOST_R3410_2001_CRYPTOPRO_B_PARAMSET"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_name); + +static const u8 gost_R3410_2001_CryptoPro_B_ParamSet_oid[] = "1.2.643.2.2.35.2"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_B_ParamSet_oid); + +static const ec_str_params gost_R3410_2001_CryptoPro_B_ParamSet_str_params = { + .p = &gost_R3410_2001_CryptoPro_B_ParamSet_p_str_param, + .p_bitlen = &gost_R3410_2001_CryptoPro_B_ParamSet_p_bitlen_str_param, + .r = &gost_R3410_2001_CryptoPro_B_ParamSet_r_str_param, + .r_square = &gost_R3410_2001_CryptoPro_B_ParamSet_r_square_str_param, + .mpinv = &gost_R3410_2001_CryptoPro_B_ParamSet_mpinv_str_param, + .p_shift = &gost_R3410_2001_CryptoPro_B_ParamSet_p_shift_str_param, + .p_normalized = &gost_R3410_2001_CryptoPro_B_ParamSet_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2001_CryptoPro_B_ParamSet_p_reciprocal_str_param, + .a = &gost_R3410_2001_CryptoPro_B_ParamSet_a_str_param, + .b = &gost_R3410_2001_CryptoPro_B_ParamSet_b_str_param, + .curve_order = &gost_R3410_2001_CryptoPro_B_ParamSet_curve_order_str_param, + .gx = &gost_R3410_2001_CryptoPro_B_ParamSet_gx_str_param, + .gy = &gost_R3410_2001_CryptoPro_B_ParamSet_gy_str_param, + .gz = &gost_R3410_2001_CryptoPro_B_ParamSet_gz_str_param, + .gen_order = &gost_R3410_2001_CryptoPro_B_ParamSet_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2001_CryptoPro_B_ParamSet_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2001_CryptoPro_B_ParamSet_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2001_CryptoPro_B_ParamSet_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2001_CryptoPro_B_ParamSet_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2001_CryptoPro_B_ParamSet_alpha_edwards_str_param, + .oid = &gost_R3410_2001_CryptoPro_B_ParamSet_oid_str_param, + .name = &gost_R3410_2001_CryptoPro_B_ParamSet_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 17) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 17 +#endif +#if (MAX_CURVE_NAME_LEN < 52) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 52 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_C_ParamSet.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_C_ParamSet.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_C_ParamSet.h @@ -0,0 +1,333 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET + +#ifndef __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_H__ +#define __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_H__ +#include +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_P_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_mpinv[] = { + 0xdf, 0x6e, 0x6c, 0x2c, 0x72, 0x7c, 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal[] = { + 0xa5, 0x1f, 0x17, 0x61, 0x61, 0xf1, 0xd7, 0x34, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_mpinv[] = { + 0x72, 0x7c, 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal[] = { + 0xa5, 0x1f, 0x17, 0x61, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_mpinv[] = { + 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal[] = { + 0xa5, 0x1f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_a[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x98, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_a); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_b); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_curve_order[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0x58, 0x2c, 0xa3, 0x51, 0x1e, 0xdd, 0xfb, 0x74, + 0xf0, 0x2f, 0x3a, 0x65, 0x98, 0x98, 0x0b, 0xb9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_curve_order); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_gx); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_gy[] = { + 0x41, 0xec, 0xe5, 0x57, 0x43, 0x71, 0x1a, 0x8c, + 0x3c, 0xbf, 0x37, 0x83, 0xcd, 0x08, 0xc0, 0xee, + 0x4d, 0x4d, 0xc4, 0x40, 0xd4, 0x64, 0x1a, 0x8f, + 0x36, 0x6e, 0x55, 0x0d, 0xfd, 0xb3, 0xbb, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_gy); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_gz); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_gen_order[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0x58, 0x2c, 0xa3, 0x51, 0x1e, 0xdd, 0xfb, 0x74, + 0xf0, 0x2f, 0x3a, 0x65, 0x98, 0x98, 0x0b, 0xb9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_gen_order); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_Q_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_gen_order_bitlen); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_cofactor); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_C_ParamSet_alpha_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_C_ParamSet_gamma_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_C_ParamSet_alpha_edwards, 0); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_name[] = "GOST_R3410_2001_CRYPTOPRO_C_PARAMSET"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_name); + +static const u8 gost_R3410_2001_CryptoPro_C_ParamSet_oid[] = "1.2.643.2.2.35.3"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_C_ParamSet_oid); + +static const ec_str_params gost_R3410_2001_CryptoPro_C_ParamSet_str_params = { + .p = &gost_R3410_2001_CryptoPro_C_ParamSet_p_str_param, + .p_bitlen = &gost_R3410_2001_CryptoPro_C_ParamSet_p_bitlen_str_param, + .r = &gost_R3410_2001_CryptoPro_C_ParamSet_r_str_param, + .r_square = &gost_R3410_2001_CryptoPro_C_ParamSet_r_square_str_param, + .mpinv = &gost_R3410_2001_CryptoPro_C_ParamSet_mpinv_str_param, + .p_shift = &gost_R3410_2001_CryptoPro_C_ParamSet_p_shift_str_param, + .p_normalized = &gost_R3410_2001_CryptoPro_C_ParamSet_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2001_CryptoPro_C_ParamSet_p_reciprocal_str_param, + .a = &gost_R3410_2001_CryptoPro_C_ParamSet_a_str_param, + .b = &gost_R3410_2001_CryptoPro_C_ParamSet_b_str_param, + .curve_order = &gost_R3410_2001_CryptoPro_C_ParamSet_curve_order_str_param, + .gx = &gost_R3410_2001_CryptoPro_C_ParamSet_gx_str_param, + .gy = &gost_R3410_2001_CryptoPro_C_ParamSet_gy_str_param, + .gz = &gost_R3410_2001_CryptoPro_C_ParamSet_gz_str_param, + .gen_order = &gost_R3410_2001_CryptoPro_C_ParamSet_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2001_CryptoPro_C_ParamSet_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2001_CryptoPro_C_ParamSet_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2001_CryptoPro_C_ParamSet_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2001_CryptoPro_C_ParamSet_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2001_CryptoPro_C_ParamSet_alpha_edwards_str_param, + .oid = &gost_R3410_2001_CryptoPro_C_ParamSet_oid_str_param, + .name = &gost_R3410_2001_CryptoPro_C_ParamSet_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 17) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 17 +#endif +#if (MAX_CURVE_NAME_LEN < 52) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 52 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_XchA_ParamSet.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_XchA_ParamSet.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_XchA_ParamSet.h @@ -0,0 +1,315 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET + +#ifndef __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_H__ +#define __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_H__ +#include +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_P_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv[] = { + 0x46, 0xf3, 0x23, 0x44, 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv[] = { + 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv[] = { + 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_a); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_b); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x6c, 0x61, 0x10, 0x70, 0x99, 0x5a, 0xd1, 0x00, + 0x45, 0x84, 0x1b, 0x09, 0xb7, 0x61, 0xb8, 0x93, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_curve_order); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_gx); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_gy[] = { + 0x8d, 0x91, 0xe4, 0x71, 0xe0, 0x98, 0x9c, 0xda, + 0x27, 0xdf, 0x50, 0x5a, 0x45, 0x3f, 0x2b, 0x76, + 0x35, 0x29, 0x4f, 0x2d, 0xdf, 0x23, 0xe3, 0xb1, + 0x22, 0xac, 0xc9, 0x9c, 0x9e, 0x9f, 0x1e, 0x14, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_gy); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_gz); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x6c, 0x61, 0x10, 0x70, 0x99, 0x5a, 0xd1, 0x00, + 0x45, 0x84, 0x1b, 0x09, 0xb7, 0x61, 0xb8, 0x93, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_gen_order); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_Q_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_gen_order_bitlen); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_cofactor); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_XchA_ParamSet_alpha_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_XchA_ParamSet_gamma_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_XchA_ParamSet_alpha_edwards, 0); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_name[] = "GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_name); + +static const u8 gost_R3410_2001_CryptoPro_XchA_ParamSet_oid[] = "1.2.643.2.2.36.0"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchA_ParamSet_oid); + +static const ec_str_params gost_R3410_2001_CryptoPro_XchA_ParamSet_str_params = { + .p = &gost_R3410_2001_CryptoPro_XchA_ParamSet_p_str_param, + .p_bitlen = &gost_R3410_2001_CryptoPro_XchA_ParamSet_p_bitlen_str_param, + .r = &gost_R3410_2001_CryptoPro_XchA_ParamSet_r_str_param, + .r_square = &gost_R3410_2001_CryptoPro_XchA_ParamSet_r_square_str_param, + .mpinv = &gost_R3410_2001_CryptoPro_XchA_ParamSet_mpinv_str_param, + .p_shift = &gost_R3410_2001_CryptoPro_XchA_ParamSet_p_shift_str_param, + .p_normalized = &gost_R3410_2001_CryptoPro_XchA_ParamSet_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2001_CryptoPro_XchA_ParamSet_p_reciprocal_str_param, + .a = &gost_R3410_2001_CryptoPro_XchA_ParamSet_a_str_param, + .b = &gost_R3410_2001_CryptoPro_XchA_ParamSet_b_str_param, + .curve_order = &gost_R3410_2001_CryptoPro_XchA_ParamSet_curve_order_str_param, + .gx = &gost_R3410_2001_CryptoPro_XchA_ParamSet_gx_str_param, + .gy = &gost_R3410_2001_CryptoPro_XchA_ParamSet_gy_str_param, + .gz = &gost_R3410_2001_CryptoPro_XchA_ParamSet_gz_str_param, + .gen_order = &gost_R3410_2001_CryptoPro_XchA_ParamSet_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2001_CryptoPro_XchA_ParamSet_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2001_CryptoPro_XchA_ParamSet_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2001_CryptoPro_XchA_ParamSet_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2001_CryptoPro_XchA_ParamSet_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2001_CryptoPro_XchA_ParamSet_alpha_edwards_str_param, + .oid = &gost_R3410_2001_CryptoPro_XchA_ParamSet_oid_str_param, + .name = &gost_R3410_2001_CryptoPro_XchA_ParamSet_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 17) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 17 +#endif +#if (MAX_CURVE_NAME_LEN < 55) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 55 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_XchB_ParamSet.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_XchB_ParamSet.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_CryptoPro_XchB_ParamSet.h @@ -0,0 +1,333 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET + +#ifndef __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_H__ +#define __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_H__ +#include +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_P_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv[] = { + 0xdf, 0x6e, 0x6c, 0x2c, 0x72, 0x7c, 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal[] = { + 0xa5, 0x1f, 0x17, 0x61, 0x61, 0xf1, 0xd7, 0x34, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv[] = { + 0x72, 0x7c, 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal[] = { + 0xa5, 0x1f, 0x17, 0x61, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_r); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv[] = { + 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal[] = { + 0xa5, 0x1f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_a[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x98, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_a); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_b); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_curve_order[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0x58, 0x2c, 0xa3, 0x51, 0x1e, 0xdd, 0xfb, 0x74, + 0xf0, 0x2f, 0x3a, 0x65, 0x98, 0x98, 0x0b, 0xb9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_curve_order); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_gx); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_gy[] = { + 0x41, 0xec, 0xe5, 0x57, 0x43, 0x71, 0x1a, 0x8c, + 0x3c, 0xbf, 0x37, 0x83, 0xcd, 0x08, 0xc0, 0xee, + 0x4d, 0x4d, 0xc4, 0x40, 0xd4, 0x64, 0x1a, 0x8f, + 0x36, 0x6e, 0x55, 0x0d, 0xfd, 0xb3, 0xbb, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_gy); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_gz); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_gen_order[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0x58, 0x2c, 0xa3, 0x51, 0x1e, 0xdd, 0xfb, 0x74, + 0xf0, 0x2f, 0x3a, 0x65, 0x98, 0x98, 0x0b, 0xb9, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_gen_order); + +#define CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_Q_BITLEN 256 +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_gen_order_bitlen); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_cofactor); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_XchB_ParamSet_alpha_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_XchB_ParamSet_gamma_montgomery, 0); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_CryptoPro_XchB_ParamSet_alpha_edwards, 0); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_name[] = "GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_name); + +static const u8 gost_R3410_2001_CryptoPro_XchB_ParamSet_oid[] = "1.2.643.2.2.36.1"; +TO_EC_STR_PARAM(gost_R3410_2001_CryptoPro_XchB_ParamSet_oid); + +static const ec_str_params gost_R3410_2001_CryptoPro_XchB_ParamSet_str_params = { + .p = &gost_R3410_2001_CryptoPro_XchB_ParamSet_p_str_param, + .p_bitlen = &gost_R3410_2001_CryptoPro_XchB_ParamSet_p_bitlen_str_param, + .r = &gost_R3410_2001_CryptoPro_XchB_ParamSet_r_str_param, + .r_square = &gost_R3410_2001_CryptoPro_XchB_ParamSet_r_square_str_param, + .mpinv = &gost_R3410_2001_CryptoPro_XchB_ParamSet_mpinv_str_param, + .p_shift = &gost_R3410_2001_CryptoPro_XchB_ParamSet_p_shift_str_param, + .p_normalized = &gost_R3410_2001_CryptoPro_XchB_ParamSet_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2001_CryptoPro_XchB_ParamSet_p_reciprocal_str_param, + .a = &gost_R3410_2001_CryptoPro_XchB_ParamSet_a_str_param, + .b = &gost_R3410_2001_CryptoPro_XchB_ParamSet_b_str_param, + .curve_order = &gost_R3410_2001_CryptoPro_XchB_ParamSet_curve_order_str_param, + .gx = &gost_R3410_2001_CryptoPro_XchB_ParamSet_gx_str_param, + .gy = &gost_R3410_2001_CryptoPro_XchB_ParamSet_gy_str_param, + .gz = &gost_R3410_2001_CryptoPro_XchB_ParamSet_gz_str_param, + .gen_order = &gost_R3410_2001_CryptoPro_XchB_ParamSet_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2001_CryptoPro_XchB_ParamSet_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2001_CryptoPro_XchB_ParamSet_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2001_CryptoPro_XchB_ParamSet_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2001_CryptoPro_XchB_ParamSet_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2001_CryptoPro_XchB_ParamSet_alpha_edwards_str_param, + .oid = &gost_R3410_2001_CryptoPro_XchB_ParamSet_oid_str_param, + .name = &gost_R3410_2001_CryptoPro_XchB_ParamSet_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 17) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 17 +#endif +#if (MAX_CURVE_NAME_LEN < 55) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 55 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_TestParamSet.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_TestParamSet.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2001_TestParamSet.h @@ -0,0 +1,324 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2001_TESTPARAMSET + +#ifndef __EC_PARAMS_GOST_R3410_2001_TESTPARAMSET_H__ +#define __EC_PARAMS_GOST_R3410_2001_TESTPARAMSET_H__ +#include +static const u8 gost_R3410_2001_TestParamSet_p[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p); + +#define CURVE_GOST_R3410_2001_TESTPARAMSET_P_BITLEN 256 +static const u8 gost_R3410_2001_TestParamSet_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2001_TestParamSet_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xcf, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_r); + +static const u8 gost_R3410_2001_TestParamSet_r_square[] = { + 0x46, 0x45, 0x84, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_r_square); + +static const u8 gost_R3410_2001_TestParamSet_mpinv[] = { + 0xdb, 0xf9, 0x51, 0xd5, 0x88, 0x3b, 0x2b, 0x2f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_mpinv); + +static const u8 gost_R3410_2001_TestParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_shift); + +static const u8 gost_R3410_2001_TestParamSet_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_normalized); + +static const u8 gost_R3410_2001_TestParamSet_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2001_TestParamSet_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xcf, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_r); + +static const u8 gost_R3410_2001_TestParamSet_r_square[] = { + 0x46, 0x45, 0x84, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_r_square); + +static const u8 gost_R3410_2001_TestParamSet_mpinv[] = { + 0x88, 0x3b, 0x2b, 0x2f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_mpinv); + +static const u8 gost_R3410_2001_TestParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_shift); + +static const u8 gost_R3410_2001_TestParamSet_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_normalized); + +static const u8 gost_R3410_2001_TestParamSet_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2001_TestParamSet_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xcf, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_r); + +static const u8 gost_R3410_2001_TestParamSet_r_square[] = { + 0x46, 0x45, 0x84, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_r_square); + +static const u8 gost_R3410_2001_TestParamSet_mpinv[] = { + 0x2b, 0x2f, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_mpinv); + +static const u8 gost_R3410_2001_TestParamSet_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_shift); + +static const u8 gost_R3410_2001_TestParamSet_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_normalized); + +static const u8 gost_R3410_2001_TestParamSet_p_reciprocal[] = { + 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2001_TestParamSet_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_a); + +static const u8 gost_R3410_2001_TestParamSet_b[] = { + 0x5f, 0xbf, 0xf4, 0x98, 0xaa, 0x93, 0x8c, 0xe7, + 0x39, 0xb8, 0xe0, 0x22, 0xfb, 0xaf, 0xef, 0x40, + 0x56, 0x3f, 0x6e, 0x6a, 0x34, 0x72, 0xfc, 0x2a, + 0x51, 0x4c, 0x0c, 0xe9, 0xda, 0xe2, 0x3b, 0x7e, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_b); + +#define CURVE_GOST_R3410_2001_TESTPARAMSET_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2001_TestParamSet_curve_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x50, 0xfe, 0x8a, 0x18, 0x92, 0x97, 0x61, 0x54, + 0xc5, 0x9c, 0xfc, 0x19, 0x3a, 0xcc, 0xf5, 0xb3, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_curve_order); + +static const u8 gost_R3410_2001_TestParamSet_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_gx); + +static const u8 gost_R3410_2001_TestParamSet_gy[] = { + 0x08, 0xe2, 0xa8, 0xa0, 0xe6, 0x51, 0x47, 0xd4, + 0xbd, 0x63, 0x16, 0x03, 0x0e, 0x16, 0xd1, 0x9c, + 0x85, 0xc9, 0x7f, 0x0a, 0x9c, 0xa2, 0x67, 0x12, + 0x2b, 0x96, 0xab, 0xbc, 0xea, 0x7e, 0x8f, 0xc8, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_gy); + +static const u8 gost_R3410_2001_TestParamSet_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_gz); + +static const u8 gost_R3410_2001_TestParamSet_gen_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x50, 0xfe, 0x8a, 0x18, 0x92, 0x97, 0x61, 0x54, + 0xc5, 0x9c, 0xfc, 0x19, 0x3a, 0xcc, 0xf5, 0xb3, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_gen_order); + +#define CURVE_GOST_R3410_2001_TESTPARAMSET_Q_BITLEN 256 +static const u8 gost_R3410_2001_TestParamSet_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_gen_order_bitlen); + +static const u8 gost_R3410_2001_TestParamSet_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_cofactor); + +static const u8 gost_R3410_2001_TestParamSet_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_TestParamSet_alpha_montgomery, 0); + +static const u8 gost_R3410_2001_TestParamSet_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_TestParamSet_gamma_montgomery, 0); + +static const u8 gost_R3410_2001_TestParamSet_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2001_TestParamSet_alpha_edwards, 0); + +static const u8 gost_R3410_2001_TestParamSet_name[] = "GOST_R3410_2001_TESTPARAMSET"; +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_name); + +static const u8 gost_R3410_2001_TestParamSet_oid[] = "1.2.643.2.2.35.0"; +TO_EC_STR_PARAM(gost_R3410_2001_TestParamSet_oid); + +static const ec_str_params gost_R3410_2001_TestParamSet_str_params = { + .p = &gost_R3410_2001_TestParamSet_p_str_param, + .p_bitlen = &gost_R3410_2001_TestParamSet_p_bitlen_str_param, + .r = &gost_R3410_2001_TestParamSet_r_str_param, + .r_square = &gost_R3410_2001_TestParamSet_r_square_str_param, + .mpinv = &gost_R3410_2001_TestParamSet_mpinv_str_param, + .p_shift = &gost_R3410_2001_TestParamSet_p_shift_str_param, + .p_normalized = &gost_R3410_2001_TestParamSet_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2001_TestParamSet_p_reciprocal_str_param, + .a = &gost_R3410_2001_TestParamSet_a_str_param, + .b = &gost_R3410_2001_TestParamSet_b_str_param, + .curve_order = &gost_R3410_2001_TestParamSet_curve_order_str_param, + .gx = &gost_R3410_2001_TestParamSet_gx_str_param, + .gy = &gost_R3410_2001_TestParamSet_gy_str_param, + .gz = &gost_R3410_2001_TestParamSet_gz_str_param, + .gen_order = &gost_R3410_2001_TestParamSet_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2001_TestParamSet_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2001_TestParamSet_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2001_TestParamSet_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2001_TestParamSet_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2001_TestParamSet_alpha_edwards_str_param, + .oid = &gost_R3410_2001_TestParamSet_oid_str_param, + .name = &gost_R3410_2001_TestParamSet_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2001_TESTPARAMSET_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2001_TESTPARAMSET_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2001_TESTPARAMSET_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2001_TESTPARAMSET_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2001_TESTPARAMSET_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2001_TESTPARAMSET_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 17) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 17 +#endif +#if (MAX_CURVE_NAME_LEN < 44) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 44 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2001_TESTPARAMSET_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2001_TESTPARAMSET */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetA.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetA.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetA.h @@ -0,0 +1,316 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETA + +#ifndef __EC_PARAMS_GOST_R3410_2012_256_PARAMSETA_H__ +#define __EC_PARAMS_GOST_R3410_2012_256_PARAMSETA_H__ +#include +static const u8 gost_R3410_2012_256_paramSetA_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p); + +#define CURVE_GOST_R3410_2012_256_PARAMSETA_P_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetA_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_256_paramSetA_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_r); + +static const u8 gost_R3410_2012_256_paramSetA_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_r_square); + +static const u8 gost_R3410_2012_256_paramSetA_mpinv[] = { + 0x46, 0xf3, 0x23, 0x44, 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_mpinv); + +static const u8 gost_R3410_2012_256_paramSetA_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_shift); + +static const u8 gost_R3410_2012_256_paramSetA_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetA_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_256_paramSetA_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_r); + +static const u8 gost_R3410_2012_256_paramSetA_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_r_square); + +static const u8 gost_R3410_2012_256_paramSetA_mpinv[] = { + 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_mpinv); + +static const u8 gost_R3410_2012_256_paramSetA_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_shift); + +static const u8 gost_R3410_2012_256_paramSetA_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetA_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_256_paramSetA_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_r); + +static const u8 gost_R3410_2012_256_paramSetA_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_r_square); + +static const u8 gost_R3410_2012_256_paramSetA_mpinv[] = { + 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_mpinv); + +static const u8 gost_R3410_2012_256_paramSetA_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_shift); + +static const u8 gost_R3410_2012_256_paramSetA_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetA_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_256_paramSetA_a[] = { + 0xc2, 0x17, 0x3f, 0x15, 0x13, 0x98, 0x16, 0x73, + 0xaf, 0x48, 0x92, 0xc2, 0x30, 0x35, 0xa2, 0x7c, + 0xe2, 0x5e, 0x20, 0x13, 0xbf, 0x95, 0xaa, 0x33, + 0xb2, 0x2c, 0x65, 0x6f, 0x27, 0x7e, 0x73, 0x35, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_a); + +static const u8 gost_R3410_2012_256_paramSetA_b[] = { + 0x29, 0x5f, 0x9b, 0xae, 0x74, 0x28, 0xed, 0x9c, + 0xcc, 0x20, 0xe7, 0xc3, 0x59, 0xa9, 0xd4, 0x1a, + 0x22, 0xfc, 0xcd, 0x91, 0x08, 0xe1, 0x7b, 0xf7, + 0xba, 0x93, 0x37, 0xa6, 0xf8, 0xae, 0x95, 0x13, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_b); + +#define CURVE_GOST_R3410_2012_256_PARAMSETA_CURVE_ORDER_BITLEN 257 +static const u8 gost_R3410_2012_256_paramSetA_curve_order[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x63, 0x37, 0x7f, 0x21, 0xed, 0x98, + 0xd7, 0x04, 0x56, 0xbd, 0x55, 0xb0, 0xd8, 0x31, + 0x9c, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_curve_order); + +static const u8 gost_R3410_2012_256_paramSetA_gx[] = { + 0x91, 0xe3, 0x84, 0x43, 0xa5, 0xe8, 0x2c, 0x0d, + 0x88, 0x09, 0x23, 0x42, 0x57, 0x12, 0xb2, 0xbb, + 0x65, 0x8b, 0x91, 0x96, 0x93, 0x2e, 0x02, 0xc7, + 0x8b, 0x25, 0x82, 0xfe, 0x74, 0x2d, 0xaa, 0x28, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_gx); + +static const u8 gost_R3410_2012_256_paramSetA_gy[] = { + 0x32, 0x87, 0x94, 0x23, 0xab, 0x1a, 0x03, 0x75, + 0x89, 0x57, 0x86, 0xc4, 0xbb, 0x46, 0xe9, 0x56, + 0x5f, 0xde, 0x0b, 0x53, 0x44, 0x76, 0x67, 0x40, + 0xaf, 0x26, 0x8a, 0xdb, 0x32, 0x32, 0x2e, 0x5c, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_gy); + +static const u8 gost_R3410_2012_256_paramSetA_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_gz); + +static const u8 gost_R3410_2012_256_paramSetA_gen_order[] = { + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xd8, 0xcd, 0xdf, 0xc8, 0x7b, 0x66, 0x35, + 0xc1, 0x15, 0xaf, 0x55, 0x6c, 0x36, 0x0c, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_gen_order); + +#define CURVE_GOST_R3410_2012_256_PARAMSETA_Q_BITLEN 255 +static const u8 gost_R3410_2012_256_paramSetA_gen_order_bitlen[] = { + 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_gen_order_bitlen); + +static const u8 gost_R3410_2012_256_paramSetA_cofactor[] = { + 0x04, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_cofactor); + +static const u8 gost_R3410_2012_256_paramSetA_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetA_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetA_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetA_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetA_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetA_alpha_edwards, 0); + +static const u8 gost_R3410_2012_256_paramSetA_name[] = "GOST_R3410_2012_256_PARAMSETA"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_name); + +static const u8 gost_R3410_2012_256_paramSetA_oid[] = "1.2.643.7.1.2.1.1.1"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetA_oid); + +static const ec_str_params gost_R3410_2012_256_paramSetA_str_params = { + .p = &gost_R3410_2012_256_paramSetA_p_str_param, + .p_bitlen = &gost_R3410_2012_256_paramSetA_p_bitlen_str_param, + .r = &gost_R3410_2012_256_paramSetA_r_str_param, + .r_square = &gost_R3410_2012_256_paramSetA_r_square_str_param, + .mpinv = &gost_R3410_2012_256_paramSetA_mpinv_str_param, + .p_shift = &gost_R3410_2012_256_paramSetA_p_shift_str_param, + .p_normalized = &gost_R3410_2012_256_paramSetA_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_256_paramSetA_p_reciprocal_str_param, + .a = &gost_R3410_2012_256_paramSetA_a_str_param, + .b = &gost_R3410_2012_256_paramSetA_b_str_param, + .curve_order = &gost_R3410_2012_256_paramSetA_curve_order_str_param, + .gx = &gost_R3410_2012_256_paramSetA_gx_str_param, + .gy = &gost_R3410_2012_256_paramSetA_gy_str_param, + .gz = &gost_R3410_2012_256_paramSetA_gz_str_param, + .gen_order = &gost_R3410_2012_256_paramSetA_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_256_paramSetA_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_256_paramSetA_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_256_paramSetA_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_256_paramSetA_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_256_paramSetA_alpha_edwards_str_param, + .oid = &gost_R3410_2012_256_paramSetA_oid_str_param, + .name = &gost_R3410_2012_256_paramSetA_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETA_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETA_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETA_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETA_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETA_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETA_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_256_PARAMSETA_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETA */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetB.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetB.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetB.h @@ -0,0 +1,315 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETB + +#ifndef __EC_PARAMS_GOST_R3410_2012_256_PARAMSETB_H__ +#define __EC_PARAMS_GOST_R3410_2012_256_PARAMSETB_H__ +#include +static const u8 gost_R3410_2012_256_paramSetB_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p); + +#define CURVE_GOST_R3410_2012_256_PARAMSETB_P_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetB_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_256_paramSetB_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_r); + +static const u8 gost_R3410_2012_256_paramSetB_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_r_square); + +static const u8 gost_R3410_2012_256_paramSetB_mpinv[] = { + 0x46, 0xf3, 0x23, 0x44, 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_mpinv); + +static const u8 gost_R3410_2012_256_paramSetB_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_shift); + +static const u8 gost_R3410_2012_256_paramSetB_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetB_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_256_paramSetB_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_r); + +static const u8 gost_R3410_2012_256_paramSetB_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_r_square); + +static const u8 gost_R3410_2012_256_paramSetB_mpinv[] = { + 0x75, 0xd5, 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_mpinv); + +static const u8 gost_R3410_2012_256_paramSetB_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_shift); + +static const u8 gost_R3410_2012_256_paramSetB_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetB_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_256_paramSetB_r[] = { + 0x02, 0x69, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_r); + +static const u8 gost_R3410_2012_256_paramSetB_r_square[] = { + 0x05, 0xcf, 0x11, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_r_square); + +static const u8 gost_R3410_2012_256_paramSetB_mpinv[] = { + 0xad, 0xd9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_mpinv); + +static const u8 gost_R3410_2012_256_paramSetB_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_shift); + +static const u8 gost_R3410_2012_256_paramSetB_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x97, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetB_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_256_paramSetB_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_a); + +static const u8 gost_R3410_2012_256_paramSetB_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_b); + +#define CURVE_GOST_R3410_2012_256_PARAMSETB_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetB_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x6c, 0x61, 0x10, 0x70, 0x99, 0x5a, 0xd1, 0x00, + 0x45, 0x84, 0x1b, 0x09, 0xb7, 0x61, 0xb8, 0x93, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_curve_order); + +static const u8 gost_R3410_2012_256_paramSetB_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_gx); + +static const u8 gost_R3410_2012_256_paramSetB_gy[] = { + 0x8d, 0x91, 0xe4, 0x71, 0xe0, 0x98, 0x9c, 0xda, + 0x27, 0xdf, 0x50, 0x5a, 0x45, 0x3f, 0x2b, 0x76, + 0x35, 0x29, 0x4f, 0x2d, 0xdf, 0x23, 0xe3, 0xb1, + 0x22, 0xac, 0xc9, 0x9c, 0x9e, 0x9f, 0x1e, 0x14, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_gy); + +static const u8 gost_R3410_2012_256_paramSetB_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_gz); + +static const u8 gost_R3410_2012_256_paramSetB_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x6c, 0x61, 0x10, 0x70, 0x99, 0x5a, 0xd1, 0x00, + 0x45, 0x84, 0x1b, 0x09, 0xb7, 0x61, 0xb8, 0x93, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_gen_order); + +#define CURVE_GOST_R3410_2012_256_PARAMSETB_Q_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetB_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_gen_order_bitlen); + +static const u8 gost_R3410_2012_256_paramSetB_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_cofactor); + +static const u8 gost_R3410_2012_256_paramSetB_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetB_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetB_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetB_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetB_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetB_alpha_edwards, 0); + +static const u8 gost_R3410_2012_256_paramSetB_name[] = "GOST_R3410_2012_256_PARAMSETB"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_name); + +static const u8 gost_R3410_2012_256_paramSetB_oid[] = "1.2.643.7.1.2.1.1.2"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetB_oid); + +static const ec_str_params gost_R3410_2012_256_paramSetB_str_params = { + .p = &gost_R3410_2012_256_paramSetB_p_str_param, + .p_bitlen = &gost_R3410_2012_256_paramSetB_p_bitlen_str_param, + .r = &gost_R3410_2012_256_paramSetB_r_str_param, + .r_square = &gost_R3410_2012_256_paramSetB_r_square_str_param, + .mpinv = &gost_R3410_2012_256_paramSetB_mpinv_str_param, + .p_shift = &gost_R3410_2012_256_paramSetB_p_shift_str_param, + .p_normalized = &gost_R3410_2012_256_paramSetB_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_256_paramSetB_p_reciprocal_str_param, + .a = &gost_R3410_2012_256_paramSetB_a_str_param, + .b = &gost_R3410_2012_256_paramSetB_b_str_param, + .curve_order = &gost_R3410_2012_256_paramSetB_curve_order_str_param, + .gx = &gost_R3410_2012_256_paramSetB_gx_str_param, + .gy = &gost_R3410_2012_256_paramSetB_gy_str_param, + .gz = &gost_R3410_2012_256_paramSetB_gz_str_param, + .gen_order = &gost_R3410_2012_256_paramSetB_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_256_paramSetB_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_256_paramSetB_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_256_paramSetB_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_256_paramSetB_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_256_paramSetB_alpha_edwards_str_param, + .oid = &gost_R3410_2012_256_paramSetB_oid_str_param, + .name = &gost_R3410_2012_256_paramSetB_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETB_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETB_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETB_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETB_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETB_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETB_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_256_PARAMSETB_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETB */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetC.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetC.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetC.h @@ -0,0 +1,324 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETC + +#ifndef __EC_PARAMS_GOST_R3410_2012_256_PARAMSETC_H__ +#define __EC_PARAMS_GOST_R3410_2012_256_PARAMSETC_H__ +#include +static const u8 gost_R3410_2012_256_paramSetC_p[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p); + +#define CURVE_GOST_R3410_2012_256_PARAMSETC_P_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetC_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_256_paramSetC_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_r); + +static const u8 gost_R3410_2012_256_paramSetC_r_square[] = { + 0x02, 0x7a, 0xcd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_r_square); + +static const u8 gost_R3410_2012_256_paramSetC_mpinv[] = { + 0xbd, 0x66, 0x7a, 0xb8, 0xa3, 0x34, 0x78, 0x57, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_mpinv); + +static const u8 gost_R3410_2012_256_paramSetC_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_shift); + +static const u8 gost_R3410_2012_256_paramSetC_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetC_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_256_paramSetC_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_r); + +static const u8 gost_R3410_2012_256_paramSetC_r_square[] = { + 0x02, 0x7a, 0xcd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_r_square); + +static const u8 gost_R3410_2012_256_paramSetC_mpinv[] = { + 0xa3, 0x34, 0x78, 0x57, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_mpinv); + +static const u8 gost_R3410_2012_256_paramSetC_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_shift); + +static const u8 gost_R3410_2012_256_paramSetC_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetC_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_256_paramSetC_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_r); + +static const u8 gost_R3410_2012_256_paramSetC_r_square[] = { + 0x02, 0x7a, 0xcd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_r_square); + +static const u8 gost_R3410_2012_256_paramSetC_mpinv[] = { + 0x78, 0x57, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_mpinv); + +static const u8 gost_R3410_2012_256_paramSetC_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_shift); + +static const u8 gost_R3410_2012_256_paramSetC_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x99, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetC_p_reciprocal[] = { + 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_256_paramSetC_a[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x96, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_a); + +static const u8 gost_R3410_2012_256_paramSetC_b[] = { + 0x3e, 0x1a, 0xf4, 0x19, 0xa2, 0x69, 0xa5, 0xf8, + 0x66, 0xa7, 0xd3, 0xc2, 0x5c, 0x3d, 0xf8, 0x0a, + 0xe9, 0x79, 0x25, 0x93, 0x73, 0xff, 0x2b, 0x18, + 0x2f, 0x49, 0xd4, 0xce, 0x7e, 0x1b, 0xbc, 0x8b, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_b); + +#define CURVE_GOST_R3410_2012_256_PARAMSETC_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetC_curve_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x5f, 0x70, 0x0c, 0xff, 0xf1, 0xa6, 0x24, 0xe5, + 0xe4, 0x97, 0x16, 0x1b, 0xcc, 0x8a, 0x19, 0x8f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_curve_order); + +static const u8 gost_R3410_2012_256_paramSetC_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_gx); + +static const u8 gost_R3410_2012_256_paramSetC_gy[] = { + 0x3f, 0xa8, 0x12, 0x43, 0x59, 0xf9, 0x66, 0x80, + 0xb8, 0x3d, 0x1c, 0x3e, 0xb2, 0xc0, 0x70, 0xe5, + 0xc5, 0x45, 0xc9, 0x85, 0x8d, 0x03, 0xec, 0xfb, + 0x74, 0x4b, 0xf8, 0xd7, 0x17, 0x71, 0x7e, 0xfc, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_gy); + +static const u8 gost_R3410_2012_256_paramSetC_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_gz); + +static const u8 gost_R3410_2012_256_paramSetC_gen_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x5f, 0x70, 0x0c, 0xff, 0xf1, 0xa6, 0x24, 0xe5, + 0xe4, 0x97, 0x16, 0x1b, 0xcc, 0x8a, 0x19, 0x8f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_gen_order); + +#define CURVE_GOST_R3410_2012_256_PARAMSETC_Q_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetC_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_gen_order_bitlen); + +static const u8 gost_R3410_2012_256_paramSetC_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_cofactor); + +static const u8 gost_R3410_2012_256_paramSetC_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetC_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetC_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetC_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetC_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetC_alpha_edwards, 0); + +static const u8 gost_R3410_2012_256_paramSetC_name[] = "GOST_R3410_2012_256_PARAMSETC"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_name); + +static const u8 gost_R3410_2012_256_paramSetC_oid[] = "1.2.643.7.1.2.1.1.3"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetC_oid); + +static const ec_str_params gost_R3410_2012_256_paramSetC_str_params = { + .p = &gost_R3410_2012_256_paramSetC_p_str_param, + .p_bitlen = &gost_R3410_2012_256_paramSetC_p_bitlen_str_param, + .r = &gost_R3410_2012_256_paramSetC_r_str_param, + .r_square = &gost_R3410_2012_256_paramSetC_r_square_str_param, + .mpinv = &gost_R3410_2012_256_paramSetC_mpinv_str_param, + .p_shift = &gost_R3410_2012_256_paramSetC_p_shift_str_param, + .p_normalized = &gost_R3410_2012_256_paramSetC_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_256_paramSetC_p_reciprocal_str_param, + .a = &gost_R3410_2012_256_paramSetC_a_str_param, + .b = &gost_R3410_2012_256_paramSetC_b_str_param, + .curve_order = &gost_R3410_2012_256_paramSetC_curve_order_str_param, + .gx = &gost_R3410_2012_256_paramSetC_gx_str_param, + .gy = &gost_R3410_2012_256_paramSetC_gy_str_param, + .gz = &gost_R3410_2012_256_paramSetC_gz_str_param, + .gen_order = &gost_R3410_2012_256_paramSetC_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_256_paramSetC_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_256_paramSetC_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_256_paramSetC_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_256_paramSetC_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_256_paramSetC_alpha_edwards_str_param, + .oid = &gost_R3410_2012_256_paramSetC_oid_str_param, + .name = &gost_R3410_2012_256_paramSetC_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETC_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETC_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETC_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETC_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETC_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETC_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_256_PARAMSETC_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETC */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetD.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetD.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_256_paramSetD.h @@ -0,0 +1,333 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETD + +#ifndef __EC_PARAMS_GOST_R3410_2012_256_PARAMSETD_H__ +#define __EC_PARAMS_GOST_R3410_2012_256_PARAMSETD_H__ +#include +static const u8 gost_R3410_2012_256_paramSetD_p[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p); + +#define CURVE_GOST_R3410_2012_256_PARAMSETD_P_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetD_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_256_paramSetD_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_r); + +static const u8 gost_R3410_2012_256_paramSetD_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_r_square); + +static const u8 gost_R3410_2012_256_paramSetD_mpinv[] = { + 0xdf, 0x6e, 0x6c, 0x2c, 0x72, 0x7c, 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_mpinv); + +static const u8 gost_R3410_2012_256_paramSetD_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_shift); + +static const u8 gost_R3410_2012_256_paramSetD_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetD_p_reciprocal[] = { + 0xa5, 0x1f, 0x17, 0x61, 0x61, 0xf1, 0xd7, 0x34, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_256_paramSetD_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_r); + +static const u8 gost_R3410_2012_256_paramSetD_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_r_square); + +static const u8 gost_R3410_2012_256_paramSetD_mpinv[] = { + 0x72, 0x7c, 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_mpinv); + +static const u8 gost_R3410_2012_256_paramSetD_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_shift); + +static const u8 gost_R3410_2012_256_paramSetD_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetD_p_reciprocal[] = { + 0xa5, 0x1f, 0x17, 0x61, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_256_paramSetD_r[] = { + 0x64, 0x60, 0x9f, 0xa0, 0xa5, 0x7a, 0x7e, 0xf8, + 0x54, 0xe1, 0x37, 0xa1, 0x94, 0xbe, 0x37, 0x55, + 0x30, 0x7b, 0x91, 0x79, 0x87, 0x6f, 0xae, 0x2c, + 0x86, 0x67, 0x08, 0x46, 0xfd, 0xd2, 0x8a, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_r); + +static const u8 gost_R3410_2012_256_paramSetD_r_square[] = { + 0x80, 0x7a, 0x39, 0x4e, 0xde, 0x09, 0x76, 0x52, + 0x18, 0x63, 0x04, 0x21, 0x28, 0x49, 0xc0, 0x7b, + 0x10, 0x17, 0xbb, 0x39, 0xc2, 0xd3, 0x46, 0xc5, + 0x40, 0x99, 0x73, 0xb4, 0xc4, 0x27, 0xfc, 0xea, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_r_square); + +static const u8 gost_R3410_2012_256_paramSetD_mpinv[] = { + 0x17, 0x6d, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_mpinv); + +static const u8 gost_R3410_2012_256_paramSetD_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_shift); + +static const u8 gost_R3410_2012_256_paramSetD_p_normalized[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x9b, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_normalized); + +static const u8 gost_R3410_2012_256_paramSetD_p_reciprocal[] = { + 0xa5, 0x1f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_256_paramSetD_a[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0xcf, 0x84, 0x6e, 0x86, 0x78, 0x90, 0x51, 0xd3, + 0x79, 0x98, 0xf7, 0xb9, 0x02, 0x2d, 0x75, 0x98, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_a); + +static const u8 gost_R3410_2012_256_paramSetD_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_b); + +#define CURVE_GOST_R3410_2012_256_PARAMSETD_CURVE_ORDER_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetD_curve_order[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0x58, 0x2c, 0xa3, 0x51, 0x1e, 0xdd, 0xfb, 0x74, + 0xf0, 0x2f, 0x3a, 0x65, 0x98, 0x98, 0x0b, 0xb9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_curve_order); + +static const u8 gost_R3410_2012_256_paramSetD_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_gx); + +static const u8 gost_R3410_2012_256_paramSetD_gy[] = { + 0x41, 0xec, 0xe5, 0x57, 0x43, 0x71, 0x1a, 0x8c, + 0x3c, 0xbf, 0x37, 0x83, 0xcd, 0x08, 0xc0, 0xee, + 0x4d, 0x4d, 0xc4, 0x40, 0xd4, 0x64, 0x1a, 0x8f, + 0x36, 0x6e, 0x55, 0x0d, 0xfd, 0xb3, 0xbb, 0x67, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_gy); + +static const u8 gost_R3410_2012_256_paramSetD_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_gz); + +static const u8 gost_R3410_2012_256_paramSetD_gen_order[] = { + 0x9b, 0x9f, 0x60, 0x5f, 0x5a, 0x85, 0x81, 0x07, + 0xab, 0x1e, 0xc8, 0x5e, 0x6b, 0x41, 0xc8, 0xaa, + 0x58, 0x2c, 0xa3, 0x51, 0x1e, 0xdd, 0xfb, 0x74, + 0xf0, 0x2f, 0x3a, 0x65, 0x98, 0x98, 0x0b, 0xb9, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_gen_order); + +#define CURVE_GOST_R3410_2012_256_PARAMSETD_Q_BITLEN 256 +static const u8 gost_R3410_2012_256_paramSetD_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_gen_order_bitlen); + +static const u8 gost_R3410_2012_256_paramSetD_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_cofactor); + +static const u8 gost_R3410_2012_256_paramSetD_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetD_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetD_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetD_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_256_paramSetD_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_256_paramSetD_alpha_edwards, 0); + +static const u8 gost_R3410_2012_256_paramSetD_name[] = "GOST_R3410_2012_256_PARAMSETD"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_name); + +static const u8 gost_R3410_2012_256_paramSetD_oid[] = "1.2.643.7.1.2.1.1.4"; +TO_EC_STR_PARAM(gost_R3410_2012_256_paramSetD_oid); + +static const ec_str_params gost_R3410_2012_256_paramSetD_str_params = { + .p = &gost_R3410_2012_256_paramSetD_p_str_param, + .p_bitlen = &gost_R3410_2012_256_paramSetD_p_bitlen_str_param, + .r = &gost_R3410_2012_256_paramSetD_r_str_param, + .r_square = &gost_R3410_2012_256_paramSetD_r_square_str_param, + .mpinv = &gost_R3410_2012_256_paramSetD_mpinv_str_param, + .p_shift = &gost_R3410_2012_256_paramSetD_p_shift_str_param, + .p_normalized = &gost_R3410_2012_256_paramSetD_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_256_paramSetD_p_reciprocal_str_param, + .a = &gost_R3410_2012_256_paramSetD_a_str_param, + .b = &gost_R3410_2012_256_paramSetD_b_str_param, + .curve_order = &gost_R3410_2012_256_paramSetD_curve_order_str_param, + .gx = &gost_R3410_2012_256_paramSetD_gx_str_param, + .gy = &gost_R3410_2012_256_paramSetD_gy_str_param, + .gz = &gost_R3410_2012_256_paramSetD_gz_str_param, + .gen_order = &gost_R3410_2012_256_paramSetD_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_256_paramSetD_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_256_paramSetD_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_256_paramSetD_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_256_paramSetD_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_256_paramSetD_alpha_edwards_str_param, + .oid = &gost_R3410_2012_256_paramSetD_oid_str_param, + .name = &gost_R3410_2012_256_paramSetD_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETD_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETD_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETD_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETD_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_256_PARAMSETD_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_256_PARAMSETD_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_256_PARAMSETD_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETD */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetA.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetA.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetA.h @@ -0,0 +1,359 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETA + +#ifndef __EC_PARAMS_GOST_R3410_2012_512_PARAMSETA_H__ +#define __EC_PARAMS_GOST_R3410_2012_512_PARAMSETA_H__ +#include +static const u8 gost_R3410_2012_512_paramSetA_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p); + +#define CURVE_GOST_R3410_2012_512_PARAMSETA_P_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetA_p_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_512_paramSetA_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r); + +static const u8 gost_R3410_2012_512_paramSetA_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r_square); + +static const u8 gost_R3410_2012_512_paramSetA_mpinv[] = { + 0x58, 0xa1, 0xf7, 0xe6, 0xce, 0x0f, 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_mpinv); + +static const u8 gost_R3410_2012_512_paramSetA_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_shift); + +static const u8 gost_R3410_2012_512_paramSetA_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetA_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_512_paramSetA_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r); + +static const u8 gost_R3410_2012_512_paramSetA_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r_square); + +static const u8 gost_R3410_2012_512_paramSetA_mpinv[] = { + 0xce, 0x0f, 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_mpinv); + +static const u8 gost_R3410_2012_512_paramSetA_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_shift); + +static const u8 gost_R3410_2012_512_paramSetA_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetA_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_512_paramSetA_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r); + +static const u8 gost_R3410_2012_512_paramSetA_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_r_square); + +static const u8 gost_R3410_2012_512_paramSetA_mpinv[] = { + 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_mpinv); + +static const u8 gost_R3410_2012_512_paramSetA_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_shift); + +static const u8 gost_R3410_2012_512_paramSetA_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetA_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_512_paramSetA_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc4, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_a); + +static const u8 gost_R3410_2012_512_paramSetA_b[] = { + 0xe8, 0xc2, 0x50, 0x5d, 0xed, 0xfc, 0x86, 0xdd, + 0xc1, 0xbd, 0x0b, 0x2b, 0x66, 0x67, 0xf1, 0xda, + 0x34, 0xb8, 0x25, 0x74, 0x76, 0x1c, 0xb0, 0xe8, + 0x79, 0xbd, 0x08, 0x1c, 0xfd, 0x0b, 0x62, 0x65, + 0xee, 0x3c, 0xb0, 0x90, 0xf3, 0x0d, 0x27, 0x61, + 0x4c, 0xb4, 0x57, 0x40, 0x10, 0xda, 0x90, 0xdd, + 0x86, 0x2e, 0xf9, 0xd4, 0xeb, 0xee, 0x47, 0x61, + 0x50, 0x31, 0x90, 0x78, 0x5a, 0x71, 0xc7, 0x60, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_b); + +#define CURVE_GOST_R3410_2012_512_PARAMSETA_CURVE_ORDER_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetA_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x27, 0xe6, 0x95, 0x32, 0xf4, 0x8d, 0x89, 0x11, + 0x6f, 0xf2, 0x2b, 0x8d, 0x4e, 0x05, 0x60, 0x60, + 0x9b, 0x4b, 0x38, 0xab, 0xfa, 0xd2, 0xb8, 0x5d, + 0xca, 0xcd, 0xb1, 0x41, 0x1f, 0x10, 0xb2, 0x75, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_curve_order); + +static const u8 gost_R3410_2012_512_paramSetA_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gx); + +static const u8 gost_R3410_2012_512_paramSetA_gy[] = { + 0x75, 0x03, 0xcf, 0xe8, 0x7a, 0x83, 0x6a, 0xe3, + 0xa6, 0x1b, 0x88, 0x16, 0xe2, 0x54, 0x50, 0xe6, + 0xce, 0x5e, 0x1c, 0x93, 0xac, 0xf1, 0xab, 0xc1, + 0x77, 0x80, 0x64, 0xfd, 0xcb, 0xef, 0xa9, 0x21, + 0xdf, 0x16, 0x26, 0xbe, 0x4f, 0xd0, 0x36, 0xe9, + 0x3d, 0x75, 0xe6, 0xa5, 0x0e, 0x3a, 0x41, 0xe9, + 0x80, 0x28, 0xfe, 0x5f, 0xc2, 0x35, 0xf5, 0xb8, + 0x89, 0xa5, 0x89, 0xcb, 0x52, 0x15, 0xf2, 0xa4, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gy); + +static const u8 gost_R3410_2012_512_paramSetA_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gz); + +static const u8 gost_R3410_2012_512_paramSetA_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x27, 0xe6, 0x95, 0x32, 0xf4, 0x8d, 0x89, 0x11, + 0x6f, 0xf2, 0x2b, 0x8d, 0x4e, 0x05, 0x60, 0x60, + 0x9b, 0x4b, 0x38, 0xab, 0xfa, 0xd2, 0xb8, 0x5d, + 0xca, 0xcd, 0xb1, 0x41, 0x1f, 0x10, 0xb2, 0x75, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gen_order); + +#define CURVE_GOST_R3410_2012_512_PARAMSETA_Q_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetA_gen_order_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_gen_order_bitlen); + +static const u8 gost_R3410_2012_512_paramSetA_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_cofactor); + +static const u8 gost_R3410_2012_512_paramSetA_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetA_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetA_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetA_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetA_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetA_alpha_edwards, 0); + +static const u8 gost_R3410_2012_512_paramSetA_name[] = "GOST_R3410_2012_512_PARAMSETA"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_name); + +static const u8 gost_R3410_2012_512_paramSetA_oid[] = "1.2.643.7.1.2.1.2.1"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetA_oid); + +static const ec_str_params gost_R3410_2012_512_paramSetA_str_params = { + .p = &gost_R3410_2012_512_paramSetA_p_str_param, + .p_bitlen = &gost_R3410_2012_512_paramSetA_p_bitlen_str_param, + .r = &gost_R3410_2012_512_paramSetA_r_str_param, + .r_square = &gost_R3410_2012_512_paramSetA_r_square_str_param, + .mpinv = &gost_R3410_2012_512_paramSetA_mpinv_str_param, + .p_shift = &gost_R3410_2012_512_paramSetA_p_shift_str_param, + .p_normalized = &gost_R3410_2012_512_paramSetA_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_512_paramSetA_p_reciprocal_str_param, + .a = &gost_R3410_2012_512_paramSetA_a_str_param, + .b = &gost_R3410_2012_512_paramSetA_b_str_param, + .curve_order = &gost_R3410_2012_512_paramSetA_curve_order_str_param, + .gx = &gost_R3410_2012_512_paramSetA_gx_str_param, + .gy = &gost_R3410_2012_512_paramSetA_gy_str_param, + .gz = &gost_R3410_2012_512_paramSetA_gz_str_param, + .gen_order = &gost_R3410_2012_512_paramSetA_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_512_paramSetA_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_512_paramSetA_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_512_paramSetA_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_512_paramSetA_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_512_paramSetA_alpha_edwards_str_param, + .oid = &gost_R3410_2012_512_paramSetA_oid_str_param, + .name = &gost_R3410_2012_512_paramSetA_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETA_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETA_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETA_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETA_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETA_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETA_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_512_PARAMSETA_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETA */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetB.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetB.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetB.h @@ -0,0 +1,380 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETB + +#ifndef __EC_PARAMS_GOST_R3410_2012_512_PARAMSETB_H__ +#define __EC_PARAMS_GOST_R3410_2012_512_PARAMSETB_H__ +#include +static const u8 gost_R3410_2012_512_paramSetB_p[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p); + +#define CURVE_GOST_R3410_2012_512_PARAMSETB_P_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetB_p_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_512_paramSetB_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_r); + +static const u8 gost_R3410_2012_512_paramSetB_r_square[] = { + 0xc0, 0x84, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_r_square); + +static const u8 gost_R3410_2012_512_paramSetB_mpinv[] = { + 0x4e, 0x6a, 0x17, 0x10, 0x24, 0xe6, 0xa1, 0x71, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_mpinv); + +static const u8 gost_R3410_2012_512_paramSetB_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_shift); + +static const u8 gost_R3410_2012_512_paramSetB_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetB_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_512_paramSetB_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_r); + +static const u8 gost_R3410_2012_512_paramSetB_r_square[] = { + 0xc0, 0x84, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_r_square); + +static const u8 gost_R3410_2012_512_paramSetB_mpinv[] = { + 0x24, 0xe6, 0xa1, 0x71, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_mpinv); + +static const u8 gost_R3410_2012_512_paramSetB_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_shift); + +static const u8 gost_R3410_2012_512_paramSetB_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetB_p_reciprocal[] = { + 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_512_paramSetB_r[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_r); + +static const u8 gost_R3410_2012_512_paramSetB_r_square[] = { + 0xc0, 0x84, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_r_square); + +static const u8 gost_R3410_2012_512_paramSetB_mpinv[] = { + 0xa1, 0x71, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_mpinv); + +static const u8 gost_R3410_2012_512_paramSetB_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_shift); + +static const u8 gost_R3410_2012_512_paramSetB_p_normalized[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetB_p_reciprocal[] = { + 0xff, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_512_paramSetB_a[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_a); + +static const u8 gost_R3410_2012_512_paramSetB_b[] = { + 0x68, 0x7d, 0x1b, 0x45, 0x9d, 0xc8, 0x41, 0x45, + 0x7e, 0x3e, 0x06, 0xcf, 0x6f, 0x5e, 0x25, 0x17, + 0xb9, 0x7c, 0x7d, 0x61, 0x4a, 0xf1, 0x38, 0xbc, + 0xbf, 0x85, 0xdc, 0x80, 0x6c, 0x4b, 0x28, 0x9f, + 0x3e, 0x96, 0x5d, 0x2d, 0xb1, 0x41, 0x6d, 0x21, + 0x7f, 0x8b, 0x27, 0x6f, 0xad, 0x1a, 0xb6, 0x9c, + 0x50, 0xf7, 0x8b, 0xee, 0x1f, 0xa3, 0x10, 0x6e, + 0xfb, 0x8c, 0xcb, 0xc7, 0xc5, 0x14, 0x01, 0x16, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_b); + +#define CURVE_GOST_R3410_2012_512_PARAMSETB_CURVE_ORDER_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetB_curve_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x49, 0xa1, 0xec, 0x14, 0x25, 0x65, 0xa5, 0x45, + 0xac, 0xfd, 0xb7, 0x7b, 0xd9, 0xd4, 0x0c, 0xfa, + 0x8b, 0x99, 0x67, 0x12, 0x10, 0x1b, 0xea, 0x0e, + 0xc6, 0x34, 0x6c, 0x54, 0x37, 0x4f, 0x25, 0xbd, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_curve_order); + +static const u8 gost_R3410_2012_512_paramSetB_gx[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_gx); + +static const u8 gost_R3410_2012_512_paramSetB_gy[] = { + 0x1a, 0x8f, 0x7e, 0xda, 0x38, 0x9b, 0x09, 0x4c, + 0x2c, 0x07, 0x1e, 0x36, 0x47, 0xa8, 0x94, 0x0f, + 0x3c, 0x12, 0x3b, 0x69, 0x75, 0x78, 0xc2, 0x13, + 0xbe, 0x6d, 0xd9, 0xe6, 0xc8, 0xec, 0x73, 0x35, + 0xdc, 0xb2, 0x28, 0xfd, 0x1e, 0xdf, 0x4a, 0x39, + 0x15, 0x2c, 0xbc, 0xaa, 0xf8, 0xc0, 0x39, 0x88, + 0x28, 0x04, 0x10, 0x55, 0xf9, 0x4c, 0xee, 0xec, + 0x7e, 0x21, 0x34, 0x07, 0x80, 0xfe, 0x41, 0xbd, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_gy); + +static const u8 gost_R3410_2012_512_paramSetB_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_gz); + +static const u8 gost_R3410_2012_512_paramSetB_gen_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x49, 0xa1, 0xec, 0x14, 0x25, 0x65, 0xa5, 0x45, + 0xac, 0xfd, 0xb7, 0x7b, 0xd9, 0xd4, 0x0c, 0xfa, + 0x8b, 0x99, 0x67, 0x12, 0x10, 0x1b, 0xea, 0x0e, + 0xc6, 0x34, 0x6c, 0x54, 0x37, 0x4f, 0x25, 0xbd, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_gen_order); + +#define CURVE_GOST_R3410_2012_512_PARAMSETB_Q_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetB_gen_order_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_gen_order_bitlen); + +static const u8 gost_R3410_2012_512_paramSetB_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_cofactor); + +static const u8 gost_R3410_2012_512_paramSetB_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetB_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetB_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetB_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetB_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetB_alpha_edwards, 0); + +static const u8 gost_R3410_2012_512_paramSetB_name[] = "GOST_R3410_2012_512_PARAMSETB"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_name); + +static const u8 gost_R3410_2012_512_paramSetB_oid[] = "1.2.643.7.1.2.1.2.2"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetB_oid); + +static const ec_str_params gost_R3410_2012_512_paramSetB_str_params = { + .p = &gost_R3410_2012_512_paramSetB_p_str_param, + .p_bitlen = &gost_R3410_2012_512_paramSetB_p_bitlen_str_param, + .r = &gost_R3410_2012_512_paramSetB_r_str_param, + .r_square = &gost_R3410_2012_512_paramSetB_r_square_str_param, + .mpinv = &gost_R3410_2012_512_paramSetB_mpinv_str_param, + .p_shift = &gost_R3410_2012_512_paramSetB_p_shift_str_param, + .p_normalized = &gost_R3410_2012_512_paramSetB_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_512_paramSetB_p_reciprocal_str_param, + .a = &gost_R3410_2012_512_paramSetB_a_str_param, + .b = &gost_R3410_2012_512_paramSetB_b_str_param, + .curve_order = &gost_R3410_2012_512_paramSetB_curve_order_str_param, + .gx = &gost_R3410_2012_512_paramSetB_gx_str_param, + .gy = &gost_R3410_2012_512_paramSetB_gy_str_param, + .gz = &gost_R3410_2012_512_paramSetB_gz_str_param, + .gen_order = &gost_R3410_2012_512_paramSetB_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_512_paramSetB_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_512_paramSetB_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_512_paramSetB_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_512_paramSetB_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_512_paramSetB_alpha_edwards_str_param, + .oid = &gost_R3410_2012_512_paramSetB_oid_str_param, + .name = &gost_R3410_2012_512_paramSetB_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETB_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETB_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETB_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETB_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETB_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETB_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_512_PARAMSETB_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETB */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetC.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetC.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetC.h @@ -0,0 +1,359 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETC + +#ifndef __EC_PARAMS_GOST_R3410_2012_512_PARAMSETC_H__ +#define __EC_PARAMS_GOST_R3410_2012_512_PARAMSETC_H__ +#include +static const u8 gost_R3410_2012_512_paramSetC_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p); + +#define CURVE_GOST_R3410_2012_512_PARAMSETC_P_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetC_p_bitlen[] = { + 0x02, 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_512_paramSetC_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_r); + +static const u8 gost_R3410_2012_512_paramSetC_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_r_square); + +static const u8 gost_R3410_2012_512_paramSetC_mpinv[] = { + 0x58, 0xa1, 0xf7, 0xe6, 0xce, 0x0f, 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_mpinv); + +static const u8 gost_R3410_2012_512_paramSetC_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_shift); + +static const u8 gost_R3410_2012_512_paramSetC_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetC_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_512_paramSetC_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_r); + +static const u8 gost_R3410_2012_512_paramSetC_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_r_square); + +static const u8 gost_R3410_2012_512_paramSetC_mpinv[] = { + 0xce, 0x0f, 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_mpinv); + +static const u8 gost_R3410_2012_512_paramSetC_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_shift); + +static const u8 gost_R3410_2012_512_paramSetC_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetC_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_512_paramSetC_r[] = { + 0x02, 0x39, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_r); + +static const u8 gost_R3410_2012_512_paramSetC_r_square[] = { + 0x04, 0xf0, 0xb1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_r_square); + +static const u8 gost_R3410_2012_512_paramSetC_mpinv[] = { + 0x4c, 0x09, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_mpinv); + +static const u8 gost_R3410_2012_512_paramSetC_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_shift); + +static const u8 gost_R3410_2012_512_paramSetC_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetC_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_512_paramSetC_a[] = { + 0xdc, 0x92, 0x03, 0xe5, 0x14, 0xa7, 0x21, 0x87, + 0x54, 0x85, 0xa5, 0x29, 0xd2, 0xc7, 0x22, 0xfb, + 0x18, 0x7b, 0xc8, 0x98, 0x0e, 0xb8, 0x66, 0x64, + 0x4d, 0xe4, 0x1c, 0x68, 0xe1, 0x43, 0x06, 0x45, + 0x46, 0xe8, 0x61, 0xc0, 0xe2, 0xc9, 0xed, 0xd9, + 0x2a, 0xde, 0x71, 0xf4, 0x6f, 0xcf, 0x50, 0xff, + 0x2a, 0xd9, 0x7f, 0x95, 0x1f, 0xda, 0x9f, 0x2a, + 0x2e, 0xb6, 0x54, 0x6f, 0x39, 0x68, 0x9b, 0xd3, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_a); + +static const u8 gost_R3410_2012_512_paramSetC_b[] = { + 0xb4, 0xc4, 0xee, 0x28, 0xce, 0xbc, 0x6c, 0x2c, + 0x8a, 0xc1, 0x29, 0x52, 0xcf, 0x37, 0xf1, 0x6a, + 0xc7, 0xef, 0xb6, 0xa9, 0xf6, 0x9f, 0x4b, 0x57, + 0xff, 0xda, 0x2e, 0x4f, 0x0d, 0xe5, 0xad, 0xe0, + 0x38, 0xcb, 0xc2, 0xff, 0xf7, 0x19, 0xd2, 0xc1, + 0x8d, 0xe0, 0x28, 0x4b, 0x8b, 0xfe, 0xf3, 0xb5, + 0x2b, 0x8c, 0xc7, 0xa5, 0xf5, 0xbf, 0x0a, 0x3c, + 0x8d, 0x23, 0x19, 0xa5, 0x31, 0x25, 0x57, 0xe1, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_b); + +#define CURVE_GOST_R3410_2012_512_PARAMSETC_CURVE_ORDER_BITLEN 512 +static const u8 gost_R3410_2012_512_paramSetC_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x26, 0x33, 0x6e, 0x91, 0x94, 0x1a, 0xac, 0x01, + 0x30, 0xce, 0xa7, 0xfd, 0x45, 0x1d, 0x40, 0xb3, + 0x23, 0xb6, 0xa7, 0x9e, 0x9d, 0xa6, 0x84, 0x9a, + 0x51, 0x88, 0xf3, 0xbd, 0x1f, 0xc0, 0x8f, 0xb4, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_curve_order); + +static const u8 gost_R3410_2012_512_paramSetC_gx[] = { + 0xe2, 0xe3, 0x1e, 0xdf, 0xc2, 0x3d, 0xe7, 0xbd, + 0xeb, 0xe2, 0x41, 0xce, 0x59, 0x3e, 0xf5, 0xde, + 0x22, 0x95, 0xb7, 0xa9, 0xcb, 0xae, 0xf0, 0x21, + 0xd3, 0x85, 0xf7, 0x07, 0x4c, 0xea, 0x04, 0x3a, + 0xa2, 0x72, 0x72, 0xa7, 0xae, 0x60, 0x2b, 0xf2, + 0xa7, 0xb9, 0x03, 0x3d, 0xb9, 0xed, 0x36, 0x10, + 0xc6, 0xfb, 0x85, 0x48, 0x7e, 0xae, 0x97, 0xaa, + 0xc5, 0xbc, 0x79, 0x28, 0xc1, 0x95, 0x01, 0x48, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_gx); + +static const u8 gost_R3410_2012_512_paramSetC_gy[] = { + 0xf5, 0xce, 0x40, 0xd9, 0x5b, 0x5e, 0xb8, 0x99, + 0xab, 0xbc, 0xcf, 0xf5, 0x91, 0x1c, 0xb8, 0x57, + 0x79, 0x39, 0x80, 0x4d, 0x65, 0x27, 0x37, 0x8b, + 0x8c, 0x10, 0x8c, 0x3d, 0x20, 0x90, 0xff, 0x9b, + 0xe1, 0x8e, 0x2d, 0x33, 0xe3, 0x02, 0x1e, 0xd2, + 0xef, 0x32, 0xd8, 0x58, 0x22, 0x42, 0x3b, 0x63, + 0x04, 0xf7, 0x26, 0xaa, 0x85, 0x4b, 0xae, 0x07, + 0xd0, 0x39, 0x6e, 0x9a, 0x9a, 0xdd, 0xc4, 0x0f, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_gy); + +static const u8 gost_R3410_2012_512_paramSetC_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_gz); + +static const u8 gost_R3410_2012_512_paramSetC_gen_order[] = { + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc9, 0x8c, 0xdb, 0xa4, 0x65, 0x06, 0xab, 0x00, + 0x4c, 0x33, 0xa9, 0xff, 0x51, 0x47, 0x50, 0x2c, + 0xc8, 0xed, 0xa9, 0xe7, 0xa7, 0x69, 0xa1, 0x26, + 0x94, 0x62, 0x3c, 0xef, 0x47, 0xf0, 0x23, 0xed, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_gen_order); + +#define CURVE_GOST_R3410_2012_512_PARAMSETC_Q_BITLEN 510 +static const u8 gost_R3410_2012_512_paramSetC_gen_order_bitlen[] = { + 0x01, 0xfe, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_gen_order_bitlen); + +static const u8 gost_R3410_2012_512_paramSetC_cofactor[] = { + 0x04, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_cofactor); + +static const u8 gost_R3410_2012_512_paramSetC_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetC_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetC_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetC_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetC_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetC_alpha_edwards, 0); + +static const u8 gost_R3410_2012_512_paramSetC_name[] = "GOST_R3410_2012_512_PARAMSETC"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_name); + +static const u8 gost_R3410_2012_512_paramSetC_oid[] = "1.2.643.7.1.2.1.2.3"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetC_oid); + +static const ec_str_params gost_R3410_2012_512_paramSetC_str_params = { + .p = &gost_R3410_2012_512_paramSetC_p_str_param, + .p_bitlen = &gost_R3410_2012_512_paramSetC_p_bitlen_str_param, + .r = &gost_R3410_2012_512_paramSetC_r_str_param, + .r_square = &gost_R3410_2012_512_paramSetC_r_square_str_param, + .mpinv = &gost_R3410_2012_512_paramSetC_mpinv_str_param, + .p_shift = &gost_R3410_2012_512_paramSetC_p_shift_str_param, + .p_normalized = &gost_R3410_2012_512_paramSetC_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_512_paramSetC_p_reciprocal_str_param, + .a = &gost_R3410_2012_512_paramSetC_a_str_param, + .b = &gost_R3410_2012_512_paramSetC_b_str_param, + .curve_order = &gost_R3410_2012_512_paramSetC_curve_order_str_param, + .gx = &gost_R3410_2012_512_paramSetC_gx_str_param, + .gy = &gost_R3410_2012_512_paramSetC_gy_str_param, + .gz = &gost_R3410_2012_512_paramSetC_gz_str_param, + .gen_order = &gost_R3410_2012_512_paramSetC_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_512_paramSetC_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_512_paramSetC_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_512_paramSetC_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_512_paramSetC_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_512_paramSetC_alpha_edwards_str_param, + .oid = &gost_R3410_2012_512_paramSetC_oid_str_param, + .name = &gost_R3410_2012_512_paramSetC_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETC_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETC_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETC_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETC_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETC_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETC_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 50) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 50 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_512_PARAMSETC_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETC */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetTest.h b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetTest.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_gost_R3410_2012_512_paramSetTest.h @@ -0,0 +1,401 @@ +#include +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETTEST + +#ifndef __EC_PARAMS_GOST_R3410_2012_512_PARAMSETTEST_H__ +#define __EC_PARAMS_GOST_R3410_2012_512_PARAMSETTEST_H__ +#include +static const u8 gost_R3410_2012_512_paramSetTest_p[] = { + 0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, + 0x55, 0x0d, 0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, + 0x92, 0x2b, 0x14, 0xb2, 0xff, 0xb9, 0x0f, 0x04, + 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2, 0xd1, 0x5d, + 0xf1, 0xd8, 0x52, 0x74, 0x1a, 0xf4, 0x70, 0x4a, + 0x04, 0x58, 0x04, 0x7e, 0x80, 0xe4, 0x54, 0x6d, + 0x35, 0xb8, 0x33, 0x6f, 0xac, 0x22, 0x4d, 0xd8, + 0x16, 0x64, 0xbb, 0xf5, 0x28, 0xbe, 0x63, 0x73, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p); + +#define CURVE_GOST_R3410_2012_512_PARAMSETTEST_P_BITLEN 511 +static const u8 gost_R3410_2012_512_paramSetTest_p_bitlen[] = { + 0x01, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 gost_R3410_2012_512_paramSetTest_r[] = { + 0x30, 0x6a, 0xf9, 0x8a, 0x05, 0xff, 0x94, 0xaa, + 0x00, 0xd8, 0x8c, 0x8d, 0xbe, 0x70, 0x34, 0x7e, + 0x49, 0x7e, 0xc1, 0xe7, 0x00, 0xd4, 0xd2, 0xf1, + 0x81, 0x3d, 0x8b, 0xe2, 0xde, 0x87, 0x8b, 0xe6, + 0x2a, 0x77, 0x08, 0xa3, 0xaf, 0x22, 0xaf, 0x21, + 0xf2, 0xf7, 0xf2, 0x84, 0x7d, 0x53, 0x02, 0xb8, + 0x5e, 0xd7, 0x65, 0xb0, 0xfb, 0x99, 0x16, 0x77, + 0xbc, 0xd1, 0xcc, 0x20, 0x85, 0xc4, 0xd5, 0xa7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_r); + +static const u8 gost_R3410_2012_512_paramSetTest_r_square[] = { + 0x1d, 0x88, 0x7d, 0xcd, 0x9c, 0xd1, 0x9c, 0x10, + 0x01, 0xfd, 0xe9, 0xca, 0x99, 0xde, 0x08, 0x52, + 0xfc, 0xd9, 0x83, 0xcf, 0xb7, 0xc6, 0x63, 0xd9, + 0xca, 0x0b, 0xc8, 0xaf, 0x77, 0xc8, 0x69, 0x0a, + 0x08, 0x15, 0xb9, 0xeb, 0x1e, 0x7d, 0xd3, 0x00, + 0xe4, 0x17, 0xd5, 0x8d, 0x20, 0x0c, 0x2a, 0xa0, + 0x4b, 0x90, 0x7a, 0x71, 0xe6, 0x47, 0xee, 0x63, + 0x00, 0x1c, 0x10, 0xbc, 0x2d, 0x00, 0x5b, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_r_square); + +static const u8 gost_R3410_2012_512_paramSetTest_mpinv[] = { + 0xd6, 0x41, 0x2f, 0xf7, 0xc2, 0x9b, 0x86, 0x45, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_mpinv); + +static const u8 gost_R3410_2012_512_paramSetTest_p_shift[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_shift); + +static const u8 gost_R3410_2012_512_paramSetTest_p_normalized[] = { + 0x8a, 0x63, 0x59, 0xa3, 0xfc, 0x00, 0x47, 0x8e, + 0xaa, 0x1a, 0x4c, 0xf6, 0xd6, 0x5f, 0xdd, 0x01, + 0x24, 0x56, 0x29, 0x65, 0xff, 0x72, 0x1e, 0x09, + 0xa9, 0xd6, 0xf8, 0x13, 0x6b, 0xa5, 0xa2, 0xbb, + 0xe3, 0xb0, 0xa4, 0xe8, 0x35, 0xe8, 0xe0, 0x94, + 0x08, 0xb0, 0x08, 0xfd, 0x01, 0xc8, 0xa8, 0xda, + 0x6b, 0x70, 0x66, 0xdf, 0x58, 0x44, 0x9b, 0xb0, + 0x2c, 0xc9, 0x77, 0xea, 0x51, 0x7c, 0xc6, 0xe6, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetTest_p_reciprocal[] = { + 0xd9, 0x91, 0x18, 0x3c, 0xe8, 0xbf, 0x25, 0x61, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 gost_R3410_2012_512_paramSetTest_r[] = { + 0x30, 0x6a, 0xf9, 0x8a, 0x05, 0xff, 0x94, 0xaa, + 0x00, 0xd8, 0x8c, 0x8d, 0xbe, 0x70, 0x34, 0x7e, + 0x49, 0x7e, 0xc1, 0xe7, 0x00, 0xd4, 0xd2, 0xf1, + 0x81, 0x3d, 0x8b, 0xe2, 0xde, 0x87, 0x8b, 0xe6, + 0x2a, 0x77, 0x08, 0xa3, 0xaf, 0x22, 0xaf, 0x21, + 0xf2, 0xf7, 0xf2, 0x84, 0x7d, 0x53, 0x02, 0xb8, + 0x5e, 0xd7, 0x65, 0xb0, 0xfb, 0x99, 0x16, 0x77, + 0xbc, 0xd1, 0xcc, 0x20, 0x85, 0xc4, 0xd5, 0xa7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_r); + +static const u8 gost_R3410_2012_512_paramSetTest_r_square[] = { + 0x1d, 0x88, 0x7d, 0xcd, 0x9c, 0xd1, 0x9c, 0x10, + 0x01, 0xfd, 0xe9, 0xca, 0x99, 0xde, 0x08, 0x52, + 0xfc, 0xd9, 0x83, 0xcf, 0xb7, 0xc6, 0x63, 0xd9, + 0xca, 0x0b, 0xc8, 0xaf, 0x77, 0xc8, 0x69, 0x0a, + 0x08, 0x15, 0xb9, 0xeb, 0x1e, 0x7d, 0xd3, 0x00, + 0xe4, 0x17, 0xd5, 0x8d, 0x20, 0x0c, 0x2a, 0xa0, + 0x4b, 0x90, 0x7a, 0x71, 0xe6, 0x47, 0xee, 0x63, + 0x00, 0x1c, 0x10, 0xbc, 0x2d, 0x00, 0x5b, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_r_square); + +static const u8 gost_R3410_2012_512_paramSetTest_mpinv[] = { + 0xc2, 0x9b, 0x86, 0x45, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_mpinv); + +static const u8 gost_R3410_2012_512_paramSetTest_p_shift[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_shift); + +static const u8 gost_R3410_2012_512_paramSetTest_p_normalized[] = { + 0x8a, 0x63, 0x59, 0xa3, 0xfc, 0x00, 0x47, 0x8e, + 0xaa, 0x1a, 0x4c, 0xf6, 0xd6, 0x5f, 0xdd, 0x01, + 0x24, 0x56, 0x29, 0x65, 0xff, 0x72, 0x1e, 0x09, + 0xa9, 0xd6, 0xf8, 0x13, 0x6b, 0xa5, 0xa2, 0xbb, + 0xe3, 0xb0, 0xa4, 0xe8, 0x35, 0xe8, 0xe0, 0x94, + 0x08, 0xb0, 0x08, 0xfd, 0x01, 0xc8, 0xa8, 0xda, + 0x6b, 0x70, 0x66, 0xdf, 0x58, 0x44, 0x9b, 0xb0, + 0x2c, 0xc9, 0x77, 0xea, 0x51, 0x7c, 0xc6, 0xe6, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetTest_p_reciprocal[] = { + 0xd9, 0x91, 0x18, 0x3c, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 gost_R3410_2012_512_paramSetTest_r[] = { + 0x30, 0x6a, 0xf9, 0x8a, 0x05, 0xff, 0x94, 0xaa, + 0x00, 0xd8, 0x8c, 0x8d, 0xbe, 0x70, 0x34, 0x7e, + 0x49, 0x7e, 0xc1, 0xe7, 0x00, 0xd4, 0xd2, 0xf1, + 0x81, 0x3d, 0x8b, 0xe2, 0xde, 0x87, 0x8b, 0xe6, + 0x2a, 0x77, 0x08, 0xa3, 0xaf, 0x22, 0xaf, 0x21, + 0xf2, 0xf7, 0xf2, 0x84, 0x7d, 0x53, 0x02, 0xb8, + 0x5e, 0xd7, 0x65, 0xb0, 0xfb, 0x99, 0x16, 0x77, + 0xbc, 0xd1, 0xcc, 0x20, 0x85, 0xc4, 0xd5, 0xa7, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_r); + +static const u8 gost_R3410_2012_512_paramSetTest_r_square[] = { + 0x1d, 0x88, 0x7d, 0xcd, 0x9c, 0xd1, 0x9c, 0x10, + 0x01, 0xfd, 0xe9, 0xca, 0x99, 0xde, 0x08, 0x52, + 0xfc, 0xd9, 0x83, 0xcf, 0xb7, 0xc6, 0x63, 0xd9, + 0xca, 0x0b, 0xc8, 0xaf, 0x77, 0xc8, 0x69, 0x0a, + 0x08, 0x15, 0xb9, 0xeb, 0x1e, 0x7d, 0xd3, 0x00, + 0xe4, 0x17, 0xd5, 0x8d, 0x20, 0x0c, 0x2a, 0xa0, + 0x4b, 0x90, 0x7a, 0x71, 0xe6, 0x47, 0xee, 0x63, + 0x00, 0x1c, 0x10, 0xbc, 0x2d, 0x00, 0x5b, 0x65, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_r_square); + +static const u8 gost_R3410_2012_512_paramSetTest_mpinv[] = { + 0x86, 0x45, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_mpinv); + +static const u8 gost_R3410_2012_512_paramSetTest_p_shift[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_shift); + +static const u8 gost_R3410_2012_512_paramSetTest_p_normalized[] = { + 0x8a, 0x63, 0x59, 0xa3, 0xfc, 0x00, 0x47, 0x8e, + 0xaa, 0x1a, 0x4c, 0xf6, 0xd6, 0x5f, 0xdd, 0x01, + 0x24, 0x56, 0x29, 0x65, 0xff, 0x72, 0x1e, 0x09, + 0xa9, 0xd6, 0xf8, 0x13, 0x6b, 0xa5, 0xa2, 0xbb, + 0xe3, 0xb0, 0xa4, 0xe8, 0x35, 0xe8, 0xe0, 0x94, + 0x08, 0xb0, 0x08, 0xfd, 0x01, 0xc8, 0xa8, 0xda, + 0x6b, 0x70, 0x66, 0xdf, 0x58, 0x44, 0x9b, 0xb0, + 0x2c, 0xc9, 0x77, 0xea, 0x51, 0x7c, 0xc6, 0xe6, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_normalized); + +static const u8 gost_R3410_2012_512_paramSetTest_p_reciprocal[] = { + 0xd9, 0x91, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 gost_R3410_2012_512_paramSetTest_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_a); + +static const u8 gost_R3410_2012_512_paramSetTest_b[] = { + 0x1c, 0xff, 0x08, 0x06, 0xa3, 0x11, 0x16, 0xda, + 0x29, 0xd8, 0xcf, 0xa5, 0x4e, 0x57, 0xeb, 0x74, + 0x8b, 0xc5, 0xf3, 0x77, 0xe4, 0x94, 0x00, 0xfd, + 0xd7, 0x88, 0xb6, 0x49, 0xec, 0xa1, 0xac, 0x43, + 0x61, 0x83, 0x40, 0x13, 0xb2, 0xad, 0x73, 0x22, + 0x48, 0x0a, 0x89, 0xca, 0x58, 0xe0, 0xcf, 0x74, + 0xbc, 0x9e, 0x54, 0x0c, 0x2a, 0xdd, 0x68, 0x97, + 0xfa, 0xd0, 0xa3, 0x08, 0x4f, 0x30, 0x2a, 0xdc, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_b); + +#define CURVE_GOST_R3410_2012_512_PARAMSETTEST_CURVE_ORDER_BITLEN 511 +static const u8 gost_R3410_2012_512_paramSetTest_curve_order[] = { + 0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, + 0x55, 0x0d, 0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, + 0x92, 0x2b, 0x14, 0xb2, 0xff, 0xb9, 0x0f, 0x04, + 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2, 0xd1, 0x5d, + 0xa8, 0x2f, 0x2d, 0x7e, 0xcb, 0x1d, 0xba, 0xc7, + 0x19, 0x90, 0x5c, 0x5e, 0xec, 0xc4, 0x23, 0xf1, + 0xd8, 0x6e, 0x25, 0xed, 0xbe, 0x23, 0xc5, 0x95, + 0xd6, 0x44, 0xaa, 0xf1, 0x87, 0xe6, 0xe6, 0xdf, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_curve_order); + +static const u8 gost_R3410_2012_512_paramSetTest_gx[] = { + 0x24, 0xd1, 0x9c, 0xc6, 0x45, 0x72, 0xee, 0x30, + 0xf3, 0x96, 0xbf, 0x6e, 0xbb, 0xfd, 0x7a, 0x6c, + 0x52, 0x13, 0xb3, 0xb3, 0xd7, 0x05, 0x7c, 0xc8, + 0x25, 0xf9, 0x10, 0x93, 0xa6, 0x8c, 0xd7, 0x62, + 0xfd, 0x60, 0x61, 0x12, 0x62, 0xcd, 0x83, 0x8d, + 0xc6, 0xb6, 0x0a, 0xa7, 0xee, 0xe8, 0x04, 0xe2, + 0x8b, 0xc8, 0x49, 0x97, 0x7f, 0xac, 0x33, 0xb4, + 0xb5, 0x30, 0xf1, 0xb1, 0x20, 0x24, 0x8a, 0x9a, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_gx); + +static const u8 gost_R3410_2012_512_paramSetTest_gy[] = { + 0x2b, 0xb3, 0x12, 0xa4, 0x3b, 0xd2, 0xce, 0x6e, + 0x0d, 0x02, 0x06, 0x13, 0xc8, 0x57, 0xac, 0xdd, + 0xcf, 0xbf, 0x06, 0x1e, 0x91, 0xe5, 0xf2, 0xc3, + 0xf3, 0x24, 0x47, 0xc2, 0x59, 0xf3, 0x9b, 0x2c, + 0x83, 0xab, 0x15, 0x6d, 0x77, 0xf1, 0x49, 0x6b, + 0xf7, 0xeb, 0x33, 0x51, 0xe1, 0xee, 0x4e, 0x43, + 0xdc, 0x1a, 0x18, 0xb9, 0x1b, 0x24, 0x64, 0x0b, + 0x6d, 0xbb, 0x92, 0xcb, 0x1a, 0xdd, 0x37, 0x1e, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_gy); + +static const u8 gost_R3410_2012_512_paramSetTest_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_gz); + +static const u8 gost_R3410_2012_512_paramSetTest_gen_order[] = { + 0x45, 0x31, 0xac, 0xd1, 0xfe, 0x00, 0x23, 0xc7, + 0x55, 0x0d, 0x26, 0x7b, 0x6b, 0x2f, 0xee, 0x80, + 0x92, 0x2b, 0x14, 0xb2, 0xff, 0xb9, 0x0f, 0x04, + 0xd4, 0xeb, 0x7c, 0x09, 0xb5, 0xd2, 0xd1, 0x5d, + 0xa8, 0x2f, 0x2d, 0x7e, 0xcb, 0x1d, 0xba, 0xc7, + 0x19, 0x90, 0x5c, 0x5e, 0xec, 0xc4, 0x23, 0xf1, + 0xd8, 0x6e, 0x25, 0xed, 0xbe, 0x23, 0xc5, 0x95, + 0xd6, 0x44, 0xaa, 0xf1, 0x87, 0xe6, 0xe6, 0xdf, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_gen_order); + +#define CURVE_GOST_R3410_2012_512_PARAMSETTEST_Q_BITLEN 511 +static const u8 gost_R3410_2012_512_paramSetTest_gen_order_bitlen[] = { + 0x01, 0xff, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_gen_order_bitlen); + +static const u8 gost_R3410_2012_512_paramSetTest_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_cofactor); + +static const u8 gost_R3410_2012_512_paramSetTest_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetTest_alpha_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetTest_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetTest_gamma_montgomery, 0); + +static const u8 gost_R3410_2012_512_paramSetTest_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(gost_R3410_2012_512_paramSetTest_alpha_edwards, 0); + +static const u8 gost_R3410_2012_512_paramSetTest_name[] = "GOST_R3410_2012_512_PARAMSETTEST"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_name); + +static const u8 gost_R3410_2012_512_paramSetTest_oid[] = "1.2.643.7.1.2.1.2.0"; +TO_EC_STR_PARAM(gost_R3410_2012_512_paramSetTest_oid); + +static const ec_str_params gost_R3410_2012_512_paramSetTest_str_params = { + .p = &gost_R3410_2012_512_paramSetTest_p_str_param, + .p_bitlen = &gost_R3410_2012_512_paramSetTest_p_bitlen_str_param, + .r = &gost_R3410_2012_512_paramSetTest_r_str_param, + .r_square = &gost_R3410_2012_512_paramSetTest_r_square_str_param, + .mpinv = &gost_R3410_2012_512_paramSetTest_mpinv_str_param, + .p_shift = &gost_R3410_2012_512_paramSetTest_p_shift_str_param, + .p_normalized = &gost_R3410_2012_512_paramSetTest_p_normalized_str_param, + .p_reciprocal = &gost_R3410_2012_512_paramSetTest_p_reciprocal_str_param, + .a = &gost_R3410_2012_512_paramSetTest_a_str_param, + .b = &gost_R3410_2012_512_paramSetTest_b_str_param, + .curve_order = &gost_R3410_2012_512_paramSetTest_curve_order_str_param, + .gx = &gost_R3410_2012_512_paramSetTest_gx_str_param, + .gy = &gost_R3410_2012_512_paramSetTest_gy_str_param, + .gz = &gost_R3410_2012_512_paramSetTest_gz_str_param, + .gen_order = &gost_R3410_2012_512_paramSetTest_gen_order_str_param, + .gen_order_bitlen = &gost_R3410_2012_512_paramSetTest_gen_order_bitlen_str_param, + .cofactor = &gost_R3410_2012_512_paramSetTest_cofactor_str_param, + .alpha_montgomery = &gost_R3410_2012_512_paramSetTest_alpha_montgomery_str_param, + .gamma_montgomery = &gost_R3410_2012_512_paramSetTest_gamma_montgomery_str_param, + .alpha_edwards = &gost_R3410_2012_512_paramSetTest_alpha_edwards_str_param, + .oid = &gost_R3410_2012_512_paramSetTest_oid_str_param, + .name = &gost_R3410_2012_512_paramSetTest_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETTEST_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETTEST_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETTEST_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETTEST_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_GOST_R3410_2012_512_PARAMSETTEST_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_GOST_R3410_2012_512_PARAMSETTEST_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 20) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 20 +#endif +#if (MAX_CURVE_NAME_LEN < 53) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 53 +#endif + +#endif /* __EC_PARAMS_GOST_R3410_2012_512_PARAMSETTEST_H__ */ + +#endif /* WITH_CURVE_GOST_R3410_2012_512_PARAMSETTEST */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp192k1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp192k1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp192k1.h @@ -0,0 +1,307 @@ +#include +#ifdef WITH_CURVE_SECP192K1 + +#ifndef __EC_PARAMS_SECP192K1_H__ +#define __EC_PARAMS_SECP192K1_H__ +#include +static const u8 secp192k1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, +}; + +TO_EC_STR_PARAM(secp192k1_p); + +#define CURVE_SECP192K1_P_BITLEN 192 +static const u8 secp192k1_p_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(secp192k1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp192k1_r[] = { + 0x01, 0x00, 0x00, 0x11, 0xc9, +}; + +TO_EC_STR_PARAM(secp192k1_r); + +static const u8 secp192k1_r_square[] = { + 0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f, + 0xd1, +}; + +TO_EC_STR_PARAM(secp192k1_r_square); + +static const u8 secp192k1_mpinv[] = { + 0xf2, 0x7a, 0xe5, 0x5b, 0x74, 0x46, 0xd8, 0x79, +}; + +TO_EC_STR_PARAM(secp192k1_mpinv); + +static const u8 secp192k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_p_shift); + +static const u8 secp192k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, +}; + +TO_EC_STR_PARAM(secp192k1_p_normalized); + +static const u8 secp192k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp192k1_r[] = { + 0x01, 0x00, 0x00, 0x11, 0xc9, +}; + +TO_EC_STR_PARAM(secp192k1_r); + +static const u8 secp192k1_r_square[] = { + 0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f, + 0xd1, +}; + +TO_EC_STR_PARAM(secp192k1_r_square); + +static const u8 secp192k1_mpinv[] = { + 0x74, 0x46, 0xd8, 0x79, +}; + +TO_EC_STR_PARAM(secp192k1_mpinv); + +static const u8 secp192k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_p_shift); + +static const u8 secp192k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, +}; + +TO_EC_STR_PARAM(secp192k1_p_normalized); + +static const u8 secp192k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp192k1_r[] = { + 0x01, 0x00, 0x00, 0x11, 0xc9, +}; + +TO_EC_STR_PARAM(secp192k1_r); + +static const u8 secp192k1_r_square[] = { + 0x01, 0x00, 0x00, 0x23, 0x92, 0x01, 0x3c, 0x4f, + 0xd1, +}; + +TO_EC_STR_PARAM(secp192k1_r_square); + +static const u8 secp192k1_mpinv[] = { + 0xd8, 0x79, +}; + +TO_EC_STR_PARAM(secp192k1_mpinv); + +static const u8 secp192k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_p_shift); + +static const u8 secp192k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xee, 0x37, +}; + +TO_EC_STR_PARAM(secp192k1_p_normalized); + +static const u8 secp192k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 secp192k1_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(secp192k1_a); + +static const u8 secp192k1_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +}; + +TO_EC_STR_PARAM(secp192k1_b); + +#define CURVE_SECP192K1_CURVE_ORDER_BITLEN 192 +static const u8 secp192k1_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17, + 0x0f, 0x69, 0x46, 0x6a, 0x74, 0xde, 0xfd, 0x8d, +}; + +TO_EC_STR_PARAM(secp192k1_curve_order); + +static const u8 secp192k1_gx[] = { + 0xdb, 0x4f, 0xf1, 0x0e, 0xc0, 0x57, 0xe9, 0xae, + 0x26, 0xb0, 0x7d, 0x02, 0x80, 0xb7, 0xf4, 0x34, + 0x1d, 0xa5, 0xd1, 0xb1, 0xea, 0xe0, 0x6c, 0x7d, +}; + +TO_EC_STR_PARAM(secp192k1_gx); + +static const u8 secp192k1_gy[] = { + 0x9b, 0x2f, 0x2f, 0x6d, 0x9c, 0x56, 0x28, 0xa7, + 0x84, 0x41, 0x63, 0xd0, 0x15, 0xbe, 0x86, 0x34, + 0x40, 0x82, 0xaa, 0x88, 0xd9, 0x5e, 0x2f, 0x9d, +}; + +TO_EC_STR_PARAM(secp192k1_gy); + +static const u8 secp192k1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(secp192k1_gz); + +static const u8 secp192k1_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x26, 0xf2, 0xfc, 0x17, + 0x0f, 0x69, 0x46, 0x6a, 0x74, 0xde, 0xfd, 0x8d, +}; + +TO_EC_STR_PARAM(secp192k1_gen_order); + +#define CURVE_SECP192K1_Q_BITLEN 192 +static const u8 secp192k1_gen_order_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(secp192k1_gen_order_bitlen); + +static const u8 secp192k1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(secp192k1_cofactor); + +static const u8 secp192k1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_alpha_montgomery, 0); + +static const u8 secp192k1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_gamma_montgomery, 0); + +static const u8 secp192k1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp192k1_alpha_edwards, 0); + +static const u8 secp192k1_name[] = "SECP192K1"; +TO_EC_STR_PARAM(secp192k1_name); + +static const u8 secp192k1_oid[] = "1.3.132.0.31"; +TO_EC_STR_PARAM(secp192k1_oid); + +static const ec_str_params secp192k1_str_params = { + .p = &secp192k1_p_str_param, + .p_bitlen = &secp192k1_p_bitlen_str_param, + .r = &secp192k1_r_str_param, + .r_square = &secp192k1_r_square_str_param, + .mpinv = &secp192k1_mpinv_str_param, + .p_shift = &secp192k1_p_shift_str_param, + .p_normalized = &secp192k1_p_normalized_str_param, + .p_reciprocal = &secp192k1_p_reciprocal_str_param, + .a = &secp192k1_a_str_param, + .b = &secp192k1_b_str_param, + .curve_order = &secp192k1_curve_order_str_param, + .gx = &secp192k1_gx_str_param, + .gy = &secp192k1_gy_str_param, + .gz = &secp192k1_gz_str_param, + .gen_order = &secp192k1_gen_order_str_param, + .gen_order_bitlen = &secp192k1_gen_order_bitlen_str_param, + .cofactor = &secp192k1_cofactor_str_param, + .alpha_montgomery = &secp192k1_alpha_montgomery_str_param, + .gamma_montgomery = &secp192k1_gamma_montgomery_str_param, + .alpha_edwards = &secp192k1_alpha_edwards_str_param, + .oid = &secp192k1_oid_str_param, + .name = &secp192k1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP192K1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP192K1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP192K1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP192K1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP192K1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP192K1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 23) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 23 +#endif + +#endif /* __EC_PARAMS_SECP192K1_H__ */ + +#endif /* WITH_CURVE_SECP192K1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp192r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp192r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp192r1.h @@ -0,0 +1,312 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SECP192R1 + +#ifndef __EC_PARAMS_SECP192R1_H__ +#define __EC_PARAMS_SECP192R1_H__ +#include "ec_params_external.h" + +static const u8 secp192r1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +TO_EC_STR_PARAM(secp192r1_p); + +#define CURVE_SECP192R1_P_BITLEN 192 +static const u8 secp192r1_p_bitlen[] = { 0xc0 }; + +TO_EC_STR_PARAM(secp192r1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp192r1_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_r); + +static const u8 secp192r1_r_square[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_r_square); + +static const u8 secp192r1_mpinv[] = { + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_mpinv); + +static const u8 secp192r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp192r1_p_shift); + +static const u8 secp192r1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +TO_EC_STR_PARAM(secp192r1_p_normalized); + +static const u8 secp192r1_p_reciprocal[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp192r1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp192r1_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_r); + +static const u8 secp192r1_r_square[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_r_square); + +static const u8 secp192r1_mpinv[] = { + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_mpinv); + +static const u8 secp192r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp192r1_p_shift); + +static const u8 secp192r1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +TO_EC_STR_PARAM(secp192r1_p_normalized); + +static const u8 secp192r1_p_reciprocal[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp192r1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp192r1_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_r); + +static const u8 secp192r1_r_square[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_r_square); + +static const u8 secp192r1_mpinv[] = { + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_mpinv); + +static const u8 secp192r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp192r1_p_shift); + +static const u8 secp192r1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +TO_EC_STR_PARAM(secp192r1_p_normalized); + +static const u8 secp192r1_p_reciprocal[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp192r1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 secp192r1_a[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc +}; + +TO_EC_STR_PARAM(secp192r1_a); + +static const u8 secp192r1_b[] = { + 0x64, 0x21, 0x05, 0x19, 0xe5, 0x9c, 0x80, 0xe7, + 0x0f, 0xa7, 0xe9, 0xab, 0x72, 0x24, 0x30, 0x49, + 0xfe, 0xb8, 0xde, 0xec, 0xc1, 0x46, 0xb9, 0xb1 +}; + +TO_EC_STR_PARAM(secp192r1_b); + +#define CURVE_SECP192R1_CURVE_ORDER_BITLEN 192 +static const u8 secp192r1_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x99, 0xde, 0xf8, 0x36, + 0x14, 0x6b, 0xc9, 0xb1, 0xb4, 0xd2, 0x28, 0x31 +}; + +TO_EC_STR_PARAM(secp192r1_curve_order); + +static const u8 secp192r1_gx[] = { + 0x18, 0x8d, 0xa8, 0x0e, 0xb0, 0x30, 0x90, 0xf6, + 0x7c, 0xbf, 0x20, 0xeb, 0x43, 0xa1, 0x88, 0x00, + 0xf4, 0xff, 0x0a, 0xfd, 0x82, 0xff, 0x10, 0x12 +}; + +TO_EC_STR_PARAM(secp192r1_gx); + +static const u8 secp192r1_gy[] = { + 0x07, 0x19, 0x2b, 0x95, 0xff, 0xc8, 0xda, 0x78, + 0x63, 0x10, 0x11, 0xed, 0x6b, 0x24, 0xcd, 0xd5, + 0x73, 0xf9, 0x77, 0xa1, 0x1e, 0x79, 0x48, 0x11 +}; + +TO_EC_STR_PARAM(secp192r1_gy); + +static const u8 secp192r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_gz); + +static const u8 secp192r1_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x99, 0xde, 0xf8, 0x36, + 0x14, 0x6b, 0xc9, 0xb1, 0xb4, 0xd2, 0x28, 0x31 +}; + +TO_EC_STR_PARAM(secp192r1_gen_order); + +#define CURVE_SECP192R1_Q_BITLEN 192 +static const u8 secp192r1_gen_order_bitlen[] = { + 0xc0 +}; + +TO_EC_STR_PARAM(secp192r1_gen_order_bitlen); + +static const u8 secp192r1_cofactor[] = { + 0x01 +}; + +TO_EC_STR_PARAM(secp192r1_cofactor); + +static const u8 secp192r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp192r1_alpha_montgomery, 0); + +static const u8 secp192r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp192r1_gamma_montgomery, 0); + +static const u8 secp192r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp192r1_alpha_edwards, 0); + +static const u8 secp192r1_name[] = "SECP192R1"; +TO_EC_STR_PARAM(secp192r1_name); + +static const u8 secp192r1_oid[] = "1.2.840.10045.3.1.1"; +TO_EC_STR_PARAM(secp192r1_oid); + +static const ec_str_params secp192r1_str_params = { + .p = &secp192r1_p_str_param, + .p_bitlen = &secp192r1_p_bitlen_str_param, + .r = &secp192r1_r_str_param, + .r_square = &secp192r1_r_square_str_param, + .mpinv = &secp192r1_mpinv_str_param, + .p_shift = &secp192r1_p_shift_str_param, + .p_normalized = &secp192r1_p_normalized_str_param, + .p_reciprocal = &secp192r1_p_reciprocal_str_param, + .a = &secp192r1_a_str_param, + .b = &secp192r1_b_str_param, + .curve_order = &secp192r1_curve_order_str_param, + .gx = &secp192r1_gx_str_param, + .gy = &secp192r1_gy_str_param, + .gz = &secp192r1_gz_str_param, + .gen_order = &secp192r1_gen_order_str_param, + .gen_order_bitlen = &secp192r1_gen_order_bitlen_str_param, + .cofactor = &secp192r1_cofactor_str_param, + .alpha_montgomery = &secp192r1_alpha_montgomery_str_param, + .gamma_montgomery = &secp192r1_gamma_montgomery_str_param, + .alpha_edwards = &secp192r1_alpha_edwards_str_param, + .oid = &secp192r1_oid_str_param, + .name = &secp192r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP192R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP192R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP192R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP192R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP192R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP192R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_SECP192R1_H__ */ + +#endif /* WITH_CURVE_SECP192R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp224k1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp224k1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp224k1.h @@ -0,0 +1,320 @@ +#include +#ifdef WITH_CURVE_SECP224K1 + +#ifndef __EC_PARAMS_SECP224K1_H__ +#define __EC_PARAMS_SECP224K1_H__ +#include +static const u8 secp224k1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xe5, 0x6d, +}; + +TO_EC_STR_PARAM(secp224k1_p); + +#define CURVE_SECP224K1_P_BITLEN 224 +static const u8 secp224k1_p_bitlen[] = { + 0xe0, +}; + +TO_EC_STR_PARAM(secp224k1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp224k1_r[] = { + 0x01, 0x00, 0x00, 0x1a, 0x93, 0x00, 0x00, 0x00, + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_r); + +static const u8 secp224k1_r_square[] = { + 0x01, 0x00, 0x00, 0x35, 0x26, 0x02, 0xc2, 0x30, + 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_r_square); + +static const u8 secp224k1_mpinv[] = { + 0x5a, 0x92, 0xa0, 0x0a, 0x19, 0x8d, 0x13, 0x9b, +}; + +TO_EC_STR_PARAM(secp224k1_mpinv); + +static const u8 secp224k1_p_shift[] = { + 0x20, +}; + +TO_EC_STR_PARAM(secp224k1_p_shift); + +static const u8 secp224k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xe5, 0x6d, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_p_normalized); + +static const u8 secp224k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp224k1_r[] = { + 0x01, 0x00, 0x00, 0x1a, 0x93, +}; + +TO_EC_STR_PARAM(secp224k1_r); + +static const u8 secp224k1_r_square[] = { + 0x01, 0x00, 0x00, 0x35, 0x26, 0x02, 0xc2, 0x30, + 0x69, +}; + +TO_EC_STR_PARAM(secp224k1_r_square); + +static const u8 secp224k1_mpinv[] = { + 0x19, 0x8d, 0x13, 0x9b, +}; + +TO_EC_STR_PARAM(secp224k1_mpinv); + +static const u8 secp224k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_p_shift); + +static const u8 secp224k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xe5, 0x6d, +}; + +TO_EC_STR_PARAM(secp224k1_p_normalized); + +static const u8 secp224k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp224k1_r[] = { + 0x01, 0x00, 0x00, 0x1a, 0x93, +}; + +TO_EC_STR_PARAM(secp224k1_r); + +static const u8 secp224k1_r_square[] = { + 0x01, 0x00, 0x00, 0x35, 0x26, 0x02, 0xc2, 0x30, + 0x69, +}; + +TO_EC_STR_PARAM(secp224k1_r_square); + +static const u8 secp224k1_mpinv[] = { + 0x13, 0x9b, +}; + +TO_EC_STR_PARAM(secp224k1_mpinv); + +static const u8 secp224k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_p_shift); + +static const u8 secp224k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xe5, 0x6d, +}; + +TO_EC_STR_PARAM(secp224k1_p_normalized); + +static const u8 secp224k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 secp224k1_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(secp224k1_a); + +static const u8 secp224k1_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, +}; + +TO_EC_STR_PARAM(secp224k1_b); + +#define CURVE_SECP224K1_CURVE_ORDER_BITLEN 225 +static const u8 secp224k1_curve_order[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc, + 0xe8, 0xd2, 0xec, 0x61, 0x84, 0xca, 0xf0, 0xa9, + 0x71, 0x76, 0x9f, 0xb1, 0xf7, +}; + +TO_EC_STR_PARAM(secp224k1_curve_order); + +static const u8 secp224k1_gx[] = { + 0xa1, 0x45, 0x5b, 0x33, 0x4d, 0xf0, 0x99, 0xdf, + 0x30, 0xfc, 0x28, 0xa1, 0x69, 0xa4, 0x67, 0xe9, + 0xe4, 0x70, 0x75, 0xa9, 0x0f, 0x7e, 0x65, 0x0e, + 0xb6, 0xb7, 0xa4, 0x5c, +}; + +TO_EC_STR_PARAM(secp224k1_gx); + +static const u8 secp224k1_gy[] = { + 0x7e, 0x08, 0x9f, 0xed, 0x7f, 0xba, 0x34, 0x42, + 0x82, 0xca, 0xfb, 0xd6, 0xf7, 0xe3, 0x19, 0xf7, + 0xc0, 0xb0, 0xbd, 0x59, 0xe2, 0xca, 0x4b, 0xdb, + 0x55, 0x6d, 0x61, 0xa5, +}; + +TO_EC_STR_PARAM(secp224k1_gy); + +static const u8 secp224k1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(secp224k1_gz); + +static const u8 secp224k1_gen_order[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc, + 0xe8, 0xd2, 0xec, 0x61, 0x84, 0xca, 0xf0, 0xa9, + 0x71, 0x76, 0x9f, 0xb1, 0xf7, +}; + +TO_EC_STR_PARAM(secp224k1_gen_order); + +#define CURVE_SECP224K1_Q_BITLEN 225 +static const u8 secp224k1_gen_order_bitlen[] = { + 0xe1, +}; + +TO_EC_STR_PARAM(secp224k1_gen_order_bitlen); + +static const u8 secp224k1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(secp224k1_cofactor); + +static const u8 secp224k1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp224k1_alpha_montgomery, 0); + +static const u8 secp224k1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp224k1_gamma_montgomery, 0); + +static const u8 secp224k1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp224k1_alpha_edwards, 0); + +static const u8 secp224k1_name[] = "SECP224K1"; +TO_EC_STR_PARAM(secp224k1_name); + +static const u8 secp224k1_oid[] = "1.3.132.0.32"; +TO_EC_STR_PARAM(secp224k1_oid); + +static const ec_str_params secp224k1_str_params = { + .p = &secp224k1_p_str_param, + .p_bitlen = &secp224k1_p_bitlen_str_param, + .r = &secp224k1_r_str_param, + .r_square = &secp224k1_r_square_str_param, + .mpinv = &secp224k1_mpinv_str_param, + .p_shift = &secp224k1_p_shift_str_param, + .p_normalized = &secp224k1_p_normalized_str_param, + .p_reciprocal = &secp224k1_p_reciprocal_str_param, + .a = &secp224k1_a_str_param, + .b = &secp224k1_b_str_param, + .curve_order = &secp224k1_curve_order_str_param, + .gx = &secp224k1_gx_str_param, + .gy = &secp224k1_gy_str_param, + .gz = &secp224k1_gz_str_param, + .gen_order = &secp224k1_gen_order_str_param, + .gen_order_bitlen = &secp224k1_gen_order_bitlen_str_param, + .cofactor = &secp224k1_cofactor_str_param, + .alpha_montgomery = &secp224k1_alpha_montgomery_str_param, + .gamma_montgomery = &secp224k1_gamma_montgomery_str_param, + .alpha_edwards = &secp224k1_alpha_edwards_str_param, + .oid = &secp224k1_oid_str_param, + .name = &secp224k1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP224K1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP224K1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP224K1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP224K1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP224K1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP224K1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 23) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 23 +#endif + +#endif /* __EC_PARAMS_SECP224K1_H__ */ + +#endif /* WITH_CURVE_SECP224K1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp224r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp224r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp224r1.h @@ -0,0 +1,279 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SECP224R1 + +#ifndef __EC_PARAMS_SECP224R1_H__ +#define __EC_PARAMS_SECP224R1_H__ +#include "ec_params_external.h" + +static const u8 secp224r1_p[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp224r1_p); + +#define CURVE_SECP224R1_P_BITLEN 224 +static const u8 secp224r1_p_bitlen[] = { 0xE0 }; + +TO_EC_STR_PARAM(secp224r1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp224r1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, +}; + +static const u8 secp224r1_p_shift[] = { + 0x20 +}; + +static const u8 secp224r1_r[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, +}; + +static const u8 secp224r1_r_square[] = { + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01 +}; + +static const u8 secp224r1_mpinv[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp224r1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +static const u8 secp224r1_p_shift[] = { + 0x00 +}; + +static const u8 secp224r1_r[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff +}; + +static const u8 secp224r1_r_square[] = { + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +static const u8 secp224r1_mpinv[] = { + 0xff, 0xff, 0xff, 0xff +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp224r1_p_normalized[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +static const u8 secp224r1_p_shift[] = { + 0x00 +}; + +static const u8 secp224r1_r[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff +}; + +static const u8 secp224r1_r_square[] = { + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +static const u8 secp224r1_mpinv[] = { + 0xff, 0xff +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(secp224r1_r); +TO_EC_STR_PARAM(secp224r1_r_square); +TO_EC_STR_PARAM(secp224r1_p_normalized); +TO_EC_STR_PARAM(secp224r1_mpinv); +TO_EC_STR_PARAM(secp224r1_p_shift); + +static const u8 secp224r1_p_reciprocal[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp224r1_p_reciprocal); + +static const u8 secp224r1_a[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFE +}; + +TO_EC_STR_PARAM(secp224r1_a); + +static const u8 secp224r1_b[] = { + 0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, + 0xF5, 0x41, 0x32, 0x56, 0x50, 0x44, 0xB0, 0xB7, + 0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43, + 0x23, 0x55, 0xFF, 0xB4 +}; + +TO_EC_STR_PARAM(secp224r1_b); + +#define CURVE_SECP224R1_CURVE_ORDER_BITLEN 224 +static const u8 secp224r1_curve_order[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0xA2, + 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45, + 0x5C, 0x5C, 0x2A, 0x3D +}; + +TO_EC_STR_PARAM(secp224r1_curve_order); + +static const u8 secp224r1_gx[] = { + 0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, + 0x32, 0x13, 0x90, 0xB9, 0x4A, 0x03, 0xC1, 0xD3, + 0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6, + 0x11, 0x5C, 0x1D, 0x21 +}; + +TO_EC_STR_PARAM(secp224r1_gx); + +static const u8 secp224r1_gy[] = { + 0xBD, 0x37, 0x63, 0x88, 0xB5, 0xF7, 0x23, 0xFB, + 0x4C, 0x22, 0xDF, 0xE6, 0xCD, 0x43, 0x75, 0xA0, + 0x5A, 0x07, 0x47, 0x64, 0x44, 0xD5, 0x81, 0x99, + 0x85, 0x00, 0x7E, 0x34 +}; + +TO_EC_STR_PARAM(secp224r1_gy); + +static const u8 secp224r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp224r1_gz); + +static const u8 secp224r1_gen_order[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0xA2, + 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45, + 0x5C, 0x5C, 0x2A, 0x3D +}; + +TO_EC_STR_PARAM(secp224r1_gen_order); + +#define CURVE_SECP224R1_Q_BITLEN 224 +static const u8 secp224r1_gen_order_bitlen[] = { 0xE0 }; + +TO_EC_STR_PARAM(secp224r1_gen_order_bitlen); + +static const u8 secp224r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(secp224r1_cofactor); + +static const u8 secp224r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp224r1_alpha_montgomery, 0); + +static const u8 secp224r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp224r1_gamma_montgomery, 0); + +static const u8 secp224r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp224r1_alpha_edwards, 0); + +static const u8 secp224r1_oid[] = "1.3.132.0.33"; +TO_EC_STR_PARAM(secp224r1_oid); + +static const u8 secp224r1_name[] = "SECP224R1"; +TO_EC_STR_PARAM(secp224r1_name); + +static const ec_str_params secp224r1_str_params = { + .p = &secp224r1_p_str_param, + .p_bitlen = &secp224r1_p_bitlen_str_param, + .r = &secp224r1_r_str_param, + .r_square = &secp224r1_r_square_str_param, + .mpinv = &secp224r1_mpinv_str_param, + .p_shift = &secp224r1_p_shift_str_param, + .p_normalized = &secp224r1_p_normalized_str_param, + .p_reciprocal = &secp224r1_p_reciprocal_str_param, + .a = &secp224r1_a_str_param, + .b = &secp224r1_b_str_param, + .curve_order = &secp224r1_curve_order_str_param, + .gx = &secp224r1_gx_str_param, + .gy = &secp224r1_gy_str_param, + .gz = &secp224r1_gz_str_param, + .gen_order = &secp224r1_gen_order_str_param, + .gen_order_bitlen = &secp224r1_gen_order_bitlen_str_param, + .cofactor = &secp224r1_cofactor_str_param, + .alpha_montgomery = &secp224r1_alpha_montgomery_str_param, + .gamma_montgomery = &secp224r1_gamma_montgomery_str_param, + .alpha_edwards = &secp224r1_alpha_edwards_str_param, + .oid = &secp224r1_oid_str_param, + .name = &secp224r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP224R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP224R1_P_BITLEN +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP224R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP224R1_Q_BITLEN +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP224R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP224R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_SECP224R1_H__ */ + +#endif /* WITH_CURVE_SECP224R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp256k1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp256k1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp256k1.h @@ -0,0 +1,318 @@ +#include +#ifdef WITH_CURVE_SECP256K1 + +#ifndef __EC_PARAMS_SECP256K1_H__ +#define __EC_PARAMS_SECP256K1_H__ +#include +static const u8 secp256k1_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, +}; + +TO_EC_STR_PARAM(secp256k1_p); + +#define CURVE_SECP256K1_P_BITLEN 256 +static const u8 secp256k1_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp256k1_r[] = { + 0x01, 0x00, 0x00, 0x03, 0xd1, +}; + +TO_EC_STR_PARAM(secp256k1_r); + +static const u8 secp256k1_r_square[] = { + 0x01, 0x00, 0x00, 0x07, 0xa2, 0x00, 0x0e, 0x90, + 0xa1, +}; + +TO_EC_STR_PARAM(secp256k1_r_square); + +static const u8 secp256k1_mpinv[] = { + 0xd8, 0x38, 0x09, 0x1d, 0xd2, 0x25, 0x35, 0x31, +}; + +TO_EC_STR_PARAM(secp256k1_mpinv); + +static const u8 secp256k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_shift); + +static const u8 secp256k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, +}; + +TO_EC_STR_PARAM(secp256k1_p_normalized); + +static const u8 secp256k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp256k1_r[] = { + 0x01, 0x00, 0x00, 0x03, 0xd1, +}; + +TO_EC_STR_PARAM(secp256k1_r); + +static const u8 secp256k1_r_square[] = { + 0x01, 0x00, 0x00, 0x07, 0xa2, 0x00, 0x0e, 0x90, + 0xa1, +}; + +TO_EC_STR_PARAM(secp256k1_r_square); + +static const u8 secp256k1_mpinv[] = { + 0xd2, 0x25, 0x35, 0x31, +}; + +TO_EC_STR_PARAM(secp256k1_mpinv); + +static const u8 secp256k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_shift); + +static const u8 secp256k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, +}; + +TO_EC_STR_PARAM(secp256k1_p_normalized); + +static const u8 secp256k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp256k1_r[] = { + 0x01, 0x00, 0x00, 0x03, 0xd1, +}; + +TO_EC_STR_PARAM(secp256k1_r); + +static const u8 secp256k1_r_square[] = { + 0x01, 0x00, 0x00, 0x07, 0xa2, 0x00, 0x0e, 0x90, + 0xa1, +}; + +TO_EC_STR_PARAM(secp256k1_r_square); + +static const u8 secp256k1_mpinv[] = { + 0x35, 0x31, +}; + +TO_EC_STR_PARAM(secp256k1_mpinv); + +static const u8 secp256k1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_shift); + +static const u8 secp256k1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, +}; + +TO_EC_STR_PARAM(secp256k1_p_normalized); + +static const u8 secp256k1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 secp256k1_a[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_a); + +static const u8 secp256k1_b[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +}; + +TO_EC_STR_PARAM(secp256k1_b); + +#define CURVE_SECP256K1_CURVE_ORDER_BITLEN 256 +static const u8 secp256k1_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, + 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, +}; + +TO_EC_STR_PARAM(secp256k1_curve_order); + +static const u8 secp256k1_gx[] = { + 0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, + 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, + 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, + 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, +}; + +TO_EC_STR_PARAM(secp256k1_gx); + +static const u8 secp256k1_gy[] = { + 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, + 0x5d, 0xa4, 0xfb, 0xfc, 0x0e, 0x11, 0x08, 0xa8, + 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, + 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8, +}; + +TO_EC_STR_PARAM(secp256k1_gy); + +static const u8 secp256k1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(secp256k1_gz); + +static const u8 secp256k1_gen_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, + 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, +}; + +TO_EC_STR_PARAM(secp256k1_gen_order); + +#define CURVE_SECP256K1_Q_BITLEN 256 +static const u8 secp256k1_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(secp256k1_gen_order_bitlen); + +static const u8 secp256k1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(secp256k1_cofactor); + +static const u8 secp256k1_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp256k1_alpha_montgomery, 0); + +static const u8 secp256k1_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp256k1_gamma_montgomery, 0); + +static const u8 secp256k1_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(secp256k1_alpha_edwards, 0); + +static const u8 secp256k1_name[] = "SECP256K1"; +TO_EC_STR_PARAM(secp256k1_name); + +static const u8 secp256k1_oid[] = "1.3.132.0.10"; +TO_EC_STR_PARAM(secp256k1_oid); + +static const ec_str_params secp256k1_str_params = { + .p = &secp256k1_p_str_param, + .p_bitlen = &secp256k1_p_bitlen_str_param, + .r = &secp256k1_r_str_param, + .r_square = &secp256k1_r_square_str_param, + .mpinv = &secp256k1_mpinv_str_param, + .p_shift = &secp256k1_p_shift_str_param, + .p_normalized = &secp256k1_p_normalized_str_param, + .p_reciprocal = &secp256k1_p_reciprocal_str_param, + .a = &secp256k1_a_str_param, + .b = &secp256k1_b_str_param, + .curve_order = &secp256k1_curve_order_str_param, + .gx = &secp256k1_gx_str_param, + .gy = &secp256k1_gy_str_param, + .gz = &secp256k1_gz_str_param, + .gen_order = &secp256k1_gen_order_str_param, + .gen_order_bitlen = &secp256k1_gen_order_bitlen_str_param, + .cofactor = &secp256k1_cofactor_str_param, + .alpha_montgomery = &secp256k1_alpha_montgomery_str_param, + .gamma_montgomery = &secp256k1_gamma_montgomery_str_param, + .alpha_edwards = &secp256k1_alpha_edwards_str_param, + .oid = &secp256k1_oid_str_param, + .name = &secp256k1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP256K1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP256K1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP256K1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP256K1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP256K1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP256K1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 23) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 23 +#endif + +#endif /* __EC_PARAMS_SECP256K1_H__ */ + +#endif /* WITH_CURVE_SECP256K1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp256r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp256r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp256r1.h @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SECP256R1 + +#ifndef __EC_PARAMS_SECP256R1_H__ +#define __EC_PARAMS_SECP256R1_H__ +#include "ec_params_external.h" + +static const u8 secp256r1_p[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +TO_EC_STR_PARAM(secp256r1_p); + +#define CURVE_SECP256R1_P_BITLEN 256 +static const u8 secp256r1_p_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(secp256r1_p_bitlen); + +static const u8 secp256r1_r[] = { + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp256r1_r); + +static const u8 secp256r1_r_square[] = { + 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xfd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 +}; + +TO_EC_STR_PARAM(secp256r1_r_square); + +static const u8 secp256r1_mpinv[] = { 0x00, 0x00, 0x00, 0x01 }; + +TO_EC_STR_PARAM(secp256r1_mpinv); + +static const u8 secp256r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp256r1_p_shift); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp256r1_p_reciprocal[] = { + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff +}; +#elif (WORD_BYTES == 4) || (WORD_BYTES == 2) /* 32 and 16-bit words */ +static const u8 secp256r1_p_reciprocal[] = { + 0x00 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(secp256r1_p_reciprocal); + +static const u8 secp256r1_a[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC +}; + +TO_EC_STR_PARAM(secp256r1_a); + +static const u8 secp256r1_b[] = { + 0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, + 0xB3, 0xEB, 0xBD, 0x55, 0x76, 0x98, 0x86, 0xBC, + 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6, + 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B +}; + +TO_EC_STR_PARAM(secp256r1_b); + +#define CURVE_SECP256R1_CURVE_ORDER_BITLEN 256 +static const u8 secp256r1_curve_order[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84, + 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51 +}; + +TO_EC_STR_PARAM(secp256r1_curve_order); + +static const u8 secp256r1_gx[] = { + 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, + 0xF8, 0xBC, 0xE6, 0xE5, 0x63, 0xA4, 0x40, 0xF2, + 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0, + 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96 +}; + +TO_EC_STR_PARAM(secp256r1_gx); + +static const u8 secp256r1_gy[] = { + 0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, 0x9B, + 0x8E, 0xE7, 0xEB, 0x4A, 0x7C, 0x0F, 0x9E, 0x16, + 0x2B, 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE, + 0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF, 0x51, 0xF5 +}; + +TO_EC_STR_PARAM(secp256r1_gy); + +static const u8 secp256r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp256r1_gz); + +static const u8 secp256r1_gen_order[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84, + 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51 +}; + +TO_EC_STR_PARAM(secp256r1_gen_order); + +#define CURVE_SECP256R1_Q_BITLEN 256 +static const u8 secp256r1_gen_order_bitlen[] = { 0x01, 0x00 }; + +TO_EC_STR_PARAM(secp256r1_gen_order_bitlen); + +static const u8 secp256r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(secp256r1_cofactor); + +static const u8 secp256r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp256r1_alpha_montgomery, 0); + +static const u8 secp256r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp256r1_gamma_montgomery, 0); + +static const u8 secp256r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp256r1_alpha_edwards, 0); + +static const u8 secp256r1_oid[] = "1.2.840.10045.3.1.7"; +TO_EC_STR_PARAM(secp256r1_oid); + +static const u8 secp256r1_name[] = "SECP256R1"; +TO_EC_STR_PARAM(secp256r1_name); + +static const ec_str_params secp256r1_str_params = { + .p = &secp256r1_p_str_param, + .p_bitlen = &secp256r1_p_bitlen_str_param, + .r = &secp256r1_r_str_param, + .r_square = &secp256r1_r_square_str_param, + .mpinv = &secp256r1_mpinv_str_param, + .p_shift = &secp256r1_p_shift_str_param, + .p_normalized = &secp256r1_p_str_param, + .p_reciprocal = &secp256r1_p_reciprocal_str_param, + .a = &secp256r1_a_str_param, + .b = &secp256r1_b_str_param, + .curve_order = &secp256r1_curve_order_str_param, + .gx = &secp256r1_gx_str_param, + .gy = &secp256r1_gy_str_param, + .gz = &secp256r1_gz_str_param, + .gen_order = &secp256r1_gen_order_str_param, + .gen_order_bitlen = &secp256r1_gen_order_bitlen_str_param, + .cofactor = &secp256r1_cofactor_str_param, + .alpha_montgomery = &secp256r1_alpha_montgomery_str_param, + .gamma_montgomery = &secp256r1_gamma_montgomery_str_param, + .alpha_edwards = &secp256r1_alpha_edwards_str_param, + .oid = &secp256r1_oid_str_param, + .name = &secp256r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP256R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP256R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP256R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP256R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP256R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP256R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_SECP256R1_H__ */ + +#endif /* WITH_CURVE_SECP256R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp384r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp384r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp384r1.h @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SECP384R1 + +#ifndef __EC_PARAMS_SECP384R1_H__ +#define __EC_PARAMS_SECP384R1_H__ +#include "ec_params_external.h" + +static const u8 secp384r1_p[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF +}; + +TO_EC_STR_PARAM(secp384r1_p); + +#define CURVE_SECP384R1_P_BITLEN 384 +static const u8 secp384r1_p_bitlen[] = { 0x01, 0x80 }; + +TO_EC_STR_PARAM(secp384r1_p_bitlen); + +static const u8 secp384r1_r[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp384r1_r); + +static const u8 secp384r1_r_square[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp384r1_r_square); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp384r1_mpinv[] = { + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp384r1_mpinv[] = { + 0x00, 0x00, 0x00, 0x01 +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp384r1_mpinv[] = { + 0x00, 0x01 +}; +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +TO_EC_STR_PARAM(secp384r1_mpinv); + +static const u8 secp384r1_p_shift[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp384r1_p_shift); + +static const u8 secp384r1_p_reciprocal[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp384r1_p_reciprocal); + +static const u8 secp384r1_a[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, +}; + +TO_EC_STR_PARAM(secp384r1_a); + +static const u8 secp384r1_b[] = { + 0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4, + 0x98, 0x8E, 0x05, 0x6B, 0xE3, 0xF8, 0x2D, 0x19, + 0x18, 0x1D, 0x9C, 0x6E, 0xFE, 0x81, 0x41, 0x12, + 0x03, 0x14, 0x08, 0x8F, 0x50, 0x13, 0x87, 0x5A, + 0xC6, 0x56, 0x39, 0x8D, 0x8A, 0x2E, 0xD1, 0x9D, + 0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF +}; + +TO_EC_STR_PARAM(secp384r1_b); + +#define CURVE_SECP384R1_CURVE_ORDER_BITLEN 384 +static const u8 secp384r1_curve_order[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF, + 0x58, 0x1A, 0x0D, 0xB2, 0x48, 0xB0, 0xA7, 0x7A, + 0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73 +}; + +TO_EC_STR_PARAM(secp384r1_curve_order); + +static const u8 secp384r1_gx[] = { + 0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37, + 0x8E, 0xB1, 0xC7, 0x1E, 0xF3, 0x20, 0xAD, 0x74, + 0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98, + 0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38, + 0x55, 0x02, 0xF2, 0x5D, 0xBF, 0x55, 0x29, 0x6C, + 0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7 +}; + +TO_EC_STR_PARAM(secp384r1_gx); + +static const u8 secp384r1_gy[] = { + 0x36, 0x17, 0xDE, 0x4A, 0x96, 0x26, 0x2C, 0x6F, + 0x5D, 0x9E, 0x98, 0xBF, 0x92, 0x92, 0xDC, 0x29, + 0xF8, 0xF4, 0x1D, 0xBD, 0x28, 0x9A, 0x14, 0x7C, + 0xE9, 0xDA, 0x31, 0x13, 0xB5, 0xF0, 0xB8, 0xC0, + 0x0A, 0x60, 0xB1, 0xCE, 0x1D, 0x7E, 0x81, 0x9D, + 0x7A, 0x43, 0x1D, 0x7C, 0x90, 0xEA, 0x0E, 0x5F +}; + +TO_EC_STR_PARAM(secp384r1_gy); + +static const u8 secp384r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp384r1_gz); + +static const u8 secp384r1_gen_order[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF, + 0x58, 0x1A, 0x0D, 0xB2, 0x48, 0xB0, 0xA7, 0x7A, + 0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73 +}; + +TO_EC_STR_PARAM(secp384r1_gen_order); + +#define CURVE_SECP384R1_Q_BITLEN 384 +static const u8 secp384r1_gen_order_bitlen[] = { 0x01, 0x80 }; + +TO_EC_STR_PARAM(secp384r1_gen_order_bitlen); + +static const u8 secp384r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(secp384r1_cofactor); + +static const u8 secp384r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp384r1_alpha_montgomery, 0); + +static const u8 secp384r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp384r1_gamma_montgomery, 0); + +static const u8 secp384r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp384r1_alpha_edwards, 0); + +static const u8 secp384r1_oid[] = "1.3.132.0.34"; +TO_EC_STR_PARAM(secp384r1_oid); + +static const u8 secp384r1_name[] = "SECP384R1"; +TO_EC_STR_PARAM(secp384r1_name); + +static const ec_str_params secp384r1_str_params = { + .p = &secp384r1_p_str_param, + .p_bitlen = &secp384r1_p_bitlen_str_param, + .r = &secp384r1_r_str_param, + .r_square = &secp384r1_r_square_str_param, + .mpinv = &secp384r1_mpinv_str_param, + .p_shift = &secp384r1_p_shift_str_param, + .p_normalized = &secp384r1_p_str_param, + .p_reciprocal = &secp384r1_p_reciprocal_str_param, + .a = &secp384r1_a_str_param, + .b = &secp384r1_b_str_param, + .curve_order = &secp384r1_curve_order_str_param, + .gx = &secp384r1_gx_str_param, + .gy = &secp384r1_gy_str_param, + .gz = &secp384r1_gz_str_param, + .gen_order = &secp384r1_gen_order_str_param, + .gen_order_bitlen = &secp384r1_gen_order_bitlen_str_param, + .cofactor = &secp384r1_cofactor_str_param, + .alpha_montgomery = &secp384r1_alpha_montgomery_str_param, + .gamma_montgomery = &secp384r1_gamma_montgomery_str_param, + .alpha_edwards = &secp384r1_alpha_edwards_str_param, + .oid = &secp384r1_oid_str_param, + .name = &secp384r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP384R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP384R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP384R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP384R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP384R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP384R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_SECP384R1_H__ */ +#endif /* WITH_CURVE_SECP384R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_secp521r1.h b/crypto/libecc/include/libecc/curves/known/ec_params_secp521r1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_secp521r1.h @@ -0,0 +1,327 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SECP521R1 + +#ifndef __EC_PARAMS_SECP521R1_H__ +#define __EC_PARAMS_SECP521R1_H__ +#include "ec_params_external.h" + +static const u8 secp521r1_p[] = { + 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF +}; + +TO_EC_STR_PARAM(secp521r1_p); + +#define CURVE_SECP521R1_P_BITLEN 521 +static const u8 secp521r1_p_bitlen[] = { 0x02, 0x09 }; + +TO_EC_STR_PARAM(secp521r1_p_bitlen); + +/* + * Note: our multiprecision Montgomery mutiplication algorithm + * fp_mul_redc1() expects R and R^2 used for prior redcification + * to be power of B, the base in which we currently work, i.e. + * the defined number of bits for our words. For primes which + * have a common bitsize such as 256 and 512, which are a multiple + * of 64, 32 and 16, the value of r and r^2 are alway same, no + * matter the value of WORD_BYTES (i.e. no matter the base we + * currently use). But for secp521r1, p being 521 bit long, r is + * 2^576 mod p for 64 bits words, 2^544 mod p for 32 bits words + * and 528 for 16 bit words. Hence the following specific + * definitions for r and r^2 depending on words bitsize. + */ +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 secp521r1_r[] = { + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static const u8 secp521r1_r_square[] = { + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 secp521r1_r[] = { 0x80, 0x00, 0x00 }; + +static const u8 secp521r1_r_square[] = { + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 secp521r1_r[] = { 0x80 }; +static const u8 secp521r1_r_square[] = { 0x40, 0x00 }; +#else /* unknown word size */ +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(secp521r1_r); +TO_EC_STR_PARAM(secp521r1_r_square); + +static const u8 secp521r1_mpinv[] = { 0x01 }; + +TO_EC_STR_PARAM(secp521r1_mpinv); + +#if (WORD_BYTES == 8) +static const u8 secp521r1_p_shift[] = { + 0x37 +}; + +static const u8 secp521r1_p_normalized[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +#elif (WORD_BYTES == 4) +static const u8 secp521r1_p_shift[] = { + 0x17 +}; + +static const u8 secp521r1_p_normalized[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x80, 0x00, 0x00 +}; +#elif (WORD_BYTES == 2) +static const u8 secp521r1_p_shift[] = { + 0x7 +}; + +static const u8 secp521r1_p_normalized[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x80 +}; +#else +#error "Unsupported word size" +#endif +TO_EC_STR_PARAM(secp521r1_p_shift); +TO_EC_STR_PARAM(secp521r1_p_normalized); + +static const u8 secp521r1_p_reciprocal[] = { + 0x00 +}; + +TO_EC_STR_PARAM(secp521r1_p_reciprocal); + +static const u8 secp521r1_a[] = { + 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFC +}; + +TO_EC_STR_PARAM(secp521r1_a); + +static const u8 secp521r1_b[] = { + 0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C, + 0x9A, 0x1F, 0x92, 0x9A, 0x21, 0xA0, 0xB6, 0x85, + 0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3, + 0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1, + 0x09, 0xE1, 0x56, 0x19, 0x39, 0x51, 0xEC, 0x7E, + 0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1, + 0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C, + 0x34, 0xF1, 0xEF, 0x45, 0x1F, 0xD4, 0x6B, 0x50, + 0x3F, 0x00 +}; + +TO_EC_STR_PARAM(secp521r1_b); + +#define CURVE_SECP521R1_CURVE_ORDER_BITLEN 521 +static const u8 secp521r1_curve_order[] = { + 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFA, 0x51, 0x86, 0x87, 0x83, 0xBF, 0x2F, + 0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09, + 0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C, + 0x47, 0xAE, 0xBB, 0x6F, 0xB7, 0x1E, 0x91, 0x38, + 0x64, 0x09 +}; + +TO_EC_STR_PARAM(secp521r1_curve_order); + +static const u8 secp521r1_gx[] = { + 0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04, + 0xE9, 0xCD, 0x9E, 0x3E, 0xCB, 0x66, 0x23, 0x95, + 0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F, + 0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D, + 0x3D, 0xBA, 0xA1, 0x4B, 0x5E, 0x77, 0xEF, 0xE7, + 0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF, + 0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A, + 0x42, 0x9B, 0xF9, 0x7E, 0x7E, 0x31, 0xC2, 0xE5, + 0xBD, 0x66, +}; + +TO_EC_STR_PARAM(secp521r1_gx); + +static const u8 secp521r1_gy[] = { + 0x01, 0x18, 0x39, 0x29, 0x6A, 0x78, 0x9A, 0x3B, + 0xC0, 0x04, 0x5C, 0x8A, 0x5F, 0xB4, 0x2C, 0x7D, + 0x1B, 0xD9, 0x98, 0xF5, 0x44, 0x49, 0x57, 0x9B, + 0x44, 0x68, 0x17, 0xAF, 0xBD, 0x17, 0x27, 0x3E, + 0x66, 0x2C, 0x97, 0xEE, 0x72, 0x99, 0x5E, 0xF4, + 0x26, 0x40, 0xC5, 0x50, 0xB9, 0x01, 0x3F, 0xAD, + 0x07, 0x61, 0x35, 0x3C, 0x70, 0x86, 0xA2, 0x72, + 0xC2, 0x40, 0x88, 0xBE, 0x94, 0x76, 0x9F, 0xD1, + 0x66, 0x50 +}; + +TO_EC_STR_PARAM(secp521r1_gy); + +static const u8 secp521r1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01 +}; + +TO_EC_STR_PARAM(secp521r1_gz); + +static const u8 secp521r1_gen_order[] = { + 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFA, 0x51, 0x86, 0x87, 0x83, 0xBF, 0x2F, + 0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09, + 0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C, + 0x47, 0xAE, 0xBB, 0x6F, 0xB7, 0x1E, 0x91, 0x38, + 0x64, 0x09 +}; + +TO_EC_STR_PARAM(secp521r1_gen_order); + +#define CURVE_SECP521R1_Q_BITLEN 521 +static const u8 secp521r1_gen_order_bitlen[] = { 0x02, 0x09 }; + +TO_EC_STR_PARAM(secp521r1_gen_order_bitlen); + +static const u8 secp521r1_cofactor[] = { 0x01 }; + +TO_EC_STR_PARAM(secp521r1_cofactor); + +static const u8 secp521r1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp521r1_alpha_montgomery, 0); + +static const u8 secp521r1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp521r1_gamma_montgomery, 0); + +static const u8 secp521r1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(secp521r1_alpha_edwards, 0); + +static const u8 secp521r1_oid[] = "1.3.132.0.35"; +TO_EC_STR_PARAM(secp521r1_oid); + +static const u8 secp521r1_name[] = "SECP521R1"; +TO_EC_STR_PARAM(secp521r1_name); + +static const ec_str_params secp521r1_str_params = { + .p = &secp521r1_p_str_param, + .p_bitlen = &secp521r1_p_bitlen_str_param, + .r = &secp521r1_r_str_param, + .r_square = &secp521r1_r_square_str_param, + .mpinv = &secp521r1_mpinv_str_param, + .p_shift = &secp521r1_p_shift_str_param, + .p_normalized = &secp521r1_p_normalized_str_param, + .p_reciprocal = &secp521r1_p_reciprocal_str_param, + .a = &secp521r1_a_str_param, + .b = &secp521r1_b_str_param, + .curve_order = &secp521r1_curve_order_str_param, + .gx = &secp521r1_gx_str_param, + .gy = &secp521r1_gy_str_param, + .gz = &secp521r1_gz_str_param, + .gen_order = &secp521r1_gen_order_str_param, + .gen_order_bitlen = &secp521r1_gen_order_bitlen_str_param, + .cofactor = &secp521r1_cofactor_str_param, + .alpha_montgomery = &secp521r1_alpha_montgomery_str_param, + .gamma_montgomery = &secp521r1_gamma_montgomery_str_param, + .alpha_edwards = &secp521r1_alpha_edwards_str_param, + .oid = &secp521r1_oid_str_param, + .name = &secp521r1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SECP521R1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SECP521R1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SECP521R1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SECP521R1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SECP521R1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SECP521R1_CURVE_ORDER_BITLEN +#endif + +#endif /* __EC_PARAMS_SECP521R1_H__ */ + +#endif /* WITH_CURVE_SECP521R1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_sm2p192test.h b/crypto/libecc/include/libecc/curves/known/ec_params_sm2p192test.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_sm2p192test.h @@ -0,0 +1,326 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SM2P192TEST + +#ifndef __EC_PARAMS_SM2P192TEST_H__ +#define __EC_PARAMS_SM2P192TEST_H__ +#include +static const u8 sm2p192test_p[] = { + 0xbd, 0xb6, 0xf4, 0xfe, 0x3e, 0x8b, 0x1d, 0x9e, + 0x0d, 0xa8, 0xc0, 0xd4, 0x6f, 0x4c, 0x31, 0x8c, + 0xef, 0xe4, 0xaf, 0xe3, 0xb6, 0xb8, 0x55, 0x1f, +}; + +TO_EC_STR_PARAM(sm2p192test_p); + +#define CURVE_SM2P192TEST_P_BITLEN 192 +static const u8 sm2p192test_p_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(sm2p192test_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 sm2p192test_r[] = { + 0x42, 0x49, 0x0b, 0x01, 0xc1, 0x74, 0xe2, 0x61, + 0xf2, 0x57, 0x3f, 0x2b, 0x90, 0xb3, 0xce, 0x73, + 0x10, 0x1b, 0x50, 0x1c, 0x49, 0x47, 0xaa, 0xe1, +}; + +TO_EC_STR_PARAM(sm2p192test_r); + +static const u8 sm2p192test_r_square[] = { + 0xa8, 0x9e, 0x36, 0x8f, 0xa3, 0xa3, 0x5f, 0x24, + 0x9c, 0xeb, 0x34, 0x38, 0x97, 0x1b, 0x28, 0x1a, + 0xab, 0xb1, 0xe2, 0x02, 0xf0, 0x63, 0x41, 0x2c, +}; + +TO_EC_STR_PARAM(sm2p192test_r_square); + +static const u8 sm2p192test_mpinv[] = { + 0xc9, 0x95, 0x02, 0xed, 0x2b, 0x73, 0x19, 0x21, +}; + +TO_EC_STR_PARAM(sm2p192test_mpinv); + +static const u8 sm2p192test_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p192test_p_shift); + +static const u8 sm2p192test_p_normalized[] = { + 0xbd, 0xb6, 0xf4, 0xfe, 0x3e, 0x8b, 0x1d, 0x9e, + 0x0d, 0xa8, 0xc0, 0xd4, 0x6f, 0x4c, 0x31, 0x8c, + 0xef, 0xe4, 0xaf, 0xe3, 0xb6, 0xb8, 0x55, 0x1f, +}; + +TO_EC_STR_PARAM(sm2p192test_p_normalized); + +static const u8 sm2p192test_p_reciprocal[] = { + 0x59, 0x71, 0xf0, 0x4b, 0x2a, 0x1c, 0x05, 0xe0, +}; + +TO_EC_STR_PARAM(sm2p192test_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 sm2p192test_r[] = { + 0x42, 0x49, 0x0b, 0x01, 0xc1, 0x74, 0xe2, 0x61, + 0xf2, 0x57, 0x3f, 0x2b, 0x90, 0xb3, 0xce, 0x73, + 0x10, 0x1b, 0x50, 0x1c, 0x49, 0x47, 0xaa, 0xe1, +}; + +TO_EC_STR_PARAM(sm2p192test_r); + +static const u8 sm2p192test_r_square[] = { + 0xa8, 0x9e, 0x36, 0x8f, 0xa3, 0xa3, 0x5f, 0x24, + 0x9c, 0xeb, 0x34, 0x38, 0x97, 0x1b, 0x28, 0x1a, + 0xab, 0xb1, 0xe2, 0x02, 0xf0, 0x63, 0x41, 0x2c, +}; + +TO_EC_STR_PARAM(sm2p192test_r_square); + +static const u8 sm2p192test_mpinv[] = { + 0x2b, 0x73, 0x19, 0x21, +}; + +TO_EC_STR_PARAM(sm2p192test_mpinv); + +static const u8 sm2p192test_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p192test_p_shift); + +static const u8 sm2p192test_p_normalized[] = { + 0xbd, 0xb6, 0xf4, 0xfe, 0x3e, 0x8b, 0x1d, 0x9e, + 0x0d, 0xa8, 0xc0, 0xd4, 0x6f, 0x4c, 0x31, 0x8c, + 0xef, 0xe4, 0xaf, 0xe3, 0xb6, 0xb8, 0x55, 0x1f, +}; + +TO_EC_STR_PARAM(sm2p192test_p_normalized); + +static const u8 sm2p192test_p_reciprocal[] = { + 0x59, 0x71, 0xf0, 0x4b, +}; + +TO_EC_STR_PARAM(sm2p192test_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 sm2p192test_r[] = { + 0x42, 0x49, 0x0b, 0x01, 0xc1, 0x74, 0xe2, 0x61, + 0xf2, 0x57, 0x3f, 0x2b, 0x90, 0xb3, 0xce, 0x73, + 0x10, 0x1b, 0x50, 0x1c, 0x49, 0x47, 0xaa, 0xe1, +}; + +TO_EC_STR_PARAM(sm2p192test_r); + +static const u8 sm2p192test_r_square[] = { + 0xa8, 0x9e, 0x36, 0x8f, 0xa3, 0xa3, 0x5f, 0x24, + 0x9c, 0xeb, 0x34, 0x38, 0x97, 0x1b, 0x28, 0x1a, + 0xab, 0xb1, 0xe2, 0x02, 0xf0, 0x63, 0x41, 0x2c, +}; + +TO_EC_STR_PARAM(sm2p192test_r_square); + +static const u8 sm2p192test_mpinv[] = { + 0x19, 0x21, +}; + +TO_EC_STR_PARAM(sm2p192test_mpinv); + +static const u8 sm2p192test_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p192test_p_shift); + +static const u8 sm2p192test_p_normalized[] = { + 0xbd, 0xb6, 0xf4, 0xfe, 0x3e, 0x8b, 0x1d, 0x9e, + 0x0d, 0xa8, 0xc0, 0xd4, 0x6f, 0x4c, 0x31, 0x8c, + 0xef, 0xe4, 0xaf, 0xe3, 0xb6, 0xb8, 0x55, 0x1f, +}; + +TO_EC_STR_PARAM(sm2p192test_p_normalized); + +static const u8 sm2p192test_p_reciprocal[] = { + 0x59, 0x71, +}; + +TO_EC_STR_PARAM(sm2p192test_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 sm2p192test_a[] = { + 0xbb, 0x8e, 0x5e, 0x8f, 0xbc, 0x11, 0x5e, 0x13, + 0x9f, 0xe6, 0xa8, 0x14, 0xfe, 0x48, 0xaa, 0xa6, + 0xf0, 0xad, 0xa1, 0xaa, 0x5d, 0xf9, 0x19, 0x85, +}; + +TO_EC_STR_PARAM(sm2p192test_a); + +static const u8 sm2p192test_b[] = { + 0x18, 0x54, 0xbe, 0xbd, 0xc3, 0x1b, 0x21, 0xb7, + 0xae, 0xfc, 0x80, 0xab, 0x0e, 0xcd, 0x10, 0xd5, + 0xb1, 0xb3, 0x30, 0x8e, 0x6d, 0xbf, 0x11, 0xc1, +}; + +TO_EC_STR_PARAM(sm2p192test_b); + +#define CURVE_SM2P192TEST_CURVE_ORDER_BITLEN 192 +static const u8 sm2p192test_curve_order[] = { + 0xbd, 0xb6, 0xf4, 0xfe, 0x3e, 0x8b, 0x1d, 0x9e, + 0x0d, 0xa8, 0xc0, 0xd4, 0x0f, 0xc9, 0x62, 0x19, + 0x5d, 0xfa, 0xe7, 0x6f, 0x56, 0x56, 0x46, 0x77, +}; + +TO_EC_STR_PARAM(sm2p192test_curve_order); + +static const u8 sm2p192test_gx[] = { + 0x4a, 0xd5, 0xf7, 0x04, 0x8d, 0xe7, 0x09, 0xad, + 0x51, 0x23, 0x6d, 0xe6, 0x5e, 0x4d, 0x4b, 0x48, + 0x2c, 0x83, 0x6d, 0xc6, 0xe4, 0x10, 0x66, 0x40, +}; + +TO_EC_STR_PARAM(sm2p192test_gx); + +static const u8 sm2p192test_gy[] = { + 0x02, 0xbb, 0x3a, 0x02, 0xd4, 0xaa, 0xad, 0xac, + 0xae, 0x24, 0x81, 0x7a, 0x4c, 0xa3, 0xa1, 0xb0, + 0x14, 0xb5, 0x27, 0x04, 0x32, 0xdb, 0x27, 0xd2, +}; + +TO_EC_STR_PARAM(sm2p192test_gy); + +static const u8 sm2p192test_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p192test_gz); + +static const u8 sm2p192test_gen_order[] = { + 0xbd, 0xb6, 0xf4, 0xfe, 0x3e, 0x8b, 0x1d, 0x9e, + 0x0d, 0xa8, 0xc0, 0xd4, 0x0f, 0xc9, 0x62, 0x19, + 0x5d, 0xfa, 0xe7, 0x6f, 0x56, 0x56, 0x46, 0x77, +}; + +TO_EC_STR_PARAM(sm2p192test_gen_order); + +#define CURVE_SM2P192TEST_Q_BITLEN 192 +static const u8 sm2p192test_gen_order_bitlen[] = { + 0xc0, +}; + +TO_EC_STR_PARAM(sm2p192test_gen_order_bitlen); + +static const u8 sm2p192test_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p192test_cofactor); + +static const u8 sm2p192test_alpha_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(sm2p192test_alpha_montgomery, 0); + +static const u8 sm2p192test_gamma_montgomery[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(sm2p192test_gamma_montgomery, 0); + +static const u8 sm2p192test_alpha_edwards[] = { + 0x00, +}; +TO_EC_STR_PARAM_FIXED_SIZE(sm2p192test_alpha_edwards, 0); + +static const u8 sm2p192test_name[] = "SM2P192TEST"; +TO_EC_STR_PARAM(sm2p192test_name); + +static const u8 sm2p192test_oid[] = ""; +TO_EC_STR_PARAM(sm2p192test_oid); + +static const ec_str_params sm2p192test_str_params = { + .p = &sm2p192test_p_str_param, + .p_bitlen = &sm2p192test_p_bitlen_str_param, + .r = &sm2p192test_r_str_param, + .r_square = &sm2p192test_r_square_str_param, + .mpinv = &sm2p192test_mpinv_str_param, + .p_shift = &sm2p192test_p_shift_str_param, + .p_normalized = &sm2p192test_p_normalized_str_param, + .p_reciprocal = &sm2p192test_p_reciprocal_str_param, + .a = &sm2p192test_a_str_param, + .b = &sm2p192test_b_str_param, + .curve_order = &sm2p192test_curve_order_str_param, + .gx = &sm2p192test_gx_str_param, + .gy = &sm2p192test_gy_str_param, + .gz = &sm2p192test_gz_str_param, + .gen_order = &sm2p192test_gen_order_str_param, + .gen_order_bitlen = &sm2p192test_gen_order_bitlen_str_param, + .cofactor = &sm2p192test_cofactor_str_param, + .alpha_montgomery = &sm2p192test_alpha_montgomery_str_param, + .gamma_montgomery = &sm2p192test_gamma_montgomery_str_param, + .alpha_edwards = &sm2p192test_alpha_edwards_str_param, + .oid = &sm2p192test_oid_str_param, + .name = &sm2p192test_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SM2P192TEST_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SM2P192TEST_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SM2P192TEST_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SM2P192TEST_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SM2P192TEST_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SM2P192TEST_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 12) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 12 +#endif + +#endif /* __EC_PARAMS_SM2P192TEST_H__ */ + +#endif /* WITH_CURVE_SM2P192TEST */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_sm2p256test.h b/crypto/libecc/include/libecc/curves/known/ec_params_sm2p256test.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_sm2p256test.h @@ -0,0 +1,349 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SM2P256TEST + +#ifndef __EC_PARAMS_SM2P256TEST_H__ +#define __EC_PARAMS_SM2P256TEST_H__ +#include + +static const u8 sm2p256test_p[] = { + 0x85, 0x42, 0xd6, 0x9e, 0x4c, 0x04, 0x4f, 0x18, + 0xe8, 0xb9, 0x24, 0x35, 0xbf, 0x6f, 0xf7, 0xde, + 0x45, 0x72, 0x83, 0x91, 0x5c, 0x45, 0x51, 0x7d, + 0x72, 0x2e, 0xdb, 0x8b, 0x08, 0xf1, 0xdf, 0xc3, +}; + +TO_EC_STR_PARAM(sm2p256test_p); + +#define CURVE_SM2P256TEST_P_BITLEN 256 +static const u8 sm2p256test_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(sm2p256test_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 sm2p256test_r[] = { + 0x7a, 0xbd, 0x29, 0x61, 0xb3, 0xfb, 0xb0, 0xe7, + 0x17, 0x46, 0xdb, 0xca, 0x40, 0x90, 0x08, 0x21, + 0xba, 0x8d, 0x7c, 0x6e, 0xa3, 0xba, 0xae, 0x82, + 0x8d, 0xd1, 0x24, 0x74, 0xf7, 0x0e, 0x20, 0x3d, +}; + +TO_EC_STR_PARAM(sm2p256test_r); + +static const u8 sm2p256test_r_square[] = { + 0x0a, 0xe5, 0x52, 0x29, 0x28, 0x3c, 0xd9, 0x6a, + 0xee, 0x4d, 0x87, 0xda, 0x90, 0xd8, 0xc6, 0x6c, + 0xeb, 0x37, 0x2d, 0xa8, 0x3f, 0xc9, 0xc6, 0x36, + 0x3d, 0x57, 0x9c, 0x46, 0xf6, 0xde, 0x18, 0xf2, +}; + +TO_EC_STR_PARAM(sm2p256test_r_square); + +static const u8 sm2p256test_mpinv[] = { + 0xa2, 0xa0, 0x38, 0x0c, 0x50, 0xf7, 0x77, 0x15, +}; + +TO_EC_STR_PARAM(sm2p256test_mpinv); + +static const u8 sm2p256test_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256test_p_shift); + +static const u8 sm2p256test_p_normalized[] = { + 0x85, 0x42, 0xd6, 0x9e, 0x4c, 0x04, 0x4f, 0x18, + 0xe8, 0xb9, 0x24, 0x35, 0xbf, 0x6f, 0xf7, 0xde, + 0x45, 0x72, 0x83, 0x91, 0x5c, 0x45, 0x51, 0x7d, + 0x72, 0x2e, 0xdb, 0x8b, 0x08, 0xf1, 0xdf, 0xc3, +}; + +TO_EC_STR_PARAM(sm2p256test_p_normalized); + +static const u8 sm2p256test_p_reciprocal[] = { + 0xeb, 0xc9, 0x56, 0x3c, 0x60, 0x57, 0x6b, 0xb9, +}; + +TO_EC_STR_PARAM(sm2p256test_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 sm2p256test_r[] = { + 0x7a, 0xbd, 0x29, 0x61, 0xb3, 0xfb, 0xb0, 0xe7, + 0x17, 0x46, 0xdb, 0xca, 0x40, 0x90, 0x08, 0x21, + 0xba, 0x8d, 0x7c, 0x6e, 0xa3, 0xba, 0xae, 0x82, + 0x8d, 0xd1, 0x24, 0x74, 0xf7, 0x0e, 0x20, 0x3d, +}; + +TO_EC_STR_PARAM(sm2p256test_r); + +static const u8 sm2p256test_r_square[] = { + 0x0a, 0xe5, 0x52, 0x29, 0x28, 0x3c, 0xd9, 0x6a, + 0xee, 0x4d, 0x87, 0xda, 0x90, 0xd8, 0xc6, 0x6c, + 0xeb, 0x37, 0x2d, 0xa8, 0x3f, 0xc9, 0xc6, 0x36, + 0x3d, 0x57, 0x9c, 0x46, 0xf6, 0xde, 0x18, 0xf2, +}; + +TO_EC_STR_PARAM(sm2p256test_r_square); + +static const u8 sm2p256test_mpinv[] = { + 0x50, 0xf7, 0x77, 0x15, +}; + +TO_EC_STR_PARAM(sm2p256test_mpinv); + +static const u8 sm2p256test_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256test_p_shift); + +static const u8 sm2p256test_p_normalized[] = { + 0x85, 0x42, 0xd6, 0x9e, 0x4c, 0x04, 0x4f, 0x18, + 0xe8, 0xb9, 0x24, 0x35, 0xbf, 0x6f, 0xf7, 0xde, + 0x45, 0x72, 0x83, 0x91, 0x5c, 0x45, 0x51, 0x7d, + 0x72, 0x2e, 0xdb, 0x8b, 0x08, 0xf1, 0xdf, 0xc3, +}; + +TO_EC_STR_PARAM(sm2p256test_p_normalized); + +static const u8 sm2p256test_p_reciprocal[] = { + 0xeb, 0xc9, 0x56, 0x3c, +}; + +TO_EC_STR_PARAM(sm2p256test_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 sm2p256test_r[] = { + 0x7a, 0xbd, 0x29, 0x61, 0xb3, 0xfb, 0xb0, 0xe7, + 0x17, 0x46, 0xdb, 0xca, 0x40, 0x90, 0x08, 0x21, + 0xba, 0x8d, 0x7c, 0x6e, 0xa3, 0xba, 0xae, 0x82, + 0x8d, 0xd1, 0x24, 0x74, 0xf7, 0x0e, 0x20, 0x3d, +}; + +TO_EC_STR_PARAM(sm2p256test_r); + +static const u8 sm2p256test_r_square[] = { + 0x0a, 0xe5, 0x52, 0x29, 0x28, 0x3c, 0xd9, 0x6a, + 0xee, 0x4d, 0x87, 0xda, 0x90, 0xd8, 0xc6, 0x6c, + 0xeb, 0x37, 0x2d, 0xa8, 0x3f, 0xc9, 0xc6, 0x36, + 0x3d, 0x57, 0x9c, 0x46, 0xf6, 0xde, 0x18, 0xf2, +}; + +TO_EC_STR_PARAM(sm2p256test_r_square); + +static const u8 sm2p256test_mpinv[] = { + 0x77, 0x15, +}; + +TO_EC_STR_PARAM(sm2p256test_mpinv); + +static const u8 sm2p256test_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256test_p_shift); + +static const u8 sm2p256test_p_normalized[] = { + 0x85, 0x42, 0xd6, 0x9e, 0x4c, 0x04, 0x4f, 0x18, + 0xe8, 0xb9, 0x24, 0x35, 0xbf, 0x6f, 0xf7, 0xde, + 0x45, 0x72, 0x83, 0x91, 0x5c, 0x45, 0x51, 0x7d, + 0x72, 0x2e, 0xdb, 0x8b, 0x08, 0xf1, 0xdf, 0xc3, +}; + +TO_EC_STR_PARAM(sm2p256test_p_normalized); + +static const u8 sm2p256test_p_reciprocal[] = { + 0xeb, 0xc9, +}; + +TO_EC_STR_PARAM(sm2p256test_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 sm2p256test_a[] = { + 0x78, 0x79, 0x68, 0xb4, 0xfa, 0x32, 0xc3, 0xfd, + 0x24, 0x17, 0x84, 0x2e, 0x73, 0xbb, 0xfe, 0xff, + 0x2f, 0x3c, 0x84, 0x8b, 0x68, 0x31, 0xd7, 0xe0, + 0xec, 0x65, 0x22, 0x8b, 0x39, 0x37, 0xe4, 0x98, +}; + +TO_EC_STR_PARAM(sm2p256test_a); + +static const u8 sm2p256test_b[] = { + 0x63, 0xe4, 0xc6, 0xd3, 0xb2, 0x3b, 0x0c, 0x84, + 0x9c, 0xf8, 0x42, 0x41, 0x48, 0x4b, 0xfe, 0x48, + 0xf6, 0x1d, 0x59, 0xa5, 0xb1, 0x6b, 0xa0, 0x6e, + 0x6e, 0x12, 0xd1, 0xda, 0x27, 0xc5, 0x24, 0x9a, +}; + +TO_EC_STR_PARAM(sm2p256test_b); + +#define CURVE_SM2P256TEST_CURVE_ORDER_BITLEN 256 +static const u8 sm2p256test_order[] = { + 0x85, 0x42, 0xd6, 0x9e, 0x4c, 0x04, 0x4f, 0x18, + 0xe8, 0xb9, 0x24, 0x35, 0xbf, 0x6f, 0xf7, 0xdd, + 0x29, 0x77, 0x20, 0x63, 0x04, 0x85, 0x62, 0x8d, + 0x5a, 0xe7, 0x4e, 0xe7, 0xc3, 0x2e, 0x79, 0xb7, +}; + +TO_EC_STR_PARAM(sm2p256test_order); + +static const u8 sm2p256test_gx[] = { + 0x42, 0x1d, 0xeb, 0xd6, 0x1b, 0x62, 0xea, 0xb6, + 0x74, 0x64, 0x34, 0xeb, 0xc3, 0xcc, 0x31, 0x5e, + 0x32, 0x22, 0x0b, 0x3b, 0xad, 0xd5, 0x0b, 0xdc, + 0x4c, 0x4e, 0x6c, 0x14, 0x7f, 0xed, 0xd4, 0x3d, +}; + +TO_EC_STR_PARAM(sm2p256test_gx); + +static const u8 sm2p256test_gy[] = { + 0x06, 0x80, 0x51, 0x2b, 0xcb, 0xb4, 0x2c, 0x07, + 0xd4, 0x73, 0x49, 0xd2, 0x15, 0x3b, 0x70, 0xc4, + 0xe5, 0xd7, 0xfd, 0xfc, 0xbf, 0xa3, 0x6e, 0xa1, + 0xa8, 0x58, 0x41, 0xb9, 0xe4, 0x6e, 0x09, 0xa2, +}; + +TO_EC_STR_PARAM(sm2p256test_gy); + +static const u8 sm2p256test_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p256test_gz); + +static const u8 sm2p256test_gen_order[] = { + 0x85, 0x42, 0xd6, 0x9e, 0x4c, 0x04, 0x4f, 0x18, + 0xe8, 0xb9, 0x24, 0x35, 0xbf, 0x6f, 0xf7, 0xdd, + 0x29, 0x77, 0x20, 0x63, 0x04, 0x85, 0x62, 0x8d, + 0x5a, 0xe7, 0x4e, 0xe7, 0xc3, 0x2e, 0x79, 0xb7, +}; + +TO_EC_STR_PARAM(sm2p256test_gen_order); + +#define CURVE_SM2P256TEST_Q_BITLEN 256 +static const u8 sm2p256test_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(sm2p256test_gen_order_bitlen); + +static const u8 sm2p256test_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p256test_cofactor); + + +static const u8 sm2p256test_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(sm2p256test_alpha_montgomery, 0); + +static const u8 sm2p256test_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(sm2p256test_gamma_montgomery, 0); + +static const u8 sm2p256test_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(sm2p256test_alpha_edwards, 0); + + +static const u8 sm2p256test_name[] = "SM2P256TEST"; +TO_EC_STR_PARAM(sm2p256test_name); + +static const u8 sm2p256test_oid[] = "sm2-iso14888-test-curve"; +TO_EC_STR_PARAM(sm2p256test_oid); + +static const ec_str_params sm2p256test_str_params = { + .p = &sm2p256test_p_str_param, + .p_bitlen = &sm2p256test_p_bitlen_str_param, + .r = &sm2p256test_r_str_param, + .r_square = &sm2p256test_r_square_str_param, + .mpinv = &sm2p256test_mpinv_str_param, + .p_shift = &sm2p256test_p_shift_str_param, + .p_normalized = &sm2p256test_p_normalized_str_param, + .p_reciprocal = &sm2p256test_p_reciprocal_str_param, + .a = &sm2p256test_a_str_param, + .b = &sm2p256test_b_str_param, + .curve_order = &sm2p256test_order_str_param, + .gx = &sm2p256test_gx_str_param, + .gy = &sm2p256test_gy_str_param, + .gz = &sm2p256test_gz_str_param, + .gen_order = &sm2p256test_gen_order_str_param, + .gen_order_bitlen = &sm2p256test_gen_order_bitlen_str_param, + .cofactor = &sm2p256test_cofactor_str_param, + .alpha_montgomery = &sm2p256test_alpha_montgomery_str_param, + .gamma_montgomery = &sm2p256test_gamma_montgomery_str_param, + .alpha_edwards = &sm2p256test_alpha_edwards_str_param, + .oid = &sm2p256test_oid_str_param, + .name = &sm2p256test_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SM2P256TEST_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SM2P256TEST_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SM2P256TEST_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SM2P256TEST_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SM2P256TEST_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SM2P256TEST_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 24) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 24 +#endif +#if (MAX_CURVE_NAME_LEN < 24) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 24 +#endif + +#endif /* __EC_PARAMS_SM2P256TEST_H__ */ + +#endif /* WITH_CURVE_SM2P256TEST */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_sm2p256v1.h b/crypto/libecc/include/libecc/curves/known/ec_params_sm2p256v1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_sm2p256v1.h @@ -0,0 +1,350 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_SM2P256V1 + +#ifndef __EC_PARAMS_SM2P256V1_H__ +#define __EC_PARAMS_SM2P256V1_H__ +#include + +static const u8 sm2p256v1_p[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(sm2p256v1_p); + +#define CURVE_SM2P256V1_P_BITLEN 256 +static const u8 sm2p256v1_p_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 sm2p256v1_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_r); + +static const u8 sm2p256v1_r_square[] = { + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, +}; + +TO_EC_STR_PARAM(sm2p256v1_r_square); + +static const u8 sm2p256v1_mpinv[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_mpinv); + +static const u8 sm2p256v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_shift); + +static const u8 sm2p256v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_normalized); + +static const u8 sm2p256v1_p_reciprocal[] = { + 0x01, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 sm2p256v1_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_r); + +static const u8 sm2p256v1_r_square[] = { + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, +}; + +TO_EC_STR_PARAM(sm2p256v1_r_square); + +static const u8 sm2p256v1_mpinv[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_mpinv); + +static const u8 sm2p256v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_shift); + +static const u8 sm2p256v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_normalized); + +static const u8 sm2p256v1_p_reciprocal[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 sm2p256v1_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_r); + +static const u8 sm2p256v1_r_square[] = { + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, +}; + +TO_EC_STR_PARAM(sm2p256v1_r_square); + +static const u8 sm2p256v1_mpinv[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_mpinv); + +static const u8 sm2p256v1_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_shift); + +static const u8 sm2p256v1_p_normalized[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + +}; + +TO_EC_STR_PARAM(sm2p256v1_p_normalized); + +static const u8 sm2p256v1_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(sm2p256v1_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 sm2p256v1_a[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, +}; + +TO_EC_STR_PARAM(sm2p256v1_a); + +static const u8 sm2p256v1_b[] = { + 0x28, 0xe9, 0xfa, 0x9e, 0x9d, 0x9f, 0x5e, 0x34, + 0x4d, 0x5a, 0x9e, 0x4b, 0xcf, 0x65, 0x09, 0xa7, + 0xf3, 0x97, 0x89, 0xf5, 0x15, 0xab, 0x8f, 0x92, + 0xdd, 0xbc, 0xbd, 0x41, 0x4d, 0x94, 0x0e, 0x93, +}; + +TO_EC_STR_PARAM(sm2p256v1_b); + +#define CURVE_SM2P256V1_CURVE_ORDER_BITLEN 256 +static const u8 sm2p256v1_curve_order[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x72, 0x03, 0xdf, 0x6b, 0x21, 0xc6, 0x05, 0x2b, + 0x53, 0xbb, 0xf4, 0x09, 0x39, 0xd5, 0x41, 0x23, +}; + +TO_EC_STR_PARAM(sm2p256v1_curve_order); + +static const u8 sm2p256v1_gx[] = { + 0x32, 0xc4, 0xae, 0x2c, 0x1f, 0x19, 0x81, 0x19, + 0x5f, 0x99, 0x04, 0x46, 0x6a, 0x39, 0xc9, 0x94, + 0x8f, 0xe3, 0x0b, 0xbf, 0xf2, 0x66, 0x0b, 0xe1, + 0x71, 0x5a, 0x45, 0x89, 0x33, 0x4c, 0x74, 0xc7, +}; + +TO_EC_STR_PARAM(sm2p256v1_gx); + +static const u8 sm2p256v1_gy[] = { + 0xbc, 0x37, 0x36, 0xa2, 0xf4, 0xf6, 0x77, 0x9c, + 0x59, 0xbd, 0xce, 0xe3, 0x6b, 0x69, 0x21, 0x53, + 0xd0, 0xa9, 0x87, 0x7c, 0xc6, 0x2a, 0x47, 0x40, + 0x02, 0xdf, 0x32, 0xe5, 0x21, 0x39, 0xf0, 0xa0, +}; + +TO_EC_STR_PARAM(sm2p256v1_gy); + +static const u8 sm2p256v1_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_gz); + +static const u8 sm2p256v1_gen_order[] = { + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x72, 0x03, 0xdf, 0x6b, 0x21, 0xc6, 0x05, 0x2b, + 0x53, 0xbb, 0xf4, 0x09, 0x39, 0xd5, 0x41, 0x23, +}; + +TO_EC_STR_PARAM(sm2p256v1_gen_order); + +#define CURVE_SM2P256V1_Q_BITLEN 256 +static const u8 sm2p256v1_gen_order_bitlen[] = { + 0x01, 0x00, +}; + +TO_EC_STR_PARAM(sm2p256v1_gen_order_bitlen); + +static const u8 sm2p256v1_cofactor[] = { + 0x01, +}; + +TO_EC_STR_PARAM(sm2p256v1_cofactor); + + +static const u8 sm2p256v1_alpha_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(sm2p256v1_alpha_montgomery, 0); + +static const u8 sm2p256v1_gamma_montgomery[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(sm2p256v1_gamma_montgomery, 0); + +static const u8 sm2p256v1_alpha_edwards[] = { + 0x00, +}; + +TO_EC_STR_PARAM_FIXED_SIZE(sm2p256v1_alpha_edwards, 0); + + +static const u8 sm2p256v1_name[] = "SM2P256V1"; +TO_EC_STR_PARAM(sm2p256v1_name); + +static const u8 sm2p256v1_oid[] = "1.2.156.10197.1.301"; +TO_EC_STR_PARAM(sm2p256v1_oid); + +static const ec_str_params sm2p256v1_str_params = { + .p = &sm2p256v1_p_str_param, + .p_bitlen = &sm2p256v1_p_bitlen_str_param, + .r = &sm2p256v1_r_str_param, + .r_square = &sm2p256v1_r_square_str_param, + .mpinv = &sm2p256v1_mpinv_str_param, + .p_shift = &sm2p256v1_p_shift_str_param, + .p_normalized = &sm2p256v1_p_normalized_str_param, + .p_reciprocal = &sm2p256v1_p_reciprocal_str_param, + .a = &sm2p256v1_a_str_param, + .b = &sm2p256v1_b_str_param, + .curve_order = &sm2p256v1_curve_order_str_param, + .gx = &sm2p256v1_gx_str_param, + .gy = &sm2p256v1_gy_str_param, + .gz = &sm2p256v1_gz_str_param, + .gen_order = &sm2p256v1_gen_order_str_param, + .gen_order_bitlen = &sm2p256v1_gen_order_bitlen_str_param, + .cofactor = &sm2p256v1_cofactor_str_param, + .alpha_montgomery = &sm2p256v1_alpha_montgomery_str_param, + .gamma_montgomery = &sm2p256v1_gamma_montgomery_str_param, + .alpha_edwards = &sm2p256v1_alpha_edwards_str_param, + .oid = &sm2p256v1_oid_str_param, + .name = &sm2p256v1_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_SM2P256V1_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_SM2P256V1_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_SM2P256V1_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_SM2P256V1_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_SM2P256V1_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_SM2P256V1_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 21) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 21 +#endif +#if (MAX_CURVE_NAME_LEN < 10) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 10 +#endif + +#endif /* __EC_PARAMS_SM2P256V1_H__ */ + +#endif /* WITH_CURVE_SM2P256V1 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_wei25519.h b/crypto/libecc/include/libecc/curves/known/ec_params_wei25519.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_wei25519.h @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_WEI25519 + +#ifndef __EC_PARAMS_WEI25519_H__ +#define __EC_PARAMS_WEI25519_H__ +#include +static const u8 wei25519_p[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, +}; + +TO_EC_STR_PARAM(wei25519_p); + +#define CURVE_WEI25519_P_BITLEN 255 +static const u8 wei25519_p_bitlen[] = { + 0xff, +}; + +TO_EC_STR_PARAM(wei25519_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 wei25519_r[] = { + 0x26, +}; + +TO_EC_STR_PARAM(wei25519_r); + +static const u8 wei25519_r_square[] = { + 0x05, 0xa4, +}; + +TO_EC_STR_PARAM(wei25519_r_square); + +static const u8 wei25519_mpinv[] = { + 0x86, 0xbc, 0xa1, 0xaf, 0x28, 0x6b, 0xca, 0x1b, +}; + +TO_EC_STR_PARAM(wei25519_mpinv); + +static const u8 wei25519_p_shift[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei25519_p_shift); + +static const u8 wei25519_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, +}; + +TO_EC_STR_PARAM(wei25519_p_normalized); + +static const u8 wei25519_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei25519_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 wei25519_r[] = { + 0x26, +}; + +TO_EC_STR_PARAM(wei25519_r); + +static const u8 wei25519_r_square[] = { + 0x05, 0xa4, +}; + +TO_EC_STR_PARAM(wei25519_r_square); + +static const u8 wei25519_mpinv[] = { + 0x28, 0x6b, 0xca, 0x1b, +}; + +TO_EC_STR_PARAM(wei25519_mpinv); + +static const u8 wei25519_p_shift[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei25519_p_shift); + +static const u8 wei25519_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, +}; + +TO_EC_STR_PARAM(wei25519_p_normalized); + +static const u8 wei25519_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei25519_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 wei25519_r[] = { + 0x26, +}; + +TO_EC_STR_PARAM(wei25519_r); + +static const u8 wei25519_r_square[] = { + 0x05, 0xa4, +}; + +TO_EC_STR_PARAM(wei25519_r_square); + +static const u8 wei25519_mpinv[] = { + 0xca, 0x1b, +}; + +TO_EC_STR_PARAM(wei25519_mpinv); + +static const u8 wei25519_p_shift[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei25519_p_shift); + +static const u8 wei25519_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, +}; + +TO_EC_STR_PARAM(wei25519_p_normalized); + +static const u8 wei25519_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei25519_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 wei25519_a[] = { + 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x98, 0x49, 0x14, 0xa1, 0x44, +}; + +TO_EC_STR_PARAM(wei25519_a); + +static const u8 wei25519_b[] = { + 0x7b, 0x42, 0x5e, 0xd0, 0x97, 0xb4, 0x25, 0xed, + 0x09, 0x7b, 0x42, 0x5e, 0xd0, 0x97, 0xb4, 0x25, + 0xed, 0x09, 0x7b, 0x42, 0x5e, 0xd0, 0x97, 0xb4, + 0x26, 0x0b, 0x5e, 0x9c, 0x77, 0x10, 0xc8, 0x64, +}; + +TO_EC_STR_PARAM(wei25519_b); + +#define CURVE_WEI25519_CURVE_ORDER_BITLEN 256 +static const u8 wei25519_curve_order[] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa6, 0xf7, 0xce, 0xf5, 0x17, 0xbc, 0xe6, 0xb2, + 0xc0, 0x93, 0x18, 0xd2, 0xe7, 0xae, 0x9f, 0x68, +}; + +TO_EC_STR_PARAM(wei25519_curve_order); + +static const u8 wei25519_gx[] = { + 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xad, 0x24, 0x5a, +}; + +TO_EC_STR_PARAM(wei25519_gx); + +static const u8 wei25519_gy[] = { + 0x20, 0xae, 0x19, 0xa1, 0xb8, 0xa0, 0x86, 0xb4, + 0xe0, 0x1e, 0xdd, 0x2c, 0x77, 0x48, 0xd1, 0x4c, + 0x92, 0x3d, 0x4d, 0x7e, 0x6d, 0x7c, 0x61, 0xb2, + 0x29, 0xe9, 0xc5, 0xa2, 0x7e, 0xce, 0xd3, 0xd9, +}; + +TO_EC_STR_PARAM(wei25519_gy); + +static const u8 wei25519_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(wei25519_gz); + +static const u8 wei25519_gen_order[] = { + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0xde, 0xf9, 0xde, 0xa2, 0xf7, 0x9c, 0xd6, + 0x58, 0x12, 0x63, 0x1a, 0x5c, 0xf5, 0xd3, 0xed, +}; + +TO_EC_STR_PARAM(wei25519_gen_order); + +#define CURVE_WEI25519_Q_BITLEN 253 +static const u8 wei25519_gen_order_bitlen[] = { + 0xfd, +}; + +TO_EC_STR_PARAM(wei25519_gen_order_bitlen); + +static const u8 wei25519_cofactor[] = { + 0x08, +}; + +TO_EC_STR_PARAM(wei25519_cofactor); + +static const u8 wei25519_alpha_montgomery[] = { + 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xad, 0x24, 0x51, +}; + +TO_EC_STR_PARAM(wei25519_alpha_montgomery); + +static const u8 wei25519_gamma_montgomery[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei25519_gamma_montgomery); + +static const u8 wei25519_alpha_edwards[] = { + 0x70, 0xd9, 0x12, 0x0b, 0x9f, 0x5f, 0xf9, 0x44, + 0x2d, 0x84, 0xf7, 0x23, 0xfc, 0x03, 0xb0, 0x81, + 0x3a, 0x5e, 0x2c, 0x2e, 0xb4, 0x82, 0xe5, 0x7d, + 0x33, 0x91, 0xfb, 0x55, 0x00, 0xba, 0x81, 0xe7 +}; + +TO_EC_STR_PARAM(wei25519_alpha_edwards); + +static const u8 wei25519_name[] = "WEI25519"; +TO_EC_STR_PARAM(wei25519_name); + +static const u8 wei25519_oid[] = ""; +TO_EC_STR_PARAM(wei25519_oid); + +static const ec_str_params wei25519_str_params = { + .p = &wei25519_p_str_param, + .p_bitlen = &wei25519_p_bitlen_str_param, + .r = &wei25519_r_str_param, + .r_square = &wei25519_r_square_str_param, + .mpinv = &wei25519_mpinv_str_param, + .p_shift = &wei25519_p_shift_str_param, + .p_normalized = &wei25519_p_normalized_str_param, + .p_reciprocal = &wei25519_p_reciprocal_str_param, + .a = &wei25519_a_str_param, + .b = &wei25519_b_str_param, + .curve_order = &wei25519_curve_order_str_param, + .gx = &wei25519_gx_str_param, + .gy = &wei25519_gy_str_param, + .gz = &wei25519_gz_str_param, + .gen_order = &wei25519_gen_order_str_param, + .gen_order_bitlen = &wei25519_gen_order_bitlen_str_param, + .cofactor = &wei25519_cofactor_str_param, + .alpha_montgomery = &wei25519_alpha_montgomery_str_param, + .gamma_montgomery = &wei25519_gamma_montgomery_str_param, + .alpha_edwards = &wei25519_alpha_edwards_str_param, + .oid = &wei25519_oid_str_param, + .name = &wei25519_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_WEI25519_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_WEI25519_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_WEI25519_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_WEI25519_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_WEI25519_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_WEI25519_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 22) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 22 +#endif + +#endif /* __EC_PARAMS_WEI25519_H__ */ + +#endif /* WITH_CURVE_WEI25519 */ diff --git a/crypto/libecc/include/libecc/curves/known/ec_params_wei448.h b/crypto/libecc/include/libecc/curves/known/ec_params_wei448.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/known/ec_params_wei448.h @@ -0,0 +1,391 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_CURVE_WEI448 + +#ifndef __EC_PARAMS_WEI448_H__ +#define __EC_PARAMS_WEI448_H__ +#include +static const u8 wei448_p[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(wei448_p); + +#define CURVE_WEI448_P_BITLEN 448 +static const u8 wei448_p_bitlen[] = { + 0x01, 0xc0, +}; + +TO_EC_STR_PARAM(wei448_p_bitlen); + +#if (WORD_BYTES == 8) /* 64-bit words */ +static const u8 wei448_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(wei448_r); + +static const u8 wei448_r_square[] = { + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, +}; + +TO_EC_STR_PARAM(wei448_r_square); + +static const u8 wei448_mpinv[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei448_mpinv); + +static const u8 wei448_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei448_p_shift); + +static const u8 wei448_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(wei448_p_normalized); + +static const u8 wei448_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei448_p_reciprocal); + +#elif (WORD_BYTES == 4) /* 32-bit words */ +static const u8 wei448_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(wei448_r); + +static const u8 wei448_r_square[] = { + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, +}; + +TO_EC_STR_PARAM(wei448_r_square); + +static const u8 wei448_mpinv[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei448_mpinv); + +static const u8 wei448_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei448_p_shift); + +static const u8 wei448_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(wei448_p_normalized); + +static const u8 wei448_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei448_p_reciprocal); + +#elif (WORD_BYTES == 2) /* 16-bit words */ +static const u8 wei448_r[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(wei448_r); + +static const u8 wei448_r_square[] = { + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, +}; + +TO_EC_STR_PARAM(wei448_r_square); + +static const u8 wei448_mpinv[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei448_mpinv); + +static const u8 wei448_p_shift[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei448_p_shift); + +static const u8 wei448_p_normalized[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +TO_EC_STR_PARAM(wei448_p_normalized); + +static const u8 wei448_p_reciprocal[] = { + 0x00, +}; + +TO_EC_STR_PARAM(wei448_p_reciprocal); + +#else /* unknown word size */ +#error "Unsupported word size" +#endif + +static const u8 wei448_a[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xa9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1a, 0x76, 0xd4, 0x1f, +}; + +TO_EC_STR_PARAM(wei448_a); + +static const u8 wei448_b[] = { + 0x5e, 0xd0, 0x97, 0xb4, 0x25, 0xed, 0x09, 0x7b, + 0x42, 0x5e, 0xd0, 0x97, 0xb4, 0x25, 0xed, 0x09, + 0x7b, 0x42, 0x5e, 0xd0, 0x97, 0xb4, 0x25, 0xed, + 0x09, 0x7b, 0x42, 0x5e, 0x71, 0xc7, 0x1c, 0x71, + 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, + 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, + 0x1c, 0x72, 0xc8, 0x7b, 0x7c, 0xc6, 0x9f, 0x70, +}; + +TO_EC_STR_PARAM(wei448_b); + +#define CURVE_WEI448_CURVE_ORDER_BITLEN 448 +static const u8 wei448_curve_order[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfd, 0xf3, 0x28, 0x8f, 0xa7, + 0x11, 0x3b, 0x6d, 0x26, 0xbb, 0x58, 0xda, 0x40, + 0x85, 0xb3, 0x09, 0xca, 0x37, 0x16, 0x3d, 0x54, + 0x8d, 0xe3, 0x0a, 0x4a, 0xad, 0x61, 0x13, 0xcc, +}; + +TO_EC_STR_PARAM(wei448_curve_order); + +static const u8 wei448_gx[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x91, +}; + +TO_EC_STR_PARAM(wei448_gx); + +static const u8 wei448_gy[] = { + 0x7d, 0x23, 0x5d, 0x12, 0x95, 0xf5, 0xb1, 0xf6, + 0x6c, 0x98, 0xab, 0x6e, 0x58, 0x32, 0x6f, 0xce, + 0xcb, 0xae, 0x5d, 0x34, 0xf5, 0x55, 0x45, 0xd0, + 0x60, 0xf7, 0x5d, 0xc2, 0x8d, 0xf3, 0xf6, 0xed, + 0xb8, 0x02, 0x7e, 0x23, 0x46, 0x43, 0x0d, 0x21, + 0x13, 0x12, 0xc4, 0xb1, 0x50, 0x67, 0x7a, 0xf7, + 0x6f, 0xd7, 0x22, 0x3d, 0x45, 0x7b, 0x5b, 0x1a, +}; + +TO_EC_STR_PARAM(wei448_gy); + +static const u8 wei448_gz[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +}; + +TO_EC_STR_PARAM(wei448_gz); + +static const u8 wei448_gen_order[] = { + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7c, 0xca, 0x23, 0xe9, + 0xc4, 0x4e, 0xdb, 0x49, 0xae, 0xd6, 0x36, 0x90, + 0x21, 0x6c, 0xc2, 0x72, 0x8d, 0xc5, 0x8f, 0x55, + 0x23, 0x78, 0xc2, 0x92, 0xab, 0x58, 0x44, 0xf3, +}; + +TO_EC_STR_PARAM(wei448_gen_order); + +#define CURVE_WEI448_Q_BITLEN 446 +static const u8 wei448_gen_order_bitlen[] = { + 0x01, 0xbe, +}; + +TO_EC_STR_PARAM(wei448_gen_order_bitlen); + +static const u8 wei448_cofactor[] = { + 0x04, +}; + +TO_EC_STR_PARAM(wei448_cofactor); + +static const u8 wei448_alpha_montgomery[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x8c, +}; + +TO_EC_STR_PARAM(wei448_alpha_montgomery); + +static const u8 wei448_gamma_montgomery[] = { + 0x01, +}; + +TO_EC_STR_PARAM(wei448_gamma_montgomery); + +static const u8 wei448_alpha_edwards[] = { + 0x45, 0xb2, 0xc5, 0xf7, 0xd6, 0x49, 0xee, 0xd0, + 0x77, 0xed, 0x1a, 0xe4, 0x5f, 0x44, 0xd5, 0x41, + 0x43, 0xe3, 0x4f, 0x71, 0x4b, 0x71, 0xaa, 0x96, + 0xc9, 0x45, 0xaf, 0x01, 0x2d, 0x18, 0x29, 0x75, + 0x07, 0x34, 0xcd, 0xe9, 0xfa, 0xdd, 0xbd, 0xa4, + 0xc0, 0x66, 0xf7, 0xed, 0x54, 0x41, 0x9c, 0xa5, + 0x2c, 0x85, 0xde, 0x1e, 0x8a, 0xae, 0x4e, 0x6c, +}; + +TO_EC_STR_PARAM(wei448_alpha_edwards); + +static const u8 wei448_name[] = "WEI448"; +TO_EC_STR_PARAM(wei448_name); + +static const u8 wei448_oid[] = ""; +TO_EC_STR_PARAM(wei448_oid); + +static const ec_str_params wei448_str_params = { + .p = &wei448_p_str_param, + .p_bitlen = &wei448_p_bitlen_str_param, + .r = &wei448_r_str_param, + .r_square = &wei448_r_square_str_param, + .mpinv = &wei448_mpinv_str_param, + .p_shift = &wei448_p_shift_str_param, + .p_normalized = &wei448_p_normalized_str_param, + .p_reciprocal = &wei448_p_reciprocal_str_param, + .a = &wei448_a_str_param, + .b = &wei448_b_str_param, + .curve_order = &wei448_curve_order_str_param, + .gx = &wei448_gx_str_param, + .gy = &wei448_gy_str_param, + .gz = &wei448_gz_str_param, + .gen_order = &wei448_gen_order_str_param, + .gen_order_bitlen = &wei448_gen_order_bitlen_str_param, + .cofactor = &wei448_cofactor_str_param, + .alpha_montgomery = &wei448_alpha_montgomery_str_param, + .gamma_montgomery = &wei448_gamma_montgomery_str_param, + .alpha_edwards = &wei448_alpha_edwards_str_param, + .oid = &wei448_oid_str_param, + .name = &wei448_name_str_param, +}; + +/* + * Compute max bit length of all curves for p and q + */ +#ifndef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN 0 +#endif +#if (CURVES_MAX_P_BIT_LEN < CURVE_WEI448_P_BITLEN) +#undef CURVES_MAX_P_BIT_LEN +#define CURVES_MAX_P_BIT_LEN CURVE_WEI448_P_BITLEN +#endif +#ifndef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN 0 +#endif +#if (CURVES_MAX_Q_BIT_LEN < CURVE_WEI448_Q_BITLEN) +#undef CURVES_MAX_Q_BIT_LEN +#define CURVES_MAX_Q_BIT_LEN CURVE_WEI448_Q_BITLEN +#endif +#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0 +#endif +#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_WEI448_CURVE_ORDER_BITLEN) +#undef CURVES_MAX_CURVE_ORDER_BIT_LEN +#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_WEI448_CURVE_ORDER_BITLEN +#endif + +/* + * Compute and adapt max name and oid length + */ +#ifndef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 0 +#endif +#ifndef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 0 +#endif +#if (MAX_CURVE_OID_LEN < 1) +#undef MAX_CURVE_OID_LEN +#define MAX_CURVE_OID_LEN 1 +#endif +#if (MAX_CURVE_NAME_LEN < 20) +#undef MAX_CURVE_NAME_LEN +#define MAX_CURVE_NAME_LEN 20 +#endif + +#endif /* __EC_PARAMS_WEI448_H__ */ + +#endif /* WITH_CURVE_WEI448 */ diff --git a/crypto/libecc/include/libecc/curves/prj_pt.h b/crypto/libecc/include/libecc/curves/prj_pt.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/curves/prj_pt.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRJ_PT_H__ +#define __PRJ_PT_H__ + +#include +#include +#include +#include +#include +#include + +typedef struct { + fp X; + fp Y; + fp Z; + ec_shortw_crv_src_t crv; + word_t magic; +} prj_pt; + +typedef prj_pt *prj_pt_t; +typedef const prj_pt *prj_pt_src_t; + +typedef enum { + PUBLIC_PT = 0, + PRIVATE_PT = 1 +} prj_pt_sensitivity; + +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_check_initialized(prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_init(prj_pt_t in, ec_shortw_crv_src_t curve); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_init_from_coords(prj_pt_t in, + ec_shortw_crv_src_t curve, + fp_src_t xcoord, + fp_src_t ycoord, fp_src_t zcoord); +void prj_pt_uninit(prj_pt_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_zero(prj_pt_t out); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_iszero(prj_pt_src_t in, int *iszero); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_is_on_curve(prj_pt_src_t in, int *on_curve); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_copy(prj_pt_t out, prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_to_aff(aff_pt_t out, prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_unique(prj_pt_t out, prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int ec_shortw_aff_to_prj(prj_pt_t out, aff_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_cmp(prj_pt_src_t in1, prj_pt_src_t in2, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_eq_or_opp(prj_pt_src_t in1, prj_pt_src_t in2, int *eq_or_opp); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_neg(prj_pt_t out, prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_add(prj_pt_t sum, prj_pt_src_t in1, prj_pt_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_dbl(prj_pt_t dbl, prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_mul(prj_pt_t out, nn_src_t m, prj_pt_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_mul_blind(prj_pt_t out, nn_src_t m, prj_pt_src_t in); +/* XXX: WARNING: this function must only be used on public points! */ +ATTRIBUTE_WARN_UNUSED_RET int _prj_pt_unprotected_mult(prj_pt_t out, nn_src_t cofactor, prj_pt_src_t public_in); +ATTRIBUTE_WARN_UNUSED_RET int check_prj_pt_order(prj_pt_src_t in_shortw, nn_src_t in_isorder, prj_pt_sensitivity s, int *check); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_import_from_buf(prj_pt_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_shortw_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_import_from_aff_buf(prj_pt_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_shortw_crv_src_t crv); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_export_to_buf(prj_pt_src_t pt, u8 *pt_buf, u32 pt_buf_len); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_export_to_aff_buf(prj_pt_src_t pt, u8 *pt_buf, u32 pt_buf_len); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_edwards_to_prj_pt_shortw(aff_pt_edwards_src_t in_edwards, + ec_shortw_crv_src_t shortw_crv, + prj_pt_t out_shortw, fp_src_t alpha); +ATTRIBUTE_WARN_UNUSED_RET int aff_pt_montgomery_to_prj_pt_shortw(aff_pt_montgomery_src_t in_montgomery, + ec_shortw_crv_src_t shortw_crv, + prj_pt_t out_shortw); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_shortw_to_aff_pt_edwards(prj_pt_src_t in_shortw, + ec_edwards_crv_src_t edwards_crv, + aff_pt_edwards_t out_edwards, + fp_src_t alpha); +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_shortw_to_aff_pt_montgomery(prj_pt_src_t in_shortw, + ec_montgomery_crv_src_t montgomery_crv, + aff_pt_montgomery_t out_montgomery); + +#endif /* __PRJ_PT_H__ */ diff --git a/crypto/libecc/include/libecc/ecdh/ecccdh.h b/crypto/libecc/include/libecc/ecdh/ecccdh.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/ecdh/ecccdh.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_ECCCDH) + + +#ifndef __ECCCDH_H__ +#define __ECCCDH_H__ + +#include +#include +#include + +/* Get the size of the shared secret associated to the curve parameters. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_shared_secret_size(const ec_params *params, u8 *size); + +/* Get the size of the serialized public key associated to the curve parameters. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_serialized_pub_key_size(const ec_params *params, u8 *size); + +/* Initialize ECCCDH public key from an initialized private key. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +/* Generate a key pair for ECCCDH given curve parameters as input. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_gen_key_pair(ec_key_pair *kp, const ec_params *params); + +/* Create a key pair from a serialized private key. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_import_key_pair_from_priv_key_buf(ec_key_pair *kp, const ec_params *params, const u8 *priv_key_buf, u8 priv_key_buf_len); + +/* Serialize our public key in a buffer. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_serialize_pub_key(const ec_pub_key *our_pub_key, u8 *buff, u8 buff_len); + +/* Derive the ECCCDH shared secret and store it in a buffer given the peer + * public key and our private key. + * + * The shared_secret_len length MUST be exactly equal to the expected shared secret size: + * the function fails otherwise. + */ +ATTRIBUTE_WARN_UNUSED_RET int ecccdh_derive_secret(const ec_priv_key *our_priv_key, const u8 *peer_pub_key, u8 peer_pub_key_len, u8 *shared_secret, u8 shared_secret_len); + +#endif /* __ECCCDH_H__ */ + +#endif /* WITH_ECCCDH */ diff --git a/crypto/libecc/include/libecc/ecdh/ecdh.h b/crypto/libecc/include/libecc/ecdh/ecdh.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/ecdh/ecdh.h @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + + +#ifndef __ECDH_H__ +#define __ECDH_H__ + +#include +#include + +#endif /* __ECDH_H__ */ diff --git a/crypto/libecc/include/libecc/ecdh/x25519_448.h b/crypto/libecc/include/libecc/ecdh/x25519_448.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/ecdh/x25519_448.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +#if defined(WITH_X25519) || defined(WITH_X448) + +#ifndef __X25519_448_H__ +#define __X25519_448_H__ + +#include + +/* Size of X25519 values */ +#define X25519_SIZE 32 +/* Size of X448 values */ +#define X448_SIZE 56 + +#if defined(WITH_X25519) +/* The X25519 function as specified in RFC7748. + * + * NOTE: the user of this primitive should be warned and aware that is is not fully compliant with the + * RFC7748 description as u coordinates on the quadratic twist of the curve are rejected as well as non + * canonical u. + * See the explanations in the implementation of the function for more context and explanations. + */ +ATTRIBUTE_WARN_UNUSED_RET int x25519(const u8 k[X25519_SIZE], const u8 u[X25519_SIZE], u8 res[X25519_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int x25519_gen_priv_key(u8 priv_key[X25519_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int x25519_init_pub_key(const u8 priv_key[X25519_SIZE], u8 pub_key[X25519_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int x25519_derive_secret(const u8 priv_key[X25519_SIZE], const u8 peer_pub_key[X25519_SIZE], u8 shared_secret[X25519_SIZE]); +#endif + +#if defined(WITH_X448) +/* The X448 function as specified in RFC7748. + * + * NOTE: the user of this primitive should be warned and aware that is is not fully compliant with the + * RFC7748 description as u coordinates on the quadratic twist of the curve are rejected as well as non + * canonical u. + * See the explanations in the implementation of the function for more context and explanations. + */ +ATTRIBUTE_WARN_UNUSED_RET int x448(const u8 k[X448_SIZE], const u8 u[X448_SIZE], u8 res[X448_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int x448_gen_priv_key(u8 priv_key[X448_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int x448_init_pub_key(const u8 priv_key[X448_SIZE], u8 pub_key[X448_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int x448_derive_secret(const u8 priv_key[X448_SIZE], const u8 peer_pub_key[X448_SIZE], u8 shared_secret[X448_SIZE]); +#endif + +#endif /* __X25519_448_H__ */ + +#endif /* defined(WITH_X25519) || defined(WITH_X448) */ diff --git a/crypto/libecc/include/libecc/external_deps/print.h b/crypto/libecc/include/libecc/external_deps/print.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/external_deps/print.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRINT_H__ +#define __PRINT_H__ + +/* Explicitly include the inttypes here */ +#ifdef WITH_STDLIB +/* We include inttypes.h for the PRI* macros */ +#include +#endif + +#if (__GNUC__ * 10 + __GNUC_MINOR__ >= 42) +#define LIBECC_FORMAT_FUNCTION(F,A) __attribute__((format(__printf__, F, A))) +#else +#define LIBECC_FORMAT_FUNCTION(F,A) +#endif + +LIBECC_FORMAT_FUNCTION(1, 2) +void ext_printf(const char *format, ...); + +#endif /* __PRINT_H__ */ diff --git a/crypto/libecc/include/libecc/external_deps/rand.h b/crypto/libecc/include/libecc/external_deps/rand.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/external_deps/rand.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __RAND_H__ +#define __RAND_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int get_random(unsigned char *buf, u16 len); + +#endif /* __RAND_H__ */ diff --git a/crypto/libecc/include/libecc/external_deps/time.h b/crypto/libecc/include/libecc/external_deps/time.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/external_deps/time.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __TIME_H__ +#define __TIME_H__ + +#include + +ATTRIBUTE_WARN_UNUSED_RET int get_ms_time(u64 *time); + +#endif /* __TIME_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp.h b/crypto/libecc/include/libecc/fp/fp.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_H__ +#define __FP_H__ + +#include +#include +#include +#include +#include +#include + +/* + * First, definition of our Fp context, containing all the elements + * needed to efficiently implement Fp operations. + */ + +typedef struct { + /* + * Value of p (extended by one word to handle + * overflows in Fp). p_bitlen provides its + * length in bit. + */ + nn p; + bitcnt_t p_bitlen; + + /* -p^-1 mod 2^(bitsizeof(word_t)) */ + word_t mpinv; + + /* 2^bitsizeof(p) mod p */ + nn r; + + /* 2^(2*bitsizeof(p)) mod p */ + nn r_square; + + /* clz(p) */ + bitcnt_t p_shift; + /* p << p_shift */ + nn p_normalized; + /* floor(B^3/(DMSW(p_normalized) + 1)) - B */ + word_t p_reciprocal; + + word_t magic; +} fp_ctx; + +typedef fp_ctx *fp_ctx_t; +typedef const fp_ctx *fp_ctx_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int fp_ctx_check_initialized(fp_ctx_src_t ctx); +ATTRIBUTE_WARN_UNUSED_RET int fp_ctx_init(fp_ctx_t ctx, nn_src_t p, bitcnt_t p_bitlen, + nn_src_t r, nn_src_t r_square, + word_t mpinv, + bitcnt_t p_shift, nn_src_t p_normalized, word_t p_reciprocal); +ATTRIBUTE_WARN_UNUSED_RET int fp_ctx_init_from_p(fp_ctx_t ctx, nn_src_t p); + +/* + * Then the definition of our Fp elements + */ + +typedef struct { + nn fp_val; + fp_ctx_src_t ctx; + word_t magic; +} fp; + +typedef fp *fp_t; +typedef const fp *fp_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int fp_check_initialized(fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_init(fp_t A, fp_ctx_src_t fpctx); +ATTRIBUTE_WARN_UNUSED_RET int fp_init_from_buf(fp_t A, fp_ctx_src_t fpctx, const u8 *buf, u16 buflen); +void fp_uninit(fp_t A); +ATTRIBUTE_WARN_UNUSED_RET int fp_set_nn(fp_t out, nn_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_zero(fp_t out); +ATTRIBUTE_WARN_UNUSED_RET int fp_one(fp_t out); +ATTRIBUTE_WARN_UNUSED_RET int fp_set_word_value(fp_t out, word_t val); +ATTRIBUTE_WARN_UNUSED_RET int fp_cmp(fp_src_t in1, fp_src_t in2, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int fp_iszero(fp_src_t in, int *iszero); +ATTRIBUTE_WARN_UNUSED_RET int fp_copy(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_tabselect(fp_t out, u8 idx, fp_src_t *tab, u8 tabsize); +ATTRIBUTE_WARN_UNUSED_RET int fp_eq_or_opp(fp_src_t in1, fp_src_t in2, int *eq_or_opp); +ATTRIBUTE_WARN_UNUSED_RET int fp_import_from_buf(fp_t out_fp, const u8 *buf, u16 buflen); +ATTRIBUTE_WARN_UNUSED_RET int fp_export_to_buf(u8 *buf, u16 buflen, fp_src_t in_fp); + +#endif /* __FP_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_add.h b/crypto/libecc/include/libecc/fp/fp_add.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_add.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_ADD_H__ +#define __FP_ADD_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_add(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_inc(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_sub(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_dec(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_neg(fp_t out, fp_src_t in); + +#endif /* __FP_ADD_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_config.h b/crypto/libecc/include/libecc/fp/fp_config.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_config.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_CONFIG_H__ +#define __FP_CONFIG_H__ + +#include + +#ifndef FP_MAX_BIT_LEN +#define FP_MAX_BIT_LEN (NN_MAX_BIT_LEN - 1) +#endif + +#endif /* __FP_CONFIG_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_montgomery.h b/crypto/libecc/include/libecc/fp/fp_montgomery.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_montgomery.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_MONTGOMERY_H__ +#define __FP_MONTGOMERY_H__ + +#include +#include +#include +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_add_monty(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_sub_monty(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_mul_monty(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_sqr_monty(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_div_monty(fp_t out, fp_src_t in1, fp_src_t in2); + +#endif /* __FP_MONTGOMERY_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_mul.h b/crypto/libecc/include/libecc/fp/fp_mul.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_mul.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_MUL_H__ +#define __FP_MUL_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_mul(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_sqr(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_inv(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_inv_word(fp_t out, word_t w); +ATTRIBUTE_WARN_UNUSED_RET int fp_div(fp_t out, fp_src_t num, fp_src_t den); + +#endif /* __FP_MUL_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_mul_redc1.h b/crypto/libecc/include/libecc/fp/fp_mul_redc1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_mul_redc1.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_MUL_REDC1_H__ +#define __FP_MUL_REDC1_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_mul_redc1(fp_t out, fp_src_t in1, fp_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int fp_sqr_redc1(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_redcify(fp_t out, fp_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int fp_unredcify(fp_t out, fp_src_t in); + +#endif /* __FP_MUL_REDC1_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_pow.h b/crypto/libecc/include/libecc/fp/fp_pow.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_pow.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_POW_H__ +#define __FP_POW_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_pow(fp_t out, fp_src_t base, nn_src_t exp); + +#endif /* __FP_POW_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_rand.h b/crypto/libecc/include/libecc/fp/fp_rand.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_rand.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_RAND_H__ +#define __FP_RAND_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_get_random(fp_t out, fp_ctx_src_t ctx); + +#endif /* __FP_RAND_H__ */ diff --git a/crypto/libecc/include/libecc/fp/fp_sqrt.h b/crypto/libecc/include/libecc/fp/fp_sqrt.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/fp/fp_sqrt.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __FP_SQRT_H__ +#define __FP_SQRT_H__ +#include +#include +#include +#include + +ATTRIBUTE_WARN_UNUSED_RET int fp_sqrt(fp_t sqrt1, fp_t sqrt2, fp_src_t n); + +#endif /* __FP_SQRT_H__ */ diff --git a/crypto/libecc/include/libecc/hash/bash.h b/crypto/libecc/include/libecc/hash/bash.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/bash.h @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __BASH_H__ +#define __BASH_H__ + +#include + +/* + * This is an implementation of the BASH hash functions family (for sizes 224, 256, 384 and 512) + * following the standard STB 34.101.77-2020 (http://apmi.bsu.by/assets/files/std/bash-spec24.pdf). + * An english version of the specifications exist here: https://eprint.iacr.org/2016/587.pdf + */ + +#define _BASH_ROTHI_(x, y) (((x) << (y)) | ((x) >> ((sizeof(u64) * 8) - (y)))) + +/* We handle the case where one of the shifts is more than 64-bit: in this + * case, behaviour is undefined as per ANSI C definition. In this case, we + * return the untouched input. + */ +#define BASH_ROTHI(x, y) ((((y) < (sizeof(u64) * 8)) && ((y) > 0)) ? (_BASH_ROTHI_(x, y)) : (x)) + +/* + * Round transformation of the state. Notations are the + * same as the ones used in: + * https://eprint.iacr.org/2016/587.pdf + */ +#define BASH_SLICES_X 3 +#define BASH_SLICES_Y 8 +#define BASH_ROT_ROUNDS 8 +#define BASH_ROT_IDX 4 +#define BASH_ROUNDS 24 + +#define BASH_L3_S3(W0, W1, W2, m1, n1, m2, n2) do { \ + u64 T0, T1, T2; \ + T0 = BASH_ROTHI(W0, m1); \ + W0 = (W0 ^ W1 ^ W2); \ + T1 = (W1 ^ BASH_ROTHI(W0, n1)); \ + W1 = (T0 ^ T1); \ + W2 = (W2 ^ BASH_ROTHI(W2, m2) ^ BASH_ROTHI(T1, n2)); \ + T0 = (~(W2)); \ + T1 = (W0 | W2); \ + T2 = (W0 & W1); \ + T0 = (T0 | W1); \ + W1 = (W1 ^ T1); \ + W2 = (W2 ^ T2); \ + W0 = (W0 ^ T0); \ +} while(0) + +#define BASH_PERMUTE(S) do { \ + u64 S_[BASH_SLICES_X * BASH_SLICES_Y]; \ + IGNORE_RET_VAL(local_memcpy(S_, S, sizeof(S_))); \ + S[ 0] = S_[15]; S[ 1] = S_[10]; S[ 2] = S_[ 9]; S[ 3] = S_[12]; \ + S[ 4] = S_[11]; S[ 5] = S_[14]; S[ 6] = S_[13]; S[ 7] = S_[ 8]; \ + S[ 8] = S_[17]; S[ 9] = S_[16]; S[10] = S_[19]; S[11] = S_[18]; \ + S[12] = S_[21]; S[13] = S_[20]; S[14] = S_[23]; S[15] = S_[22]; \ + S[16] = S_[ 6]; S[17] = S_[ 3]; S[18] = S_[ 0]; S[19] = S_[ 5]; \ + S[20] = S_[ 2]; S[21] = S_[ 7]; S[22] = S_[ 4]; S[23] = S_[ 1]; \ +} while(0) + +static const u64 bash_rc[BASH_ROUNDS] = +{ + 0x3bf5080ac8ba94b1ULL, + 0xc1d1659c1bbd92f6ULL, + 0x60e8b2ce0ddec97bULL, + 0xec5fb8fe790fbc13ULL, + 0xaa043de6436706a7ULL, + 0x8929ff6a5e535bfdULL, + 0x98bf1e2c50c97550ULL, + 0x4c5f8f162864baa8ULL, + 0x262fc78b14325d54ULL, + 0x1317e3c58a192eaaULL, + 0x098bf1e2c50c9755ULL, + 0xd8ee19681d669304ULL, + 0x6c770cb40eb34982ULL, + 0x363b865a0759a4c1ULL, + 0xc73622b47c4c0aceULL, + 0x639b115a3e260567ULL, + 0xede6693460f3da1dULL, + 0xaad8d5034f9935a0ULL, + 0x556c6a81a7cc9ad0ULL, + 0x2ab63540d3e64d68ULL, + 0x155b1aa069f326b4ULL, + 0x0aad8d5034f9935aULL, + 0x0556c6a81a7cc9adULL, + 0xde8082cd72debc78ULL, +}; + +static const u8 bash_rot[BASH_ROT_ROUNDS][BASH_ROT_IDX] = +{ + { 8, 53, 14, 1 }, + { 56, 51, 34, 7 }, + { 8, 37, 46, 49 }, + { 56, 3, 2, 23 }, + { 8, 21, 14, 33 }, + { 56, 19, 34, 39 }, + { 8, 5, 46, 17 }, + { 56, 35, 2, 55 }, +}; + +/* Macro to handle endianness conversion */ +#define SWAP64(A) do { \ + A = ((A) << 56 | ((A) & 0xff00) << 40 | ((A) & 0xff0000) << 24 | \ + ((A) & 0xff000000) << 8 | ((A) >> 8 & 0xff000000) | \ + ((A) >> 24 & 0xff0000) | ((A) >> 40 & 0xff00) | (A) >> 56); \ +} while(0) + +/* The main Bash-f core as descibed in the specification. */ +#define BASHF(S, end) do { \ + unsigned int round, i; \ + /* Swap endianness if necessary */ \ + if(end == BASH_BIG){ \ + for(i = 0; i < (BASH_SLICES_X * BASH_SLICES_Y); i++){ \ + SWAP64(S[i]); \ + } \ + } \ + for(round = 0; round < BASH_ROUNDS; round++){ \ + unsigned int v; \ + for(v = 0; v < 8; v++){ \ + BASH_L3_S3(S[v], S[v+8], S[v+16], bash_rot[v][0], bash_rot[v][1], \ + bash_rot[v][2], bash_rot[v][3]); \ + } \ + BASH_PERMUTE(S); \ + S[23] ^= bash_rc[round]; \ + } \ + /* Swap back endianness if necessary */ \ + if(end == BASH_BIG){ \ + for(i = 0; i < (BASH_SLICES_X * BASH_SLICES_Y); i++){ \ + SWAP64(S[i]); \ + } \ + } \ +} while(0) + +typedef enum { + BASH_LITTLE = 0, + BASH_BIG = 1, +} bash_endianness; + +typedef struct bash_context_ { + u8 bash_digest_size; + u8 bash_block_size; + bash_endianness bash_endian; + /* Local counter */ + u64 bash_total; + /* Bash state */ + u64 bash_state[BASH_SLICES_X * BASH_SLICES_Y]; + /* Initialization magic value */ + u64 magic; +} bash_context; + +ATTRIBUTE_WARN_UNUSED_RET int _bash_init(bash_context *ctx, uint8_t digest_size); +ATTRIBUTE_WARN_UNUSED_RET int _bash_update(bash_context *ctx, const uint8_t *buf, uint32_t buflen); +ATTRIBUTE_WARN_UNUSED_RET int _bash_finalize(bash_context *ctx, uint8_t *output); + +#endif /* __BASH_H__ */ diff --git a/crypto/libecc/include/libecc/hash/bash224.h b/crypto/libecc/include/libecc/hash/bash224.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/bash224.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH224 + +#ifndef __BASH224_H__ +#define __BASH224_H__ + +#include +#include +#include + +#define BASH224_BLOCK_SIZE 136 +#define BASH224_DIGEST_SIZE 28 +#define BASH224_DIGEST_SIZE_BITS 224 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < BASH224_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE BASH224_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < BASH224_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS BASH224_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < BASH224_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE BASH224_BLOCK_SIZE +#endif + +#define BASH224_HASH_MAGIC ((word_t)(0xaf3456ff1200ba5bULL)) +#define BASH224_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BASH224_HASH_MAGIC), ret, err) + +typedef bash_context bash224_context; + +ATTRIBUTE_WARN_UNUSED_RET int bash224_init(bash224_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int bash224_update(bash224_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int bash224_final(bash224_context *ctx, u8 output[BASH224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash224(const u8 *input, u32 ilen, u8 output[BASH224_DIGEST_SIZE]); + +#endif /* __BASH224_H__ */ +#endif /* WITH_HASH_BASH224 */ diff --git a/crypto/libecc/include/libecc/hash/bash256.h b/crypto/libecc/include/libecc/hash/bash256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/bash256.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH256 + +#ifndef __BASH256_H__ +#define __BASH256_H__ + +#include +#include +#include + +#define BASH256_BLOCK_SIZE 128 +#define BASH256_DIGEST_SIZE 32 +#define BASH256_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < BASH256_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE BASH256_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < BASH256_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS BASH256_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < BASH256_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE BASH256_BLOCK_SIZE +#endif + +#define BASH256_HASH_MAGIC ((word_t)(0x72839273873434aaULL)) +#define BASH256_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BASH256_HASH_MAGIC), ret, err) + +typedef bash_context bash256_context; + +ATTRIBUTE_WARN_UNUSED_RET int bash256_init(bash256_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int bash256_update(bash256_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int bash256_final(bash256_context *ctx, u8 output[BASH256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash256(const u8 *input, u32 ilen, u8 output[BASH256_DIGEST_SIZE]); + +#endif /* __BASH256_H__ */ +#endif /* WITH_HASH_BASH256 */ diff --git a/crypto/libecc/include/libecc/hash/bash384.h b/crypto/libecc/include/libecc/hash/bash384.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/bash384.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH384 + +#ifndef __BASH384_H__ +#define __BASH384_H__ + +#include +#include +#include + +#define BASH384_BLOCK_SIZE 96 +#define BASH384_DIGEST_SIZE 48 +#define BASH384_DIGEST_SIZE_BITS 384 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < BASH384_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE BASH384_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < BASH384_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS BASH384_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < BASH384_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE BASH384_BLOCK_SIZE +#endif + +#define BASH384_HASH_MAGIC ((word_t)(0x391af28773938752ULL)) +#define BASH384_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BASH384_HASH_MAGIC), ret, err) + +typedef bash_context bash384_context; + +ATTRIBUTE_WARN_UNUSED_RET int bash384_init(bash384_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int bash384_update(bash384_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int bash384_final(bash384_context *ctx, u8 output[BASH384_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash384_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH384_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash384(const u8 *input, u32 ilen, u8 output[BASH384_DIGEST_SIZE]); + +#endif /* __BASH384_H__ */ +#endif /* WITH_HASH_BASH384 */ diff --git a/crypto/libecc/include/libecc/hash/bash512.h b/crypto/libecc/include/libecc/hash/bash512.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/bash512.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH512 + +#ifndef __BASH512_H__ +#define __BASH512_H__ + +#include +#include +#include + +#define BASH512_BLOCK_SIZE 64 +#define BASH512_DIGEST_SIZE 64 +#define BASH512_DIGEST_SIZE_BITS 512 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < BASH512_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE BASH512_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < BASH512_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS BASH512_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < BASH512_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE BASH512_BLOCK_SIZE +#endif + +#define BASH512_HASH_MAGIC ((word_t)(0xcd12faec63111283ULL)) +#define BASH512_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BASH512_HASH_MAGIC), ret, err) + +typedef bash_context bash512_context; + +ATTRIBUTE_WARN_UNUSED_RET int bash512_init(bash512_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int bash512_update(bash512_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int bash512_final(bash512_context *ctx, u8 output[BASH512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int bash512(const u8 *input, u32 ilen, u8 output[BASH512_DIGEST_SIZE]); + +#endif /* __BASH512_H__ */ +#endif /* WITH_HASH_BASH512 */ diff --git a/crypto/libecc/include/libecc/hash/belt-hash.h b/crypto/libecc/include/libecc/hash/belt-hash.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/belt-hash.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BELT_HASH + +#ifndef __BELT_HASH_H__ +#define __BELT_HASH_H__ + +#include +#include + +/* + * 32-bit integer manipulation macros + */ +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros + */ +#ifndef GET_UINT64_BE +#define GET_UINT64_BE(n,b,i) \ +do { \ + (n) = ( ((u64) (b)[(i) ]) << 56 ) \ + | ( ((u64) (b)[(i) + 1]) << 48 ) \ + | ( ((u64) (b)[(i) + 2]) << 40 ) \ + | ( ((u64) (b)[(i) + 3]) << 32 ) \ + | ( ((u64) (b)[(i) + 4]) << 24 ) \ + | ( ((u64) (b)[(i) + 5]) << 16 ) \ + | ( ((u64) (b)[(i) + 6]) << 8 ) \ + | ( ((u64) (b)[(i) + 7]) ); \ +} while( 0 ) +#endif /* GET_UINT64_BE */ + +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef GET_UINT64_LE +#define GET_UINT64_LE(n,b,i) \ +do { \ + (n) = ( ((u64) (b)[(i) + 7]) << 56 ) \ + | ( ((u64) (b)[(i) + 6]) << 48 ) \ + | ( ((u64) (b)[(i) + 5]) << 40 ) \ + | ( ((u64) (b)[(i) + 4]) << 32 ) \ + | ( ((u64) (b)[(i) + 3]) << 24 ) \ + | ( ((u64) (b)[(i) + 2]) << 16 ) \ + | ( ((u64) (b)[(i) + 1]) << 8 ) \ + | ( ((u64) (b)[(i) ]) ); \ +} while( 0 ) +#endif /* GET_UINT64_LE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + + +#define BELT_HASH_BLOCK_SIZE 32 +#define BELT_HASH_DIGEST_SIZE 32 +#define BELT_HASH_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < BELT_HASH_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE BELT_HASH_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < BELT_HASH_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS BELT_HASH_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < BELT_HASH_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE BELT_HASH_BLOCK_SIZE +#endif + +#define BELT_HASH_HASH_MAGIC ((word_t)(0x3278323b37829187ULL)) +#define BELT_HASH_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BELT_HASH_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 belt_hash_total; + /* Internal state */ + u8 belt_hash_state[BELT_HASH_BLOCK_SIZE]; + /* Internal encryption data */ + u8 belt_hash_h[BELT_HASH_BLOCK_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 belt_hash_buffer[BELT_HASH_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} belt_hash_context; + +#define BELT_BLOCK_LEN 16 /* The BELT encryption block length */ +#define BELT_KEY_SCHED_LEN 32 /* The BELT key schedul length */ + +ATTRIBUTE_WARN_UNUSED_RET int belt_init(const u8 *k, u32 k_len, u8 ks[BELT_KEY_SCHED_LEN]); +void belt_encrypt(const u8 in[BELT_BLOCK_LEN], u8 out[BELT_BLOCK_LEN], const u8 ks[BELT_KEY_SCHED_LEN]); +void belt_decrypt(const u8 in[BELT_BLOCK_LEN], u8 out[BELT_BLOCK_LEN], const u8 ks[BELT_KEY_SCHED_LEN]); + +ATTRIBUTE_WARN_UNUSED_RET int belt_hash_init(belt_hash_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int belt_hash_update(belt_hash_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int belt_hash_final(belt_hash_context *ctx, u8 output[BELT_HASH_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int belt_hash_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BELT_HASH_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int belt_hash(const u8 *input, u32 ilen, u8 output[BELT_HASH_DIGEST_SIZE]); + +#endif /* __BELT_HASH_H__ */ +#endif /* WITH_HASH_BELT_HASH */ diff --git a/crypto/libecc/include/libecc/hash/hash_algs.h b/crypto/libecc/include/libecc/hash/hash_algs.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/hash_algs.h @@ -0,0 +1,554 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __HASH_ALGS_H__ +#define __HASH_ALGS_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (MAX_DIGEST_SIZE == 0) +#error "It seems you disabled all hash algorithms in lib_ecc_config.h" +#endif + +#if (MAX_BLOCK_SIZE == 0) +#error "It seems you disabled all hash algorithms in lib_ecc_config.h" +#endif + +typedef union { +#ifdef SHA224_BLOCK_SIZE + sha224_context sha224; +#endif +#ifdef SHA256_BLOCK_SIZE + sha256_context sha256; +#endif +#ifdef SHA384_BLOCK_SIZE + sha384_context sha384; +#endif +#ifdef SHA512_BLOCK_SIZE + sha512_context sha512; +#endif +#ifdef SHA512_224_BLOCK_SIZE + sha512_224_context sha512_224; +#endif +#ifdef SHA512_256_BLOCK_SIZE + sha512_256_context sha512_256; +#endif +#ifdef SHA3_224_BLOCK_SIZE + sha3_224_context sha3_224; +#endif +#ifdef SHA3_256_BLOCK_SIZE + sha3_256_context sha3_256; +#endif +#ifdef SHA3_384_BLOCK_SIZE + sha3_384_context sha3_384; +#endif +#ifdef SHA3_512_BLOCK_SIZE + sha3_512_context sha3_512; +#endif +#ifdef SHAKE256_BLOCK_SIZE + shake256_context shake256; +#endif +#ifdef SM3_BLOCK_SIZE + sm3_context sm3; +#endif +#ifdef STREEBOG256_BLOCK_SIZE + streebog256_context streebog256; +#endif +#ifdef STREEBOG512_BLOCK_SIZE + streebog512_context streebog512; +#endif +#ifdef RIPEMD160_BLOCK_SIZE + ripemd160_context ripemd160; +#endif +#ifdef BELT_HASH_BLOCK_SIZE + belt_hash_context belt_hash; +#endif +#ifdef BASH224_HASH_BLOCK_SIZE + bash224_context bash224; +#endif +#ifdef BASH256_HASH_BLOCK_SIZE + bash256_context bash256; +#endif +#ifdef BASH384_HASH_BLOCK_SIZE + bash384_context bash384; +#endif +#ifdef BASH512_HASH_BLOCK_SIZE + bash512_context bash512; +#endif +} hash_context; + +typedef int (*_hfunc_init) (hash_context * hctx); +typedef int (*_hfunc_update) (hash_context * hctx, + const unsigned char *chunk, u32 chunklen); +typedef int (*_hfunc_finalize) (hash_context * hctx, unsigned char *output); +typedef int (*_hfunc_scattered) (const unsigned char **inputs, + const u32 *ilens, unsigned char *output); + +/*****************************************/ +/* Trampolines to each specific function to + * handle typing of our generic union structure. + */ +#ifdef WITH_HASH_SHA224 +ATTRIBUTE_WARN_UNUSED_RET int _sha224_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha224_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA256 +ATTRIBUTE_WARN_UNUSED_RET int _sha256_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha256_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA384 +ATTRIBUTE_WARN_UNUSED_RET int _sha384_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha384_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha384_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA512 +ATTRIBUTE_WARN_UNUSED_RET int _sha512_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha512_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA512_224 +ATTRIBUTE_WARN_UNUSED_RET int _sha512_224_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha512_224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha512_224_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA512_256 +ATTRIBUTE_WARN_UNUSED_RET int _sha512_256_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha512_256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha512_256_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA3_224 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_224_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_224_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA3_256 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_256_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_256_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA3_384 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_384_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_384_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_384_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHA3_512 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_512_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_512_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SM3 +ATTRIBUTE_WARN_UNUSED_RET int _sm3_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _sm3_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _sm3_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_SHAKE256 +ATTRIBUTE_WARN_UNUSED_RET int _shake256_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _shake256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _shake256_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_STREEBOG256 +ATTRIBUTE_WARN_UNUSED_RET int _streebog256_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _streebog256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _streebog256_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_STREEBOG512 +ATTRIBUTE_WARN_UNUSED_RET int _streebog512_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _streebog512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _streebog512_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_RIPEMD160 +ATTRIBUTE_WARN_UNUSED_RET int _ripemd160_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _ripemd160_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _ripemd160_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_BELT_HASH +ATTRIBUTE_WARN_UNUSED_RET int _belt_hash_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _belt_hash_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _belt_hash_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_BASH224 +ATTRIBUTE_WARN_UNUSED_RET int _bash224_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _bash224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _bash224_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_BASH256 +ATTRIBUTE_WARN_UNUSED_RET int _bash256_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _bash256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _bash256_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_BASH384 +ATTRIBUTE_WARN_UNUSED_RET int _bash384_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _bash384_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _bash384_final(hash_context * hctx, unsigned char *output); +#endif +#ifdef WITH_HASH_BASH512 +ATTRIBUTE_WARN_UNUSED_RET int _bash512_init(hash_context * hctx); +ATTRIBUTE_WARN_UNUSED_RET int _bash512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int _bash512_final(hash_context * hctx, unsigned char *output); +#endif + +/* + * All the hash algorithms we support are abstracted using the following + * structure (and following map) which provides for each hash alg its + * digest size, its block size and the associated scattered function. + */ +typedef struct { + hash_alg_type type; + const char *name; + u8 digest_size; + u8 block_size; + ATTRIBUTE_WARN_UNUSED_RET _hfunc_init hfunc_init; + ATTRIBUTE_WARN_UNUSED_RET _hfunc_update hfunc_update; + ATTRIBUTE_WARN_UNUSED_RET _hfunc_finalize hfunc_finalize; + ATTRIBUTE_WARN_UNUSED_RET _hfunc_scattered hfunc_scattered; +} hash_mapping; + +ATTRIBUTE_WARN_UNUSED_RET static inline int hash_mapping_sanity_check(const hash_mapping *hm) +{ + int ret; + + MUST_HAVE(((hm != NULL) && (hm->name != NULL) && (hm->hfunc_init != NULL) && + (hm->hfunc_update != NULL) && (hm->hfunc_finalize != NULL) && + (hm->hfunc_scattered != NULL)), ret, err); + + ret = 0; + +err: + return ret; +} + +#define MAX_HASH_ALG_NAME_LEN 0 +static const hash_mapping hash_maps[] = { +#ifdef WITH_HASH_SHA224 + {.type = SHA224, /* SHA224 */ + .name = "SHA224", + .digest_size = SHA224_DIGEST_SIZE, + .block_size = SHA224_BLOCK_SIZE, + .hfunc_init = _sha224_init, + .hfunc_update = _sha224_update, + .hfunc_finalize = _sha224_final, + .hfunc_scattered = sha224_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 7) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 7 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA224 */ +#ifdef WITH_HASH_SHA256 + {.type = SHA256, /* SHA256 */ + .name = "SHA256", + .digest_size = SHA256_DIGEST_SIZE, + .block_size = SHA256_BLOCK_SIZE, + .hfunc_init = _sha256_init, + .hfunc_update = _sha256_update, + .hfunc_finalize = _sha256_final, + .hfunc_scattered = sha256_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 7) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 7 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA256 */ +#ifdef WITH_HASH_SHA384 + {.type = SHA384, /* SHA384 */ + .name = "SHA384", + .digest_size = SHA384_DIGEST_SIZE, + .block_size = SHA384_BLOCK_SIZE, + .hfunc_init = _sha384_init, + .hfunc_update = _sha384_update, + .hfunc_finalize = _sha384_final, + .hfunc_scattered = sha384_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 7) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 7 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA384 */ +#ifdef WITH_HASH_SHA512 + {.type = SHA512, /* SHA512 */ + .name = "SHA512", + .digest_size = SHA512_DIGEST_SIZE, + .block_size = SHA512_BLOCK_SIZE, + .hfunc_init = _sha512_init, + .hfunc_update = _sha512_update, + .hfunc_finalize = _sha512_final, + .hfunc_scattered = sha512_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 7) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 7 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA512 */ +#ifdef WITH_HASH_SHA512_224 + {.type = SHA512_224, /* SHA512_224 */ + .name = "SHA512_224", + .digest_size = SHA512_224_DIGEST_SIZE, + .block_size = SHA512_224_BLOCK_SIZE, + .hfunc_init = _sha512_224_init, + .hfunc_update = _sha512_224_update, + .hfunc_finalize = _sha512_224_final, + .hfunc_scattered = sha512_224_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 7) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 7 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA512_224 */ +#ifdef WITH_HASH_SHA512_256 + {.type = SHA512_256, /* SHA512_256 */ + .name = "SHA512_256", + .digest_size = SHA512_256_DIGEST_SIZE, + .block_size = SHA512_256_BLOCK_SIZE, + .hfunc_init = _sha512_256_init, + .hfunc_update = _sha512_256_update, + .hfunc_finalize = _sha512_256_final, + .hfunc_scattered = sha512_256_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 7) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 7 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA512_256 */ +#ifdef WITH_HASH_SHA3_224 + {.type = SHA3_224, /* SHA3_224 */ + .name = "SHA3_224", + .digest_size = SHA3_224_DIGEST_SIZE, + .block_size = SHA3_224_BLOCK_SIZE, + .hfunc_init = _sha3_224_init, + .hfunc_update = _sha3_224_update, + .hfunc_finalize = _sha3_224_final, + .hfunc_scattered = sha3_224_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA3_224 */ +#ifdef WITH_HASH_SHA3_256 + {.type = SHA3_256, /* SHA3_256 */ + .name = "SHA3_256", + .digest_size = SHA3_256_DIGEST_SIZE, + .block_size = SHA3_256_BLOCK_SIZE, + .hfunc_init = _sha3_256_init, + .hfunc_update = _sha3_256_update, + .hfunc_finalize = _sha3_256_final, + .hfunc_scattered = sha3_256_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA3_256 */ +#ifdef WITH_HASH_SHA3_384 + {.type = SHA3_384, /* SHA3_384 */ + .name = "SHA3_384", + .digest_size = SHA3_384_DIGEST_SIZE, + .block_size = SHA3_384_BLOCK_SIZE, + .hfunc_init = _sha3_384_init, + .hfunc_update = _sha3_384_update, + .hfunc_finalize = _sha3_384_final, + .hfunc_scattered = sha3_384_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA3_384 */ +#ifdef WITH_HASH_SHA3_512 + {.type = SHA3_512, /* SHA3_512 */ + .name = "SHA3_512", + .digest_size = SHA3_512_DIGEST_SIZE, + .block_size = SHA3_512_BLOCK_SIZE, + .hfunc_init = _sha3_512_init, + .hfunc_update = _sha3_512_update, + .hfunc_finalize = _sha3_512_final, + .hfunc_scattered = sha3_512_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHA3_512 */ +#ifdef WITH_HASH_SM3 + {.type = SM3, /* SM3 */ + .name = "SM3", + .digest_size = SM3_DIGEST_SIZE, + .block_size = SM3_BLOCK_SIZE, + .hfunc_init = _sm3_init, + .hfunc_update = _sm3_update, + .hfunc_finalize = _sm3_final, + .hfunc_scattered = sm3_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 4) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 4 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SM3 */ +#ifdef WITH_HASH_SHAKE256 + {.type = SHAKE256, /* SHAKE256 */ + .name = "SHAKE256", + .digest_size = SHAKE256_DIGEST_SIZE, + .block_size = SHAKE256_BLOCK_SIZE, + .hfunc_init = _shake256_init, + .hfunc_update = _shake256_update, + .hfunc_finalize = _shake256_final, + .hfunc_scattered = shake256_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_SHAKE256 */ +#ifdef WITH_HASH_STREEBOG256 + {.type = STREEBOG256, /* STREEBOG256 */ + .name = "STREEBOG256", + .digest_size = STREEBOG256_DIGEST_SIZE, + .block_size = STREEBOG256_BLOCK_SIZE, + .hfunc_init = _streebog256_init, + .hfunc_update = _streebog256_update, + .hfunc_finalize = _streebog256_final, + .hfunc_scattered = streebog256_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 12) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 12 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_STREEBOG256 */ +#ifdef WITH_HASH_STREEBOG512 + {.type = STREEBOG512, /* STREEBOG512 */ + .name = "STREEBOG512", + .digest_size = STREEBOG512_DIGEST_SIZE, + .block_size = STREEBOG512_BLOCK_SIZE, + .hfunc_init = _streebog512_init, + .hfunc_update = _streebog512_update, + .hfunc_finalize = _streebog512_final, + .hfunc_scattered = streebog512_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 12) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 12 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_STREEBOG512 */ +#ifdef WITH_HASH_RIPEMD160 + {.type = RIPEMD160, /* RIPEMD160 */ + .name = "RIPEMD160", + .digest_size = RIPEMD160_DIGEST_SIZE, + .block_size = RIPEMD160_BLOCK_SIZE, + .hfunc_init = _ripemd160_init, + .hfunc_update = _ripemd160_update, + .hfunc_finalize = _ripemd160_final, + .hfunc_scattered = ripemd160_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_RIPEMD160 */ +#ifdef WITH_HASH_BELT_HASH + {.type = BELT_HASH, /* BELT_HASH */ + .name = "BELT_HASH", + .digest_size = BELT_HASH_DIGEST_SIZE, + .block_size = BELT_HASH_BLOCK_SIZE, + .hfunc_init = _belt_hash_init, + .hfunc_update = _belt_hash_update, + .hfunc_finalize = _belt_hash_final, + .hfunc_scattered = belt_hash_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 9) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 9 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_BELT_HASH */ +#ifdef WITH_HASH_BASH224 + {.type = BASH224, /* BASH224 */ + .name = "BASH224", + .digest_size = BASH224_DIGEST_SIZE, + .block_size = BASH224_BLOCK_SIZE, + .hfunc_init = _bash224_init, + .hfunc_update = _bash224_update, + .hfunc_finalize = _bash224_final, + .hfunc_scattered = bash224_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 8) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 8 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_BASH224 */ +#ifdef WITH_HASH_BASH256 + {.type = BASH256, /* BASH256 */ + .name = "BASH256", + .digest_size = BASH256_DIGEST_SIZE, + .block_size = BASH256_BLOCK_SIZE, + .hfunc_init = _bash256_init, + .hfunc_update = _bash256_update, + .hfunc_finalize = _bash256_final, + .hfunc_scattered = bash256_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 8) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 8 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_BASH256 */ +#ifdef WITH_HASH_BASH384 + {.type = BASH384, /* BASH384 */ + .name = "BASH384", + .digest_size = BASH384_DIGEST_SIZE, + .block_size = BASH384_BLOCK_SIZE, + .hfunc_init = _bash384_init, + .hfunc_update = _bash384_update, + .hfunc_finalize = _bash384_final, + .hfunc_scattered = bash384_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 8) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 8 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_BASH384 */ +#ifdef WITH_HASH_BASH512 + {.type = BASH512, /* BASH512 */ + .name = "BASH512", + .digest_size = BASH512_DIGEST_SIZE, + .block_size = BASH512_BLOCK_SIZE, + .hfunc_init = _bash512_init, + .hfunc_update = _bash512_update, + .hfunc_finalize = _bash512_final, + .hfunc_scattered = bash512_scattered}, +#if (MAX_HASH_ALG_NAME_LEN < 8) +#undef MAX_HASH_ALG_NAME_LEN +#define MAX_HASH_ALG_NAME_LEN 8 +#endif /* MAX_HASH_ALG_NAME_LEN */ +#endif /* WITH_HASH_BASH512 */ + {.type = UNKNOWN_HASH_ALG, /* Needs to be kept last */ + .name = "UNKNOWN", + .digest_size = 0, + .block_size = 0, + .hfunc_init = NULL, + .hfunc_update = NULL, + .hfunc_finalize = NULL, + .hfunc_scattered = NULL}, +}; + +ATTRIBUTE_WARN_UNUSED_RET int get_hash_by_name(const char *hash_name, const hash_mapping **hm); +ATTRIBUTE_WARN_UNUSED_RET int get_hash_by_type(hash_alg_type hash_type, const hash_mapping **hm); +ATTRIBUTE_WARN_UNUSED_RET int get_hash_sizes(hash_alg_type hash_type, u8 *digest_size, u8 *block_size); +ATTRIBUTE_WARN_UNUSED_RET int hash_mapping_callbacks_sanity_check(const hash_mapping *h); + +#endif /* __HASH_ALGS_H__ */ diff --git a/crypto/libecc/include/libecc/hash/hmac.h b/crypto/libecc/include/libecc/hash/hmac.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/hmac.h @@ -0,0 +1,38 @@ +#ifndef __HMAC_H__ +#define __HMAC_H__ + +#include +#ifdef WITH_HMAC + +#include +#include +#include + +#define HMAC_MAGIC ((word_t)(0x9849020187612083ULL)) +#define HMAC_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == HMAC_MAGIC) && ((A)->hash != NULL), ret, err) + +/* The HMAC structure is made of two hash contexts */ +typedef struct { + /* The hash mapping associated with the hmac */ + const hash_mapping *hash; + /* The two hash contexts (inner and outer) */ + hash_context in_ctx; + hash_context out_ctx; + /* Initialization magic value */ + word_t magic; +} hmac_context; + +ATTRIBUTE_WARN_UNUSED_RET int hmac_init(hmac_context *ctx, const u8 *hmackey, u32 hmackey_len, hash_alg_type hash_type); + +ATTRIBUTE_WARN_UNUSED_RET int hmac_update(hmac_context *ctx, const u8 *input, u32 ilen); + +ATTRIBUTE_WARN_UNUSED_RET int hmac_finalize(hmac_context *ctx, u8 *output, u8 *outlen); + +ATTRIBUTE_WARN_UNUSED_RET int hmac(const u8 *hmackey, u32 hmackey_len, hash_alg_type hash_type, const u8 *input, u32 ilen, u8 *output, u8 *outlen); + +ATTRIBUTE_WARN_UNUSED_RET int hmac_scattered(const u8 *hmackey, u32 hmackey_len, hash_alg_type hash_type, const u8 **inputs, const u32 *ilens, u8 *output, u8 *outlen); + +#endif /* WITH_HMAC */ + +#endif /* __HMAC_H__ */ diff --git a/crypto/libecc/include/libecc/hash/keccak.h b/crypto/libecc/include/libecc/hash/keccak.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/keccak.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __KECCAK_H__ +#define __KECCAK_H__ + +#include + +#define _KECCAK_ROTL_(x, y) (((x) << (y)) | ((x) >> ((sizeof(u64) * 8) - (y)))) + +/* We handle the case where one of the shifts is more than 64-bit: in this + * case, behaviour is undefined as per ANSI C definition. In this case, we + * return the untouched input. + */ +#define KECCAK_ROTL(x, y) ((((y) < (sizeof(u64) * 8)) && ((y) > 0)) ? (_KECCAK_ROTL_(x, y)) : (x)) + +/* + * Round transformation of the state. Notations are the + * same as the ones used in: + * http://keccak.noekeon.org/specs_summary.html + */ +#define KECCAK_WORD_LOG 6 +#define KECCAK_ROUNDS (12 + (2 * KECCAK_WORD_LOG)) +#define KECCAK_SLICES 5 + +static const u64 keccak_rc[KECCAK_ROUNDS] = +{ + 0x0000000000000001ULL, 0x0000000000008082ULL, + 0x800000000000808AULL, 0x8000000080008000ULL, + 0x000000000000808BULL, 0x0000000080000001ULL, + 0x8000000080008081ULL, 0x8000000000008009ULL, + 0x000000000000008AULL, 0x0000000000000088ULL, + 0x0000000080008009ULL, 0x000000008000000AULL, + 0x000000008000808BULL, 0x800000000000008BULL, + 0x8000000000008089ULL, 0x8000000000008003ULL, + 0x8000000000008002ULL, 0x8000000000000080ULL, + 0x000000000000800AULL, 0x800000008000000AULL, + 0x8000000080008081ULL, 0x8000000000008080ULL, + 0x0000000080000001ULL, 0x8000000080008008ULL +}; + +static const u8 keccak_rot[KECCAK_SLICES][KECCAK_SLICES] = +{ + { 0, 36, 3, 41, 18 }, + { 1, 44, 10, 45, 2 }, + { 62, 6, 43, 15, 61 }, + { 28, 55, 25, 21, 56 }, + { 27, 20, 39, 8, 14 }, +}; + + +/* Macro to handle endianness conversion */ +#define SWAP64_Idx(a) ((sizeof(u64) * ((u8)(a) / sizeof(u64))) + (sizeof(u64) - 1 - ((u8)(a) % sizeof(u64)))) + +#define Idx_slices(x, y) ((x) + (KECCAK_SLICES * (y))) +#define Idx(A, x, y) ((A)[Idx_slices(x, y)]) + +#define KECCAKROUND(A, RC) do { \ + int x, y; \ + u64 tmp; \ + /* Temporary B, C and D arrays */ \ + u64 BCD[KECCAK_SLICES * KECCAK_SLICES]; \ + /* Theta step */ \ + for(x = 0; x < KECCAK_SLICES; x++){ \ + Idx(BCD, x, 0) = Idx(A, x, 0) ^ Idx(A, x, 1) ^ Idx(A, x, 2) ^ \ + Idx(A, x, 3) ^ Idx(A, x, 4); \ + } \ + for(x = 0; x < KECCAK_SLICES; x++){ \ + tmp = Idx(BCD, (x + 4) % 5, 0) ^ \ + KECCAK_ROTL(Idx(BCD, (x + 1) % 5, 0), 1); \ + for(y = 0; y < KECCAK_SLICES; y++){ \ + Idx(A, x, y) ^= tmp; \ + } \ + } \ + /* Rho and Pi steps */ \ + for(x = 0; x < KECCAK_SLICES; x++){ \ + for(y = 0; y < KECCAK_SLICES; y++){ \ + Idx(BCD, y, ((2*x)+(3*y)) % 5) = \ + KECCAK_ROTL(Idx(A, x, y), keccak_rot[x][y]); \ + } \ + } \ + /* Chi step */ \ + for(x = 0; x < KECCAK_SLICES; x++){ \ + for(y = 0; y < KECCAK_SLICES; y++){ \ + Idx(A, x, y) = Idx(BCD, x, y) ^ \ + (~Idx(BCD, (x+1) % 5, y) & Idx(BCD, (x+2)%5, y)); \ + } \ + } \ + /* Iota step */ \ + Idx(A, 0, 0) ^= (RC); \ +} while(0) + +#define KECCAKF(A) do { \ + int round; \ + for(round = 0; round < KECCAK_ROUNDS; round++){ \ + KECCAKROUND(A, keccak_rc[round]); \ + } \ +} while(0) + +#endif /* __KECCAK_H__ */ diff --git a/crypto/libecc/include/libecc/hash/ripemd160.h b/crypto/libecc/include/libecc/hash/ripemd160.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/ripemd160.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_RIPEMD160 + +#ifndef __RIPEMD160_H__ +#define __RIPEMD160_H__ + +#include +#include + +#define RIPEMD160_STATE_SIZE 5 +#define RIPEMD160_BLOCK_SIZE 64 +#define RIPEMD160_DIGEST_SIZE 20 +#define RIPEMD160_DIGEST_SIZE_BITS 160 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < RIPEMD160_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE RIPEMD160_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < RIPEMD160_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS RIPEMD160_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < RIPEMD160_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE RIPEMD160_BLOCK_SIZE +#endif + +#define RIPEMD160_HASH_MAGIC ((word_t)(0x7392018463926719ULL)) +#define RIPEMD160_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == RIPEMD160_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 ripemd160_total; + /* Internal state */ + u32 ripemd160_state[RIPEMD160_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 ripemd160_buffer[RIPEMD160_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} ripemd160_context; + +ATTRIBUTE_WARN_UNUSED_RET int ripemd160_init(ripemd160_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int ripemd160_update(ripemd160_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int ripemd160_final(ripemd160_context *ctx, u8 output[RIPEMD160_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int ripemd160_scattered(const u8 **inputs, const u32 *ilens, + u8 output[RIPEMD160_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int ripemd160(const u8 *input, u32 ilen, u8 output[RIPEMD160_DIGEST_SIZE]); + +#endif /* __RIPEMD160_H__ */ +#endif /* WITH_HASH_RIPEMD160 */ diff --git a/crypto/libecc/include/libecc/hash/sha2.h b/crypto/libecc/include/libecc/hash/sha2.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha2.h @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SHA2_H__ +#define __SHA2_H__ + +#include + +/* Useful primitives for handling 128-bit */ + +/* Add a 128-bit to a 64-bit element and store the result + * in the input + */ +#define ADD_UINT128_UINT64(low,high,toadd) do {\ + (low) += (toadd);\ + if((low) < (toadd)){\ + (high)++;\ + }\ +} while(0) + +/* Store a 128-bit element in big endian format */ +#define PUT_UINT128_BE(low,high,b,i) do {\ + PUT_UINT64_BE((high), (b), (i));\ + PUT_UINT64_BE((low), (b), (i)+8);\ +} while(0) + +/* Multiply a 128-bit element by 8 and store it in big endian + * format + */ +#define PUT_MUL8_UINT128_BE(low,high,b,i) do {\ + u64 reslow, reshigh;\ + reslow = (low) << 3;\ + reshigh = ((low) >> 61) ^ ((high) << 3);\ + PUT_UINT128_BE(reslow,reshigh,(b),(i));\ +} while(0) + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT64_BE +#define GET_UINT64_BE(n,b,i) \ +do { \ + (n) = ( ((u64) (b)[(i) ]) << 56 ) \ + | ( ((u64) (b)[(i) + 1]) << 48 ) \ + | ( ((u64) (b)[(i) + 2]) << 40 ) \ + | ( ((u64) (b)[(i) + 3]) << 32 ) \ + | ( ((u64) (b)[(i) + 4]) << 24 ) \ + | ( ((u64) (b)[(i) + 5]) << 16 ) \ + | ( ((u64) (b)[(i) + 6]) << 8 ) \ + | ( ((u64) (b)[(i) + 7]) ); \ +} while( 0 ) +#endif /* GET_UINT64_BE */ + +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +/* Useful macros for the SHA-2 core function */ +#define CH(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) +#define MAJ(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +#define UPDATEW(w, i, sha_type) ((w)[(i)] = SIGMA_MIN1_##sha_type((w)[(i)-2]) + (w)[(i)-7] + SIGMA_MIN0_##sha_type((w)[(i)-15]) + (w)[(i)-16]) + +#define SHA2CORE(a, b, c, d, e, f, g, h, w, k, sha_word_type, sha_type) do {\ + sha_word_type t1, t2;\ + t1 = (h) + SIGMA_MAJ1_##sha_type((e)) + CH((e), (f), (g)) + (k) + (w);\ + t2 = SIGMA_MAJ0_##sha_type((a)) + MAJ((a), (b), (c));\ + (h) = (g);\ + (g) = (f);\ + (f) = (e);\ + (e) = (d) + t1;\ + (d) = (c);\ + (c) = (b);\ + (b) = (a);\ + (a) = t1 + t2;\ +} while(0) + +#if (defined(WITH_HASH_SHA224) || defined(WITH_HASH_SHA256)) + +/**********************************************/ + +/* SHA-224 and SHA-256 */ +#define SHR_SHA256(x, n) (((u32)(x)) >> (n)) +#define ROTR_SHA256(x, n) ((((u32)(x)) >> (n)) | (((u32)(x)) << (32-(n)))) +#define SIGMA_MAJ0_SHA256(x) (ROTR_SHA256(x, 2) ^ ROTR_SHA256(x, 13) ^ ROTR_SHA256(x, 22)) +#define SIGMA_MAJ1_SHA256(x) (ROTR_SHA256(x, 6) ^ ROTR_SHA256(x, 11) ^ ROTR_SHA256(x, 25)) +#define SIGMA_MIN0_SHA256(x) (ROTR_SHA256(x, 7) ^ ROTR_SHA256(x, 18) ^ SHR_SHA256(x, 3)) +#define SIGMA_MIN1_SHA256(x) (ROTR_SHA256(x, 17) ^ ROTR_SHA256(x, 19) ^ SHR_SHA256(x, 10)) +#define SHA2CORE_SHA256(a, b, c, d, e, f, g, h, w, k) \ + SHA2CORE(a, b, c, d, e, f, g, h, w, k, u32, SHA256) +#define UPDATEW_SHA256(w, i) UPDATEW(w, i, SHA256) +static const u32 K_SHA256[] = { + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, +}; + +/**********************************************/ +#endif + +#if (defined(WITH_HASH_SHA384) || defined(WITH_HASH_SHA512)) + +/**********************************************/ + +/* SHA-384 and SHA-512 */ +#define SHR_SHA512(x, n) (((u64)(x)) >> (n)) +#define ROTR_SHA512(x, n) ((((u64)(x)) >> (n)) | (((u64)(x)) << (64-(n)))) +#define SIGMA_MAJ0_SHA512(x) (ROTR_SHA512(x, 28) ^ ROTR_SHA512(x, 34) ^ ROTR_SHA512(x, 39)) +#define SIGMA_MAJ1_SHA512(x) (ROTR_SHA512(x, 14) ^ ROTR_SHA512(x, 18) ^ ROTR_SHA512(x, 41)) +#define SIGMA_MIN0_SHA512(x) (ROTR_SHA512(x, 1) ^ ROTR_SHA512(x, 8) ^ SHR_SHA512(x, 7)) +#define SIGMA_MIN1_SHA512(x) (ROTR_SHA512(x, 19) ^ ROTR_SHA512(x, 61) ^ SHR_SHA512(x, 6)) +#define SHA2CORE_SHA512(a, b, c, d, e, f, g, h, w, k) \ + SHA2CORE(a, b, c, d, e, f, g, h, w, k, u64, SHA512) +#define UPDATEW_SHA512(w, i) UPDATEW(w, i, SHA512) +static const u64 K_SHA512[] = { + (u64)(0x428A2F98D728AE22), (u64)(0x7137449123EF65CD), + (u64)(0xB5C0FBCFEC4D3B2F), (u64)(0xE9B5DBA58189DBBC), + (u64)(0x3956C25BF348B538), (u64)(0x59F111F1B605D019), + (u64)(0x923F82A4AF194F9B), (u64)(0xAB1C5ED5DA6D8118), + (u64)(0xD807AA98A3030242), (u64)(0x12835B0145706FBE), + (u64)(0x243185BE4EE4B28C), (u64)(0x550C7DC3D5FFB4E2), + (u64)(0x72BE5D74F27B896F), (u64)(0x80DEB1FE3B1696B1), + (u64)(0x9BDC06A725C71235), (u64)(0xC19BF174CF692694), + (u64)(0xE49B69C19EF14AD2), (u64)(0xEFBE4786384F25E3), + (u64)(0x0FC19DC68B8CD5B5), (u64)(0x240CA1CC77AC9C65), + (u64)(0x2DE92C6F592B0275), (u64)(0x4A7484AA6EA6E483), + (u64)(0x5CB0A9DCBD41FBD4), (u64)(0x76F988DA831153B5), + (u64)(0x983E5152EE66DFAB), (u64)(0xA831C66D2DB43210), + (u64)(0xB00327C898FB213F), (u64)(0xBF597FC7BEEF0EE4), + (u64)(0xC6E00BF33DA88FC2), (u64)(0xD5A79147930AA725), + (u64)(0x06CA6351E003826F), (u64)(0x142929670A0E6E70), + (u64)(0x27B70A8546D22FFC), (u64)(0x2E1B21385C26C926), + (u64)(0x4D2C6DFC5AC42AED), (u64)(0x53380D139D95B3DF), + (u64)(0x650A73548BAF63DE), (u64)(0x766A0ABB3C77B2A8), + (u64)(0x81C2C92E47EDAEE6), (u64)(0x92722C851482353B), + (u64)(0xA2BFE8A14CF10364), (u64)(0xA81A664BBC423001), + (u64)(0xC24B8B70D0F89791), (u64)(0xC76C51A30654BE30), + (u64)(0xD192E819D6EF5218), (u64)(0xD69906245565A910), + (u64)(0xF40E35855771202A), (u64)(0x106AA07032BBD1B8), + (u64)(0x19A4C116B8D2D0C8), (u64)(0x1E376C085141AB53), + (u64)(0x2748774CDF8EEB99), (u64)(0x34B0BCB5E19B48A8), + (u64)(0x391C0CB3C5C95A63), (u64)(0x4ED8AA4AE3418ACB), + (u64)(0x5B9CCA4F7763E373), (u64)(0x682E6FF3D6B2B8A3), + (u64)(0x748F82EE5DEFB2FC), (u64)(0x78A5636F43172F60), + (u64)(0x84C87814A1F0AB72), (u64)(0x8CC702081A6439EC), + (u64)(0x90BEFFFA23631E28), (u64)(0xA4506CEBDE82BDE9), + (u64)(0xBEF9A3F7B2C67915), (u64)(0xC67178F2E372532B), + (u64)(0xCA273ECEEA26619C), (u64)(0xD186B8C721C0C207), + (u64)(0xEADA7DD6CDE0EB1E), (u64)(0xF57D4F7FEE6ED178), + (u64)(0x06F067AA72176FBA), (u64)(0x0A637DC5A2C898A6), + (u64)(0x113F9804BEF90DAE), (u64)(0x1B710B35131C471B), + (u64)(0x28DB77F523047D84), (u64)(0x32CAAB7B40C72493), + (u64)(0x3C9EBE0A15C9BEBC), (u64)(0x431D67C49C100D4C), + (u64)(0x4CC5D4BECB3E42B6), (u64)(0x597F299CFC657E2A), + (u64)(0x5FCB6FAB3AD6FAEC), (u64)(0x6C44198C4A475817) +}; + +/**********************************************/ +#endif + +#endif /* __SHA2_H__ */ diff --git a/crypto/libecc/include/libecc/hash/sha224.h b/crypto/libecc/include/libecc/hash/sha224.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha224.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA224 + +#ifndef __SHA224_H__ +#define __SHA224_H__ + +#include +#include +#include + +#define SHA224_STATE_SIZE 8 +#define SHA224_BLOCK_SIZE 64 +#define SHA224_DIGEST_SIZE 28 +#define SHA224_DIGEST_SIZE_BITS 224 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA224_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA224_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA224_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA224_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA224_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA224_BLOCK_SIZE +#endif + +#define SHA224_HASH_MAGIC ((word_t)(0x1120323b32342910ULL)) +#define SHA224_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA224_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 sha224_total; + /* Internal state */ + u32 sha224_state[SHA224_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sha224_buffer[SHA224_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sha224_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha224_init(sha224_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha224_update(sha224_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha224_final(sha224_context *ctx, u8 output[SHA224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha224(const u8 *input, u32 ilen, u8 output[SHA224_DIGEST_SIZE]); + +#endif /* __SHA224_H__ */ +#endif /* WITH_HASH_SHA224 */ diff --git a/crypto/libecc/include/libecc/hash/sha256.h b/crypto/libecc/include/libecc/hash/sha256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha256.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA256 + +#ifndef __SHA256_H__ +#define __SHA256_H__ + +#include +#include +#include + +#define SHA256_STATE_SIZE 8 +#define SHA256_BLOCK_SIZE 64 +#define SHA256_DIGEST_SIZE 32 +#define SHA256_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA256_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA256_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA256_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA256_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA256_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA256_BLOCK_SIZE +#endif + +#define SHA256_HASH_MAGIC ((word_t)(0x11299a2b32098412ULL)) +#define SHA256_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA256_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 sha256_total; + /* Internal state */ + u32 sha256_state[SHA256_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sha256_buffer[SHA256_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sha256_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha256_init(sha256_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha256_update(sha256_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha256_final(sha256_context *ctx, u8 output[SHA256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha256(const u8 *input, u32 ilen, u8 output[SHA256_DIGEST_SIZE]); + +#endif /* __SHA256_H__ */ +#endif /* WITH_HASH_SHA256 */ diff --git a/crypto/libecc/include/libecc/hash/sha3-224.h b/crypto/libecc/include/libecc/hash/sha3-224.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha3-224.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_224 + +#ifndef __SHA3_224_H__ +#define __SHA3_224_H__ + +#include +#include +#include + +#define SHA3_224_BLOCK_SIZE 144 +#define SHA3_224_DIGEST_SIZE 28 +#define SHA3_224_DIGEST_SIZE_BITS 224 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA3_224_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA3_224_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA3_224_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA3_224_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA3_224_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA3_224_BLOCK_SIZE +#endif + +#define SHA3_224_HASH_MAGIC ((word_t)(0x1234563273932916ULL)) +#define SHA3_224_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA3_224_HASH_MAGIC), ret, err) + +typedef sha3_context sha3_224_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha3_224_init(sha3_224_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha3_224_update(sha3_224_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha3_224_final(sha3_224_context *ctx, u8 output[SHA3_224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_224(const u8 *input, u32 ilen, u8 output[SHA3_224_DIGEST_SIZE]); + +#endif /* __SHA3_224_H__ */ +#endif /* WITH_HASH_SHA3_224 */ diff --git a/crypto/libecc/include/libecc/hash/sha3-256.h b/crypto/libecc/include/libecc/hash/sha3-256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha3-256.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_256 + +#ifndef __SHA3_256_H__ +#define __SHA3_256_H__ + +#include +#include +#include + +#define SHA3_256_BLOCK_SIZE 136 +#define SHA3_256_DIGEST_SIZE 32 +#define SHA3_256_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA3_256_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA3_256_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA3_256_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA3_256_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA3_256_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA3_256_BLOCK_SIZE +#endif + +#define SHA3_256_HASH_MAGIC ((word_t)(0x3452987573933416ULL)) +#define SHA3_256_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA3_256_HASH_MAGIC), ret, err) + +typedef sha3_context sha3_256_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha3_256_init(sha3_256_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha3_256_update(sha3_256_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha3_256_final(sha3_256_context *ctx, u8 output[SHA3_256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_256(const u8 *input, u32 ilen, u8 output[SHA3_256_DIGEST_SIZE]); + +#endif /* __SHA3_256_H__ */ +#endif /* WITH_HASH_SHA3_256 */ diff --git a/crypto/libecc/include/libecc/hash/sha3-384.h b/crypto/libecc/include/libecc/hash/sha3-384.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha3-384.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_384 + +#ifndef __SHA3_384_H__ +#define __SHA3_384_H__ + +#include +#include +#include + +#define SHA3_384_BLOCK_SIZE 104 +#define SHA3_384_DIGEST_SIZE 48 +#define SHA3_384_DIGEST_SIZE_BITS 384 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA3_384_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA3_384_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA3_384_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA3_384_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA3_384_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA3_384_BLOCK_SIZE +#endif + +#define SHA3_384_HASH_MAGIC ((word_t)(0x2233223273935643ULL)) +#define SHA3_384_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA3_384_HASH_MAGIC), ret, err) + +typedef sha3_context sha3_384_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha3_384_init(sha3_384_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha3_384_update(sha3_384_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha3_384_final(sha3_384_context *ctx, u8 output[SHA3_384_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_384_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_384_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_384(const u8 *input, u32 ilen, u8 output[SHA3_384_DIGEST_SIZE]); + +#endif /* __SHA3_384_H__ */ +#endif /* WITH_HASH_SHA3_384 */ diff --git a/crypto/libecc/include/libecc/hash/sha3-512.h b/crypto/libecc/include/libecc/hash/sha3-512.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha3-512.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_512 + +#ifndef __SHA3_512_H__ +#define __SHA3_512_H__ + +#include +#include +#include "sha3.h" + +#define SHA3_512_BLOCK_SIZE 72 +#define SHA3_512_DIGEST_SIZE 64 +#define SHA3_512_DIGEST_SIZE_BITS 512 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA3_512_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA3_512_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA3_512_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA3_512_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA3_512_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA3_512_BLOCK_SIZE +#endif + +#define SHA3_512_HASH_MAGIC ((word_t)(0x9104729373982346ULL)) +#define SHA3_512_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA3_512_HASH_MAGIC), ret, err) + +typedef sha3_context sha3_512_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha3_512_init(sha3_512_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha3_512_update(sha3_512_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha3_512_final(sha3_512_context *ctx, u8 output[SHA3_512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha3_512(const u8 *input, u32 ilen, u8 output[SHA3_512_DIGEST_SIZE]); + +#endif /* __SHA3_512_H__ */ +#endif /* WITH_HASH_SHA3_512 */ diff --git a/crypto/libecc/include/libecc/hash/sha3.h b/crypto/libecc/include/libecc/hash/sha3.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha3.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SHA3_H__ +#define __SHA3_H__ + +#include + +typedef enum { + SHA3_LITTLE = 0, + SHA3_BIG = 1, +} sha3_endianness; +/* + * Generic context for all SHA3 instances. Only difference is digest size + * value, initialized in init() call and used in finalize(). + */ +typedef struct sha3_context_ { + u8 sha3_digest_size; + u8 sha3_block_size; + sha3_endianness sha3_endian; + /* Local index, useful for the absorbing phase */ + u64 sha3_idx; + /* Keccak's state, viewed as a bi-dimensional array */ + u64 sha3_state[KECCAK_SLICES * KECCAK_SLICES]; + /* Initialization magic value */ + word_t magic; +} sha3_context; + + +ATTRIBUTE_WARN_UNUSED_RET int _sha3_init(sha3_context *ctx, u8 digest_size); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_update(sha3_context *ctx, const u8 *buf, u32 buflen); +ATTRIBUTE_WARN_UNUSED_RET int _sha3_finalize(sha3_context *ctx, u8 *output); + +#endif /* __SHA3_H__ */ diff --git a/crypto/libecc/include/libecc/hash/sha384.h b/crypto/libecc/include/libecc/hash/sha384.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha384.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA384 + +#ifndef __SHA384_H__ +#define __SHA384_H__ + +#include +#include +#include "sha2.h" + +#define SHA384_STATE_SIZE 8 +#define SHA384_BLOCK_SIZE 128 +#define SHA384_DIGEST_SIZE 48 +#define SHA384_DIGEST_SIZE_BITS 384 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA384_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA384_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA384_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA384_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA384_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA384_BLOCK_SIZE +#endif + +#define SHA384_HASH_MAGIC ((word_t)(0x9227239b32098412ULL)) +#define SHA384_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA384_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed on 128 bits */ + u64 sha384_total[2]; + /* Internal state */ + u64 sha384_state[SHA384_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sha384_buffer[SHA384_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sha384_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha384_init(sha384_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha384_update(sha384_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha384_final(sha384_context *ctx, u8 output[SHA384_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha384_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA384_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha384(const u8 *input, u32 ilen, u8 output[SHA384_DIGEST_SIZE]); + +#endif /* __SHA384_H__ */ +#endif /* WITH_HASH_SHA384 */ diff --git a/crypto/libecc/include/libecc/hash/sha512-224.h b/crypto/libecc/include/libecc/hash/sha512-224.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha512-224.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA512_224 + +#ifndef __SHA512_224_H__ +#define __SHA512_224_H__ + +#include +#include +#include +#include + +#define SHA512_224_STATE_SIZE SHA512_CORE_STATE_SIZE +#define SHA512_224_BLOCK_SIZE SHA512_CORE_BLOCK_SIZE +#define SHA512_224_DIGEST_SIZE 28 +#define SHA512_224_DIGEST_SIZE_BITS 224 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA512_224_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA512_224_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA512_224_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA512_224_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA512_224_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA512_224_BLOCK_SIZE +#endif + +#define SHA512_224_HASH_MAGIC ((word_t)(0x12345a2b73932916ULL)) +#define SHA512_224_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA512_224_HASH_MAGIC), ret, err) + +typedef sha512_core_context sha512_224_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha512_224_init(sha512_224_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha512_224_update(sha512_224_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha512_224_final(sha512_224_context *ctx, u8 output[SHA512_224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha512_224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA512_224_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha512_224(const u8 *input, u32 ilen, u8 output[SHA512_224_DIGEST_SIZE]); + +#endif /* __SHA512_224_H__ */ +#endif /* WITH_HASH_SHA512_224 */ diff --git a/crypto/libecc/include/libecc/hash/sha512-256.h b/crypto/libecc/include/libecc/hash/sha512-256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha512-256.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA512_256 + +#ifndef __SHA512_256_H__ +#define __SHA512_256_H__ + +#include +#include +#include +#include + +#define SHA512_256_STATE_SIZE SHA512_CORE_STATE_SIZE +#define SHA512_256_BLOCK_SIZE SHA512_CORE_BLOCK_SIZE +#define SHA512_256_DIGEST_SIZE 32 +#define SHA512_256_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA512_256_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA512_256_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA512_256_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA512_256_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA512_256_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA512_256_BLOCK_SIZE +#endif + +#define SHA512_256_HASH_MAGIC ((word_t)(0x1239567373987616ULL)) +#define SHA512_256_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA512_256_HASH_MAGIC), ret, err) + +typedef sha512_core_context sha512_256_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha512_256_init(sha512_256_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha512_256_update(sha512_256_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha512_256_final(sha512_256_context *ctx, u8 output[SHA512_256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha512_256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA512_256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha512_256(const u8 *input, u32 ilen, u8 output[SHA512_256_DIGEST_SIZE]); + +#endif /* __SHA512_256_H__ */ +#endif /* WITH_HASH_SHA512_256 */ diff --git a/crypto/libecc/include/libecc/hash/sha512.h b/crypto/libecc/include/libecc/hash/sha512.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha512.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA512 + +#ifndef __SHA512_H__ +#define __SHA512_H__ + +#include +#include +#include +#include + +#define SHA512_STATE_SIZE SHA512_CORE_STATE_SIZE +#define SHA512_BLOCK_SIZE SHA512_CORE_BLOCK_SIZE +#define SHA512_DIGEST_SIZE SHA512_CORE_DIGEST_SIZE +#define SHA512_DIGEST_SIZE_BITS 512 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHA512_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHA512_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHA512_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHA512_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHA512_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHA512_BLOCK_SIZE +#endif + +#define SHA512_HASH_MAGIC ((word_t)(0x5539012b32097312ULL)) +#define SHA512_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA512_HASH_MAGIC), ret, err) + +typedef sha512_core_context sha512_context; + +ATTRIBUTE_WARN_UNUSED_RET int sha512_init(sha512_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sha512_update(sha512_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha512_final(sha512_context *ctx, u8 output[SHA512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sha512(const u8 *input, u32 ilen, u8 output[SHA512_DIGEST_SIZE]); + +#endif /* __SHA512_H__ */ +#endif /* WITH_HASH_SHA512 */ diff --git a/crypto/libecc/include/libecc/hash/sha512_core.h b/crypto/libecc/include/libecc/hash/sha512_core.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sha512_core.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_HASH_SHA512) || defined(WITH_HASH_SHA512_224) || defined(WITH_HASH_SHA512_256) + +#ifndef __SHA512_CORE_H__ +#define __SHA512_CORE_H__ + +#include +#include +#include + +#define SHA512_CORE_STATE_SIZE 8 +#define SHA512_CORE_BLOCK_SIZE 128 +#define SHA512_CORE_DIGEST_SIZE 64 + +typedef struct { + /* Number of bytes processed on 128 bits */ + u64 sha512_total[2]; + /* Internal state */ + u64 sha512_state[SHA512_CORE_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sha512_buffer[SHA512_CORE_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sha512_core_context; + + +ATTRIBUTE_WARN_UNUSED_RET int sha512_core_update(sha512_core_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sha512_core_final(sha512_core_context *ctx, u8 *output, u32 output_size); + +#endif /* __SHA512_CORE_H__ */ +#endif /* WITH_HASH_SHA512 */ diff --git a/crypto/libecc/include/libecc/hash/shake.h b/crypto/libecc/include/libecc/hash/shake.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/shake.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SHAKE_H__ +#define __SHAKE_H__ + +#include + +typedef enum { + SHAKE_LITTLE = 0, + SHAKE_BIG = 1, +} shake_endianness; +/* + * Generic context for all SHAKE instances. Only difference is digest size + * value, initialized in init() call and used in finalize(). + */ +typedef struct shake_context_ { + u8 shake_digest_size; + u8 shake_block_size; + shake_endianness shake_endian; + /* Local index, useful for the absorbing phase */ + u64 shake_idx; + /* Keccak's state, viewed as a bi-dimensional array */ + u64 shake_state[KECCAK_SLICES * KECCAK_SLICES]; + /* Initialization magic value */ + word_t magic; +} shake_context; + + +ATTRIBUTE_WARN_UNUSED_RET int _shake_init(shake_context *ctx, u8 digest_size, u8 block_size); +ATTRIBUTE_WARN_UNUSED_RET int _shake_update(shake_context *ctx, const u8 *buf, u32 buflen); +ATTRIBUTE_WARN_UNUSED_RET int _shake_finalize(shake_context *ctx, u8 *output); + +#endif /* __SHAKE_H__ */ diff --git a/crypto/libecc/include/libecc/hash/shake256.h b/crypto/libecc/include/libecc/hash/shake256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/shake256.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHAKE256 + +#ifndef __SHAKE256_H__ +#define __SHAKE256_H__ + +#include +#include +#include + +/* NOTE: this is an instantiation of SHAKE256 with + * maximum size of 114 bytes, specifically suited for EdDSA Ed448 + * signature scheme. + */ +#define SHAKE256_BLOCK_SIZE 136 +#define SHAKE256_DIGEST_SIZE 114 +#define SHAKE256_DIGEST_SIZE_BITS 912 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SHAKE256_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SHAKE256_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SHAKE256_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SHAKE256_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SHAKE256_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SHAKE256_BLOCK_SIZE +#endif + +#define SHAKE256_HASH_MAGIC ((word_t)(0x4326763238134567ULL)) +#define SHAKE256_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHAKE256_HASH_MAGIC), ret, err) + +typedef shake_context shake256_context; + +ATTRIBUTE_WARN_UNUSED_RET int shake256_init(shake256_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int shake256_update(shake256_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int shake256_final(shake256_context *ctx, u8 output[SHAKE256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int shake256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHAKE256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int shake256(const u8 *input, u32 ilen, u8 output[SHAKE256_DIGEST_SIZE]); + +#endif /* __SHAKE256_H__ */ +#endif /* WITH_HASH_SHAKE256 */ diff --git a/crypto/libecc/include/libecc/hash/sm3.h b/crypto/libecc/include/libecc/hash/sm3.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/sm3.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SM3 + +#ifndef __SM3_H__ +#define __SM3_H__ + +#include +#include + +#define SM3_STATE_SIZE 8 /* in 32 bits word */ +#define SM3_BLOCK_SIZE 64 +#define SM3_DIGEST_SIZE 32 +#define SM3_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < SM3_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE SM3_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < SM3_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS SM3_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < SM3_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE SM3_BLOCK_SIZE +#endif + +#define SM3_HASH_MAGIC ((word_t)(0x2947510312849204ULL)) +#define SM3_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SM3_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 sm3_total; + /* Internal state */ + u32 sm3_state[SM3_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sm3_buffer[SM3_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sm3_context; + +ATTRIBUTE_WARN_UNUSED_RET int sm3_init(sm3_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int sm3_update(sm3_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int sm3_final(sm3_context *ctx, u8 output[SM3_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sm3_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SM3_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int sm3(const u8 *input, u32 ilen, u8 output[SM3_DIGEST_SIZE]); + +#endif /* __SM3_H__ */ +#endif /* WITH_HASH_SM3 */ diff --git a/crypto/libecc/include/libecc/hash/streebog.h b/crypto/libecc/include/libecc/hash/streebog.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/streebog.h @@ -0,0 +1,1301 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __STREEBOG_H__ +#define __STREEBOG_H__ + +#include + +#if defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512) + +typedef enum { + STREEBOG_LITTLE = 0, + STREEBOG_BIG = 1, +} streebog_endianness; + +/* + * 64-bit integer manipulation macros (big endian and little endian) + */ +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +/* Detect endianness and perform the proper macro */ +#define STREEBOG_PUT_UINT64(n,b,i,endian) \ +do { \ + if(endian == STREEBOG_LITTLE){ \ + PUT_UINT64_BE(n,b,i); \ + } \ + else{ \ + PUT_UINT64_LE(n,b,i); \ + } \ +} while ( 0 ) + +/********************/ +#define STREEBOG_BLOCK_U64_SIZE (8) +#define STREEBOG_BLOCK_SIZE (8 * STREEBOG_BLOCK_U64_SIZE) + +/* + * Generic context for all STREEBOG (alias STREEBOG or STRIBOG) instances. + * Only difference is digest size value, initialized in init() call and used in finalize(). + * In STREEBOG 34.11-2012 (RFC6986) two digest sizes are defined: 256 and 512 bits. + */ +typedef struct streebog_context_ { + u8 streebog_digest_size; + u8 streebog_block_size; + streebog_endianness streebog_endian; + /* Number of bytes processed */ + u64 streebog_total; + /* STREEBOG state */ + u64 h[STREEBOG_BLOCK_U64_SIZE]; + u64 N[STREEBOG_BLOCK_U64_SIZE]; + u64 Sigma[STREEBOG_BLOCK_U64_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 streebog_buffer[STREEBOG_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} streebog_context; + + +/* STREEBOG constants*/ +static const u64 C_STREEBOG[12][STREEBOG_BLOCK_U64_SIZE] = +{ + { /* 0 */ + 0xdd806559f2a64507ULL, 0x05767436cc744d23ULL, + 0xa2422a08a460d315ULL, 0x4b7ce09192676901ULL, + 0x714eb88d7585c4fcULL, 0x2f6a76432e45d016ULL, + 0xebcb2f81c0657c1fULL, 0xb1085bda1ecadae9ULL + }, + { /* 1 */ + 0xe679047021b19bb7ULL, 0x55dda21bd7cbcd56ULL, + 0x5cb561c2db0aa7caULL, 0x9ab5176b12d69958ULL, + 0x61d55e0f16b50131ULL, 0xf3feea720a232b98ULL, + 0x4fe39d460f70b5d7ULL, 0x6fa3b58aa99d2f1aULL + }, + { /* 2 */ + 0x991e96f50aba0ab2ULL, 0xc2b6f443867adb31ULL, + 0xc1c93a376062db09ULL, 0xd3e20fe490359eb1ULL, + 0xf2ea7514b1297b7bULL, 0x06f15e5f529c1f8bULL, + 0x0a39fc286a3d8435ULL, 0xf574dcac2bce2fc7ULL + }, + { /* 3 */ + 0x220cbebc84e3d12eULL, 0x3453eaa193e837f1ULL, + 0xd8b71333935203beULL, 0xa9d72c82ed03d675ULL, + 0x9d721cad685e353fULL, 0x488e857e335c3c7dULL, + 0xf948e1a05d71e4ddULL, 0xef1fdfb3e81566d2ULL + }, + { /* 4 */ + 0x601758fd7c6cfe57ULL, 0x7a56a27ea9ea63f5ULL, + 0xdfff00b723271a16ULL, 0xbfcd1747253af5a3ULL, + 0x359e35d7800fffbdULL, 0x7f151c1f1686104aULL, + 0x9a3f410c6ca92363ULL, 0x4bea6bacad474799ULL + }, + { /* 5 */ + 0xfa68407a46647d6eULL, 0xbf71c57236904f35ULL, + 0x0af21f66c2bec6b6ULL, 0xcffaa6b71c9ab7b4ULL, + 0x187f9ab49af08ec6ULL, 0x2d66c4f95142a46cULL, + 0x6fa4c33b7a3039c0ULL, 0xae4faeae1d3ad3d9ULL + }, + { /* 6 */ + 0x8886564d3a14d493ULL, 0x3517454ca23c4af3ULL, + 0x06476983284a0504ULL, 0x0992abc52d822c37ULL, + 0xd3473e33197a93c9ULL, 0x399ec6c7e6bf87c9ULL, + 0x51ac86febf240954ULL, 0xf4c70e16eeaac5ecULL + }, + { /* 7 */ + 0xa47f0dd4bf02e71eULL, 0x36acc2355951a8d9ULL, + 0x69d18d2bd1a5c42fULL, 0xf4892bcb929b0690ULL, + 0x89b4443b4ddbc49aULL, 0x4eb7f8719c36de1eULL, + 0x03e7aa020c6e4141ULL, 0x9b1f5b424d93c9a7ULL + }, + { /* 8 */ + 0x7261445183235adbULL, 0x0e38dc92cb1f2a60ULL, + 0x7b2b8a9aa6079c54ULL, 0x800a440bdbb2ceb1ULL, + 0x3cd955b7e00d0984ULL, 0x3a7d3a1b25894224ULL, + 0x944c9ad8ec165fdeULL, 0x378f5a541631229bULL + }, + { /* 9 */ + 0x74b4c7fb98459cedULL, 0x3698fad1153bb6c3ULL, + 0x7a1e6c303b7652f4ULL, 0x9fe76702af69334bULL, + 0x1fffe18a1b336103ULL, 0x8941e71cff8a78dbULL, + 0x382ae548b2e4f3f3ULL, 0xabbedea680056f52ULL + }, + { /* 10 */ + 0x6bcaa4cd81f32d1bULL, 0xdea2594ac06fd85dULL, + 0xefbacd1d7d476e98ULL, 0x8a1d71efea48b9caULL, + 0x2001802114846679ULL, 0xd8fa6bbbebab0761ULL, + 0x3002c6cd635afe94ULL, 0x7bcd9ed0efc889fbULL + }, + { /* 11 */ + 0x48bc924af11bd720ULL, 0xfaf417d5d9b21b99ULL, + 0xe71da4aa88e12852ULL, 0x5d80ef9d1891cc86ULL, + 0xf82012d430219f9bULL, 0xcda43c32bcdf1d77ULL, + 0xd21380b00449b17aULL, 0x378ee767f11631baULL + } +}; + + + +static const u64 PI[STREEBOG_BLOCK_U64_SIZE][256] = { + { /* 0 */ + 0xd01f715b5c7ef8e6ULL, 0x16fa240980778325ULL, + 0xa8a42e857ee049c8ULL, 0x6ac1068fa186465bULL, + 0x6e417bd7a2e9320bULL, 0x665c8167a437daabULL, + 0x7666681aa89617f6ULL, 0x4b959163700bdcf5ULL, + 0xf14be6b78df36248ULL, 0xc585bd689a625cffULL, + 0x9557d7fca67d82cbULL, 0x89f0b969af6dd366ULL, + 0xb0833d48749f6c35ULL, 0xa1998c23b1ecbc7cULL, + 0x8d70c431ac02a736ULL, 0xd6dfbc2fd0a8b69eULL, + 0x37aeb3e551fa198bULL, 0x0b7d128a40b5cf9cULL, + 0x5a8f2008b5780cbcULL, 0xedec882284e333e5ULL, + 0xd25fc177d3c7c2ceULL, 0x5e0f5d50b61778ecULL, + 0x1d873683c0c24cb9ULL, 0xad040bcbb45d208cULL, + 0x2f89a0285b853c76ULL, 0x5732fff6791b8d58ULL, + 0x3e9311439ef6ec3fULL, 0xc9183a809fd3c00fULL, + 0x83adf3f5260a01eeULL, 0xa6791941f4e8ef10ULL, + 0x103ae97d0ca1cd5dULL, 0x2ce948121dee1b4aULL, + 0x39738421dbf2bf53ULL, 0x093da2a6cf0cf5b4ULL, + 0xcd9847d89cbcb45fULL, 0xf9561c078b2d8ae8ULL, + 0x9c6a755a6971777fULL, 0xbc1ebaa0712ef0c5ULL, + 0x72e61542abf963a6ULL, 0x78bb5fde229eb12eULL, + 0x14ba94250fceb90dULL, 0x844d6697630e5282ULL, + 0x98ea08026a1e032fULL, 0xf06bbea144217f5cULL, + 0xdb6263d11ccb377aULL, 0x641c314b2b8ee083ULL, + 0x320e96ab9b4770cfULL, 0x1ee7deb986a96b85ULL, + 0xe96cf57a878c47b5ULL, 0xfdd6615f8842feb8ULL, + 0xc83862965601dd1bULL, 0x2ea9f83e92572162ULL, + 0xf876441142ff97fcULL, 0xeb2c455608357d9dULL, + 0x5612a7e0b0c9904cULL, 0x6c01cbfb2d500823ULL, + 0x4548a6a7fa037a2dULL, 0xabc4c6bf388b6ef4ULL, + 0xbade77d4fdf8bebdULL, 0x799b07c8eb4cac3aULL, + 0x0c9d87e805b19cf0ULL, 0xcb588aac106afa27ULL, + 0xea0c1d40c1e76089ULL, 0x2869354a1e816f1aULL, + 0xff96d17307fbc490ULL, 0x9f0a9d602f1a5043ULL, + 0x96373fc6e016a5f7ULL, 0x5292dab8b3a6e41cULL, + 0x9b8ae0382c752413ULL, 0x4f15ec3b7364a8a5ULL, + 0x3fb349555724f12bULL, 0xc7c50d4415db66d7ULL, + 0x92b7429ee379d1a7ULL, 0xd37f99611a15dfdaULL, + 0x231427c05e34a086ULL, 0xa439a96d7b51d538ULL, + 0xb403401077f01865ULL, 0xdda2aea5901d7902ULL, + 0x0a5d4a9c8967d288ULL, 0xc265280adf660f93ULL, + 0x8bb0094520d4e94eULL, 0x2a29856691385532ULL, + 0x42a833c5bf072941ULL, 0x73c64d54622b7eb2ULL, + 0x07e095624504536cULL, 0x8a905153e906f45aULL, + 0x6f6123c16b3b2f1fULL, 0xc6e55552dc097bc3ULL, + 0x4468feb133d16739ULL, 0xe211e7f0c7398829ULL, + 0xa2f96419f7879b40ULL, 0x19074bdbc3ad38e9ULL, + 0xf4ebc3f9474e0b0cULL, 0x43886bd376d53455ULL, + 0xd8028beb5aa01046ULL, 0x51f23282f5cdc320ULL, + 0xe7b1c2be0d84e16dULL, 0x081dfab006dee8a0ULL, + 0x3b33340d544b857bULL, 0x7f5bcabc679ae242ULL, + 0x0edd37c48a08a6d8ULL, 0x81ed43d9a9b33bc6ULL, + 0xb1a3655ebd4d7121ULL, 0x69a1eeb5e7ed6167ULL, + 0xf6ab73d5c8f73124ULL, 0x1a67a3e185c61fd5ULL, + 0x2dc91004d43c065eULL, 0x0240b02c8fb93a28ULL, + 0x90f7f2b26cc0eb8fULL, 0x3cd3a16f114fd617ULL, + 0xaae49ea9f15973e0ULL, 0x06c0cd748cd64e78ULL, + 0xda423bc7d5192a6eULL, 0xc345701c16b41287ULL, + 0x6d2193ede4821537ULL, 0xfcf639494190e3acULL, + 0x7c3b228621f1c57eULL, 0xfb16ac2b0494b0c0ULL, + 0xbf7e529a3745d7f9ULL, 0x6881b6a32e3f7c73ULL, + 0xca78d2bad9b8e733ULL, 0xbbfe2fc2342aa3a9ULL, + 0x0dbddffecc6381e4ULL, 0x70a6a56e2440598eULL, + 0xe4d12a844befc651ULL, 0x8c509c2765d0ba22ULL, + 0xee8c6018c28814d9ULL, 0x17da7c1f49a59e31ULL, + 0x609c4c1328e194d3ULL, 0xb3e3d57232f44b09ULL, + 0x91d7aaa4a512f69bULL, 0x0ffd6fd243dabbccULL, + 0x50d26a943c1fde34ULL, 0x6be15e9968545b4fULL, + 0x94778fea6faf9fdfULL, 0x2b09dd7058ea4826ULL, + 0x677cd9716de5c7bfULL, 0x49d5214fffb2e6ddULL, + 0x0360e83a466b273cULL, 0x1fc786af4f7b7691ULL, + 0xa0b9d435783ea168ULL, 0xd49f0c035f118cb6ULL, + 0x01205816c9d21d14ULL, 0xac2453dd7d8f3d98ULL, + 0x545217cc3f70aa64ULL, 0x26b4028e9489c9c2ULL, + 0xdec2469fd6765e3eULL, 0x04807d58036f7450ULL, + 0xe5f17292823ddb45ULL, 0xf30b569b024a5860ULL, + 0x62dcfc3fa758aefbULL, 0xe84cad6c4e5e5aa1ULL, + 0xccb81fce556ea94bULL, 0x53b282ae7a74f908ULL, + 0x1b47fbf74c1402c1ULL, 0x368eebf39828049fULL, + 0x7afbeff2ad278b06ULL, 0xbe5e0a8cfe97caedULL, + 0xcfd8f7f413058e77ULL, 0xf78b2bc301252c30ULL, + 0x4d555c17fcdd928dULL, 0x5f2f05467fc565f8ULL, + 0x24f4b2a21b30f3eaULL, 0x860dd6bbecb768aaULL, + 0x4c750401350f8f99ULL, 0x0000000000000000ULL, + 0xecccd0344d312ef1ULL, 0xb5231806be220571ULL, + 0xc105c030990d28afULL, 0x653c695de25cfd97ULL, + 0x159acc33c61ca419ULL, 0xb89ec7f872418495ULL, + 0xa9847693b73254dcULL, 0x58cf90243ac13694ULL, + 0x59efc832f3132b80ULL, 0x5c4fed7c39ae42c4ULL, + 0x828dabe3efd81cfaULL, 0xd13f294d95ace5f2ULL, + 0x7d1b7a90e823d86aULL, 0xb643f03cf849224dULL, + 0x3df3f979d89dcb03ULL, 0x7426d836272f2ddeULL, + 0xdfe21e891fa4432aULL, 0x3a136c1b9d99986fULL, + 0xfa36f43dcd46add4ULL, 0xc025982650df35bbULL, + 0x856d3e81aadc4f96ULL, 0xc4a5e57e53b041ebULL, + 0x4708168b75ba4005ULL, 0xaf44bbe73be41aa4ULL, + 0x971767d029c4b8e3ULL, 0xb9be9feebb939981ULL, + 0x215497ecd18d9aaeULL, 0x316e7e91dd2c57f3ULL, + 0xcef8afe2dad79363ULL, 0x3853dc371220a247ULL, + 0x35ee03c9de4323a3ULL, 0xe6919aa8c456fc79ULL, + 0xe05157dc4880b201ULL, 0x7bdbb7e464f59612ULL, + 0x127a59518318f775ULL, 0x332ecebd52956ddbULL, + 0x8f30741d23bb9d1eULL, 0xd922d3fd93720d52ULL, + 0x7746300c61440ae2ULL, 0x25d4eab4d2e2eefeULL, + 0x75068020eefd30caULL, 0x135a01474acaea61ULL, + 0x304e268714fe4ae7ULL, 0xa519f17bb283c82cULL, + 0xdc82f6b359cf6416ULL, 0x5baf781e7caa11a8ULL, + 0xb2c38d64fb26561dULL, 0x34ce5bdf17913eb7ULL, + 0x5d6fb56af07c5fd0ULL, 0x182713cd0a7f25fdULL, + 0x9e2ac576e6c84d57ULL, 0x9aaab82ee5a73907ULL, + 0xa3d93c0f3e558654ULL, 0x7e7b92aaae48ff56ULL, + 0x872d8ead256575beULL, 0x41c8dbfff96c0e7dULL, + 0x99ca5014a3cc1e3bULL, 0x40e883e930be1369ULL, + 0x1ca76e95091051adULL, 0x4e35b42dbab6b5b1ULL, + 0x05a0254ecabd6944ULL, 0xe1710fca8152af15ULL, + 0xf22b0e8dcb984574ULL, 0xb763a82a319b3f59ULL, + 0x63fca4296e8ab3efULL, 0x9d4a2d4ca0a36a6bULL, + 0xe331bfe60eeb953dULL, 0xd5bf541596c391a2ULL, + 0xf5cb9bef8e9c1618ULL, 0x46284e9dbc685d11ULL, + 0x2074cffa185f87baULL, 0xbd3ee2b6b8fcedd1ULL, + 0xae64e3f1f23607b0ULL, 0xfeb68965ce29d984ULL, + 0x55724fdaf6a2b770ULL, 0x29496d5cd753720eULL, + 0xa75941573d3af204ULL, 0x8e102c0bea69800aULL, + 0x111ab16bc573d049ULL, 0xd7ffe439197aab8aULL, + 0xefac380e0b5a09cdULL, 0x48f579593660fbc9ULL, + 0x22347fd697e6bd92ULL, 0x61bc1405e13389c7ULL, + 0x4ab5c975b9d9c1e1ULL, 0x80cd1bcf606126d2ULL, + 0x7186fd78ed92449aULL, 0x93971a882aabccb3ULL, + 0x88d0e17f66bfce72ULL, 0x27945a985d5bd4d6ULL + }, { /* 1 */ + 0xde553f8c05a811c8ULL, 0x1906b59631b4f565ULL, + 0x436e70d6b1964ff7ULL, 0x36d343cb8b1e9d85ULL, + 0x843dfacc858aab5aULL, 0xfdfc95c299bfc7f9ULL, + 0x0f634bdea1d51fa2ULL, 0x6d458b3b76efb3cdULL, + 0x85c3f77cf8593f80ULL, 0x3c91315fbe737cb2ULL, + 0x2148b03366ace398ULL, 0x18f8b8264c6761bfULL, + 0xc830c1c495c9fb0fULL, 0x981a76102086a0aaULL, + 0xaa16012142f35760ULL, 0x35cc54060c763cf6ULL, + 0x42907d66cc45db2dULL, 0x8203d44b965af4bcULL, + 0x3d6f3cefc3a0e868ULL, 0xbc73ff69d292bda7ULL, + 0x8722ed0102e20a29ULL, 0x8f8185e8cd34deb7ULL, + 0x9b0561dda7ee01d9ULL, 0x5335a0193227fad6ULL, + 0xc9cecc74e81a6fd5ULL, 0x54f5832e5c2431eaULL, + 0x99e47ba05d553470ULL, 0xf7bee756acd226ceULL, + 0x384e05a5571816fdULL, 0xd1367452a47d0e6aULL, + 0xf29fde1c386ad85bULL, 0x320c77316275f7caULL, + 0xd0c879e2d9ae9ab0ULL, 0xdb7406c69110ef5dULL, + 0x45505e51a2461011ULL, 0xfc029872e46c5323ULL, + 0xfa3cb6f5f7bc0cc5ULL, 0x031f17cd8768a173ULL, + 0xbd8df2d9af41297dULL, 0x9d3b4f5ab43e5e3fULL, + 0x4071671b36feee84ULL, 0x716207e7d3e3b83dULL, + 0x48d20ff2f9283a1aULL, 0x27769eb4757cbc7eULL, + 0x5c56ebc793f2e574ULL, 0xa48b474f9ef5dc18ULL, + 0x52cbada94ff46e0cULL, 0x60c7da982d8199c6ULL, + 0x0e9d466edc068b78ULL, 0x4eec2175eaf865fcULL, + 0x550b8e9e21f7a530ULL, 0x6b7ba5bc653fec2bULL, + 0x5eb7f1ba6949d0ddULL, 0x57ea94e3db4c9099ULL, + 0xf640eae6d101b214ULL, 0xdd4a284182c0b0bbULL, + 0xff1d8fbf6304f250ULL, 0xb8accb933bf9d7e8ULL, + 0xe8867c478eb68c4dULL, 0x3f8e2692391bddc1ULL, + 0xcb2fd60912a15a7cULL, 0xaec935dbab983d2fULL, + 0xf55ffd2b56691367ULL, 0x80e2ce366ce1c115ULL, + 0x179bf3f8edb27e1dULL, 0x01fe0db07dd394daULL, + 0xda8a0b76ecc37b87ULL, 0x44ae53e1df9584cbULL, + 0xb310b4b77347a205ULL, 0xdfab323c787b8512ULL, + 0x3b511268d070b78eULL, 0x65e6e3d2b9396753ULL, + 0x6864b271e2574d58ULL, 0x259784c98fc789d7ULL, + 0x02e11a7dfabb35a9ULL, 0x8841a6dfa337158bULL, + 0x7ade78c39b5dcdd0ULL, 0xb7cf804d9a2cc84aULL, + 0x20b6bd831b7f7742ULL, 0x75bd331d3a88d272ULL, + 0x418f6aab4b2d7a5eULL, 0xd9951cbb6babdaf4ULL, + 0xb6318dfde7ff5c90ULL, 0x1f389b112264aa83ULL, + 0x492c024284fbaec0ULL, 0xe33a0363c608f9a0ULL, + 0x2688930408af28a4ULL, 0xc7538a1a341ce4adULL, + 0x5da8e677ee2171aeULL, 0x8c9e92254a5c7fc4ULL, + 0x63d8cd55aae938b5ULL, 0x29ebd8daa97a3706ULL, + 0x959827b37be88aa1ULL, 0x1484e4356adadf6eULL, + 0xa7945082199d7d6bULL, 0xbf6ce8a455fa1cd4ULL, + 0x9cc542eac9edcae5ULL, 0x79c16f0e1c356ca3ULL, + 0x89bfab6fdee48151ULL, 0xd4174d1830c5f0ffULL, + 0x9258048415eb419dULL, 0x6139d72850520d1cULL, + 0x6a85a80c18ec78f1ULL, 0xcd11f88e0171059aULL, + 0xcceff53e7ca29140ULL, 0xd229639f2315af19ULL, + 0x90b91ef9ef507434ULL, 0x5977d28d074a1be1ULL, + 0x311360fce51d56b9ULL, 0xc093a92d5a1f2f91ULL, + 0x1a19a25bb6dc5416ULL, 0xeb996b8a09de2d3eULL, + 0xfee3820f1ed7668aULL, 0xd7085ad5b7ad518cULL, + 0x7fff41890fe53345ULL, 0xec5948bd67dde602ULL, + 0x2fd5f65dbaaa68e0ULL, 0xa5754affe32648c2ULL, + 0xf8ddac880d07396cULL, 0x6fa491468c548664ULL, + 0x0c7c5c1326bdbed1ULL, 0x4a33158f03930fb3ULL, + 0x699abfc19f84d982ULL, 0xe4fa2054a80b329cULL, + 0x6707f9af438252faULL, 0x08a368e9cfd6d49eULL, + 0x47b1442c58fd25b8ULL, 0xbbb3dc5ebc91769bULL, + 0x1665fe489061eac7ULL, 0x33f27a811fa66310ULL, + 0x93a609346838d547ULL, 0x30ed6d4c98cec263ULL, + 0x1dd9816cd8df9f2aULL, 0x94662a03063b1e7bULL, + 0x83fdd9fbeb896066ULL, 0x7b207573e68e590aULL, + 0x5f49fc0a149a4407ULL, 0x343259b671a5a82cULL, + 0xfbc2bb458a6f981fULL, 0xc272b350a0a41a38ULL, + 0x3aaf1fd8ada32354ULL, 0x6cbb868b0b3c2717ULL, + 0xa2b569c88d2583feULL, 0xf180c9d1bf027928ULL, + 0xaf37386bd64ba9f5ULL, 0x12bacab2790a8088ULL, + 0x4c0d3b0810435055ULL, 0xb2eeb9070e9436dfULL, + 0xc5b29067cea7d104ULL, 0xdcb425f1ff132461ULL, + 0x4f122cc5972bf126ULL, 0xac282fa651230886ULL, + 0xe7e537992f6393efULL, 0xe61b3a2952b00735ULL, + 0x709c0a57ae302ce7ULL, 0xe02514ae416058d3ULL, + 0xc44c9dd7b37445deULL, 0x5a68c5408022ba92ULL, + 0x1c278cdca50c0bf0ULL, 0x6e5a9cf6f18712beULL, + 0x86dce0b17f319ef3ULL, 0x2d34ec2040115d49ULL, + 0x4bcd183f7e409b69ULL, 0x2815d56ad4a9a3dcULL, + 0x24698979f2141d0dULL, 0x0000000000000000ULL, + 0x1ec696a15fb73e59ULL, 0xd86b110b16784e2eULL, + 0x8e7f8858b0e74a6dULL, 0x063e2e8713d05fe6ULL, + 0xe2c40ed3bbdb6d7aULL, 0xb1f1aeca89fc97acULL, + 0xe1db191e3cb3cc09ULL, 0x6418ee62c4eaf389ULL, + 0xc6ad87aa49cf7077ULL, 0xd6f65765ca7ec556ULL, + 0x9afb6c6dda3d9503ULL, 0x7ce05644888d9236ULL, + 0x8d609f95378feb1eULL, 0x23a9aa4e9c17d631ULL, + 0x6226c0e5d73aac6fULL, 0x56149953a69f0443ULL, + 0xeeb852c09d66d3abULL, 0x2b0ac2a753c102afULL, + 0x07c023376e03cb3cULL, 0x2ccae1903dc2c993ULL, + 0xd3d76e2f5ec63bc3ULL, 0x9e2458973356ff4cULL, + 0xa66a5d32644ee9b1ULL, 0x0a427294356de137ULL, + 0x783f62be61e6f879ULL, 0x1344c70204d91452ULL, + 0x5b96c8f0fdf12e48ULL, 0xa90916ecc59bf613ULL, + 0xbe92e5142829880eULL, 0x727d102a548b194eULL, + 0x1be7afebcb0fc0ccULL, 0x3e702b2244c8491bULL, + 0xd5e940a84d166425ULL, 0x66f9f41f3e51c620ULL, + 0xabe80c913f20c3baULL, 0xf07ec461c2d1edf2ULL, + 0xf361d3ac45b94c81ULL, 0x0521394a94b8fe95ULL, + 0xadd622162cf09c5cULL, 0xe97871f7f3651897ULL, + 0xf4a1f09b2bba87bdULL, 0x095d6559b2054044ULL, + 0x0bbc7f2448be75edULL, 0x2af4cf172e129675ULL, + 0x157ae98517094bb4ULL, 0x9fda55274e856b96ULL, + 0x914713499283e0eeULL, 0xb952c623462a4332ULL, + 0x74433ead475b46a8ULL, 0x8b5eb112245fb4f8ULL, + 0xa34b6478f0f61724ULL, 0x11a5dd7ffe6221fbULL, + 0xc16da49d27ccbb4bULL, 0x76a224d0bde07301ULL, + 0x8aa0bca2598c2022ULL, 0x4df336b86d90c48fULL, + 0xea67663a740db9e4ULL, 0xef465f70e0b54771ULL, + 0x39b008152acb8227ULL, 0x7d1e5bf4f55e06ecULL, + 0x105bd0cf83b1b521ULL, 0x775c2960c033e7dbULL, + 0x7e014c397236a79fULL, 0x811cc386113255cfULL, + 0xeda7450d1a0e72d8ULL, 0x5889df3d7a998f3bULL, + 0x2e2bfbedc779fc3aULL, 0xce0eef438619a4e9ULL, + 0x372d4e7bf6cd095fULL, 0x04df34fae96b6a4fULL, + 0xf923a13870d4adb6ULL, 0xa1aa7e050a4d228dULL, + 0xa8f71b5cb84862c9ULL, 0xb52e9a306097fde3ULL, + 0x0d8251a35b6e2a0bULL, 0x2257a7fee1c442ebULL, + 0x73831d9a29588d94ULL, 0x51d4ba64c89ccf7fULL, + 0x502ab7d4b54f5ba5ULL, 0x97793dce8153bf08ULL, + 0xe5042de4d5d8a646ULL, 0x9687307efc802bd2ULL, + 0xa05473b5779eb657ULL, 0xb4d097801d446939ULL, + 0xcff0e2f3fbca3033ULL, 0xc38cbee0dd778ee2ULL, + 0x464f499c252eb162ULL, 0xcad1dbb96f72cea6ULL, + 0xba4dd1eec142e241ULL, 0xb00fa37af42f0376ULL + }, { /* 2 */ + 0xcce4cd3aa968b245ULL, 0x089d5484e80b7fafULL, + 0x638246c1b3548304ULL, 0xd2fe0ec8c2355492ULL, + 0xa7fbdf7ff2374eeeULL, 0x4df1600c92337a16ULL, + 0x84e503ea523b12fbULL, 0x0790bbfd53ab0c4aULL, + 0x198a780f38f6ea9dULL, 0x2ab30c8f55ec48cbULL, + 0xe0f7fed6b2c49db5ULL, 0xb6ecf3f422cadbdcULL, + 0x409c9a541358df11ULL, 0xd3ce8a56dfde3fe3ULL, + 0xc3e9224312c8c1a0ULL, 0x0d6dfa58816ba507ULL, + 0xddf3e1b179952777ULL, 0x04c02a42748bb1d9ULL, + 0x94c2abff9f2decb8ULL, 0x4f91752da8f8acf4ULL, + 0x78682befb169bf7bULL, 0xe1c77a48af2ff6c4ULL, + 0x0c5d7ec69c80ce76ULL, 0x4cc1e4928fd81167ULL, + 0xfeed3d24d9997b62ULL, 0x518bb6dfc3a54a23ULL, + 0x6dbf2d26151f9b90ULL, 0xb5bc624b05ea664fULL, + 0xe86aaa525acfe21aULL, 0x4801ced0fb53a0beULL, + 0xc91463e6c00868edULL, 0x1027a815cd16fe43ULL, + 0xf67069a0319204cdULL, 0xb04ccc976c8abce7ULL, + 0xc0b9b3fc35e87c33ULL, 0xf380c77c58f2de65ULL, + 0x50bb3241de4e2152ULL, 0xdf93f490435ef195ULL, + 0xf1e0d25d62390887ULL, 0xaf668bfb1a3c3141ULL, + 0xbc11b251f00a7291ULL, 0x73a5eed47e427d47ULL, + 0x25bee3f6ee4c3b2eULL, 0x43cc0beb34786282ULL, + 0xc824e778dde3039cULL, 0xf97d86d98a327728ULL, + 0xf2b043e24519b514ULL, 0xe297ebf7880f4b57ULL, + 0x3a94a49a98fab688ULL, 0x868516cb68f0c419ULL, + 0xeffa11af0964ee50ULL, 0xa4ab4ec0d517f37dULL, + 0xa9c6b498547c567aULL, 0x8e18424f80fbbbb6ULL, + 0x0bcdc53bcf2bc23cULL, 0x137739aaea3643d0ULL, + 0x2c1333ec1bac2ff0ULL, 0x8d48d3f0a7db0625ULL, + 0x1e1ac3f26b5de6d7ULL, 0xf520f81f16b2b95eULL, + 0x9f0f6ec450062e84ULL, 0x0130849e1deb6b71ULL, + 0xd45e31ab8c7533a9ULL, 0x652279a2fd14e43fULL, + 0x3209f01e70f1c927ULL, 0xbe71a770cac1a473ULL, + 0x0e3d6be7a64b1894ULL, 0x7ec8148cff29d840ULL, + 0xcb7476c7fac3be0fULL, 0x72956a4a63a91636ULL, + 0x37f95ec21991138fULL, 0x9e3fea5a4ded45f5ULL, + 0x7b38ba50964902e8ULL, 0x222e580bbde73764ULL, + 0x61e253e0899f55e6ULL, 0xfc8d2805e352ad80ULL, + 0x35994be3235ac56dULL, 0x09add01af5e014deULL, + 0x5e8659a6780539c6ULL, 0xb17c48097161d796ULL, + 0x026015213acbd6e2ULL, 0xd1ae9f77e515e901ULL, + 0xb7dc776a3f21b0adULL, 0xaba6a1b96eb78098ULL, + 0x9bcf4486248d9f5dULL, 0x582666c536455efdULL, + 0xfdbdac9bfeb9c6f1ULL, 0xc47999be4163cdeaULL, + 0x765540081722a7efULL, 0x3e548ed8ec710751ULL, + 0x3d041f67cb51bac2ULL, 0x7958af71ac82d40aULL, + 0x36c9da5c047a78feULL, 0xed9a048e33af38b2ULL, + 0x26ee7249c96c86bdULL, 0x900281bdeba65d61ULL, + 0x11172c8bd0fd9532ULL, 0xea0abf73600434f8ULL, + 0x42fc8f75299309f3ULL, 0x34a9cf7d3eb1ae1cULL, + 0x2b838811480723baULL, 0x5ce64c8742ceef24ULL, + 0x1adae9b01fd6570eULL, 0x3c349bf9d6bad1b3ULL, + 0x82453c891c7b75c0ULL, 0x97923a40b80d512bULL, + 0x4a61dbf1c198765cULL, 0xb48ce6d518010d3eULL, + 0xcfb45c858e480fd6ULL, 0xd933cbf30d1e96aeULL, + 0xd70ea014ab558e3aULL, 0xc189376228031742ULL, + 0x9262949cd16d8b83ULL, 0xeb3a3bed7def5f89ULL, + 0x49314a4ee6b8cbcfULL, 0xdcc3652f647e4c06ULL, + 0xda635a4c2a3e2b3dULL, 0x470c21a940f3d35bULL, + 0x315961a157d174b4ULL, 0x6672e81dda3459acULL, + 0x5b76f77a1165e36eULL, 0x445cb01667d36ec8ULL, + 0xc5491d205c88a69bULL, 0x456c34887a3805b9ULL, + 0xffddb9bac4721013ULL, 0x99af51a71e4649bfULL, + 0xa15be01cbc7729d5ULL, 0x52db2760e485f7b0ULL, + 0x8c78576eba306d54ULL, 0xae560f6507d75a30ULL, + 0x95f22f6182c687c9ULL, 0x71c5fbf54489aba5ULL, + 0xca44f259e728d57eULL, 0x88b87d2ccebbdc8dULL, + 0xbab18d32be4a15aaULL, 0x8be8ec93e99b611eULL, + 0x17b713e89ebdf209ULL, 0xb31c5d284baa0174ULL, + 0xeeca9531148f8521ULL, 0xb8d198138481c348ULL, + 0x8988f9b2d350b7fcULL, 0xb9e11c8d996aa839ULL, + 0x5a4673e40c8e881fULL, 0x1687977683569978ULL, + 0xbf4123eed72acf02ULL, 0x4ea1f1b3b513c785ULL, + 0xe767452be16f91ffULL, 0x7505d1b730021a7cULL, + 0xa59bca5ec8fc980cULL, 0xad069eda20f7e7a3ULL, + 0x38f4b1bba231606aULL, 0x60d2d77e94743e97ULL, + 0x9affc0183966f42cULL, 0x248e6768f3a7505fULL, + 0xcdd449a4b483d934ULL, 0x87b59255751baf68ULL, + 0x1bea6d2e023d3c7fULL, 0x6b1f12455b5ffcabULL, + 0x743555292de9710dULL, 0xd8034f6d10f5fddfULL, + 0xc6198c9f7ba81b08ULL, 0xbb8109aca3a17edbULL, + 0xfa2d1766ad12cabbULL, 0xc729080166437079ULL, + 0x9c5fff7b77269317ULL, 0x0000000000000000ULL, + 0x15d706c9a47624ebULL, 0x6fdf38072fd44d72ULL, + 0x5fb6dd3865ee52b7ULL, 0xa33bf53d86bcff37ULL, + 0xe657c1b5fc84fa8eULL, 0xaa962527735cebe9ULL, + 0x39c43525bfda0b1bULL, 0x204e4d2a872ce186ULL, + 0x7a083ece8ba26999ULL, 0x554b9c9db72efbfaULL, + 0xb22cd9b656416a05ULL, 0x96a2bedea5e63a5aULL, + 0x802529a826b0a322ULL, 0x8115ad363b5bc853ULL, + 0x8375b81701901eb1ULL, 0x3069e53f4a3a1fc5ULL, + 0xbd2136cfede119e0ULL, 0x18bafc91251d81ecULL, + 0x1d4a524d4c7d5b44ULL, 0x05f0aedc6960daa8ULL, + 0x29e39d3072ccf558ULL, 0x70f57f6b5962c0d4ULL, + 0x989fd53903ad22ceULL, 0xf84d024797d91c59ULL, + 0x547b1803aac5908bULL, 0xf0d056c37fd263f6ULL, + 0xd56eb535919e58d8ULL, 0x1c7ad6d351963035ULL, + 0x2e7326cd2167f912ULL, 0xac361a443d1c8cd2ULL, + 0x697f076461942a49ULL, 0x4b515f6fdc731d2dULL, + 0x8ad8680df4700a6fULL, 0x41ac1eca0eb3b460ULL, + 0x7d988533d80965d3ULL, 0xa8f6300649973d0bULL, + 0x7765c4960ac9cc9eULL, 0x7ca801adc5e20ea2ULL, + 0xdea3700e5eb59ae4ULL, 0xa06b6482a19c42a4ULL, + 0x6a2f96db46b497daULL, 0x27def6d7d487edccULL, + 0x463ca5375d18b82aULL, 0xa6cb5be1efdc259fULL, + 0x53eba3fef96e9cc1ULL, 0xce84d81b93a364a7ULL, + 0xf4107c810b59d22fULL, 0x333974806d1aa256ULL, + 0x0f0def79bba073e5ULL, 0x231edc95a00c5c15ULL, + 0xe437d494c64f2c6cULL, 0x91320523f64d3610ULL, + 0x67426c83c7df32ddULL, 0x6eefbc99323f2603ULL, + 0x9d6f7be56acdf866ULL, 0x5916e25b2bae358cULL, + 0x7ff89012e2c2b331ULL, 0x035091bf2720bd93ULL, + 0x561b0d22900e4669ULL, 0x28d319ae6f279e29ULL, + 0x2f43a2533c8c9263ULL, 0xd09e1be9f8fe8270ULL, + 0xf740ed3e2c796fbcULL, 0xdb53ded237d5404cULL, + 0x62b2c25faebfe875ULL, 0x0afd41a5d2c0a94dULL, + 0x6412fd3ce0ff8f4eULL, 0xe3a76f6995e42026ULL, + 0x6c8fa9b808f4f0e1ULL, 0xc2d9a6dd0f23aad1ULL, + 0x8f28c6d19d10d0c7ULL, 0x85d587744fd0798aULL, + 0xa20b71a39b579446ULL, 0x684f83fa7c7f4138ULL, + 0xe507500adba4471dULL, 0x3f640a46f19a6c20ULL, + 0x1247bd34f7dd28a1ULL, 0x2d23b77206474481ULL, + 0x93521002cc86e0f2ULL, 0x572b89bc8de52d18ULL, + 0xfb1d93f8b0f9a1caULL, 0xe95a2ecc4724896bULL, + 0x3ba420048511ddf9ULL, 0xd63e248ab6bee54bULL, + 0x5dd6c8195f258455ULL, 0x06a03f634e40673bULL, + 0x1f2a476c76b68da6ULL, 0x217ec9b49ac78af7ULL, + 0xecaa80102e4453c3ULL, 0x14e78257b99d4f9aULL + }, { /* 3 */ + 0x20329b2cc87bba05ULL, 0x4f5eb6f86546a531ULL, + 0xd4f44775f751b6b1ULL, 0x8266a47b850dfa8bULL, + 0xbb986aa15a6ca985ULL, 0xc979eb08f9ae0f99ULL, + 0x2da6f447a2375ea1ULL, 0x1e74275dcd7d8576ULL, + 0xbc20180a800bc5f8ULL, 0xb4a2f701b2dc65beULL, + 0xe726946f981b6d66ULL, 0x48e6c453bf21c94cULL, + 0x42cad9930f0a4195ULL, 0xefa47b64aacccd20ULL, + 0x71180a8960409a42ULL, 0x8bb3329bf6a44e0cULL, + 0xd34c35de2d36daccULL, 0xa92f5b7cbc23dc96ULL, + 0xb31a85aa68bb09c3ULL, 0x13e04836a73161d2ULL, + 0xb24dfc4129c51d02ULL, 0x8ae44b70b7da5acdULL, + 0xe671ed84d96579a7ULL, 0xa4bb3417d66f3832ULL, + 0x4572ab38d56d2de8ULL, 0xb1b47761ea47215cULL, + 0xe81c09cf70aba15dULL, 0xffbdb872ce7f90acULL, + 0xa8782297fd5dc857ULL, 0x0d946f6b6a4ce4a4ULL, + 0xe4df1f4f5b995138ULL, 0x9ebc71edca8c5762ULL, + 0x0a2c1dc0b02b88d9ULL, 0x3b503c115d9d7b91ULL, + 0xc64376a8111ec3a2ULL, 0xcec199a323c963e4ULL, + 0xdc76a87ec58616f7ULL, 0x09d596e073a9b487ULL, + 0x14583a9d7d560dafULL, 0xf4c6dc593f2a0cb4ULL, + 0xdd21d19584f80236ULL, 0x4a4836983ddde1d3ULL, + 0xe58866a41ae745f9ULL, 0xf591a5b27e541875ULL, + 0x891dc05074586693ULL, 0x5b068c651810a89eULL, + 0xa30346bc0c08544fULL, 0x3dbf3751c684032dULL, + 0x2a1e86ec785032dcULL, 0xf73f5779fca830eaULL, + 0xb60c05ca30204d21ULL, 0x0cc316802b32f065ULL, + 0x8770241bdd96be69ULL, 0xb861e18199ee95dbULL, + 0xf805cad91418fcd1ULL, 0x29e70dccbbd20e82ULL, + 0xc7140f435060d763ULL, 0x0f3a9da0e8b0cc3bULL, + 0xa2543f574d76408eULL, 0xbd7761e1c175d139ULL, + 0x4b1f4f737ca3f512ULL, 0x6dc2df1f2fc137abULL, + 0xf1d05c3967b14856ULL, 0xa742bf3715ed046cULL, + 0x654030141d1697edULL, 0x07b872abda676c7dULL, + 0x3ce84eba87fa17ecULL, 0xc1fb0403cb79afdfULL, + 0x3e46bc7105063f73ULL, 0x278ae987121cd678ULL, + 0xa1adb4778ef47cd0ULL, 0x26dd906c5362c2b9ULL, + 0x05168060589b44e2ULL, 0xfbfc41f9d79ac08fULL, + 0x0e6de44ba9ced8faULL, 0x9feb08068bf243a3ULL, + 0x7b341749d06b129bULL, 0x229c69e74a87929aULL, + 0xe09ee6c4427c011bULL, 0x5692e30e725c4c3aULL, + 0xda99a33e5e9f6e4bULL, 0x353dd85af453a36bULL, + 0x25241b4c90e0fee7ULL, 0x5de987258309d022ULL, + 0xe230140fc0802984ULL, 0x93281e86a0c0b3c6ULL, + 0xf229d719a4337408ULL, 0x6f6c2dd4ad3d1f34ULL, + 0x8ea5b2fbae3f0aeeULL, 0x8331dd90c473ee4aULL, + 0x346aa1b1b52db7aaULL, 0xdf8f235e06042aa9ULL, + 0xcc6f6b68a1354b7bULL, 0x6c95a6f46ebf236aULL, + 0x52d31a856bb91c19ULL, 0x1a35ded6d498d555ULL, + 0xf37eaef2e54d60c9ULL, 0x72e181a9a3c2a61cULL, + 0x98537aad51952fdeULL, 0x16f6c856ffaa2530ULL, + 0xd960281e9d1d5215ULL, 0x3a0745fa1ce36f50ULL, + 0x0b7b642bf1559c18ULL, 0x59a87eae9aec8001ULL, + 0x5e100c05408bec7cULL, 0x0441f98b19e55023ULL, + 0xd70dcc5534d38aefULL, 0x927f676de1bea707ULL, + 0x9769e70db925e3e5ULL, 0x7a636ea29115065aULL, + 0x468b201816ef11b6ULL, 0xab81a9b73edff409ULL, + 0xc0ac7de88a07bb1eULL, 0x1f235eb68c0391b7ULL, + 0x6056b074458dd30fULL, 0xbe8eeac102f7ed67ULL, + 0xcd381283e04b5fbaULL, 0x5cbefecec277c4e3ULL, + 0xd21b4c356c48ce0dULL, 0x1019c31664b35d8cULL, + 0x247362a7d19eea26ULL, 0xebe582efb3299d03ULL, + 0x02aef2cb82fc289fULL, 0x86275df09ce8aaa8ULL, + 0x28b07427faac1a43ULL, 0x38a9b7319e1f47cfULL, + 0xc82e92e3b8d01b58ULL, 0x06ef0b409b1978bcULL, + 0x62f842bfc771fb90ULL, 0x9904034610eb3b1fULL, + 0xded85ab5477a3e68ULL, 0x90d195a663428f98ULL, + 0x5384636e2ac708d8ULL, 0xcbd719c37b522706ULL, + 0xae9729d76644b0ebULL, 0x7c8c65e20a0c7ee6ULL, + 0x80c856b007f1d214ULL, 0x8c0b40302cc32271ULL, + 0xdbcedad51fe17a8aULL, 0x740e8ae938dbdea0ULL, + 0xa615c6dc549310adULL, 0x19cc55f6171ae90bULL, + 0x49b1bdb8fe5fdd8dULL, 0xed0a89af2830e5bfULL, + 0x6a7aadb4f5a65bd6ULL, 0x7e22972988f05679ULL, + 0xf952b3325566e810ULL, 0x39fecedadf61530eULL, + 0x6101c99f04f3c7ceULL, 0x2e5f7f6761b562ffULL, + 0xf08725d226cf5c97ULL, 0x63af3b54860fef51ULL, + 0x8ff2cb10ef411e2fULL, 0x884ab9bb35267252ULL, + 0x4df04433e7ba8daeULL, 0x9afd8866d3690741ULL, + 0x66b9bb34de94abb3ULL, 0x9baaf18d92171380ULL, + 0x543c11c5f0a064a5ULL, 0x17a1b1bdbed431f1ULL, + 0xb5f58eeaf3a2717fULL, 0xc355f6c849858740ULL, + 0xec5df044694ef17eULL, 0xd83751f5dc6346d4ULL, + 0xfc4433520dfdacf2ULL, 0x0000000000000000ULL, + 0x5a51f58e596ebc5fULL, 0x3285aaf12e34cf16ULL, + 0x8d5c39db6dbd36b0ULL, 0x12b731dde64f7513ULL, + 0x94906c2d7aa7dfbbULL, 0x302b583aacc8e789ULL, + 0x9d45facd090e6b3cULL, 0x2165e2c78905aec4ULL, + 0x68d45f7f775a7349ULL, 0x189b2c1d5664fdcaULL, + 0xe1c99f2f030215daULL, 0x6983269436246788ULL, + 0x8489af3b1e148237ULL, 0xe94b702431d5b59cULL, + 0x33d2d31a6f4adbd7ULL, 0xbfd9932a4389f9a6ULL, + 0xb0e30e8aab39359dULL, 0xd1e2c715afcaf253ULL, + 0x150f43763c28196eULL, 0xc4ed846393e2eb3dULL, + 0x03f98b20c3823c5eULL, 0xfd134ab94c83b833ULL, + 0x556b682eb1de7064ULL, 0x36c4537a37d19f35ULL, + 0x7559f30279a5ca61ULL, 0x799ae58252973a04ULL, + 0x9c12832648707ffdULL, 0x78cd9c6913e92ec5ULL, + 0x1d8dac7d0effb928ULL, 0x439da0784e745554ULL, + 0x413352b3cc887dcbULL, 0xbacf134a1b12bd44ULL, + 0x114ebafd25cd494dULL, 0x2f08068c20cb763eULL, + 0x76a07822ba27f63fULL, 0xeab2fb04f25789c2ULL, + 0xe3676de481fe3d45ULL, 0x1b62a73d95e6c194ULL, + 0x641749ff5c68832cULL, 0xa5ec4dfc97112cf3ULL, + 0xf6682e92bdd6242bULL, 0x3f11c59a44782bb2ULL, + 0x317c21d1edb6f348ULL, 0xd65ab5be75ad9e2eULL, + 0x6b2dd45fb4d84f17ULL, 0xfaab381296e4d44eULL, + 0xd0b5befeeeb4e692ULL, 0x0882ef0b32d7a046ULL, + 0x512a91a5a83b2047ULL, 0x963e9ee6f85bf724ULL, + 0x4e09cf132438b1f0ULL, 0x77f701c9fb59e2feULL, + 0x7ddb1c094b726a27ULL, 0x5f4775ee01f5f8bdULL, + 0x9186ec4d223c9b59ULL, 0xfeeac1998f01846dULL, + 0xac39db1ce4b89874ULL, 0xb75b7c21715e59e0ULL, + 0xafc0503c273aa42aULL, 0x6e3b543fec430bf5ULL, + 0x704f7362213e8e83ULL, 0x58ff0745db9294c0ULL, + 0x67eec2df9feabf72ULL, 0xa0facd9ccf8a6811ULL, + 0xb936986ad890811aULL, 0x95c715c63bd9cb7aULL, + 0xca8060283a2c33c7ULL, 0x507de84ee9453486ULL, + 0x85ded6d05f6a96f6ULL, 0x1cdad5964f81ade9ULL, + 0xd5a33e9eb62fa270ULL, 0x40642b588df6690aULL, + 0x7f75eec2c98e42b8ULL, 0x2cf18dace3494a60ULL, + 0x23cb100c0bf9865bULL, 0xeef3028febb2d9e1ULL, + 0x4425d2d394133929ULL, 0xaad6d05c7fa1e0c8ULL, + 0xad6ea2f7a5c68cb5ULL, 0xc2028f2308fb9381ULL, + 0x819f2f5b468fc6d5ULL, 0xc5bafd88d29cfffcULL, + 0x47dc59f357910577ULL, 0x2b49ff07392e261dULL, + 0x57c59ae5332258fbULL, 0x73b6f842e2bcb2ddULL, + 0xcf96e04862b77725ULL, 0x4ca73dd8a6c4996fULL, + 0x015779eb417e14c1ULL, 0x37932a9176af8bf4ULL + }, { /* 4 */ + 0x190a2c9b249df23eULL, 0x2f62f8b62263e1e9ULL, + 0x7a7f754740993655ULL, 0x330b7ba4d5564d9fULL, + 0x4c17a16a46672582ULL, 0xb22f08eb7d05f5b8ULL, + 0x535f47f40bc148ccULL, 0x3aec5d27d4883037ULL, + 0x10ed0a1825438f96ULL, 0x516101f72c233d17ULL, + 0x13cc6f949fd04eaeULL, 0x739853c441474bfdULL, + 0x653793d90d3f5b1bULL, 0x5240647b96b0fc2fULL, + 0x0c84890ad27623e0ULL, 0xd7189b32703aaea3ULL, + 0x2685de3523bd9c41ULL, 0x99317c5b11bffefaULL, + 0x0d9baa854f079703ULL, 0x70b93648fbd48ac5ULL, + 0xa80441fce30bc6beULL, 0x7287704bdc36ff1eULL, + 0xb65384ed33dc1f13ULL, 0xd36417343ee34408ULL, + 0x39cd38ab6e1bf10fULL, 0x5ab861770a1f3564ULL, + 0x0ebacf09f594563bULL, 0xd04572b884708530ULL, + 0x3cae9722bdb3af47ULL, 0x4a556b6f2f5cbaf2ULL, + 0xe1704f1f76c4bd74ULL, 0x5ec4ed7144c6dfcfULL, + 0x16afc01d4c7810e6ULL, 0x283f113cd629ca7aULL, + 0xaf59a8761741ed2dULL, 0xeed5a3991e215facULL, + 0x3bf37ea849f984d4ULL, 0xe413e096a56ce33cULL, + 0x2c439d3a98f020d1ULL, 0x637559dc6404c46bULL, + 0x9e6c95d1e5f5d569ULL, 0x24bb9836045fe99aULL, + 0x44efa466dac8ecc9ULL, 0xc6eab2a5c80895d6ULL, + 0x803b50c035220cc4ULL, 0x0321658cba93c138ULL, + 0x8f9ebc465dc7ee1cULL, 0xd15a5137190131d3ULL, + 0x0fa5ec8668e5e2d8ULL, 0x91c979578d1037b1ULL, + 0x0642ca05693b9f70ULL, 0xefca80168350eb4fULL, + 0x38d21b24f36a45ecULL, 0xbeab81e1af73d658ULL, + 0x8cbfd9cae7542f24ULL, 0xfd19cc0d81f11102ULL, + 0x0ac6430fbb4dbc90ULL, 0x1d76a09d6a441895ULL, + 0x2a01573ff1cbbfa1ULL, 0xb572e161894fde2bULL, + 0x8124734fa853b827ULL, 0x614b1fdf43e6b1b0ULL, + 0x68ac395c4238cc18ULL, 0x21d837bfd7f7b7d2ULL, + 0x20c714304a860331ULL, 0x5cfaab726324aa14ULL, + 0x74c5ba4eb50d606eULL, 0xf3a3030474654739ULL, + 0x23e671bcf015c209ULL, 0x45f087e947b9582aULL, + 0xd8bd77b418df4c7bULL, 0xe06f6c90ebb50997ULL, + 0x0bd96080263c0873ULL, 0x7e03f9410e40dcfeULL, + 0xb8e94be4c6484928ULL, 0xfb5b0608e8ca8e72ULL, + 0x1a2b49179e0e3306ULL, 0x4e29e76961855059ULL, + 0x4f36c4e6fcf4e4baULL, 0x49740ee395cf7bcaULL, + 0xc2963ea386d17f7dULL, 0x90d65ad810618352ULL, + 0x12d34c1b02a1fa4dULL, 0xfa44258775bb3a91ULL, + 0x18150f14b9ec46ddULL, 0x1491861e6b9a653dULL, + 0x9a1019d7ab2c3fc2ULL, 0x3668d42d06fe13d7ULL, + 0xdcc1fbb25606a6d0ULL, 0x969490dd795a1c22ULL, + 0x3549b1a1bc6dd2efULL, 0xc94f5e23a0ed770eULL, + 0xb9f6686b5b39fdcbULL, 0xc4d4f4a6efeae00dULL, + 0xe732851a1fff2204ULL, 0x94aad6de5eb869f9ULL, + 0x3f8ff2ae07206e7fULL, 0xfe38a9813b62d03aULL, + 0xa7a1ad7a8bee2466ULL, 0x7b6056c8dde882b6ULL, + 0x302a1e286fc58ca7ULL, 0x8da0fa457a259bc7ULL, + 0xb3302b64e074415bULL, 0x5402ae7eff8b635fULL, + 0x08f8050c9cafc94bULL, 0xae468bf98a3059ceULL, + 0x88c355cca98dc58fULL, 0xb10e6d67c7963480ULL, + 0xbad70de7e1aa3cf3ULL, 0xbfb4a26e320262bbULL, + 0xcb711820870f02d5ULL, 0xce12b7a954a75c9dULL, + 0x563ce87dd8691684ULL, 0x9f73b65e7884618aULL, + 0x2b1e74b06cba0b42ULL, 0x47cec1ea605b2df1ULL, + 0x1c698312f735ac76ULL, 0x5fdbcefed9b76b2cULL, + 0x831a354c8fb1cdfcULL, 0x820516c312c0791fULL, + 0xb74ca762aeadabf0ULL, 0xfc06ef821c80a5e1ULL, + 0x5723cbf24518a267ULL, 0x9d4df05d5f661451ULL, + 0x588627742dfd40bfULL, 0xda8331b73f3d39a0ULL, + 0x17b0e392d109a405ULL, 0xf965400bcf28fba9ULL, + 0x7c3dbf4229a2a925ULL, 0x023e460327e275dbULL, + 0x6cd0b55a0ce126b3ULL, 0xe62da695828e96e7ULL, + 0x42ad6e63b3f373b9ULL, 0xe50cc319381d57dfULL, + 0xc5cbd729729b54eeULL, 0x46d1e265fd2a9912ULL, + 0x6428b056904eeff8ULL, 0x8be23040131e04b7ULL, + 0x6709d5da2add2ec0ULL, 0x075de98af44a2b93ULL, + 0x8447dcc67bfbe66fULL, 0x6616f655b7ac9a23ULL, + 0xd607b8bded4b1a40ULL, 0x0563af89d3a85e48ULL, + 0x3db1b4ad20c21ba4ULL, 0x11f22997b8323b75ULL, + 0x292032b34b587e99ULL, 0x7f1cdace9331681dULL, + 0x8e819fc9c0b65affULL, 0xa1e3677fe2d5bb16ULL, + 0xcd33d225ee349da5ULL, 0xd9a2543b85aef898ULL, + 0x795e10cbfa0af76dULL, 0x25a4bbb9992e5d79ULL, + 0x78413344677b438eULL, 0xf0826688cef68601ULL, + 0xd27b34bba392f0ebULL, 0x551d8df162fad7bcULL, + 0x1e57c511d0d7d9adULL, 0xdeffbdb171e4d30bULL, + 0xf4feea8e802f6caaULL, 0xa480c8f6317de55eULL, + 0xa0fc44f07fa40ff5ULL, 0x95b5f551c3c9dd1aULL, + 0x22f952336d6476eaULL, 0x0000000000000000ULL, + 0xa6be8ef5169f9085ULL, 0xcc2cf1aa73452946ULL, + 0x2e7ddb39bf12550aULL, 0xd526dd3157d8db78ULL, + 0x486b2d6c08becf29ULL, 0x9b0f3a58365d8b21ULL, + 0xac78cdfaadd22c15ULL, 0xbc95c7e28891a383ULL, + 0x6a927f5f65dab9c3ULL, 0xc3891d2c1ba0cb9eULL, + 0xeaa92f9f50f8b507ULL, 0xcf0d9426c9d6e87eULL, + 0xca6e3baf1a7eb636ULL, 0xab25247059980786ULL, + 0x69b31ad3df4978fbULL, 0xe2512a93cc577c4cULL, + 0xff278a0ea61364d9ULL, 0x71a615c766a53e26ULL, + 0x89dc764334fc716cULL, 0xf87a638452594f4aULL, + 0xf2bc208be914f3daULL, 0x8766b94ac1682757ULL, + 0xbbc82e687cdb8810ULL, 0x626a7a53f9757088ULL, + 0xa2c202f358467a2eULL, 0x4d0882e5db169161ULL, + 0x09e7268301de7da8ULL, 0xe897699c771ac0dcULL, + 0xc8507dac3d9cc3edULL, 0xc0a878a0a1330aa6ULL, + 0x978bb352e42ba8c1ULL, 0xe9884a13ea6b743fULL, + 0x279afdbabecc28a2ULL, 0x047c8c064ed9eaabULL, + 0x507e2278b15289f4ULL, 0x599904fbb08cf45cULL, + 0xbd8ae46d15e01760ULL, 0x31353da7f2b43844ULL, + 0x8558ff49e68a528cULL, 0x76fbfc4d92ef15b5ULL, + 0x3456922e211c660cULL, 0x86799ac55c1993b4ULL, + 0x3e90d1219a51da9cULL, 0x2d5cbeb505819432ULL, + 0x982e5fd48cce4a19ULL, 0xdb9c1238a24c8d43ULL, + 0xd439febecaa96f9bULL, 0x418c0bef0960b281ULL, + 0x158ea591f6ebd1deULL, 0x1f48e69e4da66d4eULL, + 0x8afd13cf8e6fb054ULL, 0xf5e1c9011d5ed849ULL, + 0xe34e091c5126c8afULL, 0xad67ee7530a398f6ULL, + 0x43b24dec2e82c75aULL, 0x75da99c1287cd48dULL, + 0x92e81cdb3783f689ULL, 0xa3dd217cc537cecdULL, + 0x60543c50de970553ULL, 0x93f73f54aaf2426aULL, + 0xa91b62737e7a725dULL, 0xf19d4507538732e2ULL, + 0x77e4dfc20f9ea156ULL, 0x7d229ccdb4d31dc6ULL, + 0x1b346a98037f87e5ULL, 0xedf4c615a4b29e94ULL, + 0x4093286094110662ULL, 0xb0114ee85ae78063ULL, + 0x6ff1d0d6b672e78bULL, 0x6dcf96d591909250ULL, + 0xdfe09e3eec9567e8ULL, 0x3214582b4827f97cULL, + 0xb46dc2ee143e6ac8ULL, 0xf6c0ac8da7cd1971ULL, + 0xebb60c10cd8901e4ULL, 0xf7df8f023abcad92ULL, + 0x9c52d3d2c217a0b2ULL, 0x6b8d5cd0f8ab0d20ULL, + 0x3777f7a29b8fa734ULL, 0x011f238f9d71b4e3ULL, + 0xc1b75b2f3c42be45ULL, 0x5de588fdfe551ef7ULL, + 0x6eeef3592b035368ULL, 0xaa3a07ffc4e9b365ULL, + 0xecebe59a39c32a77ULL, 0x5ba742f8976e8187ULL, + 0x4b4a48e0b22d0e11ULL, 0xddded83dcb771233ULL, + 0xa59feb79ac0c51bdULL, 0xc7f5912a55792135ULL + }, { /* 5 */ + 0x6d6ae04668a9b08aULL, 0x3ab3f04b0be8c743ULL, + 0xe51e166b54b3c908ULL, 0xbe90a9eb35c2f139ULL, + 0xb2c7066637f2bec1ULL, 0xaa6945613392202cULL, + 0x9a28c36f3b5201ebULL, 0xddce5a93ab536994ULL, + 0x0e34133ef6382827ULL, 0x52a02ba1ec55048bULL, + 0xa2f88f97c4b2a177ULL, 0x8640e513ca2251a5ULL, + 0xcdf1d36258137622ULL, 0xfe6cb708dedf8ddbULL, + 0x8a174a9ec8121e5dULL, 0x679896036b81560eULL, + 0x59ed033395795feeULL, 0x1dd778ab8b74edafULL, + 0xee533ef92d9f926dULL, 0x2a8c79baf8a8d8f5ULL, + 0x6bcf398e69b119f6ULL, 0xe20491742fafdd95ULL, + 0x276488e0809c2aecULL, 0xea955b82d88f5cceULL, + 0x7102c63a99d9e0c4ULL, 0xf9763017a5c39946ULL, + 0x429fa2501f151b3dULL, 0x4659c72bea05d59eULL, + 0x984b7fdccf5a6634ULL, 0xf742232953fbb161ULL, + 0x3041860e08c021c7ULL, 0x747bfd9616cd9386ULL, + 0x4bb1367192312787ULL, 0x1b72a1638a6c44d3ULL, + 0x4a0e68a6e8359a66ULL, 0x169a5039f258b6caULL, + 0xb98a2ef44edee5a4ULL, 0xd9083fe85e43a737ULL, + 0x967f6ce239624e13ULL, 0x8874f62d3c1a7982ULL, + 0x3c1629830af06e3fULL, 0x9165ebfd427e5a8eULL, + 0xb5dd81794ceeaa5cULL, 0x0de8f15a7834f219ULL, + 0x70bd98ede3dd5d25ULL, 0xaccc9ca9328a8950ULL, + 0x56664eda1945ca28ULL, 0x221db34c0f8859aeULL, + 0x26dbd637fa98970dULL, 0x1acdffb4f068f932ULL, + 0x4585254f64090fa0ULL, 0x72de245e17d53afaULL, + 0x1546b25d7c546cf4ULL, 0x207e0ffffb803e71ULL, + 0xfaaad2732bcf4378ULL, 0xb462dfae36ea17bdULL, + 0xcf926fd1ac1b11fdULL, 0xe0672dc7dba7ba4aULL, + 0xd3fa49ad5d6b41b3ULL, 0x8ba81449b216a3bcULL, + 0x14f9ec8a0650d115ULL, 0x40fc1ee3eb1d7ce2ULL, + 0x23a2ed9b758ce44fULL, 0x782c521b14fddc7eULL, + 0x1c68267cf170504eULL, 0xbcf31558c1ca96e6ULL, + 0xa781b43b4ba6d235ULL, 0xf6fd7dfe29ff0c80ULL, + 0xb0a4bad5c3fad91eULL, 0xd199f51ea963266cULL, + 0x414340349119c103ULL, 0x5405f269ed4dadf7ULL, + 0xabd61bb649969dcdULL, 0x6813dbeae7bdc3c8ULL, + 0x65fb2ab09f8931d1ULL, 0xf1e7fae152e3181dULL, + 0xc1a67cef5a2339daULL, 0x7a4feea8e0f5bba1ULL, + 0x1e0b9acf05783791ULL, 0x5b8ebf8061713831ULL, + 0x80e53cdbcb3af8d9ULL, 0x7e898bd315e57502ULL, + 0xc6bcfbf0213f2d47ULL, 0x95a38e86b76e942dULL, + 0x092e94218d243cbaULL, 0x8339debf453622e7ULL, + 0xb11be402b9fe64ffULL, 0x57d9100d634177c9ULL, + 0xcc4e8db52217cbc3ULL, 0x3b0cae9c71ec7aa2ULL, + 0xfb158ca451cbfe99ULL, 0x2b33276d82ac6514ULL, + 0x01bf5ed77a04bde1ULL, 0xc5601994af33f779ULL, + 0x75c4a3416cc92e67ULL, 0xf3844652a6eb7fc2ULL, + 0x3487e375fdd0ef64ULL, 0x18ae430704609eedULL, + 0x4d14efb993298efbULL, 0x815a620cb13e4538ULL, + 0x125c354207487869ULL, 0x9eeea614ce42cf48ULL, + 0xce2d3106d61fac1cULL, 0xbbe99247bad6827bULL, + 0x071a871f7b1c149dULL, 0x2e4a1cc10db81656ULL, + 0x77a71ff298c149b8ULL, 0x06a5d9c80118a97cULL, + 0xad73c27e488e34b1ULL, 0x443a7b981e0db241ULL, + 0xe3bbcfa355ab6074ULL, 0x0af276450328e684ULL, + 0x73617a896dd1871bULL, 0x58525de4ef7de20fULL, + 0xb7be3dcab8e6cd83ULL, 0x19111dd07e64230cULL, + 0x842359a03e2a367aULL, 0x103f89f1f3401fb6ULL, + 0xdc710444d157d475ULL, 0xb835702334da5845ULL, + 0x4320fc876511a6dcULL, 0xd026abc9d3679b8dULL, + 0x17250eee885c0b2bULL, 0x90dab52a387ae76fULL, + 0x31fed8d972c49c26ULL, 0x89cba8fa461ec463ULL, + 0x2ff5421677bcabb7ULL, 0x396f122f85e41d7dULL, + 0xa09b332430bac6a8ULL, 0xc888e8ced7070560ULL, + 0xaeaf201ac682ee8fULL, 0x1180d7268944a257ULL, + 0xf058a43628e7a5fcULL, 0xbd4c4b8fbbce2b07ULL, + 0xa1246df34abe7b49ULL, 0x7d5569b79be9af3cULL, + 0xa9b5a705bd9efa12ULL, 0xdb6b835baa4bc0e8ULL, + 0x05793bac8f147342ULL, 0x21c1512881848390ULL, + 0xfdb0556c50d357e5ULL, 0x613d4fcb6a99ff72ULL, + 0x03dce2648e0cda3eULL, 0xe949b9e6568386f0ULL, + 0xfc0f0bbb2ad7ea04ULL, 0x6a70675913b5a417ULL, + 0x7f36d5046fe1c8e3ULL, 0x0c57af8d02304ff8ULL, + 0x32223abdfcc84618ULL, 0x0891caf6f720815bULL, + 0xa63eeaec31a26fd4ULL, 0x2507345374944d33ULL, + 0x49d28ac266394058ULL, 0xf5219f9aa7f3d6beULL, + 0x2d96fea583b4cc68ULL, 0x5a31e1571b7585d0ULL, + 0x8ed12fe53d02d0feULL, 0xdfade6205f5b0e4bULL, + 0x4cabb16ee92d331aULL, 0x04c6657bf510cea3ULL, + 0xd73c2cd6a87b8f10ULL, 0xe1d87310a1a307abULL, + 0x6cd5be9112ad0d6bULL, 0x97c032354366f3f2ULL, + 0xd4e0ceb22677552eULL, 0x0000000000000000ULL, + 0x29509bde76a402cbULL, 0xc27a9e8bd42fe3e4ULL, + 0x5ef7842cee654b73ULL, 0xaf107ecdbc86536eULL, + 0x3fcacbe784fcb401ULL, 0xd55f90655c73e8cfULL, + 0xe6c2f40fdabf1336ULL, 0xe8f6e7312c873b11ULL, + 0xeb2a0555a28be12fULL, 0xe4a148bc2eb774e9ULL, + 0x9b979db84156bc0aULL, 0x6eb60222e6a56ab4ULL, + 0x87ffbbc4b026ec44ULL, 0xc703a5275b3b90a6ULL, + 0x47e699fc9001687fULL, 0x9c8d1aa73a4aa897ULL, + 0x7cea3760e1ed12ddULL, 0x4ec80ddd1d2554c5ULL, + 0x13e36b957d4cc588ULL, 0x5d2b66486069914dULL, + 0x92b90999cc7280b0ULL, 0x517cc9c56259deb5ULL, + 0xc937b619ad03b881ULL, 0xec30824ad997f5b2ULL, + 0xa45d565fc5aa080bULL, 0xd6837201d27f32f1ULL, + 0x635ef3789e9198adULL, 0x531f75769651b96aULL, + 0x4f77530a6721e924ULL, 0x486dd4151c3dfdb9ULL, + 0x5f48dafb9461f692ULL, 0x375b011173dc355aULL, + 0x3da9775470f4d3deULL, 0x8d0dcd81b30e0ac0ULL, + 0x36e45fc609d888bbULL, 0x55baacbe97491016ULL, + 0x8cb29356c90ab721ULL, 0x76184125e2c5f459ULL, + 0x99f4210bb55edbd5ULL, 0x6f095cf59ca1d755ULL, + 0x9f51f8c3b44672a9ULL, 0x3538bda287d45285ULL, + 0x50c39712185d6354ULL, 0xf23b1885dcefc223ULL, + 0x79930ccc6ef9619fULL, 0xed8fdc9da3934853ULL, + 0xcb540aaa590bdf5eULL, 0x5c94389f1a6d2cacULL, + 0xe77daad8a0bbaed7ULL, 0x28efc5090ca0bf2aULL, + 0xbf2ff73c4fc64cd8ULL, 0xb37858b14df60320ULL, + 0xf8c96ec0dfc724a7ULL, 0x828680683f329f06ULL, + 0x941cd051cd6a29ccULL, 0xc3c5c05cae2b5e05ULL, + 0xb601631dc2e27062ULL, 0xc01922382027843bULL, + 0x24b86a840e90f0d2ULL, 0xd245177a276ffc52ULL, + 0x0f8b4de98c3c95c6ULL, 0x3e759530fef809e0ULL, + 0x0b4d2892792c5b65ULL, 0xc4df4743d5374a98ULL, + 0xa5e20888bfaeb5eaULL, 0xba56cc90c0d23f9aULL, + 0x38d04cf8ffe0a09cULL, 0x62e1adafe495254cULL, + 0x0263bcb3f40867dfULL, 0xcaeb547d230f62bfULL, + 0x6082111c109d4293ULL, 0xdad4dd8cd04f7d09ULL, + 0xefec602e579b2f8cULL, 0x1fb4c4187f7c8a70ULL, + 0xffd3e9dfa4db303aULL, 0x7bf0b07f9af10640ULL, + 0xf49ec14dddf76b5fULL, 0x8f6e713247066d1fULL, + 0x339d646a86ccfbf9ULL, 0x64447467e58d8c30ULL, + 0x2c29a072f9b07189ULL, 0xd8b7613f24471ad6ULL, + 0x6627c8d41185ebefULL, 0xa347d140beb61c96ULL, + 0xde12b8f7255fb3aaULL, 0x9d324470404e1576ULL, + 0x9306574eb6763d51ULL, 0xa80af9d2c79a47f3ULL, + 0x859c0777442e8b9bULL, 0x69ac853d9db97e29ULL + }, { /* 6 */ + 0xc3407dfc2de6377eULL, 0x5b9e93eea4256f77ULL, + 0xadb58fdd50c845e0ULL, 0x5219ff11a75bed86ULL, + 0x356b61cfd90b1de9ULL, 0xfb8f406e25abe037ULL, + 0x7a5a0231c0f60796ULL, 0x9d3cd216e1f5020bULL, + 0x0c6550fb6b48d8f3ULL, 0xf57508c427ff1c62ULL, + 0x4ad35ffa71cb407dULL, 0x6290a2da1666aa6dULL, + 0xe284ec2349355f9fULL, 0xb3c307c53d7c84ecULL, + 0x05e23c0468365a02ULL, 0x190bac4d6c9ebfa8ULL, + 0x94bbbee9e28b80faULL, 0xa34fc777529cb9b5ULL, + 0xcc7b39f095bcd978ULL, 0x2426addb0ce532e3ULL, + 0x7e79329312ce4fc7ULL, 0xab09a72eebec2917ULL, + 0xf8d15499f6b9d6c2ULL, 0x1a55b8babf8c895dULL, + 0xdb8add17fb769a85ULL, 0xb57f2f368658e81bULL, + 0x8acd36f18f3f41f6ULL, 0x5ce3b7bba50f11d3ULL, + 0x114dcc14d5ee2f0aULL, 0xb91a7fcded1030e8ULL, + 0x81d5425fe55de7a1ULL, 0xb6213bc1554adeeeULL, + 0x80144ef95f53f5f2ULL, 0x1e7688186db4c10cULL, + 0x3b912965db5fe1bcULL, 0xc281715a97e8252dULL, + 0x54a5d7e21c7f8171ULL, 0x4b12535ccbc5522eULL, + 0x1d289cefbea6f7f9ULL, 0x6ef5f2217d2e729eULL, + 0xe6a7dc819b0d17ceULL, 0x1b94b41c05829b0eULL, + 0x33d7493c622f711eULL, 0xdcf7f942fa5ce421ULL, + 0x600fba8b7f7a8ecbULL, 0x46b60f011a83988eULL, + 0x235b898e0dcf4c47ULL, 0x957ab24f588592a9ULL, + 0x4354330572b5c28cULL, 0xa5f3ef84e9b8d542ULL, + 0x8c711e02341b2d01ULL, 0x0b1874ae6a62a657ULL, + 0x1213d8e306fc19ffULL, 0xfe6d7c6a4d9dba35ULL, + 0x65ed868f174cd4c9ULL, 0x88522ea0e6236550ULL, + 0x899322065c2d7703ULL, 0xc01e690bfef4018bULL, + 0x915982ed8abddaf8ULL, 0xbe675b98ec3a4e4cULL, + 0xa996bf7f82f00db1ULL, 0xe1daf8d49a27696aULL, + 0x2effd5d3dc8986e7ULL, 0xd153a51f2b1a2e81ULL, + 0x18caa0ebd690adfbULL, 0x390e3134b243c51aULL, + 0x2778b92cdff70416ULL, 0x029f1851691c24a6ULL, + 0x5e7cafeacc133575ULL, 0xfa4e4cc89fa5f264ULL, + 0x5a5f9f481e2b7d24ULL, 0x484c47ab18d764dbULL, + 0x400a27f2a1a7f479ULL, 0xaeeb9b2a83da7315ULL, + 0x721c626879869734ULL, 0x042330a2d2384851ULL, + 0x85f672fd3765aff0ULL, 0xba446b3a3e02061dULL, + 0x73dd6ecec3888567ULL, 0xffac70ccf793a866ULL, + 0xdfa9edb5294ed2d4ULL, 0x6c6aea7014325638ULL, + 0x834a5a0e8c41c307ULL, 0xcdba35562fb2cb2bULL, + 0x0ad97808d06cb404ULL, 0x0f3b440cb85aee06ULL, + 0xe5f9c876481f213bULL, 0x98deee1289c35809ULL, + 0x59018bbfcd394bd1ULL, 0xe01bf47220297b39ULL, + 0xde68e1139340c087ULL, 0x9fa3ca4788e926adULL, + 0xbb85679c840c144eULL, 0x53d8f3b71d55ffd5ULL, + 0x0da45c5dd146caa0ULL, 0x6f34fe87c72060cdULL, + 0x57fbc315cf6db784ULL, 0xcee421a1fca0fddeULL, + 0x3d2d0196607b8d4bULL, 0x642c8a29ad42c69aULL, + 0x14aff010bdd87508ULL, 0xac74837beac657b3ULL, + 0x3216459ad821634dULL, 0x3fb219c70967a9edULL, + 0x06bc28f3bb246cf7ULL, 0xf2082c9126d562c6ULL, + 0x66b39278c45ee23cULL, 0xbd394f6f3f2878b9ULL, + 0xfd33689d9e8f8cc0ULL, 0x37f4799eb017394fULL, + 0x108cc0b26fe03d59ULL, 0xda4bd1b1417888d6ULL, + 0xb09d1332ee6eb219ULL, 0x2f3ed975668794b4ULL, + 0x58c0871977375982ULL, 0x7561463d78ace990ULL, + 0x09876cff037e82f1ULL, 0x7fb83e35a8c05d94ULL, + 0x26b9b58a65f91645ULL, 0xef20b07e9873953fULL, + 0x3148516d0b3355b8ULL, 0x41cb2b541ba9e62aULL, + 0x790416c613e43163ULL, 0xa011d380818e8f40ULL, + 0x3a5025c36151f3efULL, 0xd57095bdf92266d0ULL, + 0x498d4b0da2d97688ULL, 0x8b0c3a57353153a5ULL, + 0x21c491df64d368e1ULL, 0x8f2f0af5e7091bf4ULL, + 0x2da1c1240f9bb012ULL, 0xc43d59a92ccc49daULL, + 0xbfa6573e56345c1fULL, 0x828b56a8364fd154ULL, + 0x9a41f643e0df7cafULL, 0xbcf843c985266aeaULL, + 0x2b1de9d7b4bfdce5ULL, 0x20059d79dedd7ab2ULL, + 0x6dabe6d6ae3c446bULL, 0x45e81bf6c991ae7bULL, + 0x6351ae7cac68b83eULL, 0xa432e32253b6c711ULL, + 0xd092a9b991143cd2ULL, 0xcac711032e98b58fULL, + 0xd8d4c9e02864ac70ULL, 0xc5fc550f96c25b89ULL, + 0xd7ef8dec903e4276ULL, 0x67729ede7e50f06fULL, + 0xeac28c7af045cf3dULL, 0xb15c1f945460a04aULL, + 0x9cfddeb05bfb1058ULL, 0x93c69abce3a1fe5eULL, + 0xeb0380dc4a4bdd6eULL, 0xd20db1e8f8081874ULL, + 0x229a8528b7c15e14ULL, 0x44291750739fbc28ULL, + 0xd3ccbd4e42060a27ULL, 0xf62b1c33f4ed2a97ULL, + 0x86a8660ae4779905ULL, 0xd62e814a2a305025ULL, + 0x477703a7a08d8addULL, 0x7b9b0e977af815c5ULL, + 0x78c51a60a9ea2330ULL, 0xa6adfb733aaae3b7ULL, + 0x97e5aa1e3199b60fULL, 0x0000000000000000ULL, + 0xf4b404629df10e31ULL, 0x5564db44a6719322ULL, + 0x9207961a59afec0dULL, 0x9624a6b88b97a45cULL, + 0x363575380a192b1cULL, 0x2c60cd82b595a241ULL, + 0x7d272664c1dc7932ULL, 0x7142769faa94a1c1ULL, + 0xa1d0df263b809d13ULL, 0x1630e841d4c451aeULL, + 0xc1df65ad44fa13d8ULL, 0x13d2d445bcf20bacULL, + 0xd915c546926abe23ULL, 0x38cf3d92084dd749ULL, + 0xe766d0272103059dULL, 0xc7634d5effde7f2fULL, + 0x077d2455012a7ea4ULL, 0xedbfa82ff16fb199ULL, + 0xaf2a978c39d46146ULL, 0x42953fa3c8bbd0dfULL, + 0xcb061da59496a7dcULL, 0x25e7a17db6eb20b0ULL, + 0x34aa6d6963050fbaULL, 0xa76cf7d580a4f1e4ULL, + 0xf7ea10954ee338c4ULL, 0xfcf2643b24819e93ULL, + 0xcf252d0746aeef8dULL, 0x4ef06f58a3f3082cULL, + 0x563acfb37563a5d7ULL, 0x5086e740ce47c920ULL, + 0x2982f186dda3f843ULL, 0x87696aac5e798b56ULL, + 0x5d22bb1d1f010380ULL, 0x035e14f7d31236f5ULL, + 0x3cec0d30da759f18ULL, 0xf3c920379cdb7095ULL, + 0xb8db736b571e22bbULL, 0xdd36f5e44052f672ULL, + 0xaac8ab8851e23b44ULL, 0xa857b3d938fe1fe2ULL, + 0x17f1e4e76eca43fdULL, 0xec7ea4894b61a3caULL, + 0x9e62c6e132e734feULL, 0xd4b1991b432c7483ULL, + 0x6ad6c283af163acfULL, 0x1ce9904904a8e5aaULL, + 0x5fbda34c761d2726ULL, 0xf910583f4cb7c491ULL, + 0xc6a241f845d06d7cULL, 0x4f3163fe19fd1a7fULL, + 0xe99c988d2357f9c8ULL, 0x8eee06535d0709a7ULL, + 0x0efa48aa0254fc55ULL, 0xb4be23903c56fa48ULL, + 0x763f52caabbedf65ULL, 0xeee1bcd8227d876cULL, + 0xe345e085f33b4dccULL, 0x3e731561b369bbbeULL, + 0x2843fd2067adea10ULL, 0x2adce5710eb1ceb6ULL, + 0xb7e03767ef44ccbdULL, 0x8db012a48e153f52ULL, + 0x61ceb62dc5749c98ULL, 0xe85d942b9959eb9bULL, + 0x4c6f7709caef2c8aULL, 0x84377e5b8d6bbda3ULL, + 0x30895dcbb13d47ebULL, 0x74a04a9bc2a2fbc3ULL, + 0x6b17ce251518289cULL, 0xe438c4d0f2113368ULL, + 0x1fb784bed7bad35fULL, 0x9b80fae55ad16efcULL, + 0x77fe5e6c11b0cd36ULL, 0xc858095247849129ULL, + 0x08466059b97090a2ULL, 0x01c10ca6ba0e1253ULL, + 0x6988d6747c040c3aULL, 0x6849dad2c60a1e69ULL, + 0x5147ebe67449db73ULL, 0xc99905f4fd8a837aULL, + 0x991fe2b433cd4a5aULL, 0xf09734c04fc94660ULL, + 0xa28ecbd1e892abe6ULL, 0xf1563866f5c75433ULL, + 0x4dae7baf70e13ed9ULL, 0x7ce62ac27bd26b61ULL, + 0x70837a39109ab392ULL, 0x90988e4b30b3c8abULL, + 0xb2020b63877296bfULL, 0x156efcb607d6675bULL + }, { /* 7 */ + 0xe63f55ce97c331d0ULL, 0x25b506b0015bba16ULL, + 0xc8706e29e6ad9ba8ULL, 0x5b43d3775d521f6aULL, + 0x0bfa3d577035106eULL, 0xab95fc172afb0e66ULL, + 0xf64b63979e7a3276ULL, 0xf58b4562649dad4bULL, + 0x48f7c3dbae0c83f1ULL, 0xff31916642f5c8c5ULL, + 0xcbb048dc1c4a0495ULL, 0x66b8f83cdf622989ULL, + 0x35c130e908e2b9b0ULL, 0x7c761a61f0b34fa1ULL, + 0x3601161cf205268dULL, 0x9e54ccfe2219b7d6ULL, + 0x8b7d90a538940837ULL, 0x9cd403588ea35d0bULL, + 0xbc3c6fea9ccc5b5aULL, 0xe5ff733b6d24aeedULL, + 0xceed22de0f7eb8d2ULL, 0xec8581cab1ab545eULL, + 0xb96105e88ff8e71dULL, 0x8ca03501871a5eadULL, + 0x76ccce65d6db2a2fULL, 0x5883f582a7b58057ULL, + 0x3f7be4ed2e8adc3eULL, 0x0fe7be06355cd9c9ULL, + 0xee054e6c1d11be83ULL, 0x1074365909b903a6ULL, + 0x5dde9f80b4813c10ULL, 0x4a770c7d02b6692cULL, + 0x5379c8d5d7809039ULL, 0xb4067448161ed409ULL, + 0x5f5e5026183bd6cdULL, 0xe898029bf4c29df9ULL, + 0x7fb63c940a54d09cULL, 0xc5171f897f4ba8bcULL, + 0xa6f28db7b31d3d72ULL, 0x2e4f3be7716eaa78ULL, + 0x0d6771a099e63314ULL, 0x82076254e41bf284ULL, + 0x2f0fd2b42733df98ULL, 0x5c9e76d3e2dc49f0ULL, + 0x7aeb569619606cdbULL, 0x83478b07b2468764ULL, + 0xcfadcb8d5923cd32ULL, 0x85dac7f05b95a41eULL, + 0xb5469d1b4043a1e9ULL, 0xb821ecbbd9a592fdULL, + 0x1b8e0b0e798c13c8ULL, 0x62a57b6d9a0be02eULL, + 0xfcf1b793b81257f8ULL, 0x9d94ea0bd8fe28ebULL, + 0x4cea408aeb654a56ULL, 0x23284a47e888996cULL, + 0x2d8f1d128b893545ULL, 0xf4cbac3132c0d8abULL, + 0xbd7c86b9ca912ebaULL, 0x3a268eef3dbe6079ULL, + 0xf0d62f6077a9110cULL, 0x2735c916ade150cbULL, + 0x89fd5f03942ee2eaULL, 0x1acee25d2fd16628ULL, + 0x90f39bab41181bffULL, 0x430dfe8cde39939fULL, + 0xf70b8ac4c8274796ULL, 0x1c53aeaac6024552ULL, + 0x13b410acf35e9c9bULL, 0xa532ab4249faa24fULL, + 0x2b1251e5625a163fULL, 0xd7e3e676da4841c7ULL, + 0xa7b264e4e5404892ULL, 0xda8497d643ae72d3ULL, + 0x861ae105a1723b23ULL, 0x38a6414991048aa4ULL, + 0x6578dec92585b6b4ULL, 0x0280cfa6acbaeaddULL, + 0x88bdb650c273970aULL, 0x9333bd5ebbff84c2ULL, + 0x4e6a8f2c47dfa08bULL, 0x321c954db76cef2aULL, + 0x418d312a72837942ULL, 0xb29b38bfffcdf773ULL, + 0x6c022c38f90a4c07ULL, 0x5a033a240b0f6a8aULL, + 0x1f93885f3ce5da6fULL, 0xc38a537e96988bc6ULL, + 0x39e6a81ac759ff44ULL, 0x29929e43cee0fce2ULL, + 0x40cdd87924de0ca2ULL, 0xe9d8ebc8a29fe819ULL, + 0x0c2798f3cfbb46f4ULL, 0x55e484223e53b343ULL, + 0x4650948ecd0d2fd8ULL, 0x20e86cb2126f0651ULL, + 0x6d42c56baf5739e7ULL, 0xa06fc1405ace1e08ULL, + 0x7babbfc54f3d193bULL, 0x424d17df8864e67fULL, + 0xd8045870ef14980eULL, 0xc6d7397c85ac3781ULL, + 0x21a885e1443273b1ULL, 0x67f8116f893f5c69ULL, + 0x24f5efe35706cff6ULL, 0xd56329d076f2ab1aULL, + 0x5e1eb9754e66a32dULL, 0x28d2771098bd8902ULL, + 0x8f6013f47dfdc190ULL, 0x17a993fdb637553cULL, + 0xe0a219397e1012aaULL, 0x786b9930b5da8606ULL, + 0x6e82e39e55b0a6daULL, 0x875a0856f72f4ec3ULL, + 0x3741ff4fa458536dULL, 0xac4859b3957558fcULL, + 0x7ef6d5c75c09a57cULL, 0xc04a758b6c7f14fbULL, + 0xf9acdd91ab26ebbfULL, 0x7391a467c5ef9668ULL, + 0x335c7c1ee1319acaULL, 0xa91533b18641e4bbULL, + 0xe4bf9a683b79db0dULL, 0x8e20faa72ba0b470ULL, + 0x51f907737b3a7ae4ULL, 0x2268a314bed5ec8cULL, + 0xd944b123b949edeeULL, 0x31dcb3b84d8b7017ULL, + 0xd3fe65279f218860ULL, 0x097af2f1dc8ffab3ULL, + 0x9b09a6fc312d0b91ULL, 0xcc6ded78a3c4520fULL, + 0x3481d9ba5ebfcc50ULL, 0x4f2a667f1182d56bULL, + 0xdfd9fdd4509ace94ULL, 0x26752045fbbc252bULL, + 0xbffc491f662bc467ULL, 0xdd593272fc202449ULL, + 0x3cbbc218d46d4303ULL, 0x91b372f817456e1fULL, + 0x681faf69bc6385a0ULL, 0xb686bbeebaa43ed4ULL, + 0x1469b5084cd0ca01ULL, 0x98c98009cbca94acULL, + 0x6438379a73d8c354ULL, 0xc2caba2dc0c5fe26ULL, + 0x3e3b0dbe78d7a9deULL, 0x50b9ee202d670f04ULL, + 0x4590b27b37eab0e5ULL, 0x6025b4cb36b10af3ULL, + 0xfb2c1237079c0162ULL, 0xa12f28130c936be8ULL, + 0x4b37e52e54eb1cccULL, 0x083a1ba28ad28f53ULL, + 0xc10a9cd83a22611bULL, 0x9f1425ad7444c236ULL, + 0x069d4cf7e9d3237aULL, 0xedc56899e7f621beULL, + 0x778c273680865fcfULL, 0x309c5aeb1bd605f7ULL, + 0x8de0dc52d1472b4dULL, 0xf8ec34c2fd7b9e5fULL, + 0xea18cd3d58787724ULL, 0xaad515447ca67b86ULL, + 0x9989695a9d97e14cULL, 0x0000000000000000ULL, + 0xf196c63321f464ecULL, 0x71116bc169557cb5ULL, + 0xaf887f466f92c7c1ULL, 0x972e3e0ffe964d65ULL, + 0x190ec4a8d536f915ULL, 0x95aef1a9522ca7b8ULL, + 0xdc19db21aa7d51a9ULL, 0x94ee18fa0471d258ULL, + 0x8087adf248a11859ULL, 0xc457f6da2916dd5cULL, + 0xfa6cfb6451c17482ULL, 0xf256e0c6db13fbd1ULL, + 0x6a9f60cf10d96f7dULL, 0x4daaa9d9bd383fb6ULL, + 0x03c026f5fae79f3dULL, 0xde99148706c7bb74ULL, + 0x2a52b8b6340763dfULL, 0x6fc20acd03edd33aULL, + 0xd423c08320afdefaULL, 0xbbe1ca4e23420dc0ULL, + 0x966ed75ca8cb3885ULL, 0xeb58246e0e2502c4ULL, + 0x055d6a021334bc47ULL, 0xa47242111fa7d7afULL, + 0xe3623fcc84f78d97ULL, 0x81c744a11efc6db9ULL, + 0xaec8961539cfb221ULL, 0xf31609958d4e8e31ULL, + 0x63e5923ecc5695ceULL, 0x47107ddd9b505a38ULL, + 0xa3afe7b5a0298135ULL, 0x792b7063e387f3e6ULL, + 0x0140e953565d75e0ULL, 0x12f4f9ffa503e97bULL, + 0x750ce8902c3cb512ULL, 0xdbc47e8515f30733ULL, + 0x1ed3610c6ab8af8fULL, 0x5239218681dde5d9ULL, + 0xe222d69fd2aaf877ULL, 0xfe71783514a8bd25ULL, + 0xcaf0a18f4a177175ULL, 0x61655d9860ec7f13ULL, + 0xe77fbc9dc19e4430ULL, 0x2ccff441ddd440a5ULL, + 0x16e97aaee06a20dcULL, 0xa855dae2d01c915bULL, + 0x1d1347f9905f30b2ULL, 0xb7c652bdecf94b34ULL, + 0xd03e43d265c6175dULL, 0xfdb15ec0ee4f2218ULL, + 0x57644b8492e9599eULL, 0x07dda5a4bf8e569aULL, + 0x54a46d71680ec6a3ULL, 0x5624a2d7c4b42c7eULL, + 0xbebca04c3076b187ULL, 0x7d36f332a6ee3a41ULL, + 0x3b6667bc6be31599ULL, 0x695f463aea3ef040ULL, + 0xad08b0e0c3282d1cULL, 0xb15b1e4a052a684eULL, + 0x44d05b2861b7c505ULL, 0x15295c5b1a8dbfe1ULL, + 0x744c01c37a61c0f2ULL, 0x59c31cd1f1e8f5b7ULL, + 0xef45a73f4b4ccb63ULL, 0x6bdf899c46841a9dULL, + 0x3dfb2b4b823036e3ULL, 0xa2ef0ee6f674f4d5ULL, + 0x184e2dfb836b8cf5ULL, 0x1134df0a5fe47646ULL, + 0xbaa1231d751f7820ULL, 0xd17eaa81339b62bdULL, + 0xb01bf71953771daeULL, 0x849a2ea30dc8d1feULL, + 0x705182923f080955ULL, 0x0ea757556301ac29ULL, + 0x041d83514569c9a7ULL, 0x0abad4042668658eULL, + 0x49b72a88f851f611ULL, 0x8a3d79f66ec97dd7ULL, + 0xcd2d042bf59927efULL, 0xc930877ab0f0ee48ULL, + 0x9273540deda2f122ULL, 0xc797d02fd3f14261ULL, + 0xe1e2f06a284d674aULL, 0xd2be8c74c97cfd80ULL, + 0x9a494faf67707e71ULL, 0xb3dbd1eca9908293ULL, + 0x72d14d3493b2e388ULL, 0xd6a30f258c153427ULL + }, +}; + + +/* Extract byte i from u64 and shift it right by 8*j */ +#define B(x, i, j) ((u64)(((const u8*)&(x))[(i)]) << (8*(j))) +#define P64(x) (B((x), 0, 0) | B((x), 1, 1) | B((x), 2, 2) | B((x), 3, 3) | \ + B((x), 4, 4) | B((x), 5, 5) | B((x), 6, 6) | B((x), 7, 7)) +#define S64(x) (B((x), 0, 7) | B((x), 1, 6) | B((x), 2, 5) | B((x), 3, 4) | \ + B((x), 4, 3) | B((x), 5, 2) | B((x), 6, 1) | B((x), 7, 0)) + +ATTRIBUTE_WARN_UNUSED_RET static inline u64 streebog_permute(const u64 in[STREEBOG_BLOCK_U64_SIZE], u8 i) +{ + u64 t = 0; + unsigned int j; + + for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){ + t ^= PI[j][(in[j] >> (i * 8)) & 0xff]; + } + + return t; +} + +static inline void streebog_transform(u64 out[STREEBOG_BLOCK_U64_SIZE], + const u64 a[STREEBOG_BLOCK_U64_SIZE], + const u64 b[STREEBOG_BLOCK_U64_SIZE]) +{ + u64 tmp[STREEBOG_BLOCK_U64_SIZE]; + unsigned int j; + + for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){ + tmp[j] = a[j] ^ b[j]; + } + for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){ + out[j] = streebog_permute(tmp, (u8)j); + } + + return; +} + +static inline void gN(u64 h[STREEBOG_BLOCK_U64_SIZE], + const u64 m[STREEBOG_BLOCK_U64_SIZE], + const u64 N[STREEBOG_BLOCK_U64_SIZE]) +{ + u64 K[STREEBOG_BLOCK_U64_SIZE]; + u64 T[STREEBOG_BLOCK_U64_SIZE]; + unsigned int j; + + streebog_transform(K, h, N); + streebog_transform(T, K, m); + streebog_transform(K, K, C_STREEBOG[0]); + + for (j = 1; j < 12; j++) { + streebog_transform(T, K, T); + streebog_transform(K, K, C_STREEBOG[j]); + } + for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){ + h[j] ^= T[j] ^ K[j] ^ m[j]; + } +} + +static inline void streebog_process(streebog_context *ctx, const u8 *in, u64 num) +{ + u64 M[STREEBOG_BLOCK_U64_SIZE]; + u64 l, CF; + unsigned int j; + + for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){ + M[j] = P64(in[8 * j]); + } + gN(ctx->h, M, ctx->N); + + l = ctx->N[0]; + ctx->N[0] += num; + + if((ctx->N[0] < l) || (ctx->N[0] < num)){ + for(j = 1; j < STREEBOG_BLOCK_U64_SIZE; j++){ + ctx->N[j]++; + if(ctx->N[j] != 0){ + break; + } + } + } + /* Handle the carry flag */ + CF = 0; + ctx->Sigma[0] += M[0]; + for(j = 1; j < STREEBOG_BLOCK_U64_SIZE; j++){ + if(ctx->Sigma[j - 1] != M[j - 1]){ + CF = (ctx->Sigma[j - 1] < M[j - 1]); + } + ctx->Sigma[j] += (M[j] + CF); + } + + return; +} + +#endif /* defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512) */ + +#endif /* __STREEBOG_H__ */ diff --git a/crypto/libecc/include/libecc/hash/streebog256.h b/crypto/libecc/include/libecc/hash/streebog256.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/streebog256.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_STREEBOG256 + +#ifndef __STREEBOG256_H__ +#define __STREEBOG256_H__ + +#include +#include +#include + +#define STREEBOG256_BLOCK_SIZE STREEBOG_BLOCK_SIZE +#define STREEBOG256_DIGEST_SIZE 32 +#define STREEBOG256_DIGEST_SIZE_BITS 256 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < STREEBOG256_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE STREEBOG256_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < STREEBOG256_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS STREEBOG256_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < STREEBOG256_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE STREEBOG256_BLOCK_SIZE +#endif + +#define STREEBOG256_HASH_MAGIC ((word_t)(0x11221a2122328332ULL)) +#define STREEBOG256_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == STREEBOG256_HASH_MAGIC) && \ + ((A)->streebog_digest_size == STREEBOG256_DIGEST_SIZE) && ((A)->streebog_block_size == STREEBOG256_BLOCK_SIZE), ret, err) + +typedef streebog_context streebog256_context; + +ATTRIBUTE_WARN_UNUSED_RET int streebog256_init(streebog256_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int streebog256_update(streebog256_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int streebog256_final(streebog256_context *ctx, u8 output[STREEBOG256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int streebog256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[STREEBOG256_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int streebog256(const u8 *input, u32 ilen, u8 output[STREEBOG256_DIGEST_SIZE]); + +#endif /* __STREEBOG256_H__ */ +#endif /* WITH_HASH_STREEBOG256 */ diff --git a/crypto/libecc/include/libecc/hash/streebog512.h b/crypto/libecc/include/libecc/hash/streebog512.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/hash/streebog512.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_STREEBOG512 + +#ifndef __STREEBOG512_H__ +#define __STREEBOG512_H__ + +#include +#include +#include + +#define STREEBOG512_BLOCK_SIZE STREEBOG_BLOCK_SIZE +#define STREEBOG512_DIGEST_SIZE 64 +#define STREEBOG512_DIGEST_SIZE_BITS 512 + +/* Compute max hash digest and block sizes */ +#ifndef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE 0 +#endif +#if (MAX_DIGEST_SIZE < STREEBOG512_DIGEST_SIZE) +#undef MAX_DIGEST_SIZE +#define MAX_DIGEST_SIZE STREEBOG512_DIGEST_SIZE +#endif + +#ifndef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS 0 +#endif +#if (MAX_DIGEST_SIZE_BITS < STREEBOG512_DIGEST_SIZE_BITS) +#undef MAX_DIGEST_SIZE_BITS +#define MAX_DIGEST_SIZE_BITS STREEBOG512_DIGEST_SIZE_BITS +#endif + +#ifndef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE 0 +#endif +#if (MAX_BLOCK_SIZE < STREEBOG512_BLOCK_SIZE) +#undef MAX_BLOCK_SIZE +#define MAX_BLOCK_SIZE STREEBOG512_BLOCK_SIZE +#endif + +#define STREEBOG512_HASH_MAGIC ((word_t)(0x3293187509128364ULL)) +#define STREEBOG512_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == STREEBOG512_HASH_MAGIC) && \ + ((A)->streebog_digest_size == STREEBOG512_DIGEST_SIZE) && ((A)->streebog_block_size == STREEBOG512_BLOCK_SIZE), ret, err) + +typedef streebog_context streebog512_context; + +ATTRIBUTE_WARN_UNUSED_RET int streebog512_init(streebog512_context *ctx); +ATTRIBUTE_WARN_UNUSED_RET int streebog512_update(streebog512_context *ctx, const u8 *input, u32 ilen); +ATTRIBUTE_WARN_UNUSED_RET int streebog512_final(streebog512_context *ctx, u8 output[STREEBOG512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int streebog512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[STREEBOG512_DIGEST_SIZE]); +ATTRIBUTE_WARN_UNUSED_RET int streebog512(const u8 *input, u32 ilen, u8 output[STREEBOG512_DIGEST_SIZE]); + +#endif /* __STREEBOG512_H__ */ +#endif /* WITH_HASH_STREEBOG512 */ diff --git a/crypto/libecc/include/libecc/lib_ecc_config.h b/crypto/libecc/include/libecc/lib_ecc_config.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/lib_ecc_config.h @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __LIB_ECC_CONFIG_H__ +#define __LIB_ECC_CONFIG_H__ + +/* + * This configuration file provides various knobs to configure + * what will be built in the library (supported curves, hash + * algorithms and signature/verification schemes). + */ + +/* It is possible to override the LIBECC configuration by defining + * the WITH_LIBECC_CONFIG_OVERRIDE preprocessing flag in the CFLAGS. When + * this is done, it is expected that the user defines the curves, + * hash algorithms and signature schemes in the compilation + * command line (e.g. via the CFLAGS). + * For instance, in order to only use FRP256V1, SHA-256 and ECDSA, add to the CFLAGS: + * + * -DWITH_LIBECC_CONFIG_OVERRIDE -DWITH_CURVE_FRP256V1 -DWITH_HASH_SHA256 -DWITH_SIG_ECDSA + * + */ +#ifndef WITH_LIBECC_CONFIG_OVERRIDE + +/* Supported curves */ +#define WITH_CURVE_FRP256V1 +#define WITH_CURVE_SECP192R1 +#define WITH_CURVE_SECP224R1 +#define WITH_CURVE_SECP256R1 +#define WITH_CURVE_SECP384R1 +#define WITH_CURVE_SECP521R1 +#define WITH_CURVE_BRAINPOOLP192R1 +#define WITH_CURVE_BRAINPOOLP224R1 +#define WITH_CURVE_BRAINPOOLP256R1 +#define WITH_CURVE_BRAINPOOLP384R1 +#define WITH_CURVE_BRAINPOOLP512R1 +#define WITH_CURVE_GOST256 +#define WITH_CURVE_GOST512 +#define WITH_CURVE_SM2P256TEST +#define WITH_CURVE_SM2P256V1 +#define WITH_CURVE_WEI25519 +#define WITH_CURVE_WEI448 +#define WITH_CURVE_GOST_R3410_2012_256_PARAMSETA +#define WITH_CURVE_SECP256K1 +#define WITH_CURVE_GOST_R3410_2001_TESTPARAMSET +#define WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET +#define WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET +#define WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET +#define WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET +#define WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET +#define WITH_CURVE_GOST_R3410_2012_256_PARAMSETB +#define WITH_CURVE_GOST_R3410_2012_256_PARAMSETC +#define WITH_CURVE_GOST_R3410_2012_256_PARAMSETD +#define WITH_CURVE_GOST_R3410_2012_512_PARAMSETTEST +#define WITH_CURVE_GOST_R3410_2012_512_PARAMSETA +#define WITH_CURVE_GOST_R3410_2012_512_PARAMSETB +#define WITH_CURVE_GOST_R3410_2012_512_PARAMSETC +#define WITH_CURVE_SECP192K1 +#define WITH_CURVE_SECP224K1 +#define WITH_CURVE_BRAINPOOLP192T1 +#define WITH_CURVE_BRAINPOOLP224T1 +#define WITH_CURVE_BRAINPOOLP256T1 +#define WITH_CURVE_BRAINPOOLP320R1 +#define WITH_CURVE_BRAINPOOLP320T1 +#define WITH_CURVE_BRAINPOOLP384T1 +#define WITH_CURVE_BRAINPOOLP512T1 +#define WITH_CURVE_BIGN256V1 +#define WITH_CURVE_BIGN384V1 +#define WITH_CURVE_BIGN512V1 +/* ADD curves define here */ +/* XXX: Do not remove the comment above, as it is + * used by external tools as a placeholder to add or + * remove automatically generated code. + */ + +/* Supported hash algorithms */ +#define WITH_HASH_SHA224 +#define WITH_HASH_SHA256 +#define WITH_HASH_SHA384 +#define WITH_HASH_SHA512 +#define WITH_HASH_SHA512_224 +#define WITH_HASH_SHA512_256 +#define WITH_HASH_SHA3_224 +#define WITH_HASH_SHA3_256 +#define WITH_HASH_SHA3_384 +#define WITH_HASH_SHA3_512 +#define WITH_HASH_SM3 +#define WITH_HASH_SHAKE256 +#define WITH_HASH_STREEBOG256 +#define WITH_HASH_STREEBOG512 +#define WITH_HASH_RIPEMD160 +#define WITH_HASH_BELT_HASH +#define WITH_HASH_BASH224 +#define WITH_HASH_BASH256 +#define WITH_HASH_BASH384 +#define WITH_HASH_BASH512 +#define WITH_HMAC + +/* Supported sig/verif schemes */ +#define WITH_SIG_ECDSA +#define WITH_SIG_ECKCDSA +#define WITH_SIG_ECSDSA +#define WITH_SIG_ECOSDSA +#define WITH_SIG_ECFSDSA +#define WITH_SIG_ECGDSA +#define WITH_SIG_ECRDSA +#define WITH_SIG_SM2 +#define WITH_SIG_EDDSA25519 +#define WITH_SIG_EDDSA448 +#define WITH_SIG_DECDSA +#define WITH_SIG_BIGN +#define WITH_SIG_DBIGN +#define WITH_SIG_BIP0340 + +/* Supported ECDH schemes */ +#define WITH_ECCCDH +#define WITH_X25519 +#define WITH_X448 + +#endif /* WITH_LIBECC_CONFIG_OVERRIDE */ + +#endif /* __LIB_ECC_CONFIG_H__ */ diff --git a/crypto/libecc/include/libecc/lib_ecc_types.h b/crypto/libecc/include/libecc/lib_ecc_types.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/lib_ecc_types.h @@ -0,0 +1,288 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __LIB_ECC_TYPES_H__ +#define __LIB_ECC_TYPES_H__ + +#include + +/* Signature algorithm types */ +typedef enum { + UNKNOWN_ALG = 0, +#ifdef WITH_SIG_ECDSA + ECDSA = 1, +#endif +#ifdef WITH_SIG_ECKCDSA + ECKCDSA = 2, +#endif +#ifdef WITH_SIG_ECSDSA + ECSDSA = 3, +#endif +#ifdef WITH_SIG_ECOSDSA + ECOSDSA = 4, +#endif +#ifdef WITH_SIG_ECFSDSA + ECFSDSA = 5, +#endif +#ifdef WITH_SIG_ECGDSA + ECGDSA = 6, +#endif +#ifdef WITH_SIG_ECRDSA + ECRDSA = 7, +#endif +#ifdef WITH_SIG_SM2 + SM2 = 8, +#endif +#ifdef WITH_SIG_EDDSA25519 + EDDSA25519 = 9, + EDDSA25519CTX = 10, + EDDSA25519PH = 11, +#endif +#ifdef WITH_SIG_EDDSA448 + EDDSA448 = 12, + EDDSA448PH = 13, +#endif +#ifdef WITH_SIG_DECDSA + DECDSA = 14, +#endif + /* ECDH types */ +#ifdef WITH_ECCCDH + ECCCDH = 15, +#endif +#ifdef WITH_X25519 + X25519 = 16, +#endif +#ifdef WITH_X448 + X448 = 17, +#endif +#ifdef WITH_SIG_BIGN + BIGN = 18, +#endif +#ifdef WITH_SIG_DBIGN + DBIGN = 19, +#endif +#ifdef WITH_SIG_BIP0340 + BIP0340 = 20, +#endif +} ec_alg_type; + +/* Hash algorithm types */ +typedef enum { + UNKNOWN_HASH_ALG = 0, +#ifdef WITH_HASH_SHA224 + SHA224 = 1, +#endif +#ifdef WITH_HASH_SHA256 + SHA256 = 2, +#endif +#ifdef WITH_HASH_SHA384 + SHA384 = 3, +#endif +#ifdef WITH_HASH_SHA512 + SHA512 = 4, +#endif +#ifdef WITH_HASH_SHA3_224 + SHA3_224 = 5, +#endif +#ifdef WITH_HASH_SHA3_256 + SHA3_256 = 6, +#endif +#ifdef WITH_HASH_SHA3_384 + SHA3_384 = 7, +#endif +#ifdef WITH_HASH_SHA3_512 + SHA3_512 = 8, +#endif +#ifdef WITH_HASH_SHA512_224 + SHA512_224 = 9, +#endif +#ifdef WITH_HASH_SHA512_256 + SHA512_256 = 10, +#endif +#ifdef WITH_HASH_SM3 + SM3 = 11, +#endif +#ifdef WITH_HASH_SHAKE256 + SHAKE256 = 12, +#endif +#ifdef WITH_HASH_STREEBOG256 + STREEBOG256 = 13, +#endif +#ifdef WITH_HASH_STREEBOG512 + STREEBOG512 = 14, +#endif +#ifdef WITH_HASH_RIPEMD160 + RIPEMD160 = 15, +#endif +#ifdef WITH_HASH_BELT_HASH + BELT_HASH = 16, +#endif +#ifdef WITH_HASH_BASH224 + BASH224 = 17, +#endif +#ifdef WITH_HASH_BASH256 + BASH256 = 18, +#endif +#ifdef WITH_HASH_BASH384 + BASH384 = 19, +#endif +#ifdef WITH_HASH_BASH512 + BASH512 = 20, +#endif +} hash_alg_type; + +/* All curves we support */ +typedef enum { + UNKNOWN_CURVE = 0, +#ifdef WITH_CURVE_FRP256V1 + FRP256V1 = 1, +#endif +#ifdef WITH_CURVE_SECP192R1 + SECP192R1 = 2, +#endif +#ifdef WITH_CURVE_SECP224R1 + SECP224R1 = 3, +#endif +#ifdef WITH_CURVE_SECP256R1 + SECP256R1 = 4, +#endif +#ifdef WITH_CURVE_SECP384R1 + SECP384R1 = 5, +#endif +#ifdef WITH_CURVE_SECP521R1 + SECP521R1 = 6, +#endif +#ifdef WITH_CURVE_BRAINPOOLP224R1 + BRAINPOOLP224R1 = 7, +#endif +#ifdef WITH_CURVE_BRAINPOOLP256R1 + BRAINPOOLP256R1 = 8, +#endif +#ifdef WITH_CURVE_BRAINPOOLP512R1 + BRAINPOOLP512R1 = 9, +#endif +#ifdef WITH_CURVE_GOST256 + GOST256 = 10, +#endif +#ifdef WITH_CURVE_GOST512 + GOST512 = 11, +#endif +#ifdef WITH_CURVE_BRAINPOOLP384R1 + BRAINPOOLP384R1 = 12, +#endif +#ifdef WITH_CURVE_BRAINPOOLP192R1 + BRAINPOOLP192R1 = 13, +#endif +#ifdef WITH_CURVE_WEI25519 + WEI25519 = 14, +#endif +#ifdef WITH_CURVE_WEI448 + WEI448 = 15, +#endif +#ifdef WITH_CURVE_SM2P256TEST + SM2P256TEST = 16, +#endif +#ifdef WITH_CURVE_SM2P256V1 + SM2P256V1 = 17, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETA + GOST_R3410_2012_256_PARAMSETA = 18, +#endif +#ifdef WITH_CURVE_SECP256K1 + SECP256K1 = 19, +#endif +#ifdef WITH_CURVE_GOST_R3410_2001_TESTPARAMSET + GOST_R3410_2001_TESTPARAMSET = 20, +#endif +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_A_PARAMSET + GOST_R3410_2001_CRYPTOPRO_A_PARAMSET = 21, +#endif +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_B_PARAMSET + GOST_R3410_2001_CRYPTOPRO_B_PARAMSET = 22, +#endif +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_C_PARAMSET + GOST_R3410_2001_CRYPTOPRO_C_PARAMSET = 23, +#endif +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET + GOST_R3410_2001_CRYPTOPRO_XCHA_PARAMSET = 24, +#endif +#ifdef WITH_CURVE_GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET + GOST_R3410_2001_CRYPTOPRO_XCHB_PARAMSET = 25, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETB + GOST_R3410_2012_256_PARAMSETB = 26, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETC + GOST_R3410_2012_256_PARAMSETC = 27, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETD + GOST_R3410_2012_256_PARAMSETD = 28, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETTEST + GOST_R3410_2012_512_PARAMSETTEST = 29, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETA + GOST_R3410_2012_512_PARAMSETA = 30, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETB + GOST_R3410_2012_512_PARAMSETB = 31, +#endif +#ifdef WITH_CURVE_GOST_R3410_2012_512_PARAMSETC + GOST_R3410_2012_512_PARAMSETC = 32, +#endif +#ifdef WITH_CURVE_SECP192K1 + SECP192K1 = 33, +#endif +#ifdef WITH_CURVE_SECP224K1 + SECP224K1 = 34, +#endif +#ifdef WITH_CURVE_BRAINPOOLP192T1 + BRAINPOOLP192T1 = 35, +#endif +#ifdef WITH_CURVE_BRAINPOOLP224T1 + BRAINPOOLP224T1 = 36, +#endif +#ifdef WITH_CURVE_BRAINPOOLP256T1 + BRAINPOOLP256T1 = 37, +#endif +#ifdef WITH_CURVE_BRAINPOOLP320R1 + BRAINPOOLP320R1 = 38, +#endif +#ifdef WITH_CURVE_BRAINPOOLP320T1 + BRAINPOOLP320T1 = 39, +#endif +#ifdef WITH_CURVE_BRAINPOOLP384T1 + BRAINPOOLP384T1 = 40, +#endif +#ifdef WITH_CURVE_BRAINPOOLP512T1 + BRAINPOOLP512T1 = 41, +#endif +#ifdef WITH_CURVE_BIGN256V1 + BIGN256V1 = 42, +#endif +#ifdef WITH_CURVE_BIGN384V1 + BIGN384V1 = 43, +#endif +#ifdef WITH_CURVE_BIGN512V1 + BIGN512V1 = 44, +#endif +/* ADD curves type here */ +/* XXX: Do not remove the comment above, as it is + * used by external tools as a placeholder to add or + * remove automatically generated code. + */ +} ec_curve_type; + +#endif /* __LIB_ECC_TYPES_H__ */ diff --git a/crypto/libecc/include/libecc/libarith.h b/crypto/libecc/include/libecc/libarith.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/libarith.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __LIBARITH_H__ +#define __LIBARITH_H__ + +/* NN layer includes */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Fp layer include */ +#include +#include +#include +#include +#include +#include +#include +#include + +#endif /* __LIBARITH_H__ */ diff --git a/crypto/libecc/include/libecc/libec.h b/crypto/libecc/include/libecc/libec.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/libec.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __LIBEC_H__ +#define __LIBEC_H__ + +/* Include the libarith package */ +#include +/* Curve layer includes */ +#include +#include +#include +#include +#include + +#include + +#endif /* __LIBEC_H__ */ diff --git a/crypto/libecc/include/libecc/libsig.h b/crypto/libecc/include/libecc/libsig.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/libsig.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __LIBSIG_H__ +#define __LIBSIG_H__ + +/* Include the Elliptic Curves layer */ +#include +/* Include configuration as well as types */ +#include +#include +/* Include the signature algorithms and their + * keys primitives + */ +#include +#include +#include /* debug */ +/* Include the hash functions */ +#include +/* Include the hmac functions */ +#include +/* Include the ECDH primitives */ +#include + +#endif /* __LIBSIG_H__ */ diff --git a/crypto/libecc/include/libecc/meson.build b/crypto/libecc/include/libecc/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/meson.build @@ -0,0 +1,156 @@ +libecc_public_headers = files( + 'fp/fp.h', + 'fp/fp_pow.h', + 'fp/fp_rand.h', + 'fp/fp_add.h', + 'fp/fp_sqrt.h', + 'fp/fp_montgomery.h', + 'fp/fp_mul.h', + 'fp/fp_config.h', + 'fp/fp_mul_redc1.h', + 'lib_ecc_config.h', + 'utils/utils.h', + 'utils/print_nn.h', + 'utils/print_buf.h', + 'utils/dbg_sig.h', + 'utils/print_curves.h', + 'utils/print_keys.h', + 'utils/print_fp.h', + 'lib_ecc_types.h', + 'curves/aff_pt.h', + 'curves/ec_shortw.h', + 'curves/prj_pt.h', + 'curves/ec_edwards.h', + 'curves/known/ec_params_bign384v1.h', + 'curves/known/ec_params_brainpoolp224t1.h', + 'curves/known/ec_params_external.h', + 'curves/known/ec_params_gost_R3410_2001_CryptoPro_A_ParamSet.h', + 'curves/known/ec_params_brainpoolp192t1.h', + 'curves/known/ec_params_sm2p256v1.h', + 'curves/known/ec_params_gost_R3410_2012_512_paramSetTest.h', + 'curves/known/ec_params_brainpoolp320r1.h', + 'curves/known/ec_params_secp256r1.h', + 'curves/known/ec_params_secp192k1.h', + 'curves/known/ec_params_brainpoolp320t1.h', + 'curves/known/ec_params_secp224r1.h', + 'curves/known/ec_params_gost_R3410_2012_512_paramSetC.h', + 'curves/known/ec_params_sm2p256test.h', + 'curves/known/ec_params_secp192r1.h', + 'curves/known/ec_params_gost256.h', + 'curves/known/ec_params_secp384r1.h', + 'curves/known/ec_params_wei25519.h', + 'curves/known/ec_params_wei448.h', + 'curves/known/ec_params_bign256v1.h', + 'curves/known/ec_params_gost512.h', + 'curves/known/ec_params_brainpoolp512r1.h', + 'curves/known/ec_params_brainpoolp256t1.h', + 'curves/known/ec_params_secp256k1.h', + 'curves/known/ec_params_gost_R3410_2012_512_paramSetA.h', + 'curves/known/ec_params_gost_R3410_2001_CryptoPro_XchA_ParamSet.h', + 'curves/known/ec_params_brainpoolp384t1.h', + 'curves/known/ec_params_brainpoolp256r1.h', + 'curves/known/ec_params_gost_R3410_2012_256_paramSetC.h', + 'curves/known/ec_params_gost_R3410_2001_CryptoPro_XchB_ParamSet.h', + 'curves/known/ec_params_gost_R3410_2001_CryptoPro_B_ParamSet.h', + 'curves/known/ec_params_gost_R3410_2001_CryptoPro_C_ParamSet.h', + 'curves/known/ec_params_brainpoolp224r1.h', + 'curves/known/ec_params_gost_R3410_2012_256_paramSetD.h', + 'curves/known/ec_params_sm2p192test.h', + 'curves/known/ec_params_gost_R3410_2012_256_paramSetA.h', + 'curves/known/ec_params_bign512v1.h', + 'curves/known/ec_params_brainpoolp192r1.h', + 'curves/known/ec_params_secp521r1.h', + 'curves/known/ec_params_gost_R3410_2001_TestParamSet.h', + 'curves/known/ec_params_secp224k1.h', + 'curves/known/ec_params_brainpoolp384r1.h', + 'curves/known/ec_params_gost_R3410_2012_256_paramSetB.h', + 'curves/known/ec_params_brainpoolp512t1.h', + 'curves/known/ec_params_frp256v1.h', + 'curves/known/ec_params_gost_R3410_2012_512_paramSetB.h', + 'curves/ec_params.h', + 'curves/ec_montgomery.h', + 'curves/curves.h', + 'curves/curves_list.h', + 'external_deps/print.h', + 'words/words.h', + 'words/types.h', + 'words/words_16.h', + 'words/words_32.h', + 'words/words_64.h', + 'libarith.h', + 'libsig.h', + 'hash/bash.h', + 'hash/bash512.h', + 'hash/sha3-224.h', + 'hash/ripemd160.h', + 'hash/sha512-224.h', + 'hash/sha3-256.h', + 'hash/bash384.h', + 'hash/hmac.h', + 'hash/sm3.h', + 'hash/streebog256.h', + 'hash/bash256.h', + 'hash/streebog512.h', + 'hash/streebog.h', + 'hash/sha3.h', + 'hash/sha256.h', + 'hash/shake.h', + 'hash/sha3-512.h', + 'hash/belt-hash.h', + 'hash/sha2.h', + 'hash/keccak.h', + 'hash/sha384.h', + 'hash/sha3-384.h', + 'hash/hash_algs.h', + 'hash/bash224.h', + 'hash/sha224.h', + 'hash/sha512_core.h', + 'hash/sha512.h', + 'hash/shake256.h', + 'hash/sha512-256.h', + 'libec.h', + 'nn/nn_mul_redc1.h', + 'nn/nn_mul.h', + 'nn/nn_logical.h', + 'nn/nn_add.h', + 'nn/nn_modinv.h', + 'nn/nn_div_public.h', + 'nn/nn_rand.h', + 'nn/nn_add.h', + 'nn/nn_config.h', + 'nn/nn_mul_public.h', + 'nn/nn_div.h', + 'nn/nn_mod_pow.h', + 'nn/nn.h', + 'ecdh/ecdh.h', + 'ecdh/ecccdh.h', + 'ecdh/x25519_448.h', + 'sig/ecdsa_common.h', + 'sig/ecsdsa_common.h', + 'sig/fuzzing_ecrdsa.h', + 'sig/fuzzing_ecdsa.h', + 'sig/ecfsdsa.h', + 'sig/bip0340.h', + 'sig/ecgdsa.h', + 'sig/ecosdsa.h', + 'sig/eddsa.h', + 'sig/dbign.h', + 'sig/fuzzing_ecgdsa.h', + 'sig/ecsdsa.h', + 'sig/bign_common.h', + 'sig/bign.h', + 'sig/eckcdsa.h', + 'sig/ecrdsa.h', + 'sig/decdsa.h', + 'sig/sig_algs_internal.h', + 'sig/ecdsa.h', + 'sig/sm2.h', + 'sig/sig_algs.h', + 'sig/ec_key.h', +) + +install_headers( + libecc_public_headers, + preserve_path: true, + subdir: 'libecc', +) diff --git a/crypto/libecc/include/libecc/nn/nn.h b/crypto/libecc/include/libecc/nn/nn.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn.h @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_H__ +#define __NN_H__ + +#include +#include +#include + +/* + * For a given amount of bytes (resp. bits), return the minimum number + * of words required to store that amount of bytes (respectively bits). + */ +#define BYTE_LEN_WORDS(nbytes) (((nbytes) + WORD_BYTES - 1) / WORD_BYTES) +#define BIT_LEN_WORDS(nbits) (((nbits) + WORD_BITS - 1) / WORD_BITS) + +/* + * For a given amount of bytes (resp. bits), return the first number of + * bytes (resp. bits) equal or above to that value which is a multiple + * of word bytes. + */ +#define BYTE_LEN_CEIL(nbytes) (BYTE_LEN_WORDS(nbytes) * WORD_BYTES) +#define BIT_LEN_CEIL(nbits) (BIT_LEN_WORDS(nbits) * WORD_BITS) + +/* + * Our nn type contains an array of words, which is of a fixed given storage + * size defined in nn_lib_ecc_config.h. + * + * Each word in this array is in local endianness whereas the words + * in the array are ordered in a little endian way with regard to their + * indices. That is: the word at index 0 in the array contains the least + * significant word of the nn. + * + * Except explicitly specified (some functions may provide automatic + * initialization of output params), initialization is usually required + * before nn can be used. + * + * After initialization, the 'wlen' attribute provides at each moment + * an upper bound on the position of last non-zero word in the array. + * All words after that point are always guaranteed to be 0 after any + * manipulation by a function of this module. + * Functions use this assumption to optimize operations by avoiding to + * process leading zeros. + * Nevertheless, some functions still access words past the 'wlen' index + * and return correct results only if these words are 0. + * + * Note that functions with parameters not explicitly marked as const may + * modify the value of the 'wlen' attribute if they see fit. + * And indeed most of them set the output 'wlen' attribute to the maximal + * possible value given the inputs 'wlen' attributes. + * The most notable exceptions are the logical functions whose result + * depends on the preset value of the output 'wlen' attribute. + */ +typedef struct { + word_t val[BIT_LEN_WORDS(NN_MAX_BIT_LEN)]; + word_t magic; + u8 wlen; +} nn; + +typedef nn *nn_t; +typedef const nn *nn_src_t; + +ATTRIBUTE_WARN_UNUSED_RET int nn_check_initialized(nn_src_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_is_initialized(nn_src_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_zero(nn_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_one(nn_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_set_word_value(nn_t A, word_t val); +void nn_uninit(nn_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_init(nn_t A, u16 len); +ATTRIBUTE_WARN_UNUSED_RET int nn_init_from_buf(nn_t A, const u8 *buf, u16 buflen); +ATTRIBUTE_WARN_UNUSED_RET int nn_cnd_swap(int cnd, nn_t in1, nn_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_set_wlen(nn_t A, u8 new_wlen); +ATTRIBUTE_WARN_UNUSED_RET int nn_iszero(nn_src_t A, int *iszero); +ATTRIBUTE_WARN_UNUSED_RET int nn_isone(nn_src_t A, int *isone); +ATTRIBUTE_WARN_UNUSED_RET int nn_isodd(nn_src_t A, int *isodd); +ATTRIBUTE_WARN_UNUSED_RET int nn_cmp_word(nn_src_t in, word_t w, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int nn_cmp(nn_src_t A, nn_src_t B, int *cmp); +ATTRIBUTE_WARN_UNUSED_RET int nn_copy(nn_t dst_nn, nn_src_t src_nn); +ATTRIBUTE_WARN_UNUSED_RET int nn_normalize(nn_t in1); +ATTRIBUTE_WARN_UNUSED_RET int nn_export_to_buf(u8 *buf, u16 buflen, nn_src_t in_nn); +ATTRIBUTE_WARN_UNUSED_RET int nn_tabselect(nn_t out, u8 idx, nn_src_t *tab, u8 tabsize); + +#endif /* __NN_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_add.h b/crypto/libecc/include/libecc/nn/nn_add.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_add.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_ADD_H__ +#define __NN_ADD_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_cnd_add(int cnd, nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_cnd_sub(int cnd, nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_add(nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_inc(nn_t out, nn_src_t in1); +ATTRIBUTE_WARN_UNUSED_RET int nn_sub(nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_dec(nn_t out, nn_src_t in1); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_add(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_inc(nn_t out, nn_src_t in1, nn_src_t p); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_sub(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_dec(nn_t out, nn_src_t in1, nn_src_t p); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_neg(nn_t out, nn_src_t in, nn_src_t p); + +#endif /* __NN_ADD_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_config.h b/crypto/libecc/include/libecc/nn/nn_config.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_config.h @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_CONFIG_H__ +#define __NN_CONFIG_H__ +#include +/* + * We include the curves list to adapt the maximum NN size to P and Q + * (prime and order of the curve). + */ +#include +/* + * We also include the hash layer to adapt the maximum NN size to the + * maximum digest size as we have to import full digests as NN when dealing + * with some signature algorithms. + * + */ +#include + +/* + * All the big num used in the lib are statically allocated. This constant + * must be defined (here or during build) to provide an upper limit on the + * size in bits of the numbers the instance of the lib you will build will + * handle. Note that this value does not prevent the declaration and use + * of smaller numbers. + * + * Rationale for the default value: the main purpose of the lirary is to + * support for an ECC implementation. ATM, a forseeable upper limit for the + * numbers that will be dealt with is 521 bits. + * + * However, the user is allowed to overload the maximum bit length of the + * numbers through the USER_NN_BIT_LEN macro definition (see below). A + * hard limit 'nn_max' for this size depends on the word size and verifies + * the following equation (with w being the word size): + * + * floor((nn_max + w - 1) / w) * 3 = 255 + * + * This equation is explained by elements given below, and by the fact that + * the length in words of our big numbers are encoded on an u8. This yields + * in max sizes of around 5300 bits for 64-bit words, around 2650 bits for + * 32-bit words, and around 1300 bits for 16-bit words. + * + * Among all the functions we have, some need to handle something which + * can be seen as a double, so we need twice the amount of bit above. + * This is typically the case when two numbers are multiplied. + * But then you usually want to divide this product by another number + * of the initial size which generically requires shifting by the + * original sized, whence the factor 3 below. + * + * Additionally, all numbers we handled are expected to have a length which + * is a multiple of the word size we support, i.e. 64/32/16 bits. Hence the + * rounding. + */ + +/* Macro to round a bit length size to a word size */ +#define BIT_LEN_ROUNDING(x, w) ((((x) + (w) - 1) / (w)) * (w)) + +/* + * Macro to round a bit length size of a NN value to a word size, and + * to a size compatible with the arithmetic operations of the library + * (usually 3 times the size of the input numbers, see explanations above). + */ +#define MAX_BIT_LEN_ROUNDING(x, w) (((((x) + (w) - 1) / (w)) * (w)) * 3) + +#ifndef USER_NN_BIT_LEN +/* + * The user has not defined a specific bit length: we can infer our maximum + * NN bit size from our curves. + */ +#ifndef NN_MAX_BIT_LEN +#if CURVES_MAX_P_BIT_LEN >= CURVES_MAX_CURVE_ORDER_BIT_LEN +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(CURVES_MAX_P_BIT_LEN, WORD_BITS) +#define NN_MAX_BASE CURVES_MAX_P_BIT_LEN +#else +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(CURVES_MAX_CURVE_ORDER_BIT_LEN, WORD_BITS) +#define NN_MAX_BASE CURVES_MAX_CURVE_ORDER_BIT_LEN +#endif +#endif +/****************/ +#else +/* + * If the USER_NN_BIT_LEN flag is defined by the user, we want to be sure that + * we can also handle our curves, and we also want to round the size to the + * words we have. + */ +#if CURVES_MAX_P_BIT_LEN >= CURVES_MAX_CURVE_ORDER_BIT_LEN +#if USER_NN_BIT_LEN >= CURVES_MAX_P_BIT_LEN +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(USER_NN_BIT_LEN, WORD_BITS) +#define NN_MAX_BASE USER_NN_BIT_LEN +#else +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(CURVES_MAX_P_BIT_LEN, WORD_BITS) +#define NN_MAX_BASE CURVES_MAX_P_BIT_LEN +#endif +#else +#if USER_NN_BIT_LEN >= CURVES_MAX_CURVE_ORDER_BIT_LEN +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(USER_NN_BIT_LEN, WORD_BITS) +#define NN_MAX_BASE USER_NN_BIT_LEN +#else +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(CURVES_MAX_CURVE_ORDER_BIT_LEN, WORD_BITS) +#define NN_MAX_BASE CURVES_MAX_CURVE_ORDER_BIT_LEN +#endif +#endif +#endif + +/* Now adjust the maximum length with our maximum digest size as we + * have to import full digests as big numbers in some signature algorithms. + * + * The division by 2 here is related to the fact that we usually import hash values + * without performing much NN operations on them (immediately reducing them modulo q), so + * it is safe to remove some additional space left for multiplications. + */ +#if NN_MAX_BIT_LEN < MAX_BIT_LEN_ROUNDING(((8 * MAX_DIGEST_SIZE) / 2), WORD_BITS) +#undef NN_MAX_BIT_LEN +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING(((8 * MAX_DIGEST_SIZE) / 2), WORD_BITS) +#undef NN_MAX_BASE +#define NN_MAX_BASE MAX_DIGEST_SIZE_BITS +#endif +/* + * NOTE: the only exception to the rule above (i.e. immediately reducing hash sized + * values modulo q) is when we use blinding and EdDSA and there might be not enough + * room for our computations. This is actually *specific to EdDSA 25519* as EdDSA 448 + * always uses SHAKE256 digest with 114 bytes hash output that has enough room for + * computation when compared to the 448-bit size order of the curve. + * + * This is kind of ugly to have this specific case here, but + * being too conservative always using the maximum size adapated to MAX_DIGEST_SIZE + * sacrifices *ALL* the sognature performance only for the specific case of EdDSA 25519! + * + */ +#if defined(WITH_SIG_EDDSA25519) && defined(USE_SIG_BLINDING) +#if NN_MAX_BIT_LEN < MAX_BIT_LEN_ROUNDING((8 * SHA512_DIGEST_SIZE), WORD_BITS) +#undef NN_MAX_BIT_LEN +#define NN_MAX_BIT_LEN MAX_BIT_LEN_ROUNDING((8 * SHA512_DIGEST_SIZE), WORD_BITS) +#undef NN_MAX_BASE +#define NN_MAX_BASE MAX_DIGEST_SIZE_BITS +#endif +#endif /* defined(WITH_SIG_EDDSA25519) && defined(USE_SIG_BLINDING) */ + +/************/ +/* NN maximum internal lengths to be "safe" in our computations */ +#define NN_MAX_BYTE_LEN (NN_MAX_BIT_LEN / 8) +#define NN_MAX_WORD_LEN (NN_MAX_BYTE_LEN / WORD_BYTES) +/* Usable maximum sizes, to be used by the end user to be "safe" in + * all the computations. + */ +#define NN_USABLE_MAX_BIT_LEN (NN_MAX_BASE) +#define NN_USABLE_MAX_BYTE_LEN ((BIT_LEN_ROUNDING(NN_USABLE_MAX_BIT_LEN, 8)) / 8) +#define NN_USABLE_MAX_WORD_LEN ((BIT_LEN_ROUNDING(NN_USABLE_MAX_BIT_LEN, WORD_BITS)) / WORD_BITS) + +/* Sanity checks */ +#if (NN_USABLE_MAX_BIT_LEN > NN_MAX_BIT_LEN) || (NN_USABLE_MAX_BYTE_LEN > NN_MAX_BYTE_LEN) || (NN_USABLE_MAX_WORD_LEN > NN_MAX_WORD_LEN) +#error "usable maximum length > internal maximum length, this should not happen!" +#endif + +#if (NN_MAX_WORD_LEN > 255) +#error "nn.wlen is encoded on an u8. NN_MAX_WORD_LEN cannot be larger than 255!" +#endif + +/* Add a (somehow 'dirty' but working and useful!) way to detect when our .a + * library has been compiled with options (WORDSIZE and NN_MAX_BIT_LEN) + * inconsistent with the 'final' binary we want to compile linking to the .a + * archive. The 'magic' lies in the definition in nn.c of a function (symbol) + * in our .a archive, consisting in a concatenation of WORDSIZE and + * NN_MAX_BIT_LEN preprocessed values. On the other side, we force the use + * of this symbol in other NN .c modules, yielding in a compile time error + * if WORDSIZE or NN_MAX_BIT_LEN differ. + * Update: we also check here the consistency of using complete formulas + * or not. + */ +#ifdef NO_USE_COMPLETE_FORMULAS +#define _LIBECC_CONCATENATE(a, b, c, d, e) a##_##b##_##c##_##d##_##e +#define LIBECC_CONCATENATE(a, b, c, d, e) _LIBECC_CONCATENATE(a, b, c, d, e) +void LIBECC_CONCATENATE(nn_consistency_check_maxbitlen, NN_MAX_BASE, wordsize, + WORDSIZE, MAX_DIGEST_SIZE) (void); +#ifdef NN_CONSISTENCY_CHECK +ATTRIBUTE_USED void LIBECC_CONCATENATE(nn_consistency_check_maxbitlen, NN_MAX_BASE, + wordsize, WORDSIZE, MAX_DIGEST_SIZE) (void) { + return; +} +#else +ATTRIBUTE_USED static inline void nn_check_libconsistency(void) +{ + LIBECC_CONCATENATE(nn_consistency_check_maxbitlen, NN_MAX_BASE, wordsize, + WORDSIZE, MAX_DIGEST_SIZE) (); + return; +} +#endif +#else /* NO_USE_COMPLETE_FORMULAS */ +#define _LIBECC_CONCATENATE(a, b, c, d, e, f) a##_##b##_##c##_##d##_##e##_##f +#define LIBECC_CONCATENATE(a, b, c, d, e, f) _LIBECC_CONCATENATE(a, b, c, d, e, f) +void LIBECC_CONCATENATE(nn_consistency_check_maxbitlen, NN_MAX_BASE, wordsize, + WORDSIZE, complete_formulas, MAX_DIGEST_SIZE) (void); +#ifdef NN_CONSISTENCY_CHECK +ATTRIBUTE_USED void LIBECC_CONCATENATE(nn_consistency_check_maxbitlen, NN_MAX_BASE, + wordsize, WORDSIZE, complete_formulas, MAX_DIGEST_SIZE) (void) { + return; +} +#else +ATTRIBUTE_USED static inline void nn_check_libconsistency(void) +{ + LIBECC_CONCATENATE(nn_consistency_check_maxbitlen, NN_MAX_BASE, wordsize, + WORDSIZE, complete_formulas, MAX_DIGEST_SIZE) (); + return; +} +#endif +#endif /* NO_USE_COMPLETE_FORMULAS */ + +#endif /* __NN_CONFIG_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_div.h b/crypto/libecc/include/libecc/nn/nn_div.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_div.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_DIV_H__ +#define __NN_DIV_H__ +#include +#include + +/* Compute quotient q and remainder r for given a and b such that a = q*b + r */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_divrem(nn_t q, nn_t r, nn_src_t a, nn_src_t b); (declared in public header) */ +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem_notrim(nn_t q, nn_t r, nn_src_t a, nn_src_t b); +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem_unshifted(nn_t q, nn_t r, nn_src_t a, nn_src_t b, word_t v, + bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem_normalized(nn_t q, nn_t r, nn_src_t a, nn_src_t b, word_t v); + +/* Compute r = a mod b */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_mod(nn_t r, nn_src_t a, nn_src_t b); (declared in public header) */ +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_notrim(nn_t r, nn_src_t a, nn_src_t b); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_unshifted(nn_t r, nn_src_t a, nn_src_t b, word_t v, bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_normalized(nn_t r, nn_src_t a, nn_src_t b, word_t v); + +/* Compute floor(B^3/(d+1)) - B. */ +ATTRIBUTE_WARN_UNUSED_RET int wreciprocal(word_t dh, word_t dl, word_t *reciprocal); +ATTRIBUTE_WARN_UNUSED_RET int nn_compute_div_coefs(nn_t p_normalized, word_t *p_shift, + word_t *p_reciprocal, nn_src_t p_in); + +/* Compute gcd of a and b */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_gcd(nn_t d, nn_src_t a, nn_src_t b, int *sign); (declared in public header) */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_xgcd(nn_t g, nn_t u, nn_t v, nn_src_t a, nn_src_t b, int *sign); (declared in public header) */ + +#endif /* __NN_DIV_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_div_public.h b/crypto/libecc/include/libecc/nn/nn_div_public.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_div_public.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_DIV_PUBLIC_H__ +#define __NN_DIV_PUBLIC_H__ +#include + +/* Compute quotient q and remainder r for given a and b such that a = q*b + r */ +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem(nn_t q, nn_t r, nn_src_t a, nn_src_t b); + +/* Compute r = a mod b */ +ATTRIBUTE_WARN_UNUSED_RET int nn_mod(nn_t r, nn_src_t a, nn_src_t b); + +/* Compute gcd of a and b */ +ATTRIBUTE_WARN_UNUSED_RET int nn_gcd(nn_t d, nn_src_t a, nn_src_t b, int *sign); +ATTRIBUTE_WARN_UNUSED_RET int nn_xgcd(nn_t g, nn_t u, nn_t v, nn_src_t a, nn_src_t b, int *sign); + +#endif /* __NN_DIV_PUBLIC_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_logical.h b/crypto/libecc/include/libecc/nn/nn_logical.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_logical.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __LOGICAL_H__ +#define __LOGICAL_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_rshift_fixedlen(nn_t out, nn_src_t in, bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_rshift(nn_t out, nn_src_t in, bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_lshift_fixedlen(nn_t out, nn_src_t in, bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_lshift(nn_t out, nn_src_t in, bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_rrot(nn_t out, nn_src_t in, bitcnt_t cnt, bitcnt_t bitlen); +ATTRIBUTE_WARN_UNUSED_RET int nn_lrot(nn_t out, nn_src_t in, bitcnt_t cnt, bitcnt_t bitlen); +ATTRIBUTE_WARN_UNUSED_RET int nn_xor(nn_t B, nn_src_t C, nn_src_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_or(nn_t B, nn_src_t C, nn_src_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_and(nn_t B, nn_src_t C, nn_src_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_not(nn_t B, nn_src_t A); +ATTRIBUTE_WARN_UNUSED_RET int nn_clz(nn_src_t A, bitcnt_t *lz); +ATTRIBUTE_WARN_UNUSED_RET int nn_bitlen(nn_src_t A, bitcnt_t *blen); +ATTRIBUTE_WARN_UNUSED_RET int nn_getbit(nn_src_t in, bitcnt_t bit, u8 *bitval); + +#endif /* __LOGICAL_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_mod_pow.h b/crypto/libecc/include/libecc/nn/nn_mod_pow.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_mod_pow.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_MOD_POW_H__ +#define __NN_MOD_POW_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_pow_redc(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod, nn_src_t r, nn_src_t r_square, word_t mpinv); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_pow(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod); + +#endif /* __NN_MOD_POW_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_modinv.h b/crypto/libecc/include/libecc/nn/nn_modinv.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_modinv.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_MODINV_H__ +#define __NN_MODINV_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_modinv(nn_t out, nn_src_t x, nn_src_t m); +ATTRIBUTE_WARN_UNUSED_RET int nn_modinv_2exp(nn_t out, nn_src_t in, bitcnt_t exp, int *in_isodd); +ATTRIBUTE_WARN_UNUSED_RET int nn_modinv_word(nn_t out, word_t w, nn_src_t m); +ATTRIBUTE_WARN_UNUSED_RET int nn_modinv_fermat(nn_t out, nn_src_t x, nn_src_t p); +ATTRIBUTE_WARN_UNUSED_RET int nn_modinv_fermat_redc(nn_t out, nn_src_t x, nn_src_t p, nn_src_t r, nn_src_t r_square, word_t mpinv); + +#endif /* __NN_MODINV_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_mul.h b/crypto/libecc/include/libecc/nn/nn_mul.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_mul.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_MUL_H__ +#define __NN_MUL_H__ +#include +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_mul_low(nn_t out, nn_src_t in1, nn_src_t in2, u8 wlimit); +ATTRIBUTE_WARN_UNUSED_RET int nn_sqr_low(nn_t out, nn_src_t in, u8 wlimit); +/* (declared in public header) +ATTRIBUTE_WARN_UNUSED_RET int nn_mul(nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_sqr(nn_t out, nn_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int nn_mul_word(nn_t out, nn_src_t in, word_t w); +*/ + +#endif /* __NN_MUL_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_mul_public.h b/crypto/libecc/include/libecc/nn/nn_mul_public.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_mul_public.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_MUL_PUBLIC_H__ +#define __NN_MUL_PUBLIC_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_mul(nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_sqr(nn_t out, nn_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int nn_mul_word(nn_t out, nn_src_t in, word_t w); + +#endif /* __NN_MUL_PUBLIC_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_mul_redc1.h b/crypto/libecc/include/libecc/nn/nn_mul_redc1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_mul_redc1.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_MUL_REDC1_H__ +#define __NN_MUL_REDC1_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_compute_redc1_coefs(nn_t r, nn_t r_square, nn_src_t p_in, + word_t *mpinv); +ATTRIBUTE_WARN_UNUSED_RET int nn_mul_redc1(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p, + word_t mpinv); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_mul(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p); + +#endif /* __NN_MUL_REDC1_H__ */ diff --git a/crypto/libecc/include/libecc/nn/nn_rand.h b/crypto/libecc/include/libecc/nn/nn_rand.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/nn/nn_rand.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_RAND_H__ +#define __NN_RAND_H__ +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_get_random_len(nn_t out, u16 len); +ATTRIBUTE_WARN_UNUSED_RET int nn_get_random_maxlen(nn_t out, u16 max_len); +ATTRIBUTE_WARN_UNUSED_RET int nn_get_random_mod(nn_t out, nn_src_t q); + +#endif /* __NN_RAND_H__ */ diff --git a/crypto/libecc/include/libecc/sig/bign.h b/crypto/libecc/include/libecc/sig/bign.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/bign.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_BIGN + +#ifndef __BIGN_H__ +#define __BIGN_H__ + +#include + +ATTRIBUTE_WARN_UNUSED_RET int bign_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int bign_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _bign_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _bign_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _bign_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _bign_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _bign_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _bign_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __BIGN_H__ */ +#endif /* WITH_SIG_BIGN */ diff --git a/crypto/libecc/include/libecc/sig/bign_common.h b/crypto/libecc/include/libecc/sig/bign_common.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/bign_common.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) + +#ifndef __BIGN_COMMON_H__ +#define __BIGN_COMMON_H__ + +#include +#include +#include +#include +#include + + +/* NOTE: BIGN uses per its standard the BELT-HASH hash function as its "internal" + * hash function, as well as the BELT encryption block cipher during the deterministic + * computation of the nonce for the deterministic version of BIGN. + * Hence the sanity check below. + */ +#if !defined(WITH_HASH_BELT_HASH) +#error "BIGN and DBIGN need BELT-HASH, please activate it!" +#endif + +#define BIGN_S0_LEN(q_bit_len) (BYTECEIL(q_bit_len) / 2) +#define BIGN_S1_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define BIGN_SIGLEN(q_bit_len) (BIGN_S0_LEN(q_bit_len) + \ + BIGN_S1_LEN(q_bit_len)) +#define BIGN_MAX_SIGLEN BIGN_SIGLEN(CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (BIGN_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN BIGN_MAX_SIGLEN +#endif + + +/* The additional data for bign are specific. We provide + * helpers to extract them from an adata pointer. + */ +int bign_get_oid_from_adata(const u8 *adata, u16 adata_len, const u8 **oid_ptr, u16 *oid_len); + +int bign_get_t_from_adata(const u8 *adata, u16 adata_len, const u8 **t_ptr, u16 *t_len); + +int bign_set_adata(u8 *adata, u16 adata_len, const u8 *oid, u16 oid_len, const u8 *t, u16 t_len); + + +typedef struct { + hash_context h_ctx; + word_t magic; +} bign_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int __bign_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __bign_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int __bign_sign_init(struct ec_sign_context *ctx, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __bign_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __bign_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen, ec_alg_type key_type); + +typedef struct { + u8 s0_sig[BIGN_S0_LEN(CURVES_MAX_Q_BIT_LEN)]; + nn s0; + nn s1; + hash_context h_ctx; + word_t magic; +} bign_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int __bign_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __bign_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __bign_verify_finalize(struct ec_verify_context *ctx, ec_alg_type key_type); + +#endif /* __BIGN_COMMON_H__ */ +#endif /* defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) */ diff --git a/crypto/libecc/include/libecc/sig/bip0340.h b/crypto/libecc/include/libecc/sig/bip0340.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/bip0340.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_BIP0340 + +#ifndef __BIP0340_H__ +#define __BIP0340_H__ + +#include +#include +#include +#include + +#define BIP0340_R_LEN(p_bit_len) (BYTECEIL(p_bit_len)) +#define BIP0340_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define BIP0340_SIGLEN(p_bit_len, q_bit_len) (BIP0340_R_LEN(p_bit_len) + \ + BIP0340_S_LEN(q_bit_len)) +#define BIP0340_MAX_SIGLEN BIP0340_SIGLEN(CURVES_MAX_P_BIT_LEN, CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (BIP0340_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN BIP0340_MAX_SIGLEN +#endif + +ATTRIBUTE_WARN_UNUSED_RET int bip0340_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int bip0340_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _bip0340_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +typedef struct { + hash_context h_ctx; + fp r; + nn s; + word_t magic; +} bip0340_verify_data; + +ATTRIBUTE_WARN_UNUSED_RET int _bip0340_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _bip0340_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _bip0340_verify_finalize(struct ec_verify_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int bip0340_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len); + +#endif /* __BIP0340_H__ */ +#endif /* WITH_SIG_BIP0340 */ diff --git a/crypto/libecc/include/libecc/sig/dbign.h b/crypto/libecc/include/libecc/sig/dbign.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/dbign.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_DBIGN + +#ifndef __DBIGN_H__ +#define __DBIGN_H__ + +#include + +ATTRIBUTE_WARN_UNUSED_RET int dbign_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int dbign_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _dbign_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _dbign_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _dbign_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _dbign_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _dbign_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _dbign_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __DBIGN_H__ */ +#endif /* WITH_SIG_DBIGN */ diff --git a/crypto/libecc/include/libecc/sig/decdsa.h b/crypto/libecc/include/libecc/sig/decdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/decdsa.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_DECDSA + +#ifndef __DECDSA_H__ +#define __DECDSA_H__ + +#include + +ATTRIBUTE_WARN_UNUSED_RET int decdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int decdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _decdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _decdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _decdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _decdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _decdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _decdsa_verify_finalize(struct ec_verify_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int decdsa_public_key_from_sig(ec_pub_key *out_pub1, ec_pub_key *out_pub2, const ec_params *params, + const u8 *sig, u8 siglen, const u8 *hash, u8 hsize); + +#endif /* __DECDSA_H__ */ +#endif /* WITH_SIG_DECDSA */ diff --git a/crypto/libecc/include/libecc/sig/ec_key.h b/crypto/libecc/include/libecc/sig/ec_key.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ec_key.h @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_KEY_H__ +#define __EC_KEY_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Enum for exported keys */ +typedef enum { + EC_PUBKEY = 0, + EC_PRIVKEY = 1, +} ec_key_type; + +/* + * Declarations for EC private keys + */ + +#define PRIV_KEY_MAGIC ((word_t)(0x2feb91e938a4855dULL)) +typedef struct { + /* A key type can only be used for a given sig alg */ + ec_alg_type key_type; + + /* Elliptic curve parameters */ + const ec_params *params; + + /* + * Private key (usually an integer in ]0,q[, where q is + * the order of G, the generator of the group + * on the curve, or a derivative of this). + * + * For the specific case of EdDSA, this value will instead hold the + * digest derivation of the secret value sk that is twice the size of + * the digest size. + */ + nn x; + + word_t magic; +} ec_priv_key; + +/* NOTE1: in the specific case of EdDSA, the hash size dictates the size of the + * private keys. Although EdDSA only uses specific hash algorithms, we are being + * conservative here by taking the maximum digest size (hence accepting losing some space + * wen storing the private key for more simplicity). + * + * NOTE2: we use MAX_DIGEST_SIZE as the basis for EdDSA private key size instead of + * (MAX_DIGEST_SIZE / 2) because we store the EdDSA private key in its *derived* formed, + * meaning that it is twice the size of a regular standardized private key. + * + */ +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) + +#define EC_PRIV_KEY_MAX_SIZE (LOCAL_MAX(MAX_DIGEST_SIZE, LOCAL_MAX(BYTECEIL(CURVES_MAX_Q_BIT_LEN), BYTECEIL(CURVES_MAX_P_BIT_LEN)))) + +#define EC_PRIV_KEY_EXPORT_SIZE(priv_key) \ + ((u8)(LOCAL_MAX(MAX_DIGEST_SIZE, LOCAL_MAX(BYTECEIL((priv_key)->params->ec_gen_order_bitlen), BYTECEIL((priv_key)->params->ec_fp.p_bitlen))))) + +#else /* !(defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448)) */ + +#define EC_PRIV_KEY_MAX_SIZE (LOCAL_MAX(BYTECEIL(CURVES_MAX_Q_BIT_LEN), BYTECEIL(CURVES_MAX_P_BIT_LEN))) + +#define EC_PRIV_KEY_EXPORT_SIZE(priv_key) \ + ((u8)(LOCAL_MAX(BYTECEIL((priv_key)->params->ec_gen_order_bitlen), BYTECEIL((priv_key)->params->ec_fp.p_bitlen)))) + +#endif /* defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) */ + +#define EC_STRUCTURED_PRIV_KEY_MAX_EXPORT_SIZE (EC_PRIV_KEY_MAX_SIZE + 3) +#if (EC_STRUCTURED_PRIV_KEY_MAX_EXPORT_SIZE > 255) +#error "All structured priv keys size are expected to fit on an u8." +#endif + +#define EC_STRUCTURED_PRIV_KEY_EXPORT_SIZE(priv_key) \ + ((u8)(EC_PRIV_KEY_EXPORT_SIZE(priv_key) + (3 * sizeof(u8)))) + +ATTRIBUTE_WARN_UNUSED_RET int priv_key_check_initialized(const ec_priv_key *A); +ATTRIBUTE_WARN_UNUSED_RET int priv_key_check_initialized_and_type(const ec_priv_key *A, + ec_alg_type sig_type); + +ATTRIBUTE_WARN_UNUSED_RET int ec_priv_key_import_from_buf(ec_priv_key *priv_key, + const ec_params *params, + const u8 *priv_key_buf, u8 priv_key_buf_len, + ec_alg_type ec_key_alg); +ATTRIBUTE_WARN_UNUSED_RET int ec_priv_key_export_to_buf(const ec_priv_key *priv_key, u8 *priv_key_buf, + u8 priv_key_buf_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_priv_key_import_from_buf(ec_priv_key *priv_key, + const ec_params *params, + const u8 *priv_key_buf, + u8 priv_key_buf_len, + ec_alg_type ec_key_alg); +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_priv_key_export_to_buf(const ec_priv_key *priv_key, + u8 *priv_key_buf, + u8 priv_key_buf_len); + +/* + * Declarations for EC public keys + */ + +#define PUB_KEY_MAGIC ((word_t)(0x31327f37741ffb76ULL)) +typedef struct { + /* A key type can only be used for a given sig alg */ + ec_alg_type key_type; + + /* Elliptic curve parameters */ + const ec_params *params; + + /* Public key, i.e. y = xG mod p */ + prj_pt y; + + word_t magic; +} ec_pub_key; + +#define EC_PUB_KEY_MAX_SIZE (3 * BYTECEIL(CURVES_MAX_P_BIT_LEN)) + +#define EC_PUB_KEY_EXPORT_SIZE(pub_key) \ + (3 * BYTECEIL((pub_key)->params->ec_curve.a.ctx->p_bitlen)) + +#define EC_STRUCTURED_PUB_KEY_MAX_EXPORT_SIZE (EC_PUB_KEY_MAX_SIZE + 3) +#if (EC_STRUCTURED_PUB_KEY_MAX_EXPORT_SIZE > 255) +#error "All structured pub keys size are expected to fit on an u8." +#endif +#define EC_STRUCTURED_PUB_KEY_EXPORT_SIZE(pub_key) \ + ((u8)(EC_PUB_KEY_EXPORT_SIZE(pub_key) + (u8)(3 * sizeof(u8)))) + +ATTRIBUTE_WARN_UNUSED_RET int pub_key_check_initialized(const ec_pub_key *A); +ATTRIBUTE_WARN_UNUSED_RET int pub_key_check_initialized_and_type(const ec_pub_key *A, + ec_alg_type sig_type); + +ATTRIBUTE_WARN_UNUSED_RET int ec_pub_key_import_from_buf(ec_pub_key *pub_key, const ec_params *params, + const u8 *pub_key_buf, u8 pub_key_buf_len, + ec_alg_type ec_key_alg); +ATTRIBUTE_WARN_UNUSED_RET int ec_pub_key_export_to_buf(const ec_pub_key *pub_key, u8 *pub_key_buf, + u8 pub_key_buf_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_pub_key_import_from_aff_buf(ec_pub_key *pub_key, const ec_params *params, + const u8 *pub_key_buf, u8 pub_key_buf_len, + ec_alg_type ec_key_alg); + +ATTRIBUTE_WARN_UNUSED_RET int ec_pub_key_export_to_aff_buf(const ec_pub_key *pub_key, u8 *pub_key_buf, + u8 pub_key_buf_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_pub_key_import_from_buf(ec_pub_key *pub_key, + const ec_params *params, + const u8 *pub_key_buf, + u8 pub_key_buf_len, + ec_alg_type ec_key_alg); +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_pub_key_export_to_buf(const ec_pub_key *pub_key, + u8 *pub_key_buf, u8 pub_key_buf_len); + +/* + * Declarations for EC key pairs + */ + +typedef struct { + ec_priv_key priv_key; + ec_pub_key pub_key; +} ec_key_pair; + +ATTRIBUTE_WARN_UNUSED_RET int key_pair_check_initialized(const ec_key_pair *A); + +ATTRIBUTE_WARN_UNUSED_RET int key_pair_check_initialized_and_type(const ec_key_pair *A, + ec_alg_type sig_type); + +ATTRIBUTE_WARN_UNUSED_RET int ec_key_pair_import_from_priv_key_buf(ec_key_pair *kp, + const ec_params *params, + const u8 *priv_key, u8 priv_key_len, + ec_alg_type ec_key_alg); +ATTRIBUTE_WARN_UNUSED_RET int ec_key_pair_gen(ec_key_pair *kp, const ec_params *params, + ec_alg_type ec_key_alg); + +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_key_pair_import_from_priv_key_buf(ec_key_pair *kp, + const ec_params *params, + const u8 *priv_key_buf, + u8 priv_key_buf_len, + ec_alg_type ec_key_alg); +/* + * NOTE: please use the following API with care as it does not check the consistency + * between the private and public keys! On one side, this "saves" a costly + * scalar multiplication when there is confidence in the source of the buffers, + * but on the other side the user of the API MUST check the source (integrity) + * of the private/public key pair. If unsure, it is advised to use the + * ec_structured_key_pair_import_from_priv_key_buf API that safely derives the + * public key from the private key. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_key_pair_import_from_buf(ec_key_pair *kp, + const ec_params *params, + const u8 *priv_key_buf, + u8 priv_key_buf_len, + const u8 *pub_key_buf, + u8 pub_key_buf_len, + ec_alg_type ec_key_alg); + +ATTRIBUTE_WARN_UNUSED_RET int generic_gen_priv_key(ec_priv_key *priv_key); + + +/* Type used for batch verification */ +typedef struct { + nn number; + prj_pt point; + u32 index; +} verify_batch_scratch_pad; + +#endif /* __EC_KEY_H__ */ diff --git a/crypto/libecc/include/libecc/sig/ecdsa.h b/crypto/libecc/include/libecc/sig/ecdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecdsa.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECDSA + +#ifndef __ECDSA_H__ +#define __ECDSA_H__ + +#include + +ATTRIBUTE_WARN_UNUSED_RET int ecdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int ecdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _ecdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecdsa_verify_finalize(struct ec_verify_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int ecdsa_public_key_from_sig(ec_pub_key *out_pub1, ec_pub_key *out_pub2, const ec_params *params, + const u8 *sig, u8 siglen, const u8 *hash, u8 hsize); + +#endif /* __ECDSA_H__ */ +#endif /* WITH_SIG_ECDSA */ diff --git a/crypto/libecc/include/libecc/sig/ecdsa_common.h b/crypto/libecc/include/libecc/sig/ecdsa_common.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecdsa_common.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_SIG_ECDSA) || defined(WITH_SIG_DECDSA) + +#ifndef __ECDSA_COMMON_H__ +#define __ECDSA_COMMON_H__ + +#include +#include +#include +#include +#include + +#define ECDSA_R_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECDSA_SIGLEN(q_bit_len) (ECDSA_R_LEN(q_bit_len) + \ + ECDSA_S_LEN(q_bit_len)) +#define ECDSA_MAX_SIGLEN ECDSA_SIGLEN(CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECDSA_MAX_SIGLEN +#endif + +typedef struct { + hash_context h_ctx; + word_t magic; +} ecdsa_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_sign_init(struct ec_sign_context *ctx, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen, ec_alg_type key_type); + +typedef struct { + nn r; + nn s; + hash_context h_ctx; + word_t magic; +} ecdsa_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_verify_finalize(struct ec_verify_context *ctx, ec_alg_type key_type); + +ATTRIBUTE_WARN_UNUSED_RET int __ecdsa_public_key_from_sig(ec_pub_key *out_pub1, ec_pub_key *out_pub2, const ec_params *params, + const u8 *sig, u8 siglen, const u8 *hash, u8 hsize, + ec_alg_type key_type); + +#endif /* __ECDSA_COMMON_H__ */ +#endif /* defined(WITH_SIG_ECDSA) || defined(WITH_SIG_DECDSA) */ diff --git a/crypto/libecc/include/libecc/sig/ecfsdsa.h b/crypto/libecc/include/libecc/sig/ecfsdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecfsdsa.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECFSDSA + +#ifndef __ECFSDSA_H__ +#define __ECFSDSA_H__ + +#include +#include +#include +#include + +#define ECFSDSA_R_LEN(p_bit_len) (2 * (BYTECEIL(p_bit_len))) +#define ECFSDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECFSDSA_SIGLEN(p_bit_len, q_bit_len) (ECFSDSA_R_LEN(p_bit_len) + \ + ECFSDSA_S_LEN(q_bit_len)) +#define ECFSDSA_MAX_SIGLEN ECFSDSA_SIGLEN(CURVES_MAX_P_BIT_LEN, \ + CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECFSDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECFSDSA_MAX_SIGLEN +#endif + +typedef struct { + nn k; + u8 r[2 * NN_MAX_BYTE_LEN]; + hash_context h_ctx; + word_t magic; +} ecfsdsa_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int ecfsdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int ecfsdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecfsdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _ecfsdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecfsdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +typedef struct { + u8 r[2 * NN_MAX_BYTE_LEN]; + nn s; + hash_context h_ctx; + word_t magic; +} ecfsdsa_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int _ecfsdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecfsdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecfsdsa_verify_finalize(struct ec_verify_context *ctx); + +/* Batch verification function */ +ATTRIBUTE_WARN_UNUSED_RET int ecfsdsa_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len); + + +#endif /* __ECFSDSA_H__ */ +#endif /* WITH_SIG_ECFSDSA */ diff --git a/crypto/libecc/include/libecc/sig/ecgdsa.h b/crypto/libecc/include/libecc/sig/ecgdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecgdsa.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECGDSA + +#ifndef __ECGDSA_H__ +#define __ECGDSA_H__ + +#include +#include +#include +#include +#include + +#define ECGDSA_R_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECGDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECGDSA_SIGLEN(q_bit_len) (ECGDSA_R_LEN(q_bit_len) + \ + ECGDSA_S_LEN(q_bit_len)) +#define ECGDSA_MAX_SIGLEN ECGDSA_SIGLEN(CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECGDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECGDSA_MAX_SIGLEN +#endif + +ATTRIBUTE_WARN_UNUSED_RET int ecgdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int ecgdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +typedef struct { + hash_context h_ctx; + word_t magic; +} ecgdsa_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int _ecgdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _ecgdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecgdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +typedef struct { + hash_context h_ctx; + nn r; + nn s; + word_t magic; +} ecgdsa_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int _ecgdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecgdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecgdsa_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __ECGDSA_H__ */ +#endif /* WITH_SIG_ECGDSA */ diff --git a/crypto/libecc/include/libecc/sig/eckcdsa.h b/crypto/libecc/include/libecc/sig/eckcdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/eckcdsa.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECKCDSA + +#ifndef __ECKCDSA_H__ +#define __ECKCDSA_H__ +#include +#include +#include +#include +#include + +#define ECKCDSA_R_LEN(hsize, q_bit_len) LOCAL_MIN(hsize, BYTECEIL(q_bit_len)) +#define ECKCDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECKCDSA_SIGLEN(hsize, q_bit_len) (ECKCDSA_R_LEN(hsize, q_bit_len) + \ + ECKCDSA_S_LEN(q_bit_len)) +#define ECKCDSA_MAX_SIGLEN ECKCDSA_SIGLEN(MAX_DIGEST_SIZE, CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECKCDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECKCDSA_MAX_SIGLEN +#endif + +ATTRIBUTE_WARN_UNUSED_RET int eckcdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int eckcdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +typedef struct { + hash_context h_ctx; + word_t magic; +} eckcdsa_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int _eckcdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _eckcdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _eckcdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +typedef struct { + hash_context h_ctx; + u8 r[MAX_DIGEST_SIZE]; + nn s; + word_t magic; +} eckcdsa_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int _eckcdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _eckcdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _eckcdsa_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __ECKCDSA_H__ */ +#endif /* WITH_SIG_ECKCDSA */ diff --git a/crypto/libecc/include/libecc/sig/ecosdsa.h b/crypto/libecc/include/libecc/sig/ecosdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecosdsa.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECOSDSA + +#ifndef __ECOSDSA_H__ +#define __ECOSDSA_H__ +#include +#include +#include +#include +#include +#include + +#define ECOSDSA_R_LEN(hsize) (hsize) +#define ECOSDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECOSDSA_SIGLEN(hsize, q_bit_len) (ECOSDSA_R_LEN(hsize) + \ + ECOSDSA_S_LEN(q_bit_len)) +#define ECOSDSA_MAX_SIGLEN ECOSDSA_SIGLEN(MAX_DIGEST_SIZE, CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECOSDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECOSDSA_MAX_SIGLEN +#endif + +ATTRIBUTE_WARN_UNUSED_RET int ecosdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int ecosdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecosdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _ecosdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecosdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecosdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecosdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecosdsa_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __ECOSDSA_H__ */ +#endif /* WITH_SIG_ECOSDSA */ diff --git a/crypto/libecc/include/libecc/sig/ecrdsa.h b/crypto/libecc/include/libecc/sig/ecrdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecrdsa.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECRDSA + +#ifndef __ECRDSA_H__ +#define __ECRDSA_H__ + +#include +#include +#include +#include +#include + +#define ECRDSA_R_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECRDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECRDSA_SIGLEN(q_bit_len) (ECRDSA_R_LEN(q_bit_len) + \ + ECRDSA_S_LEN(q_bit_len)) +#define ECRDSA_MAX_SIGLEN ECRDSA_SIGLEN(CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECRDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECRDSA_MAX_SIGLEN +#endif + +ATTRIBUTE_WARN_UNUSED_RET int ecrdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int ecrdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +typedef struct { + hash_context h_ctx; + word_t magic; +} ecrdsa_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int _ecrdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _ecrdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecrdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +typedef struct { + hash_context h_ctx; + nn r; + nn s; + word_t magic; +} ecrdsa_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int _ecrdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecrdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecrdsa_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __ECRDSA_H__ */ +#endif /* WITH_SIG_ECRDSA */ diff --git a/crypto/libecc/include/libecc/sig/ecsdsa.h b/crypto/libecc/include/libecc/sig/ecsdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecsdsa.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#ifdef WITH_SIG_ECSDSA + +#ifndef __ECSDSA_H__ +#define __ECSDSA_H__ +#include +#include +#include +#include +#include + +#define ECSDSA_R_LEN(hsize) (hsize) +#define ECSDSA_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define ECSDSA_SIGLEN(hsize, q_bit_len) (ECSDSA_R_LEN(hsize) + \ + ECSDSA_S_LEN(q_bit_len)) +#define ECSDSA_MAX_SIGLEN ECSDSA_SIGLEN(MAX_DIGEST_SIZE, CURVES_MAX_Q_BIT_LEN) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (ECSDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN ECSDSA_MAX_SIGLEN +#endif + +ATTRIBUTE_WARN_UNUSED_RET int ecsdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int ecsdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +typedef struct { + hash_context h_ctx; + nn k; + word_t magic; +} ecsdsa_sign_data; + +ATTRIBUTE_WARN_UNUSED_RET int _ecsdsa_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _ecsdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecsdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +typedef struct { + hash_context h_ctx; + u8 r[MAX_DIGEST_SIZE]; + nn s; + word_t magic; +} ecsdsa_verify_data; + +ATTRIBUTE_WARN_UNUSED_RET int _ecsdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecsdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _ecsdsa_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __ECSDSA_H__ */ +#endif /* WITH_SIG_ECSDSA */ diff --git a/crypto/libecc/include/libecc/sig/ecsdsa_common.h b/crypto/libecc/include/libecc/sig/ecsdsa_common.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/ecsdsa_common.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) + +#ifndef __ECSDSA_COMMON_H__ +#define __ECSDSA_COMMON_H__ + +#include +#include +#include +#include +#include +#include + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv, + ec_alg_type key_type); +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_sign_init(struct ec_sign_context *ctx, + ec_alg_type key_type, int optimized); +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen, + ec_alg_type key_type, int optimized); +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int __ecsdsa_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __ECSDSA_COMMON_H__ */ +#endif /* (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) */ diff --git a/crypto/libecc/include/libecc/sig/eddsa.h b/crypto/libecc/include/libecc/sig/eddsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/eddsa.h @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) + +#ifndef __EDDSA_H__ +#define __EDDSA_H__ + +#include +#include +#include +#include +#include + +/* + * EDDSA exported encoded public keys are of fixed known sizes depending + * on the EDDSA variant + */ +#if defined(WITH_SIG_EDDSA25519) +#define EDDSA25519_PUB_KEY_ENCODED_LEN 32 +#endif +#if defined(WITH_SIG_EDDSA448) +#define EDDSA448_PUB_KEY_ENCODED_LEN 57 +#endif + +/* Maximum size depending on what is defined */ +#if defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_EDDSA448) +#define EDDSA_MAX_PUB_KEY_ENCODED_LEN LOCAL_MAX(EDDSA25519_PUB_KEY_ENCODED_LEN, EDDSA448_PUB_KEY_ENCODED_LEN) +#endif + +#if defined(WITH_SIG_EDDSA25519) && !defined(WITH_SIG_EDDSA448) +#define EDDSA_MAX_PUB_KEY_ENCODED_LEN EDDSA25519_PUB_KEY_ENCODED_LEN +#endif + +#if !defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_EDDSA448) +#define EDDSA_MAX_PUB_KEY_ENCODED_LEN EDDSA448_PUB_KEY_ENCODED_LEN +#endif + + +/* + * NOTE: for EDDSA, the signature length is twice the encoding of integers, + * which corresponds to half the hash size. + */ +#define EDDSA_R_LEN(hsize) (hsize / 2) +#define EDDSA_S_LEN(hsize) (hsize / 2) +#define EDDSA_SIGLEN(hsize) (EDDSA_R_LEN(hsize) + EDDSA_S_LEN(hsize)) +#define EDDSA_MAX_SIGLEN EDDSA_SIGLEN(MAX_DIGEST_SIZE) + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (EDDSA_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN EDDSA_MAX_SIGLEN +#endif + +typedef struct { + hash_context h_ctx; + word_t magic; +} eddsa_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int eddsa_gen_priv_key(ec_priv_key *priv_key); +ATTRIBUTE_WARN_UNUSED_RET int eddsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int eddsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_sign_init_pre_hash(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_sign_update_pre_hash(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_sign_finalize_pre_hash(struct ec_sign_context *ctx, + u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +typedef struct { + prj_pt _R; + nn S; + hash_context h_ctx; + hash_context h_ctx_pre_hash; + word_t magic; +} eddsa_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _eddsa_verify_finalize(struct ec_verify_context *ctx); + +/* Functions specific to EdDSA */ +ATTRIBUTE_WARN_UNUSED_RET int eddsa_derive_priv_key(ec_priv_key *priv_key); +ATTRIBUTE_WARN_UNUSED_RET int eddsa_import_priv_key(ec_priv_key *priv_key, const u8 *buf, u16 buflen, + const ec_params *shortw_curve_params, + ec_alg_type sig_type); +ATTRIBUTE_WARN_UNUSED_RET int eddsa_import_pub_key(ec_pub_key *out_pub, const u8 *buf, u16 buflen, + const ec_params *shortw_curve_params, + ec_alg_type sig_type); +ATTRIBUTE_WARN_UNUSED_RET int eddsa_export_pub_key(const ec_pub_key *in_pub, u8 *buf, u16 buflen); +ATTRIBUTE_WARN_UNUSED_RET int eddsa_import_key_pair_from_priv_key_buf(ec_key_pair *kp, + const u8 *buf, u16 buflen, + const ec_params *shortw_curve_params, + ec_alg_type sig_type); +/* Batch verification function */ +ATTRIBUTE_WARN_UNUSED_RET int eddsa_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len); + +#endif /* __EDDSA_H__ */ +#endif /* defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) */ diff --git a/crypto/libecc/include/libecc/sig/fuzzing_ecdsa.h b/crypto/libecc/include/libecc/sig/fuzzing_ecdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/fuzzing_ecdsa.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_SIG_ECDSA) && defined(USE_CRYPTOFUZZ) + +#ifndef __FUZZING_ECDSA_H__ +#define __FUZZING_ECDSA_H__ + +ATTRIBUTE_WARN_UNUSED_RET int ecdsa_sign_raw(struct ec_sign_context *ctx, const u8 *input, u8 inputlen, u8 *sig, u8 siglen, const u8 *nonce, u8 noncelen); + +ATTRIBUTE_WARN_UNUSED_RET int ecdsa_verify_raw(struct ec_verify_context *ctx, const u8 *input, u8 inputlen); + +#endif /* __FUZZING_ECDSA_H__ */ +#endif /* WITH_SIG_ECDSA && USE_CRYPTOFUZZ */ diff --git a/crypto/libecc/include/libecc/sig/fuzzing_ecgdsa.h b/crypto/libecc/include/libecc/sig/fuzzing_ecgdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/fuzzing_ecgdsa.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_SIG_ECGDSA) && defined(USE_CRYPTOFUZZ) + +#ifndef __FUZZING_ECGDSA_H__ +#define __FUZZING_ECGDSA_H__ + +ATTRIBUTE_WARN_UNUSED_RET int ecgdsa_sign_raw(struct ec_sign_context *ctx, const u8 *input, u8 inputlen, u8 *sig, u8 siglen, const u8 *nonce, u8 noncelen); + +ATTRIBUTE_WARN_UNUSED_RET int ecgdsa_verify_raw(struct ec_verify_context *ctx, const u8 *input, u8 inputlen); + +#endif /* __FUZZING_ECGDSA_H__ */ +#endif /* WITH_SIG_ECGDSA && USE_CRYPTOFUZZ */ diff --git a/crypto/libecc/include/libecc/sig/fuzzing_ecrdsa.h b/crypto/libecc/include/libecc/sig/fuzzing_ecrdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/fuzzing_ecrdsa.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#if defined(WITH_SIG_ECRDSA) && defined(USE_CRYPTOFUZZ) + +#ifndef __FUZZING_ECRDSA_H__ +#define __FUZZING_ECRDSA_H__ + +ATTRIBUTE_WARN_UNUSED_RET int ecrdsa_sign_raw(struct ec_sign_context *ctx, const u8 *input, u8 inputlen, u8 *sig, u8 siglen, const u8 *nonce, u8 noncelen); + +ATTRIBUTE_WARN_UNUSED_RET int ecrdsa_verify_raw(struct ec_verify_context *ctx, const u8 *input, u8 inputlen); + +#endif /* __FUZZING_ECRDSA_H__ */ +#endif /* WITH_SIG_ECRDSA && USE_CRYPTOFUZZ */ diff --git a/crypto/libecc/include/libecc/sig/sig_algs.h b/crypto/libecc/include/libecc/sig/sig_algs.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/sig_algs.h @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SIG_ALGS_H__ +#define __SIG_ALGS_H__ + +#include + +/* Private key generation function specific to each scheme */ +ATTRIBUTE_WARN_UNUSED_RET int gen_priv_key(ec_priv_key *priv_key); + +/* + * Generic function to init a uninitialized public key from an initialized + * private key. The function uses the expected logic to derive the key + * (e.g. Y=xG, Y=(x^-1)G, etc). It returns -1 on error (i.e. if the signature + * alg is unknown) in which case the public key has not been initialized. + */ +ATTRIBUTE_WARN_UNUSED_RET int init_pubkey_from_privkey(ec_pub_key *pub_key, ec_priv_key *priv_key); + +ATTRIBUTE_WARN_UNUSED_RET int get_sig_by_name(const char *ec_sig_name, const ec_sig_mapping **sig_mapping); +ATTRIBUTE_WARN_UNUSED_RET int get_sig_by_type(ec_alg_type sig_type, const ec_sig_mapping **sig_mapping); + +/* Sanity checks for calbacks */ +ATTRIBUTE_WARN_UNUSED_RET int ec_sig_mapping_callbacks_sanity_check(const ec_sig_mapping *sig); +ATTRIBUTE_WARN_UNUSED_RET int ec_sig_ctx_callbacks_sanity_check(const struct ec_sign_context *sig_ctx); +ATTRIBUTE_WARN_UNUSED_RET int ec_verify_ctx_callbacks_sanity_check(const struct ec_verify_context *verify_ctx); + +/* + * Compute generic effective signature length depending on the curve parameters, + * the signature algorithm and the hash function + */ +ATTRIBUTE_WARN_UNUSED_RET int ec_get_sig_len(const ec_params *params, ec_alg_type sig_type, + hash_alg_type hash_type, u8 *siglen); + +/* Generic signature init/update/finalize */ + +ATTRIBUTE_WARN_UNUSED_RET int _ec_sign_init(struct ec_sign_context *ctx, + const ec_key_pair *key_pair, + int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_sign_init(struct ec_sign_context *ctx, const ec_key_pair *key_pair, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_sign_update(struct ec_sign_context *ctx, const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int ec_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, + int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +/* Generic signature verification init/update/finalize */ + +ATTRIBUTE_WARN_UNUSED_RET int ec_verify_init(struct ec_verify_context *ctx, const ec_pub_key *pub_key, + const u8 *sig, u8 siglen, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 *adata, u16 adata_len); + +ATTRIBUTE_WARN_UNUSED_RET int ec_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int ec_verify_finalize(struct ec_verify_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int ec_verify(const u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const u8 *m, u32 mlen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + +int ec_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len); + +/* Generic signature import and export functions */ + +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_sig_import_from_buf(u8 *sig, u32 siglen, + const u8 *out_buf, u32 outlen, + ec_alg_type * sig_type, + hash_alg_type * hash_type, + u8 curve_name[MAX_CURVE_NAME_LEN]); + +ATTRIBUTE_WARN_UNUSED_RET int ec_structured_sig_export_to_buf(const u8 *sig, u32 siglen, + u8 *out_buf, u32 outlen, + ec_alg_type sig_type, + hash_alg_type hash_type, + const u8 + curve_name[MAX_CURVE_NAME_LEN]); + +ATTRIBUTE_WARN_UNUSED_RET int ec_verify_bos_coster(verify_batch_scratch_pad *elements, + u32 num, bitcnt_t bits); + +#endif /* __SIG_ALGS_H__ */ diff --git a/crypto/libecc/include/libecc/sig/sig_algs_internal.h b/crypto/libecc/include/libecc/sig/sig_algs_internal.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/sig_algs_internal.h @@ -0,0 +1,650 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SIG_ALGS_INTERNAL_H__ +#define __SIG_ALGS_INTERNAL_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/* Includes for fuzzing */ +#ifdef USE_CRYPTOFUZZ +#include +#include +#include +#endif + +#if (EC_MAX_SIGLEN == 0) +#error "It seems you disabled all signature schemes in lib_ecc_config.h" +#endif + +/* + * All the signature algorithms we support are abstracted using the following + * structure (and following map) which provides for each hash alg its + * digest size, its block size and the associated scattered function. + */ +typedef struct { + ec_alg_type type; + const char *name; + + ATTRIBUTE_WARN_UNUSED_RET int (*siglen) (u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + + ATTRIBUTE_WARN_UNUSED_RET int (*gen_priv_key) (ec_priv_key *priv_key); + ATTRIBUTE_WARN_UNUSED_RET int (*init_pub_key) (ec_pub_key *pub_key, const ec_priv_key *priv_key); + + ATTRIBUTE_WARN_UNUSED_RET int (*sign_init) (struct ec_sign_context * ctx); + ATTRIBUTE_WARN_UNUSED_RET int (*sign_update) (struct ec_sign_context * ctx, + const u8 *chunk, u32 chunklen); + ATTRIBUTE_WARN_UNUSED_RET int (*sign_finalize) (struct ec_sign_context * ctx, + u8 *sig, u8 siglen); + ATTRIBUTE_WARN_UNUSED_RET int (*sign) (u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len); + + ATTRIBUTE_WARN_UNUSED_RET int (*verify_init) (struct ec_verify_context * ctx, + const u8 *sig, u8 siglen); + ATTRIBUTE_WARN_UNUSED_RET int (*verify_update) (struct ec_verify_context * ctx, + const u8 *chunk, u32 chunklen); + ATTRIBUTE_WARN_UNUSED_RET int (*verify_finalize) (struct ec_verify_context * ctx); + ATTRIBUTE_WARN_UNUSED_RET int (*verify) (const u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const u8 *m, u32 mlen, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 *adata, u16 adata_len); + ATTRIBUTE_WARN_UNUSED_RET int (*verify_batch) (const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len); + +} ec_sig_mapping; + +/* Sanity check to ensure our sig mapping does not contain + * NULL pointers + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int sig_mapping_sanity_check(const ec_sig_mapping *sm) +{ + int ret; + + MUST_HAVE(((sm != NULL) && (sm->name != NULL) && (sm->siglen != NULL) && + (sm->gen_priv_key != NULL) && (sm->init_pub_key != NULL) && + (sm->sign_init != NULL) && (sm->sign_update != NULL) && + (sm->sign_finalize != NULL) && (sm->sign != NULL) && + (sm->verify_init != NULL) && (sm->verify_update != NULL) && + (sm->verify_finalize != NULL) && (sm->verify != NULL) && + (sm->verify_batch != NULL)), + ret, err); + + ret = 0; + +err: + return ret; +} + +/* + * Each specific signature scheme need to maintain some specific + * data between calls to init()/update()/finalize() functions. + * + * Each scheme provides a specific structure for that purpose + * (in its .h file) which we include in the union below. A field + * of that type (.sign_data) is then included in the generic + * struct ec_sign_context below. + * + * The purpose of that work is to allow static declaration and + * allocation of common struct ec_sign_context with enough room + * available for all supported signature types. + */ + +typedef union { +#if defined(WITH_SIG_ECDSA) || defined(WITH_SIG_DECDSA) /* ECDSA and DECDSA */ + ecdsa_sign_data ecdsa; +#endif +#ifdef WITH_SIG_ECKCDSA /* ECKCDSA */ + eckcdsa_sign_data eckcdsa; +#endif +#if (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) /* EC[O]SDSA */ + ecsdsa_sign_data ecsdsa; +#endif +#ifdef WITH_SIG_ECFSDSA /* ECFSDSA */ + ecfsdsa_sign_data ecfsdsa; +#endif +#ifdef WITH_SIG_ECGDSA /* ECGDSA */ + ecgdsa_sign_data ecgdsa; +#endif +#ifdef WITH_SIG_ECRDSA /* ECRDSA */ + ecrdsa_sign_data ecrdsa; +#endif +#ifdef WITH_SIG_SM2 /* SM2 */ + sm2_sign_data sm2; +#endif +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) /* EDDSA25519, EDDSA448 */ + eddsa_sign_data eddsa; +#endif +#if defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) /* BIGN and DBIGN */ + bign_sign_data bign; +#endif +} sig_sign_data; + +/* + * The 'struct ec_sign_context' below provides a persistent state + * between successive calls to ec_sign_{init,update,finalize}(). + */ +struct ec_sign_context { + word_t ctx_magic; + const ec_key_pair *key_pair; + ATTRIBUTE_WARN_UNUSED_RET int (*rand) (nn_t out, nn_src_t q); + const hash_mapping *h; + const ec_sig_mapping *sig; + + sig_sign_data sign_data; + + /* Optional ancillary data. This data is + * optionnally used by the signature algorithm. + */ + const u8 *adata; + u16 adata_len; +}; + +#define SIG_SIGN_MAGIC ((word_t)(0x4ed73cfe4594dfd3ULL)) +ATTRIBUTE_WARN_UNUSED_RET static inline int sig_sign_check_initialized(struct ec_sign_context *ctx) +{ + return (((ctx == NULL) || (ctx->ctx_magic != SIG_SIGN_MAGIC)) ? -1 : 0); +} + +typedef union { +#if defined(WITH_SIG_ECDSA) || defined(WITH_SIG_DECDSA) /* ECDSA and DECDSA */ + ecdsa_verify_data ecdsa; +#endif +#ifdef WITH_SIG_ECKCDSA /* ECKCDSA */ + eckcdsa_verify_data eckcdsa; +#endif +#if (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) /* EC[O]SDSA */ + ecsdsa_verify_data ecsdsa; +#endif +#ifdef WITH_SIG_ECFSDSA /* ECFSDSA */ + ecfsdsa_verify_data ecfsdsa; +#endif +#ifdef WITH_SIG_ECGDSA /* ECGDSA */ + ecgdsa_verify_data ecgdsa; +#endif +#ifdef WITH_SIG_ECRDSA /* ECRDSA */ + ecrdsa_verify_data ecrdsa; +#endif +#ifdef WITH_SIG_SM2 /* SM2 */ + sm2_verify_data sm2; +#endif +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) /* EDDSA25519, EDDSA448 */ + eddsa_verify_data eddsa; +#endif +#if defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) /* BIGN and DBIGN */ + bign_verify_data bign; +#endif +#if defined(WITH_SIG_BIP0340) + bip0340_verify_data bip0340; +#endif +} sig_verify_data; + +/* + * The 'struct ec_verify_context' below provides a persistent state + * between successive calls to ec_verify_{init,update,finalize}(). + */ +struct ec_verify_context { + word_t ctx_magic; + const ec_pub_key *pub_key; + const hash_mapping *h; + const ec_sig_mapping *sig; + + sig_verify_data verify_data; + + /* Optional ancillary data. This data is + * optionnally used by the signature algorithm. + */ + const u8 *adata; + u16 adata_len; +}; + +#define SIG_VERIFY_MAGIC ((word_t)(0x7e0d42d13e3159baULL)) +ATTRIBUTE_WARN_UNUSED_RET static inline int sig_verify_check_initialized(struct ec_verify_context *ctx) +{ + return (((ctx == NULL) || (ctx->ctx_magic != SIG_VERIFY_MAGIC)) ? -1 : 0); +} + +/* Generic signature and verification APIs that will in fact call init / update / finalize in + * backend. Used for signature and verification functions that support these streaming APIs. + * + */ +ATTRIBUTE_WARN_UNUSED_RET int generic_ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, const u8 *adata, u16 adata_len); +ATTRIBUTE_WARN_UNUSED_RET int generic_ec_verify(const u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const u8 *m, u32 mlen, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 *adata, u16 adata_len); + +/* Generic init / update / finalize functions returning an error and telling that they are + * unsupported. + */ +ATTRIBUTE_WARN_UNUSED_RET int unsupported_sign_init(struct ec_sign_context * ctx); +ATTRIBUTE_WARN_UNUSED_RET int unsupported_sign_update(struct ec_sign_context * ctx, + const u8 *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int unsupported_sign_finalize(struct ec_sign_context * ctx, + u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int is_sign_streaming_mode_supported(ec_alg_type sig_type, int *check); + +ATTRIBUTE_WARN_UNUSED_RET int unsupported_verify_init(struct ec_verify_context * ctx, + const u8 *sig, u8 siglen); +ATTRIBUTE_WARN_UNUSED_RET int unsupported_verify_update(struct ec_verify_context * ctx, + const u8 *chunk, u32 chunklen); +ATTRIBUTE_WARN_UNUSED_RET int unsupported_verify_finalize(struct ec_verify_context * ctx); + +ATTRIBUTE_WARN_UNUSED_RET int is_verify_streaming_mode_supported(ec_alg_type sig_type, int *check); + +ATTRIBUTE_WARN_UNUSED_RET int is_sign_deterministic(ec_alg_type sig_type, int *check); + +ATTRIBUTE_WARN_UNUSED_RET int is_verify_batch_mode_supported(ec_alg_type sig_type, int *check); + +ATTRIBUTE_WARN_UNUSED_RET int unsupported_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len); + +/* + * Each signature algorithm supported by the library and implemented + * in ec{,ck,s,fs,g,r}dsa.{c,h} is referenced below. + */ +#define MAX_SIG_ALG_NAME_LEN 0 +static const ec_sig_mapping ec_sig_maps[] = { +#ifdef WITH_SIG_ECDSA + {.type = ECDSA, + .name = "ECDSA", + .siglen = ecdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = ecdsa_init_pub_key, + .sign_init = _ecdsa_sign_init, + .sign_update = _ecdsa_sign_update, + .sign_finalize = _ecdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _ecdsa_verify_init, + .verify_update = _ecdsa_verify_update, + .verify_finalize = _ecdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 6) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 6 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECDSA */ +#ifdef WITH_SIG_ECKCDSA + {.type = ECKCDSA, + .name = "ECKCDSA", + .siglen = eckcdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = eckcdsa_init_pub_key, + .sign_init = _eckcdsa_sign_init, + .sign_update = _eckcdsa_sign_update, + .sign_finalize = _eckcdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _eckcdsa_verify_init, + .verify_update = _eckcdsa_verify_update, + .verify_finalize = _eckcdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 8) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 8 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECKCDSA */ +#ifdef WITH_SIG_ECSDSA + {.type = ECSDSA, + .name = "ECSDSA", + .siglen = ecsdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = ecsdsa_init_pub_key, + .sign_init = _ecsdsa_sign_init, + .sign_update = _ecsdsa_sign_update, + .sign_finalize = _ecsdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _ecsdsa_verify_init, + .verify_update = _ecsdsa_verify_update, + .verify_finalize = _ecsdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 7) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 7 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECSDSA */ +#ifdef WITH_SIG_ECOSDSA + {.type = ECOSDSA, + .name = "ECOSDSA", + .siglen = ecosdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = ecosdsa_init_pub_key, + .sign_init = _ecosdsa_sign_init, + .sign_update = _ecosdsa_sign_update, + .sign_finalize = _ecosdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _ecosdsa_verify_init, + .verify_update = _ecosdsa_verify_update, + .verify_finalize = _ecosdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 8) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 8 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECOSDSA */ +#ifdef WITH_SIG_ECFSDSA + {.type = ECFSDSA, + .name = "ECFSDSA", + .siglen = ecfsdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = ecfsdsa_init_pub_key, + .sign_init = _ecfsdsa_sign_init, + .sign_update = _ecfsdsa_sign_update, + .sign_finalize = _ecfsdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _ecfsdsa_verify_init, + .verify_update = _ecfsdsa_verify_update, + .verify_finalize = _ecfsdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = ecfsdsa_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 8) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 8 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECFSDSA */ +#ifdef WITH_SIG_ECGDSA + {.type = ECGDSA, + .name = "ECGDSA", + .siglen = ecgdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = ecgdsa_init_pub_key, + .sign_init = _ecgdsa_sign_init, + .sign_update = _ecgdsa_sign_update, + .sign_finalize = _ecgdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _ecgdsa_verify_init, + .verify_update = _ecgdsa_verify_update, + .verify_finalize = _ecgdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 7) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 7 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECGDSA */ +#ifdef WITH_SIG_ECRDSA + {.type = ECRDSA, + .name = "ECRDSA", + .siglen = ecrdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = ecrdsa_init_pub_key, + .sign_init = _ecrdsa_sign_init, + .sign_update = _ecrdsa_sign_update, + .sign_finalize = _ecrdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _ecrdsa_verify_init, + .verify_update = _ecrdsa_verify_update, + .verify_finalize = _ecrdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 7) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 7 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_ECRDSA */ +#ifdef WITH_SIG_SM2 + {.type = SM2, + .name = "SM2", + .siglen = sm2_siglen, + .gen_priv_key = sm2_gen_priv_key, + .init_pub_key = sm2_init_pub_key, + .sign_init = _sm2_sign_init, + .sign_update = _sm2_sign_update, + .sign_finalize = _sm2_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _sm2_verify_init, + .verify_update = _sm2_verify_update, + .verify_finalize = _sm2_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 4) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 4 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_SM2 */ +#ifdef WITH_SIG_EDDSA25519 + {.type = EDDSA25519, + .name = "EDDSA25519", + .siglen = eddsa_siglen, + .gen_priv_key = eddsa_gen_priv_key, + .init_pub_key = eddsa_init_pub_key, + /* NOTE: for "pure" EdDSA, streaming mode is not supported */ + .sign_init = unsupported_sign_init, + .sign_update = unsupported_sign_update, + .sign_finalize = unsupported_sign_finalize, + .sign = _eddsa_sign, + .verify_init = _eddsa_verify_init, + .verify_update = _eddsa_verify_update, + .verify_finalize = _eddsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = eddsa_verify_batch, + }, + {.type = EDDSA25519CTX, + .name = "EDDSA25519CTX", + .siglen = eddsa_siglen, + .gen_priv_key = eddsa_gen_priv_key, + .init_pub_key = eddsa_init_pub_key, + /* NOTE: for "ctx" EdDSA, streaming mode is not supported */ + .sign_init = unsupported_sign_init, + .sign_update = unsupported_sign_update, + .sign_finalize = unsupported_sign_finalize, + .sign = _eddsa_sign, + .verify_init = _eddsa_verify_init, + .verify_update = _eddsa_verify_update, + .verify_finalize = _eddsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = eddsa_verify_batch, + }, + {.type = EDDSA25519PH, + .name = "EDDSA25519PH", + .siglen = eddsa_siglen, + .gen_priv_key = eddsa_gen_priv_key, + .init_pub_key = eddsa_init_pub_key, + .sign_init = _eddsa_sign_init_pre_hash, + .sign_update = _eddsa_sign_update_pre_hash, + .sign_finalize = _eddsa_sign_finalize_pre_hash, + .sign = _eddsa_sign, + .verify_init = _eddsa_verify_init, + .verify_update = _eddsa_verify_update, + .verify_finalize = _eddsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = eddsa_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 14) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 14 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_EDDSA25519 */ +#ifdef WITH_SIG_EDDSA448 + {.type = EDDSA448, + .name = "EDDSA448", + .siglen = eddsa_siglen, + .gen_priv_key = eddsa_gen_priv_key, + .init_pub_key = eddsa_init_pub_key, + /* NOTE: for "pure" EdDSA, streaming mode is not supported */ + .sign_init = unsupported_sign_init, + .sign_update = unsupported_sign_update, + .sign_finalize = unsupported_sign_finalize, + .sign = _eddsa_sign, + .verify_init = _eddsa_verify_init, + .verify_update = _eddsa_verify_update, + .verify_finalize = _eddsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = eddsa_verify_batch, + }, + {.type = EDDSA448PH, + .name = "EDDSA448PH", + .siglen = eddsa_siglen, + .gen_priv_key = eddsa_gen_priv_key, + .init_pub_key = eddsa_init_pub_key, + .sign_init = _eddsa_sign_init_pre_hash, + .sign_update = _eddsa_sign_update_pre_hash, + .sign_finalize = _eddsa_sign_finalize_pre_hash, + .sign = _eddsa_sign, + .verify_init = _eddsa_verify_init, + .verify_update = _eddsa_verify_update, + .verify_finalize = _eddsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = eddsa_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 11) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 11 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_EDDSA448 */ +#ifdef WITH_SIG_DECDSA + {.type = DECDSA, + .name = "DECDSA", + .siglen = decdsa_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = decdsa_init_pub_key, + .sign_init = _decdsa_sign_init, + .sign_update = _decdsa_sign_update, + .sign_finalize = _decdsa_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _decdsa_verify_init, + .verify_update = _decdsa_verify_update, + .verify_finalize = _decdsa_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 7) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 7 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_DECDSA */ +#ifdef WITH_SIG_BIGN + {.type = BIGN, + .name = "BIGN", + .siglen = bign_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = bign_init_pub_key, + .sign_init = _bign_sign_init, + .sign_update = _bign_sign_update, + .sign_finalize = _bign_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _bign_verify_init, + .verify_update = _bign_verify_update, + .verify_finalize = _bign_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 5) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 5 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_BIGN */ +#ifdef WITH_SIG_DBIGN + {.type = DBIGN, + .name = "DBIGN", + .siglen = dbign_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = dbign_init_pub_key, + .sign_init = _dbign_sign_init, + .sign_update = _dbign_sign_update, + .sign_finalize = _dbign_sign_finalize, + .sign = generic_ec_sign, + .verify_init = _dbign_verify_init, + .verify_update = _dbign_verify_update, + .verify_finalize = _dbign_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = unsupported_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 6) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 6 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_DBIGN */ +#ifdef WITH_SIG_BIP0340 + {.type = BIP0340, + .name = "BIP0340", + .siglen = bip0340_siglen, + .gen_priv_key = generic_gen_priv_key, + .init_pub_key = bip0340_init_pub_key, + .sign_init = unsupported_sign_init, + .sign_update = unsupported_sign_update, + .sign_finalize = unsupported_sign_finalize, + .sign = _bip0340_sign, + .verify_init = _bip0340_verify_init, + .verify_update = _bip0340_verify_update, + .verify_finalize = _bip0340_verify_finalize, + .verify = generic_ec_verify, + .verify_batch = bip0340_verify_batch, + }, +#if (MAX_SIG_ALG_NAME_LEN < 8) +#undef MAX_SIG_ALG_NAME_LEN +#define MAX_SIG_ALG_NAME_LEN 8 +#endif /* MAX_SIG_ALG_NAME_LEN */ +#endif /* WITH_SIG_BIP0340 */ + {.type = UNKNOWN_ALG, /* Needs to be kept last */ + .name = "UNKNOWN", + .siglen = 0, + .gen_priv_key = NULL, + .init_pub_key = NULL, + .sign_init = NULL, + .sign_update = NULL, + .sign_finalize = NULL, + .sign = NULL, + .verify_init = NULL, + .verify_update = NULL, + .verify_finalize = NULL, + .verify = NULL, + .verify_batch = NULL, + }, +}; + +/* + * For a given raw signature, the structured version is produced by prepending + * three bytes providing specific sig alg, hash alg and curve. + */ +#define EC_STRUCTURED_SIG_EXPORT_SIZE(siglen) (u8)((siglen) + (u8)(3 * sizeof(u8))) +#define EC_STRUCTURED_SIG_MAX_EXPORT_SIZE (EC_MAX_SIGLEN + 3) + +/* Sanity check */ +#if EC_STRUCTURED_SIG_MAX_EXPORT_SIZE > 255 +#error "All structured signatures sizes are expected to fit on an u8." +#endif +#endif /* __SIG_ALGS_INTERNAL_H__ */ diff --git a/crypto/libecc/include/libecc/sig/sm2.h b/crypto/libecc/include/libecc/sig/sm2.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/sig/sm2.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#include +#include +#ifdef WITH_SIG_SM2 + +#ifndef __SM2_H__ +#define __SM2_H__ + +#include +#include +#include +#include +#include + +#define SM2_R_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define SM2_S_LEN(q_bit_len) (BYTECEIL(q_bit_len)) +#define SM2_SIGLEN(q_bit_len) (SM2_R_LEN(q_bit_len) + \ + SM2_S_LEN(q_bit_len)) +#define SM2_MAX_SIGLEN SM2_SIGLEN(CURVES_MAX_Q_BIT_LEN) +#define SM2_MAX_ID_LEN 8191 /* SM2 user ID max byte length */ + +/* + * Compute max signature length for all the mechanisms enabled + * in the library (see lib_ecc_config.h). Having that done during + * preprocessing sadly requires some verbosity. + */ +#ifndef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN 0 +#endif +#if ((EC_MAX_SIGLEN) < (SM2_MAX_SIGLEN)) +#undef EC_MAX_SIGLEN +#define EC_MAX_SIGLEN SM2_MAX_SIGLEN +#endif + +typedef struct { + hash_context h_ctx; + word_t magic; +} sm2_sign_data; + +struct ec_sign_context; + +ATTRIBUTE_WARN_UNUSED_RET int sm2_gen_priv_key(ec_priv_key *priv_key); + +ATTRIBUTE_WARN_UNUSED_RET int sm2_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv); + +ATTRIBUTE_WARN_UNUSED_RET int sm2_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _sm2_sign_init(struct ec_sign_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int _sm2_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _sm2_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen); + +typedef struct { + nn r; + nn s; + hash_context h_ctx; + word_t magic; +} sm2_verify_data; + +struct ec_verify_context; + +ATTRIBUTE_WARN_UNUSED_RET int _sm2_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen); + +ATTRIBUTE_WARN_UNUSED_RET int _sm2_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen); + +ATTRIBUTE_WARN_UNUSED_RET int _sm2_verify_finalize(struct ec_verify_context *ctx); + +#endif /* __SM2_H__ */ +#endif /* WITH_SIG_SM2 */ diff --git a/crypto/libecc/include/libecc/utils/dbg_sig.h b/crypto/libecc/include/libecc/utils/dbg_sig.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/dbg_sig.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __DBG_SIG_H__ +#define __DBG_SIG_H__ +#include +#include +#include + +/* Macro to allow inner values of tests vectors print */ +#ifdef VERBOSE_INNER_VALUES +#ifndef EC_SIG_ALG +#define EC_SIG_ALG "UNKNOWN_ALG" +#endif + +#define dbg_buf_print(msg, ...) do {\ + buf_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) +#define dbg_nn_print(msg, ...) do {\ + nn_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) +#define dbg_ec_point_print(msg, ...) do {\ + ec_point_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) +#define dbg_ec_montgomery_point_print(msg, ...) do {\ + ec_montgomery_point_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) +#define dbg_ec_edwards_point_print(msg, ...) do {\ + ec_edwards_point_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) +#define dbg_priv_key_print(msg, ...) do {\ + priv_key_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) +#define dbg_pub_key_print(msg, ...) do {\ + pub_key_print(EC_SIG_ALG " " msg, __VA_ARGS__);\ +} while(0) + +#else /* VERBOSE_INNER_VALUES not defined */ + +#define dbg_buf_print(msg, ...) +#define dbg_nn_print(msg, ...) +#define dbg_ec_point_print(msg, ...) +#define dbg_ec_montgomery_point_print(msg, ...) +#define dbg_ec_edwards_point_print(msg, ...) +#define dbg_priv_key_print(msg, ...) +#define dbg_pub_key_print(msg, ...) + +#endif +#endif /* __DBG_SIG_H__ */ diff --git a/crypto/libecc/include/libecc/utils/print_buf.h b/crypto/libecc/include/libecc/utils/print_buf.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/print_buf.h @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRINT_BUF_H__ +#define __PRINT_BUF_H__ + +#include + +void buf_print(const char *msg, const u8 *buf, u16 buflen); + +#endif /* __PRINT_BUF_H__ */ diff --git a/crypto/libecc/include/libecc/utils/print_curves.h b/crypto/libecc/include/libecc/utils/print_curves.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/print_curves.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRINT_CURVES_H__ +#define __PRINT_CURVES_H__ + +#include +#include + +void ec_point_print(const char *msg, prj_pt_src_t prj_pt); + +void ec_montgomery_point_print(const char *msg, aff_pt_montgomery_src_t pt); + +void ec_edwards_point_print(const char *msg, aff_pt_edwards_src_t pt); + +#endif /* __PRINT_CURVES_H__ */ diff --git a/crypto/libecc/include/libecc/utils/print_fp.h b/crypto/libecc/include/libecc/utils/print_fp.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/print_fp.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRINT_FP_H__ +#define __PRINT_FP_H__ + +#include +#include + +void fp_ctx_print(const char *msg, fp_ctx_src_t ctx); + +void fp_print(const char *msg, fp_src_t a); + +void fp_print_all(const char *msg, fp_src_t a); + +#endif /* __PRINT_FP_H__ */ diff --git a/crypto/libecc/include/libecc/utils/print_keys.h b/crypto/libecc/include/libecc/utils/print_keys.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/print_keys.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRINT_KEYS_H__ +#define __PRINT_KEYS_H__ + +#include +#include + +void priv_key_print(const char *msg, const ec_priv_key *priv); + +void pub_key_print(const char *msg, const ec_pub_key *pub); + +#endif /* __PRINT_KEYS_H__ */ diff --git a/crypto/libecc/include/libecc/utils/print_nn.h b/crypto/libecc/include/libecc/utils/print_nn.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/print_nn.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __PRINT_NN_H__ +#define __PRINT_NN_H__ + +#include +#include + +void nn_print(const char *msg, nn_src_t a); + +#endif /* __PRINT_NN_H__ */ diff --git a/crypto/libecc/include/libecc/utils/utils.h b/crypto/libecc/include/libecc/utils/utils.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/utils.h @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __UTILS_H__ +#define __UTILS_H__ + +#include + +/* + * At various locations in the code, we expect expect some specific + * conditions to be true for correct operation of the code after + * those locations. This is commonly the case on input parameters + * at the beginning of functions. Other conditions may be expected + * but are not necessarily impacting for correct operation of the + * code. + * + * We use the three following macros for that purpose: + * + * MUST_HAVE(): The condition is always tested, i.e. both in debug + * and non debug build. This macros is used when it's better not to + * continue if the condition does not hold. In production code, + * if the condition does not hold, a while (1) loop is currently + * executed (but this may be changed for some specific code the + * system provide (e.g. abort())). In debug mode, an assert() is + * used when the condition is false. + * + * SHOULD_HAVE(): the condition is only executed in debug mode and + * the whole macros is a nop in production code. This can be used + * to add more checks in the code to detect specific conditions + * or changes. Those checks may have performance impact which are + * acceptable in debug mode but are not in production mode. + * + * KNOWN_FACT(): the condition is only executed in debug mode and + * the whole macro is a nop in production code. This macro is used + * to add conditions that are known to be true which may help analysis + * tools to work on the code. The macro can be used in order to make + * those conditions explicit. + */ + +/* Some helper for printing where we have an issue */ +#if defined(USE_ASSERT_PRINT) +#include +#define MUST_HAVE_EXT_PRINT do { \ + ext_printf("MUST_HAVE error: %s at %d\n", __FILE__,__LINE__); \ +} while (0) +#define SHOULD_HAVE_EXT_PRINT do { \ + ext_printf("SHOULD_HAVE error: %s at %d\n", __FILE__,__LINE__); \ +} while (0) +#define KNOWN_FACT_EXT_PRINT do { \ + ext_printf("KNOWN_FACT error: %s at %d\n", __FILE__,__LINE__); \ +} while (0) +#else +#define MUST_HAVE_EXT_PRINT +#define SHOULD_HAVE_EXT_PRINT +#define KNOWN_FACT_EXT_PRINT +#endif + +/* + * We known it is BAD BAD BAD to define macro with goto inside them + * but this is the best way we found to avoid making the code + * unreadable with tests of error conditions when implementing + * error handling in the project. + * + * EG stands for Error Goto, which represents the purpose of the + * macro, i.e. test a condition cond, and if false goto label + * lbl. + */ +#define EG(cond,lbl) do { if (cond) { goto lbl ; } } while (0) + +/****** Regular DEBUG and production modes cases ****************/ + +/****** DEBUG mode ***********************************************/ +#if defined(DEBUG) +#include +/* + * In DEBUG mode, we enforce a regular assert() in MUST_HAVE, + * SHOULD_HAVE and KNOWN_FACT, i.e. they are all the same. + */ + +#define MUST_HAVE(cond, ret, lbl) do { \ + if(!(cond)){ \ + MUST_HAVE_EXT_PRINT; \ + } \ + assert((cond)); \ + if (0) { /* silence unused \ + label warning */ \ + ret = -1; \ + goto lbl; \ + } \ +} while (0) + +#define SHOULD_HAVE(cond, ret, lbl) do {\ + if(!(cond)){ \ + SHOULD_HAVE_EXT_PRINT; \ + } \ + assert((cond)); \ + if (0) { /* silence unused \ + label warning */ \ + ret = -1; \ + goto lbl; \ + } \ +} while (0) + +#define KNOWN_FACT(cond, ret, lbl) do { \ + if(!(cond)){ \ + KNOWN_FACT_EXT_PRINT; \ + } \ + assert((cond)); \ + if (0) { /* silence unused \ + label warning */ \ + ret = -1; \ + goto lbl; \ + } \ +} while (0) + +/****** Production mode ******************************************/ +#else /* !defined(DEBUG) */ + +/* + * In regular production mode, SHOULD_HAVE and KNOWN_FACT are void for + * performance reasons. MUST_HAVE includes an ext_printf call for + * tracing the origin of the error when necessary (if USE_ASSERT_PRINT + * is specified by the user). + */ +#define MUST_HAVE(cond, ret, lbl) do { \ + if (!(cond)) { \ + MUST_HAVE_EXT_PRINT; \ + ret = -1; \ + goto lbl; \ + } \ +} while (0) + +#define SHOULD_HAVE(cond, ret, lbl) do { \ + if (0) { /* silence unused \ + label warning */ \ + ret = -1; \ + goto lbl; \ + } \ +} while (0) + +#define KNOWN_FACT(cond, ret, lbl) do { \ + if (0) { /* silence unused \ + label warning */ \ + ret = -1; \ + goto lbl; \ + } \ +} while (0) + +/******************************************************************/ +#endif /* defined(DEBUG) */ + +#define LOCAL_MAX(x, y) (((x) > (y)) ? (x) : (y)) +#define LOCAL_MIN(x, y) (((x) < (y)) ? (x) : (y)) + +#define BYTECEIL(numbits) (((numbits) + 7) / 8) + +ATTRIBUTE_WARN_UNUSED_RET int are_equal(const void *a, const void *b, u32 len, int *check); +ATTRIBUTE_WARN_UNUSED_RET int local_memcpy(void *dst, const void *src, u32 n); +ATTRIBUTE_WARN_UNUSED_RET int local_memset(void *v, u8 c, u32 n); +ATTRIBUTE_WARN_UNUSED_RET int are_str_equal(const char *s1, const char *s2, int *check); +ATTRIBUTE_WARN_UNUSED_RET int are_str_equal_nlen(const char *s1, const char *s2, u32 maxlen, int *check); +ATTRIBUTE_WARN_UNUSED_RET int local_strlen(const char *s, u32 *len); +ATTRIBUTE_WARN_UNUSED_RET int local_strnlen(const char *s, u32 maxlen, u32 *len); +ATTRIBUTE_WARN_UNUSED_RET int local_strncpy(char *dst, const char *src, u32 n); +ATTRIBUTE_WARN_UNUSED_RET int local_strncat(char *dest, const char *src, u32 n); + +/* Return 1 if architecture is big endian, 0 otherwise. */ +static inline int arch_is_big_endian(void) +{ + const u16 val = 0x0102; + const u8 *buf = (const u8 *)(&val); + + return buf[0] == 0x01; +} + +#define VAR_ZEROIFY(x) do { \ + x = 0; \ + } while (0) + +#define PTR_NULLIFY(x) do { \ + x = NULL; \ + } while (0) + +#endif /* __UTILS_H__ */ diff --git a/crypto/libecc/include/libecc/utils/utils_rand.h b/crypto/libecc/include/libecc/utils/utils_rand.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/utils/utils_rand.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2023 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __UTILS_RAND_H__ +#define __UTILS_RAND_H__ + +#include +#include + +/* WARNING: use with care, this is useful when "fast" but somehow unsafe + * random must be provided. + */ +ATTRIBUTE_WARN_UNUSED_RET int get_unsafe_random(unsigned char *buf, u16 len); + +#endif /* __UTILS_RAND_H__ */ diff --git a/crypto/libecc/include/libecc/words/types.h b/crypto/libecc/include/libecc/words/types.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/words/types.h @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +/*** Handling the target compiler and its specificities ***/ +#ifdef __GNUC__ +/* gcc and clang */ +#define ATTRIBUTE_UNUSED __attribute__((unused)) +#define ATTRIBUTE_USED __attribute__((used)) +#define ATTRIBUTE_PACKED __attribute__((packed)) +#define ATTRIBUTE_SECTION(a) __attribute__((__section__((a)))) +#ifdef USE_WARN_UNUSED_RET + #define ATTRIBUTE_WARN_UNUSED_RET __attribute__((warn_unused_result)) + static inline void ignore_result(int unused_result) { + (void) unused_result; + } + /* NOTE: this trick using a dummy function call is here + * to explicitly avoid "unused return values" when we know + * what we are doing! + */ + #define IGNORE_RET_VAL(a) ignore_result((int)(a)) +#else + #define ATTRIBUTE_WARN_UNUSED_RET + #define IGNORE_RET_VAL(a) (a) +#endif /* USE_WARN_UNUSED_RET */ +#else +#define ATTRIBUTE_UNUSED +#define ATTRIBUTE_USED +#define ATTRIBUTE_PACKED +#define ATTRIBUTE_SECTION(a) +#define ATTRIBUTE_WARN_UNUSED_RET +#define IGNORE_RET_VAL(a) (a) +#endif + +/* Macro to trick the compiler of thinking a variable is used. + * Although this should not happen, sometimes because of #define + * oddities we might force this. + */ +#define FORCE_USED_VAR(a) ((void)(a)) + +/*** Handling the types ****/ +#ifdef WITH_STDLIB + +/* + * User explicitly needs to build w/ stdlib. Let's include the headers + * we need to get basic types: (uint*_t), NULL, etc. You can see below + * (i.e. under #else) what is precisely needed. + */ +#include +#include +#include +#else /* WITH_STDLIB */ + +/* + * User does not want to build w/ stdlib. Let's define basic types: + * (uint*_t), NULL, etc. + */ +#define NULL ((void *)0) +typedef unsigned int size_t; +typedef int ssize_t; +/* Here is the big picture of the main programming models + * and their primitive types sizes in bits: + * (see http://www.unix.org/whitepapers/64bit.html) + * + * | LP32 | ILP32 | LLP64 | ILP64 | LP64 | + * --------------------------------------- + * char | 8 | 8 | 8 | 8 | 8 | + * short | 16 | 16 | 16 | 16 | 16 | + * int | 16 | 32 | 32 | 64 | 32 | + * long | 32 | 32 | 32 | 64 | 64 | + * long long| 64 | 64 | 64 | 64 | 64 | + * -------------------------------------- + * (long long type existence depends on the C compiler + * but should be *mandatory* in C99 compliant ones) + * + * This means that: + * 1) We are sure that long long are 64-bit, short are 16-bit, + * and char are 8-bit (on the vast majority of platforms). + * 2) The two types that are not consistent across platforms are + * the int and long types (e.g., int is 16 bits and long is 32 bits + * on msp430-gcc LP32, while int is 32 bits and long is 32 bits + * on x86_64 Linux platforms LLP64, and long becomes 64 bits on + * x86_64 Windows platforms LP64). + * + * Hence, we take a wild guess for uint32_t mapping on a primitive type + * and check this at compilation time using the check_data_types 'union' + * defined below. + * Our guess depends on the WORDSIZE the user provides us, since we assume + * this corresponds to a 'native' word size of the platform (8-bit platforms + * such as AVR and 16-bit platforms such as MSP430 are either LP32 and ILP32, + * which means that a 'long' type will be mapped to a 32 bits native type). + * Consequently, when the user provides us a WORDSIZE=16, we infer that + * uint32_t is mapped on a long type. + * + */ +typedef unsigned long long uint64_t; +/* GCC defines the size of an int, use this information + * if it is provided + */ +#ifdef __SIZEOF_INT__ +#if(__SIZEOF_INT__ == 2) +#define UINT32_IS_LONG /* This will be useful for print formatting */ +typedef unsigned long uint32_t; +#else +typedef unsigned int uint32_t; +#endif /* (__SIZEOF_INT__ == 2) */ +#else +#if(WORDSIZE == 16) +/* The user has provided WORDSIZE=16, so we guess that + * we have LP32 or ILP32: a long type would be 32-bit. + */ +#define UINT32_IS_LONG /* This will be useful for print formatting */ +typedef unsigned long uint32_t; +#else +/* Wild guess for uint32_t mapping */ +typedef unsigned int uint32_t; +#endif /* (WORDSIZE == 16) */ +#endif /* __SIZEOF_INT__ */ +typedef unsigned short uint16_t; +typedef unsigned char uint8_t; +/* Useful macros for our new defined types */ +#define UINT8_MAX (0xff) +#define UINT16_MAX (0xffff) +#define UINT32_MAX (0xffffffff) +#define UINT64_MAX (0xffffffffffffffffULL) +#define UINT8_C(c) ((uint8_t)(c ## UL)) +#define UINT16_C(c) ((uint16_t)(c ## UL)) +#define UINT32_C(c) ((uint32_t)(c ## UL)) +#define UINT64_C(c) (c ## ULL) + +/* Sanity check on our guess for primitive types sizes. + * See https://barrgroup.com/Embedded-Systems/How-To/C-Fixed-Width-Integers-C99 + * + * TODO: if you get a compilation error at this point, this means that we failed + * at guessing the C primitive types sizes for the current platform. You should + * try to adapt the uint8_t/uint16_t/uint32_t/uint64_t types definitions in this + * file, or find the C99 compliant stdint headers for your compiler/platform + * and include it. + */ +typedef union { + char uint8_t_incorrect[sizeof(uint8_t) == 1 ? 1 : -1]; + char uint16_t_incorrect[sizeof(uint16_t) == 2 ? 1 : -1]; + char uint32_t_incorrect[sizeof(uint32_t) == 4 ? 1 : -1]; + char uint64_t_incorrect[sizeof(uint64_t) == 8 ? 1 : -1]; +} check_data_types; + +#endif /* WITH_STDLIB */ + +#endif /* __TYPES_H__ */ diff --git a/crypto/libecc/include/libecc/words/words.h b/crypto/libecc/include/libecc/words/words.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/words/words.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __WORDS_H__ +#define __WORDS_H__ + +/* + * Types for words and a few useful macros. + */ + +/* + * If a word size is forced, we use the proper words.h definition. + * By default, 64-bit word size is used since it is the most reasonable + * choice across the known platforms (see below). + */ + +#define __concat(x) #x +#define _concat(file_prefix, x) __concat(file_prefix##x.h) +#define concat(file_prefix, x) _concat(file_prefix, x) + +#if defined(WORDSIZE) + /* The word size is forced by the compilation chain */ +#if (WORDSIZE == 16) || (WORDSIZE == 32) || (WORDSIZE == 64) + /* Dynamic include depending on the word size */ +#include concat(words_, WORDSIZE) +#else +#error Unsupported word size concat +#endif +#else +/* The word size is usually deduced from the known platforms. + * By default when we have fast builtin uint64_t operations, + * we use WORDSIZE=64. This is obviously the case on 64-bit platforms, + * but this should also be the case on most 32-bit platforms where + * native instructions allow a 32-bit x 32-bit to 64-bit multiplication. + * + * There might however be some platforms where this is not the case. + * Cortex-M0/M0+ for example does not have such a native multiplication + * instruction, yielding in slower code for WORDSIZE=64 than for WORDSIZE=32. + * This is also the case for old Thumb ARM CPUs (pre Thumb-2). + * + * On 8-bit and 16-bit platform, we prefer to let the user decide on the best + * option (see below)! + */ +#if defined(__x86_64__) || defined(__i386__) || defined(__ppc64__) || defined(__ppc__) ||\ + defined(__arm__) || defined(__aarch64__) || defined(__mips__) || defined(__s390x__) ||\ + defined(__SH4__) || defined(__sparc__) || defined(__riscv) +#define WORDSIZE 64 +#include "words_64.h" +#else +/* We let the user fix the WORDSIZE manually */ +#error "Unrecognized platform. Please specify the word size of your target (with make 16, make 32, make 64)" +#endif /* Unrecognized */ +#endif + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef u16 bitcnt_t; + +/* + * Shift behavior is not defined for a shift count + * higher than (WORD_BITS - 1). These macros emulate + * the behavior one would expect, i.e. return 0 when + * shift count is equal or more than word size. + */ +#define WLSHIFT(w, c) ((word_t)(((c) >= WORD_BITS) ? WORD(0) : (word_t)((w) << (c)))) +#define WRSHIFT(w, c) ((word_t)(((c) >= WORD_BITS) ? WORD(0) : (word_t)((w) >> (c)))) + +/* To be fixed: not really constant-time. */ +#define WORD_MIN(a, b) ((a) > (b) ? (b) : (a)) + +/* WORD_MASK[_IF[NOT]ZERO]: mask of word size and associated macros. */ +#define WORD_MASK WORD_MAX + +/* These two macros assume two-complement representation. */ +#define WORD_MASK_IFZERO(w) ((word_t)(((word_t)((w) != 0)) - WORD(1))) +#define WORD_MASK_IFNOTZERO(w) ((word_t)(((word_t)((w) == 0)) - WORD(1))) + +#define HWORD_MASK HWORD_MAX + +/* WORD_HIGHBIT: constant of word size with only MSB set. */ +#define WORD_HIGHBIT (WORD(1) << (WORD_BITS - 1)) + +/* WORD_MUL: multiply two words using schoolbook multiplication on half words */ +#define WORD_MUL(outh, outl, in1, in2) do { \ + word_t in1h, in1l, in2h, in2l; \ + word_t tmph, tmpm, tmpl; \ + word_t tmpm1, tmpm2; \ + word_t carrym, carryl; \ + /* Get high and low half words. */ \ + in1h = (in1) >> HWORD_BITS; \ + in1l = (in1) & HWORD_MASK; \ + in2h = (in2) >> HWORD_BITS; \ + in2l = (in2) & HWORD_MASK; \ + /* Compute low product. */ \ + tmpl = (word_t)(in2l * in1l); \ + /* Compute middle product. */ \ + tmpm1 = (word_t)(in2h * in1l); \ + tmpm2 = (word_t)(in2l * in1h); \ + tmpm = (word_t)(tmpm1 + tmpm2); \ + /* Store middle product carry. */ \ + carrym = (word_t)(tmpm < tmpm1); \ + /* Compute full low product. */ \ + (outl) = tmpl; \ + (outl) = (word_t)((outl) + ((tmpm & HWORD_MASK) << HWORD_BITS));\ + /* Store full low product carry. */ \ + carryl = (word_t)((outl) < tmpl); \ + /* Compute full high product. */ \ + carryl = (word_t)(carryl + (tmpm >> HWORD_BITS)); \ + carryl = (word_t)(carryl + (carrym << HWORD_BITS)); \ + tmph = (word_t)(in2h * in1h); \ + /* No carry can occur below. */ \ + (outh) = (word_t)(tmph + carryl); \ + } while (0) + +#endif /* __WORDS_H__ */ diff --git a/crypto/libecc/include/libecc/words/words_16.h b/crypto/libecc/include/libecc/words/words_16.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/words/words_16.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __WORDS_16_H__ +#define __WORDS_16_H__ + +/* + * Types for 16-bit long words and a few useful macros. + */ + +#include "types.h" + +typedef uint16_t word_t; +typedef uint8_t hword_t; + +/* WORD_BITS (resp. WORD_BYTES): number of bits (resp. bytes) in a word. */ +#define WORD_BITS (16) +#define WORD_BYTES (WORD_BITS / 8) +#define HWORD_BITS (8) +#define HWORD_BYTES (HWORD_BITS / 8) + +/* WORD: constant of word-size. */ +#define WORD(A) (UINT16_C(A)) +#define HWORD(A) (UINT8_C(A)) + +/* WORD_MAX: maximal value of a word. */ +#define WORD_MAX UINT16_MAX +#define HWORD_MAX UINT8_MAX + +/* Prefix for the specific case of u32 that can be either + * unsigned int or unsigned long + */ +#ifdef UINT32_IS_LONG +#define PRI32_PREFIX "l" +#else +#define PRI32_PREFIX +#endif + +/* PRINTF_WORD_HEX_FMT: printf hex format string for word */ +#ifndef PRIx16 +#define PRIx16 "hx" +#endif +#ifndef PRIx32 +#define PRIx32 PRI32_PREFIX "x" +#endif +#ifndef PRIx64 +#define PRIx64 "llx" +#endif +#define PRINTF_WORD_HEX_FMT "%04" PRIx16 + +#ifndef PRIu16 +#define PRIu16 "hu" +#endif +#ifndef PRIu32 +#define PRIu32 PRI32_PREFIX "u" +#endif +#ifndef PRIu64 +#define PRIu64 "llu" +#endif + +#endif /* __WORDS_16_H__ */ diff --git a/crypto/libecc/include/libecc/words/words_32.h b/crypto/libecc/include/libecc/words/words_32.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/words/words_32.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __WORDS_32_H__ +#define __WORDS_32_H__ + +/* + * Types for 32-bit long words and a few useful macros. + */ + +#include "types.h" + +typedef uint32_t word_t; +typedef uint16_t hword_t; + +/* WORD_BITS (resp. WORD_BYTES): number of bits (resp. bytes) in a word. */ +#define WORD_BITS (32) +#define WORD_BYTES (WORD_BITS / 8) +#define HWORD_BITS (16) +#define HWORD_BYTES (HWORD_BITS / 8) + +/* WORD: constant of word-size. */ +#define WORD(A) (UINT32_C(A)) +#define HWORD(A) (UINT16_C(A)) + +/* WORD_MAX: maximal value of a word. */ +#define WORD_MAX UINT32_MAX +#define HWORD_MAX UINT16_MAX + +/* Prefix for the specific case of u32 that can be either + * unsigned int or unsigned long + */ +#ifdef UINT32_IS_LONG +#define PRI32_PREFIX "l" +#else +#define PRI32_PREFIX +#endif + +/* PRINTF_WORD_HEX_FMT: printf hex format string for word */ +#ifndef PRIx16 +#define PRIx16 "hx" +#endif +#ifndef PRIx32 +#define PRIx32 PRI32_PREFIX "x" +#endif +#ifndef PRIx64 +#define PRIx64 "llx" +#endif +#define PRINTF_WORD_HEX_FMT "%08" PRIx32 + +#ifndef PRIu16 +#define PRIu16 "hu" +#endif +#ifndef PRIu32 +#define PRIu32 PRI32_PREFIX "u" +#endif +#ifndef PRIu64 +#define PRIu64 "llu" +#endif + +#endif /* __WORDS_32_H__ */ diff --git a/crypto/libecc/include/libecc/words/words_64.h b/crypto/libecc/include/libecc/words/words_64.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/include/libecc/words/words_64.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __WORDS_64_H__ +#define __WORDS_64_H__ + +/* + * Types for 64-bit long words and a few useful macros. + */ + +#include "types.h" + +typedef uint64_t word_t; +typedef uint32_t hword_t; + +/* WORD_BITS (resp. WORD_BYTES): number of bits (resp. bytes) in a word. */ +#define WORD_BITS (64) +#define WORD_BYTES (WORD_BITS / 8) +#define HWORD_BITS (32) +#define HWORD_BYTES (HWORD_BITS / 8) + +/* WORD: constant of word-size. */ +#define WORD(A) (UINT64_C(A)) +#define HWORD(A) (UINT32_C(A)) + +/* WORD_MAX: maximal value of a word. */ +#define WORD_MAX UINT64_MAX +#define HWORD_MAX UINT32_MAX + +/* Prefix for the specific case of u32 that can be either + * unsigned int or unsigned long + */ +#ifdef UINT32_IS_LONG +#define PRI32_PREFIX "l" +#else +#define PRI32_PREFIX +#endif + +/* PRINTF_WORD_HEX_FMT: printf hex format string for word */ +#ifndef PRIx16 +#define PRIx16 "hx" +#endif +#ifndef PRIx32 +#define PRIx32 PRI32_PREFIX "x" +#endif +#ifndef PRIx64 +#define PRIx64 "llx" +#endif + +#define PRINTF_WORD_HEX_FMT "%016" PRIx64 + +#ifndef PRIu16 +#define PRIu16 "hu" +#endif +#ifndef PRIu32 +#define PRIu32 PRI32_PREFIX "u" +#endif +#ifndef PRIu64 +#define PRIu64 "llu" +#endif + +#endif /* __WORDS_64_H__ */ diff --git a/crypto/libecc/meson.build b/crypto/libecc/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/meson.build @@ -0,0 +1,282 @@ +project('libecc', 'c', + meson_version: '>=1.1.0', + version: run_command('dunamai', 'from', 'git', '--style', 'semver', '--dirty', check: true).stdout().strip(), + default_options: ['c_std=gnu11', 'default_library=static', 'warning_level=3' ], + license: 'BSD-3-Clause OR GPL-2.0-or-later', + license_files: [ 'LICENSE' ], +) + +top_dir = meson.current_source_dir() + +# dunamai is used for version sync with gconf (in the same way poetry-dynamic-versioning does) +pymod = import('python') +py3 = pymod.find_installation('python3', modules: ['dunamai']) + +# about libecc +# below file listings should be moved in successive small 'meson.build' file in each subdir, that +# only contains the file listing, replacing them with a lonely 'subdir('src/xxx') instead. + +ecc_inc = include_directories('include') +subdir('include/libecc') + +# module declaration, each module files listing is declare in its own directory +subdir('src/utils') +subdir('src/nn') +subdir('src/fp') +subdir('src/curves') +subdir('src/hash') +subdir('src/sig') +subdir('src/ecdh') +subdir('src/external_deps') + +# detect if an external rand source implementation is passed +use_external_rand_opt = get_option('use_external_rand') +if use_external_rand_opt + rand_src = files(get_option('with_rand_source')) +else + rand_src = files() +endif +# detect if an external print source implementation is passed +use_external_print_opt = get_option('use_external_print') +if use_external_print_opt + print_src = files(get_option('with_print_source')) +else + print_src = files() +endif +# detect if an external time source implementation is passed +use_external_time_opt = get_option('use_external_time') +if use_external_time_opt + time_src = files(get_option('with_time_source')) +else + time_src = files() +endif + + +# globally used build args, TODO: to make configurable +build_args = [ + '-fno-builtin', + '-D_FORTIFY_SOURCE=2', + '-fstack-protector-strong', + '-DUSE_WARN_UNUSED_RET', + '-ffreestanding' +] + + +# About configurable options, based on makefiles + +# 1. build-relative options first + +# info compilers arguments (such as m32/m64 should be cross-file related. +# just using a different cross-file (event for m32 on m64 arch for e.g. is enough +# to change the behavior +with_wordsize_opt = get_option('with_wordsize') +if with_wordsize_opt == '16' + build_args += '-DWORDSIZE=16' +elif with_wordsize_opt == '32' + build_args += '-DWORDSIZE=32' +elif with_wordsize_opt == '64' + build_args += '-DWORDSIZE=64' +endif + +with_stdlib_opt = get_option('with_stdlib') +if with_stdlib_opt + build_args += '-DWITH_STDLIB' +endif + +with_debug_opt = get_option('with_debug') +if with_debug_opt + build_args += '-DDEBUG' +endif + +use_cryptofuzz_opt = get_option('use_cryptofuzz') +if use_cryptofuzz_opt + build_args += '-DUSE_CRYPTOFUZZ' +endif + +assert_print_opt = get_option('assert_print') +if assert_print_opt + build_args += '-DUSE_ASSERT_PRINT' +endif + +no_warn_unused_ret_opt = get_option('no_warn_unused_ret') +if not no_warn_unused_ret_opt + build_args += '-DUSE_WARN_UNUSED_RET' +endif + +# 2. security relative options + +with_sig_blinding_opt = get_option('with_sig_blinding') +if with_sig_blinding_opt + build_args += '-DUSE_SIG_BLINDING' +endif + +with_complete_formulas_opt = get_option('with_complete_formulas') +if with_complete_formulas_opt + build_args += '-DNO_USE_COMPLETE_FORMULAS' +endif + +with_double_add_opt = get_option('with_double_add') +if with_double_add_opt == 'true' + build_args += '-DUSE_DOUBLE_ADD_ALWAYS' +elif with_double_add_opt == 'false' + build_args += '-DUSE_MONTY_LADDER' +endif + +with_monty_ladder_opt = get_option('with_monty_ladder') +if with_monty_ladder_opt == 'true' + build_args += '-DUSE_MONTY_LADDER' +elif with_monty_ladder_opt == 'false' + build_args += '-DUSE_DOUBLE_ADD_ALWAYS' +endif + +assert(not (with_double_add_opt == 'true' and with_monty_ladder_opt == 'true'), 'with_double_add and with_monty_ladder are incompatible options!') + +# 3. crypto engines relative options. It is possible to fully disable all +# engines and manually select which one must be built + +with_override_ecc_config_opt = get_option('with_override_ecc_config') +if with_override_ecc_config_opt + build_args += '-DWITH_LIBECC_CONFIG_OVERRIDE' +endif + +if with_override_ecc_config_opt + # Handle the asked curves + with_curves_opt = get_option('with_curves') + assert(with_curves_opt.length() != 0, 'You have selected a libecc configuration override with no curve: please select at least one proper curve!') + foreach curve : with_curves_opt + build_args += '-DWITH_CURVE_'+curve.to_upper() + endforeach + # Handle the asked hashes + with_hashes_opt = get_option('with_hashes') + assert(with_hashes_opt.length() != 0, 'You have selected a libecc configuration override with no hash: please select at least one proper hash!') + foreach hash : with_hashes_opt + build_args += '-DWITH_HASH_'+hash.to_upper() + endforeach + # Handle the asked algorithms + with_algs_opt = get_option('with_algs') + assert(with_algs_opt.length() != 0, 'You have selected a libecc configuration override with no algorithm: please select at least one proper algorithm!') + foreach alg : with_algs_opt + build_args += '-DWITH_'+alg.to_upper() + endforeach +endif + +# Small stack handling +with_small_stack_opt = get_option('with_small_stack') +if with_small_stack_opt + build_args += '-DUSE_SMALL_STACK' +endif +assert(not (with_small_stack_opt and with_sig_eddsa25519_opt), 'Small stack and EdDSA are incompatible options!') +assert(not (with_small_stack_opt and with_sig_eddsa448_opt), 'Small stack and EdDSA are incompatible options!') +assert(not (with_small_stack_opt and with_x25519_opt), 'Small stack and X25519 are incompatible options!') +assert(not (with_small_stack_opt and with_x448_opt), 'Small stack and X448 are incompatible options!') + + +# libecc libraries declaration. For each library, the library itself and the +# corresponding dependency object (includedir and library to link with) is +# also declared +# +# INFO: defaulting to static lib only (see project declaration). +# to build both static and dynamic library, use -Ddefault_library=both option +# +libarith_lib = library('arith', + sources: [ + fp_mod_src, + nn_mod_src, + rand_src, + print_src, + time_src, + utils_arith_src, + ], + include_directories: ecc_inc, + install : true, + c_args: build_args, +) +libarith_dep = declare_dependency( + link_with: libarith_lib, + include_directories: ecc_inc, +) + +libec_lib = library('ecc', + sources: [ + curves_mod_src, + utils_ec_src, + fp_mod_src, + nn_mod_src, + rand_src, + print_src, + time_src, + utils_arith_src + ], + include_directories: ecc_inc, + install : true, + c_args: build_args, +) +libec_dep = declare_dependency( + link_with: libec_lib, + include_directories: ecc_inc, +) + +libsign_lib = library('sign', + sources: [ + hash_mod_src, + sig_mod_src, + key_mod_src, + utils_sign_src, + ecdh_mod_src, + curves_mod_src, + utils_ec_src, + fp_mod_src, + nn_mod_src, + rand_src, + print_src, + time_src, + utils_arith_src + ], + include_directories: ecc_inc, + install : true, + c_args: build_args, +) +libsign_dep = declare_dependency( + link_with: libsign_lib, + include_directories: ecc_inc, +) + +# in order to build native tools that depends on libsign library, we should +# check if the nominal library built has been made native or cross. If +# cross, another build must be made natively for native tooling +if meson.is_cross_build() + native_libsign_lib = library('sign_native', + sources: [ + hash_mod_src, + sig_mod_src, + key_mod_src, + utils_sign_src, + ecdh_mod_src, + curves_mod_src, + utils_ec_src, + fp_mod_src, + nn_mod_src, + rand_src, + print_src, + time_src, + utils_arith_src + ], + include_directories: ecc_inc, + install : false, + c_args: build_args, + native: true, + ) + native_libsign_dep = declare_dependency( + link_with: native_libsign_lib, + include_directories: ecc_inc, + ) +else + native_libsign_lib = libsign_lib + native_libsign_dep = libsign_dep +endif + +# About tests, see src/tests/meson.build. Enabled with -Dwith_tests=true +with_tests_opt = get_option('with_tests') +if with_tests_opt + subdir('src/tests') +endif diff --git a/crypto/libecc/meson.options b/crypto/libecc/meson.options new file mode 100644 --- /dev/null +++ b/crypto/libecc/meson.options @@ -0,0 +1,127 @@ +# about compilation +option('use_external_rand', type: 'boolean', value: false, description: 'use external get_random() implementation') +option('use_external_print', type: 'boolean', value: false, description: 'use external ext_printf() implementation') +option('use_external_time', type: 'boolean', value: false, description: 'use external get_ms_time() implementation') +option('with_tests', type: 'boolean', value: false, description: 'enable test suites support') +option('with_rand_source', type: 'string', value: '', description: 'get_random() implementation source') +option('with_wordsize', type: 'combo', choices : ['0', '16', '32', '64'], value : '0', description: 'force wordsize, 0 means no forcing') +option('with_stdlib', type: 'boolean', value : true, description: 'trigger stdlib usage (default to true)') +option('with_debug', type: 'boolean', value : false, description: 'activate libecc debug assertions and checks') +option('use_cryptofuzz', type: 'boolean', value : false, description: 'activate cryptofuzz fuzzing tool API (mainly raw signatures)') +option('assert_print', type: 'boolean', value : false, description: 'activate printing on assertions') +option('no_warn_unused_ret', type: 'boolean', value : false, description: 'do not trigger a warning for unused functions return values') + +# about security +option('with_sig_blinding', type: 'boolean', value: false, description: 'blind signature against some side channels') +option('with_complete_formulas', type: 'boolean', value: true, description: 'use complete formulas for point addition and doubling') +option('with_double_add', type: 'combo', choices: ['unset', 'false', 'true'], value: 'unset', description: 'force Double and Add always usage') +option('with_monty_ladder', type: 'combo', choices: ['unset', 'false', 'true'], value: 'unset', description: 'force Montgomery Ladder usage') +option('with_small_stack', type: 'boolean', value: false, description: 'force small stack usage') + +# about curves +option('with_iso14888_3_ecrdsa', type: 'boolean', value: false, description: 'ISO14888-3 version of the ECRDSA algorithm with discrepancies from the Russian RFC references') + +# curve, sig and hash selectors. These selectors can be used only if with_override_ecc_config is set to true +option('with_override_ecc_config', type: 'boolean', value: false, description: 'disable all default config. manually select all cryptographic engines') + + +# All the curves options +option('with_curves', type: 'array', choices: [ + 'frp256v1', + 'secp192r1', + 'secp224r1', + 'secp256r1', + 'secp384r1', + 'secp521r1', + 'brainpoolp192r1', + 'brainpoolp224r1', + 'brainpoolp256r1', + 'brainpoolp384r1', + 'brainpoolp512r1', + 'gost256', + 'gost512', + 'sm2p256test', + 'sm2p256v1', + 'wei25519', + 'wei448', + 'gost_r3410_2012_256_paramseta', + 'secp256k1', + 'gost_r3410_2001_testparamset', + 'gost_r3410_2001_cryptopro_a_paramset', + 'gost_r3410_2001_cryptopro_b_paramset', + 'gost_r3410_2001_cryptopro_c_paramset', + 'gost_r3410_2001_cryptopro_xcha_paramset', + 'gost_r3410_2001_cryptopro_xchb_paramset', + 'gost_r3410_2012_256_paramsetb', + 'gost_r3410_2012_256_paramsetc', + 'gost_r3410_2012_256_paramsetd', + 'gost_r3410_2012_512_paramsettest', + 'gost_r3410_2012_512_paramseta', + 'gost_r3410_2012_512_paramsetb', + 'gost_r3410_2012_512_paramsetc', + 'secp192k1', + 'secp224k1', + 'brainpoolp192t1', + 'brainpoolp224t1', + 'brainpoolp256t1', + 'brainpoolp320r1', + 'brainpoolp320t1', + 'brainpoolp384t1', + 'brainpoolp512t1', + 'bign256v1', + 'bign384v1', + 'bign512v1', +# ADD curves meson option here +# XXX: Do not remove the comment above, as it is +# used by external tools as a placeholder to add or +# remove automatically generated code. + ], +value: [], description: 'enable a set of curves when override is set') + +# All the hashes options +option('with_hashes', type: 'array', choices: [ + 'sha224', + 'sha256', + 'sha384', + 'sha512', + 'sha512_224', + 'sha512_256', + 'sha3_224', + 'sha3_256', + 'sha3_384', + 'sha3_512', + 'sm3', + 'shake256', + 'streebog256', + 'streebog512', + 'ripemd160', + 'belt_hash', + 'bash224', + 'bash256', + 'bash384', + 'bash512', + 'with_hmac', + ], +value: [], description: 'enable a set of hashes when override is set') + +# All the algorithms options +option('with_algs', type: 'array', choices: [ + 'sig_ecdsa', + 'sig_eckcdsa', + 'sig_ecsdsa', + 'sig_ecosdsa', + 'sig_ecfsdsa', + 'sig_ecgdsa', + 'sig_ecrdsa', + 'sig_sm2', + 'sig_eddsa25519', + 'sig_eddsa448', + 'sig_decdsa', + 'sig_bign', + 'sig_dbign', + 'sig_bip0340', + 'ecccdh', + 'x25519', + 'x448', + ], +value: [], description: 'enable a set of algorithms when override is set') diff --git a/crypto/libecc/pkg_libecc_rand.c b/crypto/libecc/pkg_libecc_rand.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/pkg_libecc_rand.c @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: Unlicense */ +#include +#include + +#include + +int +get_random(unsigned char *buf, uint16_t len) +{ + + /* + * We need random numbers even in a sandbox, so we can't use + * /dev/urandom as the external_deps version of get_random() does on + * FreeBSD. arc4random_buf() is a better choice because it uses the + * underlying getrandom(2) instead of needing to open a device handle. + * + * We don't have any guarantees that this won't open a device on other + * platforms, but we also don't do any sandboxing on those platforms. + */ + arc4random_buf(buf, len); + return 0; +} diff --git a/crypto/libecc/scripts/crossbuild.sh b/crypto/libecc/scripts/crossbuild.sh new file mode 100644 --- /dev/null +++ b/crypto/libecc/scripts/crossbuild.sh @@ -0,0 +1,315 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#!/bin/sh + +# Check if a file $1 exists. Copy it in $2 if +# it exists, or else log and error in $3. +check_and_copy(){ + if [ -e $1 ] + then + cp $1 $2 + else + echo "$2 did not compile ..." >> $3 + fi +} + +copy_compiled_examples(){ + ROOT_DIR=$1 + CROSSBUILD_OUTPUT=$2 + triplet=$3 + wordsize=$4 + ERROR_LOG_FILE=$5 + suffix=$6 + # Basic + check_and_copy $ROOT_DIR/src/examples/basic/nn_pollard_rho $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/nn_pollard_rho_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/basic/fp_square_residue $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/fp_square_residue_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/basic/curve_basic_examples $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/curve_basic_examples_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/basic/curve_ecdh $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/curve_ecdh_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + # Hash + check_and_copy $ROOT_DIR/src/examples/"hash"/"hash" $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/hash_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + # SSS + check_and_copy $ROOT_DIR/src/examples/sss/sss $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/sss_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + # Signatures + check_and_copy $ROOT_DIR/src/examples/sig/rsa/rsa $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/rsa_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/sig/dsa/dsa $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/dsa_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/sig/sdsa/sdsa $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/sdsa_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/sig/kcdsa/kcdsa $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/kcdsa_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/src/examples/sig/gostr34_10_94/gostr34_10_94 $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/gostr34_10_94_"$triplet"_word"$wordsize""$suffix" $ERROR_LOG_FILE +} + +check_triplet_wordsize(){ + triplet=$1 + wordsize=$2 + # Create a temporary workspace and copy the files to compile + ROOT_DIR=$CROSSBUILD_OUTPUT/tmp/ecc_root_"$triplet"_"$wordsize" + mkdir -p $ROOT_DIR + # Copy necessary source files from the root project + cp -r $SRC_DIR/src/ $ROOT_DIR/ + cp -r $SRC_DIR/include/ $ROOT_DIR/ + cp $SRC_DIR/common.mk $ROOT_DIR/ + cp $SRC_DIR/Makefile $ROOT_DIR/ + mkdir -p $ROOT_DIR/build + mkdir -p $CROSSBUILD_OUTPUT/compilation_log + mkdir -p $CROSSBUILD_OUTPUT/error_log + COMPILATION_LOG_FILE=$CROSSBUILD_OUTPUT/compilation_log/compilation_log_"$triplet"_"$wordsize" + ERROR_LOG_FILE=$CROSSBUILD_OUTPUT/error_log/error_log_"$triplet"_"$wordsize" + # NOTE: for 64 bit triplets, multiarch/crossbuild docker's gcc 4.9 has a bug handling loop unrolling in -O3 and + # is mistaken in detecting arrays overflows at compilation time + # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64277 + # Also, add the "-Wno-pedantic-ms-format" for specific quikrs of mingw with "%lld" (...) + if [ "$triplet" = "x86_64-w64-mingw32" ] || [ "$triplet" = "aarch64-linux-gnu" ]; then + extra_lib_cflags="-O2" + extra_bin_cflags="" + if [ "$triplet" = "x86_64-w64-mingw32" ] && [ "$wordsize" = "64" ]; then + extra_lib_cflags=$extra_lib_cflags" -Wno-pedantic-ms-format" + fi + # There is also a misbehavior for mingw improperly finding unintialized variables + # Also, add the "-Wno-pedantic-ms-format" for specific quikrs of mingw with "%lld" (...) + elif [ "$triplet" = "i686-w64-mingw32" ]; then + extra_lib_cflags="-Wno-maybe-uninitialized" + extra_bin_cflags="" + if [ "$wordsize" = "64" ]; then + extra_lib_cflags=$extra_lib_cflags" -Wno-pedantic-ms-format" + fi + # NOTE: on darwin based clang, some of our options are too recent for the installed + # llvm ... Hence we remove warnings as errors here + elif [ "$triplet" = "i386-apple-darwin" ] || [ "$triplet" = "x86_64-apple-darwin" ] || [ "$triplet" = "x86_64h-apple-darwin" ]; then + extra_lib_cflags="-Wno-error" + extra_bin_cflags="-Wno-error" + else + extra_lib_cflags="" + extra_bin_cflags="" + fi + ############## Release compilation + echo "======== COMPILING RELEASE FOR $triplet / $wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + # Library, self tests and utils + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" multiarch/crossbuild make "$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + mkdir -p $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize" + check_and_copy $ROOT_DIR/build/ec_self_tests $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize" $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/build/ec_utils $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_utils_"$triplet"_word"$wordsize" $ERROR_LOG_FILE + # Examples + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/ -w $ROOT_DIR/src/examples -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" multiarch/crossbuild make "$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + copy_compiled_examples "$ROOT_DIR" "$CROSSBUILD_OUTPUT" "$triplet" "$wordsize" "$ERROR_LOG_FILE" "" + # Clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + ############## Debug compilation + echo "======== COMPILING DEBUG FOR $triplet / $wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + ############## Release compilation + # Library, self tests and utils + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" multiarch/crossbuild make debug"$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + mkdir -p $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize" + check_and_copy $ROOT_DIR/build/ec_self_tests $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_debug $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/build/ec_utils $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_utils_"$triplet"_word"$wordsize"_debug $ERROR_LOG_FILE + # Examples + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/ -w $ROOT_DIR/src/examples -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" multiarch/crossbuild make debug"$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + copy_compiled_examples "$ROOT_DIR" "$CROSSBUILD_OUTPUT" "$triplet" "$wordsize" "$ERROR_LOG_FILE" "_debug" + # Clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + echo "===========================================" 2>&1 | tee -a $COMPILATION_LOG_FILE + # Compile static binaries for everyone except Mac OS (gcc on it does not support -static) + if [ "$triplet" != "i386-apple-darwin" ] && [ "$triplet" != "x86_64-apple-darwin" ] && [ "$triplet" != "x86_64h-apple-darwin" ]; then + ############## Release compilation with static binaries (for emulation) + echo "======== COMPILING STATIC RELEASE FOR $triplet / $wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + # Library, self tests and utils + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" -e BIN_LDFLAGS="-static" multiarch/crossbuild make "$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + mkdir -p $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize" + check_and_copy $ROOT_DIR/build/ec_self_tests $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_static $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/build/ec_utils $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_utils_"$triplet"_word"$wordsize"_static $ERROR_LOG_FILE + # Examples + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/ -w $ROOT_DIR/src/examples -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" -e BIN_LDFLAGS="-static" multiarch/crossbuild make "$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + copy_compiled_examples "$ROOT_DIR" "$CROSSBUILD_OUTPUT" "$triplet" "$wordsize" "$ERROR_LOG_FILE" "_static" + # Clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + ##### 4096 bits case for 64 bit word size only + ############################################### + if [ "$wordsize" = "64" ]; then + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + # Self tests and utils + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR -e EXTRA_LIB_CFLAGS="$extra_lib_cflags -DUSER_NN_BIT_LEN=4096" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags -DUSER_NN_BIT_LEN=4096" -e BIN_LDFLAGS="-static" multiarch/crossbuild make "$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + mkdir -p $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize" + check_and_copy $ROOT_DIR/build/ec_self_tests $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_static_4096 $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/build/ec_utils $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_utils_"$triplet"_word"$wordsize"_static_4096 $ERROR_LOG_FILE + # Examples + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/ -w $ROOT_DIR/src/examples -e EXTRA_LIB_CFLAGS="$extra_lib_cflags -DUSER_NN_BIT_LEN=4096" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags -DUSER_NN_BIT_LEN=4096" -e BIN_LDFLAGS="-static" multiarch/crossbuild make "$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + copy_compiled_examples "$ROOT_DIR" "$CROSSBUILD_OUTPUT" "$triplet" "$wordsize" "$ERROR_LOG_FILE" "_static_4096" + # Clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + fi + ############## Debug compilation with static binaries (for emulation) + echo "======== COMPILING STATIC DEBUG FOR $triplet / $wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + ############## Release compilation with static binaries (for emulation) + # Self tests and utils + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" -e BIN_LDFLAGS="-static" multiarch/crossbuild make debug"$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + mkdir -p $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize" + check_and_copy $ROOT_DIR/build/ec_self_tests $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_debug_static $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/build/ec_utils $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_utils_"$triplet"_word"$wordsize"_debug_static $ERROR_LOG_FILE + # Examples + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/ -w $ROOT_DIR/src/examples -e EXTRA_LIB_CFLAGS="$extra_lib_cflags" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags" -e BIN_LDFLAGS="-static" multiarch/crossbuild make debug"$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + copy_compiled_examples "$ROOT_DIR" "$CROSSBUILD_OUTPUT" "$triplet" "$wordsize" "$ERROR_LOG_FILE" "_debug_static" + # Clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + ##### 4096 bits case for 64 bit word size only + ############################################### + if [ "$wordsize" = "64" ]; then + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + # Self tests and utils + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR -e EXTRA_LIB_CFLAGS="$extra_lib_cflags -DUSER_NN_BIT_LEN=4096" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags -DUSER_NN_BIT_LEN=4096" -e BIN_LDFLAGS="-static" multiarch/crossbuild make debug"$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + mkdir -p $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize" + check_and_copy $ROOT_DIR/build/ec_self_tests $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_debug_static_4096 $ERROR_LOG_FILE + check_and_copy $ROOT_DIR/build/ec_utils $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_utils_"$triplet"_word"$wordsize"_debug_static_4096 $ERROR_LOG_FILE + # Examples + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/ -w $ROOT_DIR/src/examples -e EXTRA_LIB_CFLAGS="$extra_lib_cflags -DUSER_NN_BIT_LEN=4096" -e EXTRA_BIN_CFLAGS="$extra_bin_cflags -DUSER_NN_BIT_LEN=4096" -e BIN_LDFLAGS="-static" multiarch/crossbuild make debug"$wordsize" 2>&1 | tee -a $COMPILATION_LOG_FILE + copy_compiled_examples "$ROOT_DIR" "$CROSSBUILD_OUTPUT" "$triplet" "$wordsize" "$ERROR_LOG_FILE" "_debug_static_4096" + # Clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR -w $ROOT_DIR multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -e CROSS_TRIPLE=$triplet -v $ROOT_DIR:$ROOT_DIR/src/examples -w $ROOT_DIR/src/examples multiarch/crossbuild make clean + fi + echo "===========================================" 2>&1 | tee -a $COMPILATION_LOG_FILE + fi + # Cleanup compilation stuff + rm -rf $ROOT_DIR +} + + +print_help(){ + echo "$0 uses the docker multiarch/crossbuild image to compile libecc on multiple platforms" + echo "with multiple word sizes (16, 32 and 64). The compilation logs and errors as well as" + echo "the produced binaries are kept int the 'crossbuild_out' folder." + echo "Supported platform triplets are:" + echo "arm-linux-gnueabi / arm-linux-gnueabihf / powerpc64le-linux-gnu / aarch64-linux-gnu /" + echo "mipsel-linux-gnu / i386-apple-darwin / x86_64-apple-darwin / i686-w64-mingw32 / x86_64-w64-mingw32." + echo "" + echo "$0 with no argument will test the compilation for all the triplets and the word sizes." + echo " -h: print this help" + echo " -triplet: execute the crossbuild only for a given triplet:" + echo " $ sh $0 -triplet arm-linux-gnueabi" + echo " => This will execute cross-compilation for arm-linux-gnueabi for all the word sizes." + echo " $ sh $0 -triplet arm-linux-gnueabi 64" + echo " => This will execute cross-compilation for arm-linux-gnueabi only for 64-bit word size." + echo " -cpu: will specify the number of tasks used for parallel compilation. The default behaviour is to" + echo " use the maximum available CPUs on the machine, but one can reduce th enumber of parallel" + echo " tasks with this toggle. Warning: this toggle is not compatible with the -triplet toggle." +} + + +######### Script main + +# Adapt our sources directory depending on the calling +# directory +SRC_DIR=`dirname "$(readlink -f "$0")"`/.. +CROSSBUILD_OUTPUT=$SRC_DIR/scripts/crossbuild_out/ + +# Check for the docker command line +CHECK_DOCKER=$(docker -v) +if [ $? -ne 0 ]; then + echo "docker is not installed ... Please install it!" + exit +fi + +# Check for docker image multiarch/crossbuild +if [ -z $(docker images -q multiarch/crossbuild) ] +then + echo "Please install the multiarch/crossbuild docker image:" + echo "$ docker pull multiarch/crossbuild" + exit +fi + +# Print help if asked +if [ "$1" = "-h" ] +then + print_help $0 + exit +fi + +# If we have arguments, just execute subcommand +if [ "$1" = "-triplet" ] +then + # Clean stuff if this is an explicit call from command line + if ! [ "$4" = "-automate" ] + then + echo "Cleaning before running ..." + rm -rf $CROSSBUILD_OUTPUT/* + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -v $SRC_DIR:/ecc -w /ecc multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -v $SRC_DIR:/ecc -w /ecc/src/examples multiarch/crossbuild make clean + docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -v $SRC_DIR:/ecc -w /ecc/src/arithmetic_tests multiarch/crossbuild make clean + fi + # If no specific word size has been given, do all the sizes + if [ "$3" = "" ] + then + for wordsize in 16 32 64; + do + check_triplet_wordsize $2 $wordsize + done + else + check_triplet_wordsize $2 $3 + fi + exit +fi + +# Clean +echo "Cleaning before running ..." +rm -rf $CROSSBUILD_OUTPUT/* +docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -v $SRC_DIR:/ecc -w /ecc multiarch/crossbuild make clean +docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -v $SRC_DIR:/ecc -w /ecc/src/examples multiarch/crossbuild make clean +docker run -e VERBOSE=1 -e ASSERT_PRINT="1" -e COMPLETE="$COMPLETE" -e BLINDING="$BLINDING" -e LADDER="$LADDER" -e CRYPTOFUZZ="$CRYPTOFUZZ" --rm -v $SRC_DIR:/ecc -w /ecc/src/arithmetic_tests multiarch/crossbuild make clean + +ALL_CHECKS="" +for wordsize in 16 32 64; +do + for triplet in arm-linux-gnueabi arm-linux-gnueabihf powerpc64le-linux-gnu aarch64-linux-gnu mipsel-linux-gnu i386-apple-darwin x86_64-apple-darwin x86_64h-apple-darwin i686-w64-mingw32 x86_64-w64-mingw32; + do + ALL_CHECKS="$ALL_CHECKS\n-triplet $triplet $wordsize -automate" + done +done + +if [ "$1" = "-cpu" ] +then + if [ "$3" = "-triplet" ] + then + echo "-cpu and -triplet are not compatible ..." + exit + else + # User defined number of CPUs + NCPU=$2 + fi +else + # Get number of CPUs for parallel processing + NCPU=`getconf _NPROCESSORS_ONLN` +fi +echo "Parallelizing on $NCPU processors" +# Unleash the kraken +echo $ALL_CHECKS | xargs -n 4 -P $NCPU sh `readlink -f "$0"` + +# Check if we had an error, and if yes exit with error +for wordsize in 16 32 64; +do + for triplet in arm-linux-gnueabi arm-linux-gnueabihf powerpc64le-linux-gnu aarch64-linux-gnu mipsel-linux-gnu i386-apple-darwin x86_64-apple-darwin x86_64h-apple-darwin i686-w64-mingw32 x86_64-w64-mingw32; + do + ERROR_LOG_FILE=$CROSSBUILD_OUTPUT/error_log/error_log_"$triplet"_"$wordsize" + if [ -f "$ERROR_LOG_FILE" ]; then + echo "!!!!!!! There have been compilation errors for $triplet $wordsize ..." + exit 255 + fi + done +done +echo "All compilations went OK!" diff --git a/crypto/libecc/scripts/crossrun.sh b/crypto/libecc/scripts/crossrun.sh new file mode 100644 --- /dev/null +++ b/crypto/libecc/scripts/crossrun.sh @@ -0,0 +1,124 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#!/bin/sh + +run_triplet_wordsize(){ + triplet=$1 + wordsize=$2 + echo "======== RUNNING RELEASE FOR $triplet / $wordsize" + if [ "$triplet" != "i386-apple-darwin" ] && [ "$triplet" != "x86_64-apple-darwin" ] && [ "$triplet" != "x86_64h-apple-darwin" ] && [ "$triplet" != "i686-w64-mingw32" ] && [ "$triplet" != "x86_64-w64-mingw32" ]; then + echo " [X] Using QEMU static" + $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_static vectors + $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_debug_static vectors + #$CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_static rand + fi + if [ "$triplet" = "i386-apple-darwin" ] || [ "$triplet" = "x86_64-apple-darwin" ] || [ "$triplet" = "x86_64h-apple-darwin" ]; then + echo " [X] Testing MAC-OS binaries is futur work!" + fi + if [ "$triplet" = "i686-w64-mingw32" ] || [ "$triplet" = "x86_64-w64-mingw32" ]; then + echo " [X] Using WINE" + wine $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_static vectors + wine $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_debug_static vectors + #wine $CROSSBUILD_OUTPUT/"$triplet"/word"$wordsize"/ec_self_tests_"$triplet"_word"$wordsize"_static rand + fi +} + + +print_help(){ + echo "$0 uses qemu-static and wine to run self tests" + echo "with multiple word sizes (16, 32 and 64)." + echo "The produced binaries are expected to be in the 'crossbuild_out' folder." + echo "Supported platform triplets are:" + echo "arm-linux-gnueabi / arm-linux-gnueabihf / powerpc64le-linux-gnu / aarch64-linux-gnu /" + echo "mipsel-linux-gnu / i386-apple-darwin / x86_64-apple-darwin / i686-w64-mingw32 / x86_64-w64-mingw32." +} + + +######### Script main +SRC_DIR=`dirname "$(readlink -f "$0")"`/.. +CROSSBUILD_OUTPUT=$SRC_DIR/scripts/crossbuild_out/ + +# Check for the qemu-static command line +for arch in i386 x86_64 arm ppc64 aarch64 mipsel; +do + QEMU_CHECK=$(qemu-$arch-static -h) + if [ $? -ne 0 ]; then + echo "qemu-$arch-static is not installed ... Please install it! (usually in qemu-user-static)" + exit + fi +done + +WINE_CHECK=$(wine --help) +if [ $? -ne 0 ]; then + echo "wine is not installed ... Please install it!" + exit +fi + +WINE64_CHECK=$(wine64 --help) +if [ $? -ne 0 ]; then + echo "wine64 is not installed ... Please install it!" + exit +fi + +# Print help if asked +if [ "$1" = "-h" ] +then + print_help $0 + exit +fi + +# If we have arguments, just execute subcommand +if [ "$1" = "-triplet" ] +then + # If no specific word size has been given, do all the sizes + if [ "$3" = "" ] + then + for wordsize in 16 32 64; + do + run_triplet_wordsize $2 $wordsize + done + else + run_triplet_wordsize $2 $3 + fi + exit +fi + +ALL_CHECKS="" +for wordsize in 16 32 64; +do + for triplet in arm-linux-gnueabi arm-linux-gnueabihf powerpc64le-linux-gnu aarch64-linux-gnu mipsel-linux-gnu i386-apple-darwin x86_64-apple-darwin x86_64h-apple-darwin i686-w64-mingw32 x86_64-w64-mingw32; + do + ALL_CHECKS="$ALL_CHECKS\n-triplet $triplet $wordsize" + done +done + +if [ "$1" = "-cpu" ] +then + if [ "$3" = "-triplet" ] + then + echo "-cpu and -triplet are not compatible ..." + exit + else + # User defined number of CPUs + NCPU=$2 + fi +else + # Get number of CPUs for parallel processing + NCPU=`getconf _NPROCESSORS_ONLN` +fi +echo "Parallelizing on $NCPU processors" +# Unleash the kraken +echo $ALL_CHECKS | xargs -n 4 -P $NCPU sh `readlink -f "$0"` diff --git a/crypto/libecc/scripts/expand_libecc.py b/crypto/libecc/scripts/expand_libecc.py new file mode 100644 --- /dev/null +++ b/crypto/libecc/scripts/expand_libecc.py @@ -0,0 +1,1956 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#! /usr/bin/env python + +import random, sys, re, math, os, getopt, glob, copy, hashlib, binascii, string, signal, base64 + +# External dependecy for SHA-3 +# It is an independent module, since hashlib has no support +# for SHA-3 functions for now +import sha3 + +# Handle Python 2/3 issues +def is_python_2(): + if sys.version_info[0] < 3: + return True + else: + return False + +### Ctrl-C handler +def handler(signal, frame): + print("\nSIGINT caught: exiting ...") + exit(0) + +# Helper to ask the user for something +def get_user_input(prompt): + # Handle the Python 2/3 issue + if is_python_2() == False: + return input(prompt) + else: + return raw_input(prompt) + +########################################################## +#### Math helpers +def egcd(b, n): + x0, x1, y0, y1 = 1, 0, 0, 1 + while n != 0: + q, b, n = b // n, n, b % n + x0, x1 = x1, x0 - q * x1 + y0, y1 = y1, y0 - q * y1 + return b, x0, y0 + +def modinv(a, m): + g, x, y = egcd(a, m) + if g != 1: + raise Exception("Error: modular inverse does not exist") + else: + return x % m + +def compute_monty_coef(prime, pbitlen, wlen): + """ + Compute montgomery coeff r, r^2 and mpinv. pbitlen is the size + of p in bits. It is expected to be a multiple of word + bit size. + """ + r = (1 << int(pbitlen)) % prime + r_square = (1 << (2 * int(pbitlen))) % prime + mpinv = 2**wlen - (modinv(prime, 2**wlen)) + return r, r_square, mpinv + +def compute_div_coef(prime, pbitlen, wlen): + """ + Compute division coeffs p_normalized, p_shift and p_reciprocal. + """ + tmp = prime + cnt = 0 + while tmp != 0: + tmp = tmp >> 1 + cnt += 1 + pshift = int(pbitlen - cnt) + primenorm = prime << pshift + B = 2**wlen + prec = B**3 // ((primenorm >> int(pbitlen - 2*wlen)) + 1) - B + return pshift, primenorm, prec + +def is_probprime(n): + # ensure n is odd + if n % 2 == 0: + return False + # write n-1 as 2**s * d + # repeatedly try to divide n-1 by 2 + s = 0 + d = n-1 + while True: + quotient, remainder = divmod(d, 2) + if remainder == 1: + break + s += 1 + d = quotient + assert(2**s * d == n-1) + # test the base a to see whether it is a witness for the compositeness of n + def try_composite(a): + if pow(a, d, n) == 1: + return False + for i in range(s): + if pow(a, 2**i * d, n) == n-1: + return False + return True # n is definitely composite + for i in range(5): + a = random.randrange(2, n) + if try_composite(a): + return False + return True # no base tested showed n as composite + +def legendre_symbol(a, p): + ls = pow(a, (p - 1) // 2, p) + return -1 if ls == p - 1 else ls + +# Tonelli-Shanks algorithm to find square roots +# over prime fields +def mod_sqrt(a, p): + # Square root of 0 is 0 + if a == 0: + return 0 + # Simple cases + if legendre_symbol(a, p) != 1: + # No square residue + return None + elif p == 2: + return a + elif p % 4 == 3: + return pow(a, (p + 1) // 4, p) + s = p - 1 + e = 0 + while s % 2 == 0: + s = s // 2 + e += 1 + n = 2 + while legendre_symbol(n, p) != -1: + n += 1 + x = pow(a, (s + 1) // 2, p) + b = pow(a, s, p) + g = pow(n, s, p) + r = e + while True: + t = b + m = 0 + if is_python_2(): + for m in xrange(r): + if t == 1: + break + t = pow(t, 2, p) + else: + for m in range(r): + if t == 1: + break + t = pow(t, 2, p) + if m == 0: + return x + gs = pow(g, 2 ** (r - m - 1), p) + g = (gs * gs) % p + x = (x * gs) % p + b = (b * g) % p + r = m + +########################################################## +### Math elliptic curves basic blocks + +# WARNING: these blocks are only here for testing purpose and +# are not intended to be used in a security oriented library! +# This explains the usage of naive affine coordinates fomulas +class Curve(object): + def __init__(self, a, b, prime, order, cofactor, gx, gy, npoints, name, oid): + self.a = a + self.b = b + self.p = prime + self.q = order + self.c = cofactor + self.gx = gx + self.gy = gy + self.n = npoints + self.name = name + self.oid = oid + # Equality testing + def __eq__(self, other): + return self.__dict__ == other.__dict__ + # Deep copy is implemented using the ~X operator + def __invert__(self): + return copy.deepcopy(self) + + +class Point(object): + # Affine coordinates (x, y), infinity point is (None, None) + def __init__(self, curve, x, y): + self.curve = curve + if x != None: + self.x = (x % curve.p) + else: + self.x = None + if y != None: + self.y = (y % curve.p) + else: + self.y = None + # Check that the point is indeed on the curve + if (x != None): + if (pow(y, 2, curve.p) != ((pow(x, 3, curve.p) + (curve.a * x) + curve.b ) % curve.p)): + raise Exception("Error: point is not on curve!") + # Addition + def __add__(self, Q): + x1 = self.x + y1 = self.y + x2 = Q.x + y2 = Q.y + curve = self.curve + # Check that we are on the same curve + if Q.curve != curve: + raise Exception("Point add error: two point don't have the same curve") + # If Q is infinity point, return ourself + if Q.x == None: + return Point(self.curve, self.x, self.y) + # If we are the infinity point return Q + if self.x == None: + return Q + # Infinity point or Doubling + if (x1 == x2): + if (((y1 + y2) % curve.p) == 0): + # Return infinity point + return Point(self.curve, None, None) + else: + # Doubling + L = ((3*pow(x1, 2, curve.p) + curve.a) * modinv(2*y1, curve.p)) % curve.p + # Addition + else: + L = ((y2 - y1) * modinv((x2 - x1) % curve.p, curve.p)) % curve.p + resx = (pow(L, 2, curve.p) - x1 - x2) % curve.p + resy = ((L * (x1 - resx)) - y1) % curve.p + # Return the point + return Point(self.curve, resx, resy) + # Negation + def __neg__(self): + if (self.x == None): + return Point(self.curve, None, None) + else: + return Point(self.curve, self.x, -self.y) + # Subtraction + def __sub__(self, other): + return self + (-other) + # Scalar mul + def __rmul__(self, scalar): + # Implement simple double and add algorithm + P = self + Q = Point(P.curve, None, None) + for i in range(getbitlen(scalar), 0, -1): + Q = Q + Q + if (scalar >> (i-1)) & 0x1 == 0x1: + Q = Q + P + return Q + # Equality testing + def __eq__(self, other): + return self.__dict__ == other.__dict__ + # Deep copy is implemented using the ~X operator + def __invert__(self): + return copy.deepcopy(self) + def __str__(self): + if self.x == None: + return "Inf" + else: + return ("(x = %s, y = %s)" % (hex(self.x), hex(self.y))) + +########################################################## +### Private and public keys structures +class PrivKey(object): + def __init__(self, curve, x): + self.curve = curve + self.x = x + +class PubKey(object): + def __init__(self, curve, Y): + # Sanity check + if Y.curve != curve: + raise Exception("Error: curve and point curve differ in public key!") + self.curve = curve + self.Y = Y + +class KeyPair(object): + def __init__(self, pubkey, privkey): + self.pubkey = pubkey + self.privkey = privkey + + +def fromprivkey(privkey, is_eckcdsa=False): + curve = privkey.curve + q = curve.q + gx = curve.gx + gy = curve.gy + G = Point(curve, gx, gy) + if is_eckcdsa == False: + return PubKey(curve, privkey.x * G) + else: + return PubKey(curve, modinv(privkey.x, q) * G) + +def genKeyPair(curve, is_eckcdsa=False): + p = curve.p + q = curve.q + gx = curve.gx + gy = curve.gy + G = Point(curve, gx, gy) + OK = False + while OK == False: + x = getrandomint(q) + if x == 0: + continue + OK = True + privkey = PrivKey(curve, x) + pubkey = fromprivkey(privkey, is_eckcdsa) + return KeyPair(pubkey, privkey) + +########################################################## +### Signature algorithms helpers +def getrandomint(modulo): + return random.randrange(0, modulo+1) + +def getbitlen(bint): + """ + Returns the number of bits encoding an integer + """ + if bint == None: + return 0 + if bint == 0: + # Zero is encoded on one bit + return 1 + else: + return int(bint).bit_length() + +def getbytelen(bint): + """ + Returns the number of bytes encoding an integer + """ + bitsize = getbitlen(bint) + bytesize = int(bitsize // 8) + if bitsize % 8 != 0: + bytesize += 1 + return bytesize + +def stringtoint(bitstring): + acc = 0 + size = len(bitstring) + for i in range(0, size): + acc = acc + (ord(bitstring[i]) * (2**(8*(size - 1 - i)))) + return acc + +def inttostring(a): + size = int(getbytelen(a)) + outstr = "" + for i in range(0, size): + outstr = outstr + chr((a >> (8*(size - 1 - i))) & 0xFF) + return outstr + +def expand(bitstring, bitlen, direction): + bytelen = int(math.ceil(bitlen / 8.)) + if len(bitstring) >= bytelen: + return bitstring + else: + if direction == "LEFT": + return ((bytelen-len(bitstring))*"\x00") + bitstring + elif direction == "RIGHT": + return bitstring + ((bytelen-len(bitstring))*"\x00") + else: + raise Exception("Error: unknown direction "+direction+" in expand") + +def truncate(bitstring, bitlen, keep): + """ + Takes a bit string and truncates it to keep the left + most or the right most bits + """ + strbitlen = 8*len(bitstring) + # Check if truncation is needed + if strbitlen > bitlen: + if keep == "LEFT": + return expand(inttostring(stringtoint(bitstring) >> int(strbitlen - bitlen)), bitlen, "LEFT") + elif keep == "RIGHT": + mask = (2**bitlen)-1 + return expand(inttostring(stringtoint(bitstring) & mask), bitlen, "LEFT") + else: + raise Exception("Error: unknown direction "+keep+" in truncate") + else: + # No need to truncate! + return bitstring + +########################################################## +### Hash algorithms +def sha224(message): + ctx = hashlib.sha224() + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha256(message): + ctx = hashlib.sha256() + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha384(message): + ctx = hashlib.sha384() + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha512(message): + ctx = hashlib.sha512() + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha3_224(message): + ctx = sha3.Sha3_ctx(224) + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha3_256(message): + ctx = sha3.Sha3_ctx(256) + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha3_384(message): + ctx = sha3.Sha3_ctx(384) + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +def sha3_512(message): + ctx = sha3.Sha3_ctx(512) + if(is_python_2() == True): + ctx.update(message) + digest = ctx.digest() + else: + ctx.update(message.encode('latin-1')) + digest = ctx.digest().decode('latin-1') + return (digest, ctx.digest_size, ctx.block_size) + +########################################################## +### Signature algorithms + +# *| IUF - ECDSA signature +# *| +# *| UF 1. Compute h = H(m) +# *| F 2. If |h| > bitlen(q), set h to bitlen(q) +# *| leftmost (most significant) bits of h +# *| F 3. e = OS2I(h) mod q +# *| F 4. Get a random value k in ]0,q[ +# *| F 5. Compute W = (W_x,W_y) = kG +# *| F 6. Compute r = W_x mod q +# *| F 7. If r is 0, restart the process at step 4. +# *| F 8. If e == rx, restart the process at step 4. +# *| F 9. Compute s = k^-1 * (xr + e) mod q +# *| F 10. If s is 0, restart the process at step 4. +# *| F 11. Return (r,s) +def ecdsa_sign(hashfunc, keypair, message, k=None): + privkey = keypair.privkey + # Get important parameters from the curve + p = privkey.curve.p + q = privkey.curve.q + gx = privkey.curve.gx + gy = privkey.curve.gy + G = Point(privkey.curve, gx, gy) + q_limit_len = getbitlen(q) + # Compute the hash + (h, _, _) = hashfunc(message) + # Truncate hash value + h = truncate(h, q_limit_len, "LEFT") + # Convert the hash value to an int + e = stringtoint(h) % q + OK = False + while OK == False: + if k == None: + k = getrandomint(q) + if k == 0: + continue + W = k * G + r = W.x % q + if r == 0: + continue + if e == r * privkey.x: + continue + s = (modinv(k, q) * ((privkey.x * r) + e)) % q + if s == 0: + continue + OK = True + return ((expand(inttostring(r), 8*getbytelen(q), "LEFT") + expand(inttostring(s), 8*getbytelen(q), "LEFT")), k) + +# *| IUF - ECDSA verification +# *| +# *| I 1. Reject the signature if r or s is 0. +# *| UF 2. Compute h = H(m) +# *| F 3. If |h| > bitlen(q), set h to bitlen(q) +# *| leftmost (most significant) bits of h +# *| F 4. Compute e = OS2I(h) mod q +# *| F 5. Compute u = (s^-1)e mod q +# *| F 6. Compute v = (s^-1)r mod q +# *| F 7. Compute W' = uG + vY +# *| F 8. If W' is the point at infinity, reject the signature. +# *| F 9. Compute r' = W'_x mod q +# *| F 10. Accept the signature if and only if r equals r' +def ecdsa_verify(hashfunc, keypair, message, sig): + pubkey = keypair.pubkey + # Get important parameters from the curve + p = pubkey.curve.p + q = pubkey.curve.q + gx = pubkey.curve.gx + gy = pubkey.curve.gy + q_limit_len = getbitlen(q) + G = Point(pubkey.curve, gx, gy) + # Extract r and s + if len(sig) != 2*getbytelen(q): + raise Exception("ECDSA verify: bad signature length!") + r = stringtoint(sig[0:int(len(sig)/2)]) + s = stringtoint(sig[int(len(sig)/2):]) + if r == 0 or s == 0: + return False + # Compute the hash + (h, _, _) = hashfunc(message) + # Truncate hash value + h = truncate(h, q_limit_len, "LEFT") + # Convert the hash value to an int + e = stringtoint(h) % q + u = (modinv(s, q) * e) % q + v = (modinv(s, q) * r) % q + W_ = (u * G) + (v * pubkey.Y) + if W_.x == None: + return False + r_ = W_.x % q + if r == r_: + return True + else: + return False + +def eckcdsa_genKeyPair(curve): + return genKeyPair(curve, True) + +# *| IUF - ECKCDSA signature +# *| +# *| IUF 1. Compute h = H(z||m) +# *| F 2. If hsize > bitlen(q), set h to bitlen(q) +# *| rightmost (less significant) bits of h. +# *| F 3. Get a random value k in ]0,q[ +# *| F 4. Compute W = (W_x,W_y) = kG +# *| F 5. Compute r = h(FE2OS(W_x)). +# *| F 6. If hsize > bitlen(q), set r to bitlen(q) +# *| rightmost (less significant) bits of r. +# *| F 7. Compute e = OS2I(r XOR h) mod q +# *| F 8. Compute s = x(k - e) mod q +# *| F 9. if s == 0, restart at step 3. +# *| F 10. return (r,s) +def eckcdsa_sign(hashfunc, keypair, message, k=None): + privkey = keypair.privkey + # Get important parameters from the curve + p = privkey.curve.p + q = privkey.curve.q + gx = privkey.curve.gx + gy = privkey.curve.gy + G = Point(privkey.curve, gx, gy) + q_limit_len = getbitlen(q) + # Compute the certificate data + (_, _, hblocksize) = hashfunc("") + z = expand(inttostring(keypair.pubkey.Y.x), 8*getbytelen(p), "LEFT") + z = z + expand(inttostring(keypair.pubkey.Y.y), 8*getbytelen(p), "LEFT") + if len(z) > hblocksize: + # Truncate + z = truncate(z, 8*hblocksize, "LEFT") + else: + # Expand + z = expand(z, 8*hblocksize, "RIGHT") + # Compute the hash + (h, _, _) = hashfunc(z + message) + # Truncate hash value + h = truncate(h, 8 * int(math.ceil(q_limit_len / 8)), "RIGHT") + OK = False + while OK == False: + if k == None: + k = getrandomint(q) + if k == 0: + continue + W = k * G + (r, _, _) = hashfunc(expand(inttostring(W.x), 8*getbytelen(p), "LEFT")) + r = truncate(r, 8 * int(math.ceil(q_limit_len / 8)), "RIGHT") + e = (stringtoint(r) ^ stringtoint(h)) % q + s = (privkey.x * (k - e)) % q + if s == 0: + continue + OK = True + return (r + expand(inttostring(s), 8*getbytelen(q), "LEFT"), k) + +# *| IUF - ECKCDSA verification +# *| +# *| I 1. Check the length of r: +# *| - if hsize > bitlen(q), r must be of +# *| length bitlen(q) +# *| - if hsize <= bitlen(q), r must be of +# *| length hsize +# *| I 2. Check that s is in ]0,q[ +# *| IUF 3. Compute h = H(z||m) +# *| F 4. If hsize > bitlen(q), set h to bitlen(q) +# *| rightmost (less significant) bits of h. +# *| F 5. Compute e = OS2I(r XOR h) mod q +# *| F 6. Compute W' = sY + eG, where Y is the public key +# *| F 7. Compute r' = h(FE2OS(W'x)) +# *| F 8. If hsize > bitlen(q), set r' to bitlen(q) +# *| rightmost (less significant) bits of r'. +# *| F 9. Check if r == r' +def eckcdsa_verify(hashfunc, keypair, message, sig): + pubkey = keypair.pubkey + # Get important parameters from the curve + p = pubkey.curve.p + q = pubkey.curve.q + gx = pubkey.curve.gx + gy = pubkey.curve.gy + G = Point(pubkey.curve, gx, gy) + q_limit_len = getbitlen(q) + (_, hsize, hblocksize) = hashfunc("") + # Extract r and s + if (8*hsize) > q_limit_len: + r_len = int(math.ceil(q_limit_len / 8.)) + else: + r_len = hsize + r = stringtoint(sig[0:int(r_len)]) + s = stringtoint(sig[int(r_len):]) + if (s >= q) or (s < 0): + return False + # Compute the certificate data + z = expand(inttostring(keypair.pubkey.Y.x), 8*getbytelen(p), "LEFT") + z = z + expand(inttostring(keypair.pubkey.Y.y), 8*getbytelen(p), "LEFT") + if len(z) > hblocksize: + # Truncate + z = truncate(z, 8*hblocksize, "LEFT") + else: + # Expand + z = expand(z, 8*hblocksize, "RIGHT") + # Compute the hash + (h, _, _) = hashfunc(z + message) + # Truncate hash value + h = truncate(h, 8 * int(math.ceil(q_limit_len / 8)), "RIGHT") + e = (r ^ stringtoint(h)) % q + W_ = (s * pubkey.Y) + (e * G) + (h, _, _) = hashfunc(expand(inttostring(W_.x), 8*getbytelen(p), "LEFT")) + r_ = truncate(h, 8 * int(math.ceil(q_limit_len / 8)), "RIGHT") + if stringtoint(r_) == r: + return True + else: + return False + +# *| IUF - ECFSDSA signature +# *| +# *| I 1. Get a random value k in ]0,q[ +# *| I 2. Compute W = (W_x,W_y) = kG +# *| I 3. Compute r = FE2OS(W_x)||FE2OS(W_y) +# *| I 4. If r is an all zero string, restart the process at step 1. +# *| IUF 5. Compute h = H(r||m) +# *| F 6. Compute e = OS2I(h) mod q +# *| F 7. Compute s = (k + ex) mod q +# *| F 8. If s is 0, restart the process at step 1 (see c. below) +# *| F 9. Return (r,s) +def ecfsdsa_sign(hashfunc, keypair, message, k=None): + privkey = keypair.privkey + # Get important parameters from the curve + p = privkey.curve.p + q = privkey.curve.q + gx = privkey.curve.gx + gy = privkey.curve.gy + G = Point(privkey.curve, gx, gy) + OK = False + while OK == False: + if k == None: + k = getrandomint(q) + if k == 0: + continue + W = k * G + r = expand(inttostring(W.x), 8*getbytelen(p), "LEFT") + expand(inttostring(W.y), 8*getbytelen(p), "LEFT") + if stringtoint(r) == 0: + continue + (h, _, _) = hashfunc(r + message) + e = stringtoint(h) % q + s = (k + e * privkey.x) % q + if s == 0: + continue + OK = True + return (r + expand(inttostring(s), 8*getbytelen(q), "LEFT"), k) + + +# *| IUF - ECFSDSA verification +# *| +# *| I 1. Reject the signature if r is not a valid point on the curve. +# *| I 2. Reject the signature if s is not in ]0,q[ +# *| IUF 3. Compute h = H(r||m) +# *| F 4. Convert h to an integer and then compute e = -h mod q +# *| F 5. compute W' = sG + eY, where Y is the public key +# *| F 6. Compute r' = FE2OS(W'_x)||FE2OS(W'_y) +# *| F 7. Accept the signature if and only if r equals r' +def ecfsdsa_verify(hashfunc, keypair, message, sig): + pubkey = keypair.pubkey + # Get important parameters from the curve + p = pubkey.curve.p + q = pubkey.curve.q + gx = pubkey.curve.gx + gy = pubkey.curve.gy + G = Point(pubkey.curve, gx, gy) + # Extract coordinates from r and s from signature + if len(sig) != (2*getbytelen(p)) + getbytelen(q): + raise Exception("ECFSDSA verify: bad signature length!") + wx = sig[:int(getbytelen(p))] + wy = sig[int(getbytelen(p)):int(2*getbytelen(p))] + r = wx + wy + s = stringtoint(sig[int(2*getbytelen(p)):int((2*getbytelen(p))+getbytelen(q))]) + # Check r is on the curve + W = Point(pubkey.curve, stringtoint(wx), stringtoint(wy)) + # Check s is in ]0,q[ + if s == 0 or s > q: + raise Exception("ECFSDSA verify: s not in ]0,q[") + (h, _, _) = hashfunc(r + message) + e = (-stringtoint(h)) % q + W_ = s * G + e * pubkey.Y + r_ = expand(inttostring(W_.x), 8*getbytelen(p), "LEFT") + expand(inttostring(W_.y), 8*getbytelen(p), "LEFT") + if r == r_: + return True + else: + return False + + +# NOTE: ISO/IEC 14888-3 standard seems to diverge from the existing implementations +# of ECRDSA when treating the message hash, and from the examples of certificates provided +# in RFC 7091 and draft-deremin-rfc4491-bis. While in ISO/IEC 14888-3 it is explicitely asked +# to proceed with the hash of the message as big endian, the RFCs derived from the Russian +# standard expect the hash value to be treated as little endian when importing it as an integer +# (this discrepancy is exhibited and confirmed by test vectors present in ISO/IEC 14888-3, and +# by X.509 certificates present in the RFCs). This seems (to be confirmed) to be a discrepancy of +# ISO/IEC 14888-3 algorithm description that must be fixed there. +# +# In order to be conservative, libecc uses the Russian standard behavior as expected to be in line with +# other implemetations, but keeps the ISO/IEC 14888-3 behavior if forced/asked by the user using +# the USE_ISO14888_3_ECRDSA toggle. This allows to keep backward compatibility with previous versions of the +# library if needed. + +# *| IUF - ECRDSA signature +# *| +# *| UF 1. Compute h = H(m) +# *| F 2. Get a random value k in ]0,q[ +# *| F 3. Compute W = (W_x,W_y) = kG +# *| F 4. Compute r = W_x mod q +# *| F 5. If r is 0, restart the process at step 2. +# *| F 6. Compute e = OS2I(h) mod q. If e is 0, set e to 1. +# *| NOTE: here, ISO/IEC 14888-3 and RFCs differ in the way e treated. +# *| e = OS2I(h) for ISO/IEC 14888-3, or e = OS2I(reversed(h)) when endianness of h +# *| is reversed for RFCs. +# *| F 7. Compute s = (rx + ke) mod q +# *| F 8. If s is 0, restart the process at step 2. +# *| F 11. Return (r,s) +def ecrdsa_sign(hashfunc, keypair, message, k=None, use_iso14888_divergence=False): + privkey = keypair.privkey + # Get important parameters from the curve + p = privkey.curve.p + q = privkey.curve.q + gx = privkey.curve.gx + gy = privkey.curve.gy + G = Point(privkey.curve, gx, gy) + (h, _, _) = hashfunc(message) + if use_iso14888_divergence == False: + # Reverse the endianness for Russian standard RFC ECRDSA (contrary to ISO/IEC 14888-3 case) + h = h[::-1] + OK = False + while OK == False: + if k == None: + k = getrandomint(q) + if k == 0: + continue + W = k * G + r = W.x % q + if r == 0: + continue + e = stringtoint(h) % q + if e == 0: + e = 1 + s = ((r * privkey.x) + (k * e)) % q + if s == 0: + continue + OK = True + return (expand(inttostring(r), 8*getbytelen(q), "LEFT") + expand(inttostring(s), 8*getbytelen(q), "LEFT"), k) + +# *| IUF - ECRDSA verification +# *| +# *| UF 1. Check that r and s are both in ]0,q[ +# *| F 2. Compute h = H(m) +# *| F 3. Compute e = OS2I(h)^-1 mod q +# *| NOTE: here, ISO/IEC 14888-3 and RFCs differ in the way e treated. +# *| e = OS2I(h) for ISO/IEC 14888-3, or e = OS2I(reversed(h)) when endianness of h +# *| is reversed for RFCs. +# *| F 4. Compute u = es mod q +# *| F 4. Compute v = -er mod q +# *| F 5. Compute W' = uG + vY = (W'_x, W'_y) +# *| F 6. Let's now compute r' = W'_x mod q +# *| F 7. Check r and r' are the same +def ecrdsa_verify(hashfunc, keypair, message, sig, use_iso14888_divergence=False): + pubkey = keypair.pubkey + # Get important parameters from the curve + p = pubkey.curve.p + q = pubkey.curve.q + gx = pubkey.curve.gx + gy = pubkey.curve.gy + G = Point(pubkey.curve, gx, gy) + # Extract coordinates from r and s from signature + if len(sig) != 2*getbytelen(q): + raise Exception("ECRDSA verify: bad signature length!") + r = stringtoint(sig[:int(getbytelen(q))]) + s = stringtoint(sig[int(getbytelen(q)):int(2*getbytelen(q))]) + if r == 0 or r > q: + raise Exception("ECRDSA verify: r not in ]0,q[") + if s == 0 or s > q: + raise Exception("ECRDSA verify: s not in ]0,q[") + (h, _, _) = hashfunc(message) + if use_iso14888_divergence == False: + # Reverse the endianness for Russian standard RFC ECRDSA (contrary to ISO/IEC 14888-3 case) + h = h[::-1] + e = modinv(stringtoint(h) % q, q) + u = (e * s) % q + v = (-e * r) % q + W_ = u * G + v * pubkey.Y + r_ = W_.x % q + if r == r_: + return True + else: + return False + + +# *| IUF - ECGDSA signature +# *| +# *| UF 1. Compute h = H(m). If |h| > bitlen(q), set h to bitlen(q) +# *| leftmost (most significant) bits of h +# *| F 2. Convert e = - OS2I(h) mod q +# *| F 3. Get a random value k in ]0,q[ +# *| F 4. Compute W = (W_x,W_y) = kG +# *| F 5. Compute r = W_x mod q +# *| F 6. If r is 0, restart the process at step 4. +# *| F 7. Compute s = x(kr + e) mod q +# *| F 8. If s is 0, restart the process at step 4. +# *| F 9. Return (r,s) +def ecgdsa_sign(hashfunc, keypair, message, k=None): + privkey = keypair.privkey + # Get important parameters from the curve + p = privkey.curve.p + q = privkey.curve.q + gx = privkey.curve.gx + gy = privkey.curve.gy + G = Point(privkey.curve, gx, gy) + (h, _, _) = hashfunc(message) + q_limit_len = getbitlen(q) + # Truncate hash value + h = truncate(h, q_limit_len, "LEFT") + e = (-stringtoint(h)) % q + OK = False + while OK == False: + if k == None: + k = getrandomint(q) + if k == 0: + continue + W = k * G + r = W.x % q + if r == 0: + continue + s = (privkey.x * ((k * r) + e)) % q + if s == 0: + continue + OK = True + return (expand(inttostring(r), 8*getbytelen(q), "LEFT") + expand(inttostring(s), 8*getbytelen(q), "LEFT"), k) + +# *| IUF - ECGDSA verification +# *| +# *| I 1. Reject the signature if r or s is 0. +# *| UF 2. Compute h = H(m). If |h| > bitlen(q), set h to bitlen(q) +# *| leftmost (most significant) bits of h +# *| F 3. Compute e = OS2I(h) mod q +# *| F 4. Compute u = ((r^-1)e mod q) +# *| F 5. Compute v = ((r^-1)s mod q) +# *| F 6. Compute W' = uG + vY +# *| F 7. Compute r' = W'_x mod q +# *| F 8. Accept the signature if and only if r equals r' +def ecgdsa_verify(hashfunc, keypair, message, sig): + pubkey = keypair.pubkey + # Get important parameters from the curve + p = pubkey.curve.p + q = pubkey.curve.q + gx = pubkey.curve.gx + gy = pubkey.curve.gy + G = Point(pubkey.curve, gx, gy) + # Extract coordinates from r and s from signature + if len(sig) != 2*getbytelen(q): + raise Exception("ECGDSA verify: bad signature length!") + r = stringtoint(sig[:int(getbytelen(q))]) + s = stringtoint(sig[int(getbytelen(q)):int(2*getbytelen(q))]) + if r == 0 or r > q: + raise Exception("ECGDSA verify: r not in ]0,q[") + if s == 0 or s > q: + raise Exception("ECGDSA verify: s not in ]0,q[") + (h, _, _) = hashfunc(message) + q_limit_len = getbitlen(q) + # Truncate hash value + h = truncate(h, q_limit_len, "LEFT") + e = stringtoint(h) % q + r_inv = modinv(r, q) + u = (r_inv * e) % q + v = (r_inv * s) % q + W_ = u * G + v * pubkey.Y + r_ = W_.x % q + if r == r_: + return True + else: + return False + +# *| IUF - ECSDSA/ECOSDSA signature +# *| +# *| I 1. Get a random value k in ]0, q[ +# *| I 2. Compute W = kG = (Wx, Wy) +# *| IUF 3. Compute r = H(Wx [|| Wy] || m) +# *| - In the normal version (ECSDSA), r = h(Wx || Wy || m). +# *| - In the optimized version (ECOSDSA), r = h(Wx || m). +# *| F 4. Compute e = OS2I(r) mod q +# *| F 5. if e == 0, restart at step 1. +# *| F 6. Compute s = (k + ex) mod q. +# *| F 7. if s == 0, restart at step 1. +# *| F 8. Return (r, s) +def ecsdsa_common_sign(hashfunc, keypair, message, optimized, k=None): + privkey = keypair.privkey + # Get important parameters from the curve + p = privkey.curve.p + q = privkey.curve.q + gx = privkey.curve.gx + gy = privkey.curve.gy + G = Point(privkey.curve, gx, gy) + OK = False + while OK == False: + if k == None: + k = getrandomint(q) + if k == 0: + continue + W = k * G + if optimized == False: + (r, _, _) = hashfunc(expand(inttostring(W.x), 8*getbytelen(p), "LEFT") + expand(inttostring(W.y), 8*getbytelen(p), "LEFT") + message) + else: + (r, _, _) = hashfunc(expand(inttostring(W.x), 8*getbytelen(p), "LEFT") + message) + e = stringtoint(r) % q + if e == 0: + continue + s = (k + (e * privkey.x)) % q + if s == 0: + continue + OK = True + return (r + expand(inttostring(s), 8*getbytelen(q), "LEFT"), k) + +def ecsdsa_sign(hashfunc, keypair, message, k=None): + return ecsdsa_common_sign(hashfunc, keypair, message, False, k) + +def ecosdsa_sign(hashfunc, keypair, message, k=None): + return ecsdsa_common_sign(hashfunc, keypair, message, True, k) + +# *| IUF - ECSDSA/ECOSDSA verification +# *| +# *| I 1. if s is not in ]0,q[, reject the signature.x +# *| I 2. Compute e = -r mod q +# *| I 3. If e == 0, reject the signature. +# *| I 4. Compute W' = sG + eY +# *| IUF 5. Compute r' = H(W'x [|| W'y] || m) +# *| - In the normal version (ECSDSA), r = h(W'x || W'y || m). +# *| - In the optimized version (ECOSDSA), r = h(W'x || m). +# *| F 6. Accept the signature if and only if r and r' are the same +def ecsdsa_common_verify(hashfunc, keypair, message, sig, optimized): + pubkey = keypair.pubkey + # Get important parameters from the curve + p = pubkey.curve.p + q = pubkey.curve.q + gx = pubkey.curve.gx + gy = pubkey.curve.gy + G = Point(pubkey.curve, gx, gy) + (_, hlen, _) = hashfunc("") + # Extract coordinates from r and s from signature + if len(sig) != hlen + getbytelen(q): + raise Exception("EC[O]SDSA verify: bad signature length!") + r = stringtoint(sig[:int(hlen)]) + s = stringtoint(sig[int(hlen):int(hlen+getbytelen(q))]) + if s == 0 or s > q: + raise Exception("EC[O]DSA verify: s not in ]0,q[") + e = (-r) % q + if e == 0: + raise Exception("EC[O]DSA verify: e is null") + W_ = s * G + e * pubkey.Y + if optimized == False: + (r_, _, _) = hashfunc(expand(inttostring(W_.x), 8*getbytelen(p), "LEFT") + expand(inttostring(W_.y), 8*getbytelen(p), "LEFT") + message) + else: + (r_, _, _) = hashfunc(expand(inttostring(W_.x), 8*getbytelen(p), "LEFT") + message) + if sig[:int(hlen)] == r_: + return True + else: + return False + +def ecsdsa_verify(hashfunc, keypair, message, sig): + return ecsdsa_common_verify(hashfunc, keypair, message, sig, False) + +def ecosdsa_verify(hashfunc, keypair, message, sig): + return ecsdsa_common_verify(hashfunc, keypair, message, sig, True) + + +########################################################## +### Generate self-tests for all the algorithms + +all_hash_funcs = [ (sha224, "SHA224"), (sha256, "SHA256"), (sha384, "SHA384"), (sha512, "SHA512"), (sha3_224, "SHA3_224"), (sha3_256, "SHA3_256"), (sha3_384, "SHA3_384"), (sha3_512, "SHA3_512") ] + +all_sig_algs = [ (ecdsa_sign, ecdsa_verify, genKeyPair, "ECDSA"), + (eckcdsa_sign, eckcdsa_verify, eckcdsa_genKeyPair, "ECKCDSA"), + (ecfsdsa_sign, ecfsdsa_verify, genKeyPair, "ECFSDSA"), + (ecrdsa_sign, ecrdsa_verify, genKeyPair, "ECRDSA"), + (ecgdsa_sign, ecgdsa_verify, eckcdsa_genKeyPair, "ECGDSA"), + (ecsdsa_sign, ecsdsa_verify, genKeyPair, "ECSDSA"), + (ecosdsa_sign, ecosdsa_verify, genKeyPair, "ECOSDSA"), ] + + +curr_test = 0 +def pretty_print_curr_test(num_test, total_gen_tests): + num_decimal = int(math.log10(total_gen_tests))+1 + format_buf = "%0"+str(num_decimal)+"d/%0"+str(num_decimal)+"d" + sys.stdout.write('\b'*((2*num_decimal)+1)) + sys.stdout.flush() + sys.stdout.write(format_buf % (num_test, total_gen_tests)) + if num_test == total_gen_tests: + print("") + return + +def gen_self_test(curve, hashfunc, sig_alg_sign, sig_alg_verify, sig_alg_genkeypair, num, hashfunc_name, sig_alg_name, total_gen_tests): + global curr_test + curr_test = curr_test + 1 + if num != 0: + pretty_print_curr_test(curr_test, total_gen_tests) + output_list = [] + for test_num in range(0, num): + out_vectors = "" + # Generate a random key pair + keypair = sig_alg_genkeypair(curve) + # Generate a random message with a random size + size = getrandomint(256) + if is_python_2(): + message = ''.join([random.choice(string.ascii_letters + string.digits) for n in xrange(size)]) + else: + message = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(size)]) + test_name = sig_alg_name + "_" + hashfunc_name + "_" + curve.name.upper() + "_" + str(test_num) + # Sign the message + (sig, k) = sig_alg_sign(hashfunc, keypair, message) + # Check that everything is OK with a verify + if sig_alg_verify(hashfunc, keypair, message, sig) != True: + raise Exception("Error during self test generation: sig verify failed! "+test_name+ " / msg="+message+" / sig="+binascii.hexlify(sig)+" / k="+hex(k)+" / privkey.x="+hex(keypair.privkey.x)) + if sig_alg_name == "ECRDSA": + out_vectors += "#ifndef USE_ISO14888_3_ECRDSA\n" + # Now generate the test vector + out_vectors += "#ifdef WITH_HASH_"+hashfunc_name.upper()+"\n" + out_vectors += "#ifdef WITH_CURVE_"+curve.name.upper()+"\n" + out_vectors += "#ifdef WITH_SIG_"+sig_alg_name.upper()+"\n" + out_vectors += "/* "+test_name+" known test vectors */\n" + out_vectors += "static int "+test_name+"_test_vectors_get_random(nn_t out, nn_src_t q)\n{\n" + # k_buf MUST be exported padded to the length of q + out_vectors += "\tconst u8 k_buf[] = "+bigint_to_C_array(k, getbytelen(curve.q)) + out_vectors += "\tint ret, cmp;\n\tret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err);\n\tret = nn_cmp(out, q, &cmp); EG(ret, err);\n\tret = (cmp >= 0) ? -1 : 0;\nerr:\n\treturn ret;\n}\n" + out_vectors += "static const u8 "+test_name+"_test_vectors_priv_key[] = \n"+bigint_to_C_array(keypair.privkey.x, getbytelen(keypair.privkey.x)) + out_vectors += "static const u8 "+test_name+"_test_vectors_expected_sig[] = \n"+bigint_to_C_array(stringtoint(sig), len(sig)) + out_vectors += "static const ec_test_case "+test_name+"_test_case = {\n" + out_vectors += "\t.name = \""+test_name+"\",\n" + out_vectors += "\t.ec_str_p = &"+curve.name+"_str_params,\n" + out_vectors += "\t.priv_key = "+test_name+"_test_vectors_priv_key,\n" + out_vectors += "\t.priv_key_len = sizeof("+test_name+"_test_vectors_priv_key),\n" + out_vectors += "\t.nn_random = "+test_name+"_test_vectors_get_random,\n" + out_vectors += "\t.hash_type = "+hashfunc_name+",\n" + out_vectors += "\t.msg = \""+message+"\",\n" + out_vectors += "\t.msglen = "+str(len(message))+",\n" + out_vectors += "\t.sig_type = "+sig_alg_name+",\n" + out_vectors += "\t.exp_sig = "+test_name+"_test_vectors_expected_sig,\n" + out_vectors += "\t.exp_siglen = sizeof("+test_name+"_test_vectors_expected_sig),\n};\n" + out_vectors += "#endif /* WITH_HASH_"+hashfunc_name+" */\n" + out_vectors += "#endif /* WITH_CURVE_"+curve.name+" */\n" + out_vectors += "#endif /* WITH_SIG_"+sig_alg_name+" */\n" + if sig_alg_name == "ECRDSA": + out_vectors += "#endif /* !USE_ISO14888_3_ECRDSA */\n" + out_name = "" + if sig_alg_name == "ECRDSA": + out_name += "#ifndef USE_ISO14888_3_ECRDSA"+"/* For "+test_name+" */\n" + out_name += "#ifdef WITH_HASH_"+hashfunc_name.upper()+"/* For "+test_name+" */\n" + out_name += "#ifdef WITH_CURVE_"+curve.name.upper()+"/* For "+test_name+" */\n" + out_name += "#ifdef WITH_SIG_"+sig_alg_name.upper()+"/* For "+test_name+" */\n" + out_name += "\t&"+test_name+"_test_case,\n" + out_name += "#endif /* WITH_HASH_"+hashfunc_name+" for "+test_name+" */\n" + out_name += "#endif /* WITH_CURVE_"+curve.name+" for "+test_name+" */\n" + out_name += "#endif /* WITH_SIG_"+sig_alg_name+" for "+test_name+" */" + if sig_alg_name == "ECRDSA": + out_name += "\n#endif /* !USE_ISO14888_3_ECRDSA */"+"/* For "+test_name+" */" + output_list.append((out_name, out_vectors)) + # In the specific case of ECRDSA, we also generate an ISO/IEC compatible test vector + if sig_alg_name == "ECRDSA": + out_vectors = "" + (sig, k) = sig_alg_sign(hashfunc, keypair, message, use_iso14888_divergence=True) + # Check that everything is OK with a verify + if sig_alg_verify(hashfunc, keypair, message, sig, use_iso14888_divergence=True) != True: + raise Exception("Error during self test generation: sig verify failed! "+test_name+ " / msg="+message+" / sig="+binascii.hexlify(sig)+" / k="+hex(k)+" / privkey.x="+hex(keypair.privkey.x)) + out_vectors += "#ifdef USE_ISO14888_3_ECRDSA\n" + # Now generate the test vector + out_vectors += "#ifdef WITH_HASH_"+hashfunc_name.upper()+"\n" + out_vectors += "#ifdef WITH_CURVE_"+curve.name.upper()+"\n" + out_vectors += "#ifdef WITH_SIG_"+sig_alg_name.upper()+"\n" + out_vectors += "/* "+test_name+" known test vectors */\n" + out_vectors += "static int "+test_name+"_test_vectors_get_random(nn_t out, nn_src_t q)\n{\n" + # k_buf MUST be exported padded to the length of q + out_vectors += "\tconst u8 k_buf[] = "+bigint_to_C_array(k, getbytelen(curve.q)) + out_vectors += "\tint ret, cmp;\n\tret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err);\n\tret = nn_cmp(out, q, &cmp); EG(ret, err);\n\tret = (cmp >= 0) ? -1 : 0;\nerr:\n\treturn ret;\n}\n" + out_vectors += "static const u8 "+test_name+"_test_vectors_priv_key[] = \n"+bigint_to_C_array(keypair.privkey.x, getbytelen(keypair.privkey.x)) + out_vectors += "static const u8 "+test_name+"_test_vectors_expected_sig[] = \n"+bigint_to_C_array(stringtoint(sig), len(sig)) + out_vectors += "static const ec_test_case "+test_name+"_test_case = {\n" + out_vectors += "\t.name = \""+test_name+"\",\n" + out_vectors += "\t.ec_str_p = &"+curve.name+"_str_params,\n" + out_vectors += "\t.priv_key = "+test_name+"_test_vectors_priv_key,\n" + out_vectors += "\t.priv_key_len = sizeof("+test_name+"_test_vectors_priv_key),\n" + out_vectors += "\t.nn_random = "+test_name+"_test_vectors_get_random,\n" + out_vectors += "\t.hash_type = "+hashfunc_name+",\n" + out_vectors += "\t.msg = \""+message+"\",\n" + out_vectors += "\t.msglen = "+str(len(message))+",\n" + out_vectors += "\t.sig_type = "+sig_alg_name+",\n" + out_vectors += "\t.exp_sig = "+test_name+"_test_vectors_expected_sig,\n" + out_vectors += "\t.exp_siglen = sizeof("+test_name+"_test_vectors_expected_sig),\n};\n" + out_vectors += "#endif /* WITH_HASH_"+hashfunc_name+" */\n" + out_vectors += "#endif /* WITH_CURVE_"+curve.name+" */\n" + out_vectors += "#endif /* WITH_SIG_"+sig_alg_name+" */\n" + out_vectors += "#endif /* USE_ISO14888_3_ECRDSA */\n" + out_name = "" + out_name += "#ifdef USE_ISO14888_3_ECRDSA"+"/* For "+test_name+" */\n" + out_name += "#ifdef WITH_HASH_"+hashfunc_name.upper()+"/* For "+test_name+" */\n" + out_name += "#ifdef WITH_CURVE_"+curve.name.upper()+"/* For "+test_name+" */\n" + out_name += "#ifdef WITH_SIG_"+sig_alg_name.upper()+"/* For "+test_name+" */\n" + out_name += "\t&"+test_name+"_test_case,\n" + out_name += "#endif /* WITH_HASH_"+hashfunc_name+" for "+test_name+" */\n" + out_name += "#endif /* WITH_CURVE_"+curve.name+" for "+test_name+" */\n" + out_name += "#endif /* WITH_SIG_"+sig_alg_name+" for "+test_name+" */\n" + out_name += "#endif /* USE_ISO14888_3_ECRDSA */"+"/* For "+test_name+" */" + output_list.append((out_name, out_vectors)) + + return output_list + +def gen_self_tests(curve, num): + global curr_test + curr_test = 0 + total_gen_tests = len(all_hash_funcs) * len(all_sig_algs) + vectors = [[ gen_self_test(curve, hashf, sign, verify, genkp, num, hash_name, sig_alg_name, total_gen_tests) + for (hashf, hash_name) in all_hash_funcs ] for (sign, verify, genkp, sig_alg_name) in all_sig_algs ] + return vectors + +########################################################## +### ASN.1 stuff +def parse_DER_extract_size(derbuf): + # Extract the size + if ord(derbuf[0]) & 0x80 != 0: + encoding_len_bytes = ord(derbuf[0]) & ~0x80 + # Skip + base = 1 + else: + encoding_len_bytes = 1 + base = 0 + if len(derbuf) < encoding_len_bytes+1: + return (False, 0, 0) + else: + length = stringtoint(derbuf[base:base+encoding_len_bytes]) + if len(derbuf) < length+encoding_len_bytes: + return (False, 0, 0) + else: + return (True, encoding_len_bytes+base, length) + +def extract_DER_object(derbuf, object_tag): + # Check type + if ord(derbuf[0]) != object_tag: + # Not the type we expect ... + return (False, 0, "") + else: + derbuf = derbuf[1:] + # Extract the size + (check, encoding_len, size) = parse_DER_extract_size(derbuf) + if check == False: + return (False, 0, "") + else: + if len(derbuf) < encoding_len + size: + return (False, 0, "") + else: + return (True, size+encoding_len+1, derbuf[encoding_len:encoding_len+size]) + +def extract_DER_sequence(derbuf): + return extract_DER_object(derbuf, 0x30) + +def extract_DER_integer(derbuf): + return extract_DER_object(derbuf, 0x02) + +def extract_DER_octetstring(derbuf): + return extract_DER_object(derbuf, 0x04) + +def extract_DER_bitstring(derbuf): + return extract_DER_object(derbuf, 0x03) + +def extract_DER_oid(derbuf): + return extract_DER_object(derbuf, 0x06) + +# See ECParameters sequence in RFC 3279 +def parse_DER_ECParameters(derbuf): + # XXX: this is a very ugly way of extracting the information + # regarding an EC curve, but since the ASN.1 structure is quite + # "static", this might be sufficient without embedding a full + # ASN.1 parser ... + # Default return (a, b, prime, order, cofactor, gx, gy) + default_ret = (0, 0, 0, 0, 0, 0, 0) + # Get ECParameters wrapping sequence + (check, size_ECParameters, ECParameters) = extract_DER_sequence(derbuf) + if check == False: + return (False, default_ret) + # Get integer + (check, size_ECPVer, ECPVer) = extract_DER_integer(ECParameters) + if check == False: + return (False, default_ret) + # Get sequence + (check, size_FieldID, FieldID) = extract_DER_sequence(ECParameters[size_ECPVer:]) + if check == False: + return (False, default_ret) + # Get OID + (check, size_Oid, Oid) = extract_DER_oid(FieldID) + if check == False: + return (False, default_ret) + # Does the OID correspond to a prime field? + if(Oid != "\x2A\x86\x48\xCE\x3D\x01\x01"): + print("DER parse error: only prime fields are supported ...") + return (False, default_ret) + # Get prime p of prime field + (check, size_P, P) = extract_DER_integer(FieldID[size_Oid:]) + if check == False: + return (False, default_ret) + # Get curve (sequence) + (check, size_Curve, Curve) = extract_DER_sequence(ECParameters[size_ECPVer+size_FieldID:]) + if check == False: + return (False, default_ret) + # Get A in curve + (check, size_A, A) = extract_DER_octetstring(Curve) + if check == False: + return (False, default_ret) + # Get B in curve + (check, size_B, B) = extract_DER_octetstring(Curve[size_A:]) + if check == False: + return (False, default_ret) + # Get ECPoint + (check, size_ECPoint, ECPoint) = extract_DER_octetstring(ECParameters[size_ECPVer+size_FieldID+size_Curve:]) + if check == False: + return (False, default_ret) + # Get Order + (check, size_Order, Order) = extract_DER_integer(ECParameters[size_ECPVer+size_FieldID+size_Curve+size_ECPoint:]) + if check == False: + return (False, default_ret) + # Get Cofactor + (check, size_Cofactor, Cofactor) = extract_DER_integer(ECParameters[size_ECPVer+size_FieldID+size_Curve+size_ECPoint+size_Order:]) + if check == False: + return (False, default_ret) + # If we end up here, everything is OK, we can extract all our elements + prime = stringtoint(P) + a = stringtoint(A) + b = stringtoint(B) + order = stringtoint(Order) + cofactor = stringtoint(Cofactor) + # Extract Gx and Gy, see X9.62-1998 + if len(ECPoint) < 1: + return (False, default_ret) + ECPoint_type = ord(ECPoint[0]) + if (ECPoint_type == 0x04) or (ECPoint_type == 0x06) or (ECPoint_type == 0x07): + # Uncompressed and hybrid points + if len(ECPoint[1:]) % 2 != 0: + return (False, default_ret) + ECPoint = ECPoint[1:] + gx = stringtoint(ECPoint[:int(len(ECPoint)/2)]) + gy = stringtoint(ECPoint[int(len(ECPoint)/2):]) + elif (ECPoint_type == 0x02) or (ECPoint_type == 0x03): + # Compressed point: uncompress it, see X9.62-1998 section 4.2.1 + ECPoint = ECPoint[1:] + gx = stringtoint(ECPoint) + alpha = (pow(gx, 3, prime) + (a * gx) + b) % prime + beta = mod_sqrt(alpha, prime) + if (beta == None) or ((beta == 0) and (alpha != 0)): + return (False, 0) + if (beta & 0x1) == (ECPoint_type & 0x1): + gy = beta + else: + gy = prime - beta + else: + print("DER parse error: hybrid points are unsupported!") + return (False, default_ret) + return (True, (a, b, prime, order, cofactor, gx, gy)) + +########################################################## +### Text and format helpers +def bigint_to_C_array(bint, size): + """ + Format a python big int to a C hex array + """ + hexstr = format(int(bint), 'x') + # Left pad to the size! + hexstr = ("0"*int((2*size)-len(hexstr)))+hexstr + hexstr = ("0"*(len(hexstr) % 2))+hexstr + out_str = "{\n" + for i in range(0, len(hexstr) - 1, 2): + if (i%16 == 0): + if(i!=0): + out_str += "\n" + out_str += "\t" + out_str += "0x"+hexstr[i:i+2]+", " + out_str += "\n};\n" + return out_str + +def check_in_file(fname, pat): + # See if the pattern is in the file. + with open(fname) as f: + if not any(re.search(pat, line) for line in f): + return False # pattern does not occur in file so we are done. + else: + return True + +def num_patterns_in_file(fname, pat): + num_pat = 0 + with open(fname) as f: + for line in f: + if re.search(pat, line): + num_pat = num_pat+1 + return num_pat + +def file_replace_pattern(fname, pat, s_after): + # first, see if the pattern is even in the file. + with open(fname) as f: + if not any(re.search(pat, line) for line in f): + return # pattern does not occur in file so we are done. + + # pattern is in the file, so perform replace operation. + with open(fname) as f: + out_fname = fname + ".tmp" + out = open(out_fname, "w") + for line in f: + out.write(re.sub(pat, s_after, line)) + out.close() + os.rename(out_fname, fname) + +def file_remove_pattern(fname, pat): + # first, see if the pattern is even in the file. + with open(fname) as f: + if not any(re.search(pat, line) for line in f): + return # pattern does not occur in file so we are done. + + # pattern is in the file, so perform remove operation. + with open(fname) as f: + out_fname = fname + ".tmp" + out = open(out_fname, "w") + for line in f: + if not re.search(pat, line): + out.write(line) + out.close() + + if os.path.exists(fname): + remove_file(fname) + os.rename(out_fname, fname) + +def remove_file(fname): + # Remove file + os.remove(fname) + +def remove_files_pattern(fpattern): + [remove_file(x) for x in glob.glob(fpattern)] + +def buffer_remove_pattern(buff, pat): + if is_python_2() == False: + buff = buff.decode('latin-1') + if re.search(pat, buff) == None: + return (False, buff) # pattern does not occur in file so we are done. + # Remove the pattern + buff = re.sub(pat, "", buff) + return (True, buff) + +def is_base64(s): + s = ''.join([s.strip() for s in s.split("\n")]) + try: + enc = base64.b64encode(base64.b64decode(s)).strip() + if type(enc) is bytes: + return enc == s.encode('latin-1') + else: + return enc == s + except TypeError: + return False + +### Curve helpers +def export_curve_int(curvename, intname, bigint, size): + if bigint == None: + out = "static const u8 "+curvename+"_"+intname+"[] = {\n\t0x00,\n};\n" + out += "TO_EC_STR_PARAM_FIXED_SIZE("+curvename+"_"+intname+", 0);\n\n" + else: + out = "static const u8 "+curvename+"_"+intname+"[] = "+bigint_to_C_array(bigint, size)+"\n" + out += "TO_EC_STR_PARAM("+curvename+"_"+intname+");\n\n" + return out + +def export_curve_string(curvename, stringname, stringvalue): + out = "static const u8 "+curvename+"_"+stringname+"[] = \""+stringvalue+"\";\n" + out += "TO_EC_STR_PARAM("+curvename+"_"+stringname+");\n\n" + return out + +def export_curve_struct(curvename, paramname, paramnamestr): + return "\t."+paramname+" = &"+curvename+"_"+paramnamestr+"_str_param, \n" + +def curve_params(name, prime, pbitlen, a, b, gx, gy, order, cofactor, oid, alpha_montgomery, gamma_montgomery, alpha_edwards): + """ + Take as input some elliptic curve parameters and generate the + C parameters in a string + """ + bytesize = int(pbitlen / 8) + if pbitlen % 8 != 0: + bytesize += 1 + # Compute the rounded word size for each word size + if bytesize % 8 != 0: + wordsbitsize64 = 8*((int(bytesize/8)+1)*8) + else: + wordsbitsize64 = 8*bytesize + if bytesize % 4 != 0: + wordsbitsize32 = 8*((int(bytesize/4)+1)*4) + else: + wordsbitsize32 = 8*bytesize + if bytesize % 2 != 0: + wordsbitsize16 = 8*((int(bytesize/2)+1)*2) + else: + wordsbitsize16 = 8*bytesize + # Compute some parameters + (r64, r_square64, mpinv64) = compute_monty_coef(prime, wordsbitsize64, 64) + (r32, r_square32, mpinv32) = compute_monty_coef(prime, wordsbitsize32, 32) + (r16, r_square16, mpinv16) = compute_monty_coef(prime, wordsbitsize16, 16) + # Compute p_reciprocal for each word size + (pshift64, primenorm64, p_reciprocal64) = compute_div_coef(prime, wordsbitsize64, 64) + (pshift32, primenorm32, p_reciprocal32) = compute_div_coef(prime, wordsbitsize32, 32) + (pshift16, primenorm16, p_reciprocal16) = compute_div_coef(prime, wordsbitsize16, 16) + # Compute the number of points on the curve + npoints = order * cofactor + + # Now output the parameters + ec_params_string = "#include \n" + ec_params_string += "#ifdef WITH_CURVE_"+name.upper()+"\n\n" + ec_params_string += "#ifndef __EC_PARAMS_"+name.upper()+"_H__\n" + ec_params_string += "#define __EC_PARAMS_"+name.upper()+"_H__\n" + ec_params_string += "#include \n" + ec_params_string += export_curve_int(name, "p", prime, bytesize) + + ec_params_string += "#define CURVE_"+name.upper()+"_P_BITLEN "+str(pbitlen)+"\n" + ec_params_string += export_curve_int(name, "p_bitlen", pbitlen, getbytelen(pbitlen)) + + ec_params_string += "#if (WORD_BYTES == 8) /* 64-bit words */\n" + ec_params_string += export_curve_int(name, "r", r64, getbytelen(r64)) + ec_params_string += export_curve_int(name, "r_square", r_square64, getbytelen(r_square64)) + ec_params_string += export_curve_int(name, "mpinv", mpinv64, getbytelen(mpinv64)) + ec_params_string += export_curve_int(name, "p_shift", pshift64, getbytelen(pshift64)) + ec_params_string += export_curve_int(name, "p_normalized", primenorm64, getbytelen(primenorm64)) + ec_params_string += export_curve_int(name, "p_reciprocal", p_reciprocal64, getbytelen(p_reciprocal64)) + ec_params_string += "#elif (WORD_BYTES == 4) /* 32-bit words */\n" + ec_params_string += export_curve_int(name, "r", r32, getbytelen(r32)) + ec_params_string += export_curve_int(name, "r_square", r_square32, getbytelen(r_square32)) + ec_params_string += export_curve_int(name, "mpinv", mpinv32, getbytelen(mpinv32)) + ec_params_string += export_curve_int(name, "p_shift", pshift32, getbytelen(pshift32)) + ec_params_string += export_curve_int(name, "p_normalized", primenorm32, getbytelen(primenorm32)) + ec_params_string += export_curve_int(name, "p_reciprocal", p_reciprocal32, getbytelen(p_reciprocal32)) + ec_params_string += "#elif (WORD_BYTES == 2) /* 16-bit words */\n" + ec_params_string += export_curve_int(name, "r", r16, getbytelen(r16)) + ec_params_string += export_curve_int(name, "r_square", r_square16, getbytelen(r_square16)) + ec_params_string += export_curve_int(name, "mpinv", mpinv16, getbytelen(mpinv16)) + ec_params_string += export_curve_int(name, "p_shift", pshift16, getbytelen(pshift16)) + ec_params_string += export_curve_int(name, "p_normalized", primenorm16, getbytelen(primenorm16)) + ec_params_string += export_curve_int(name, "p_reciprocal", p_reciprocal16, getbytelen(p_reciprocal16)) + ec_params_string += "#else /* unknown word size */\n" + ec_params_string += "#error \"Unsupported word size\"\n" + ec_params_string += "#endif\n\n" + + ec_params_string += export_curve_int(name, "a", a, bytesize) + ec_params_string += export_curve_int(name, "b", b, bytesize) + + curve_order_bitlen = getbitlen(npoints) + ec_params_string += "#define CURVE_"+name.upper()+"_CURVE_ORDER_BITLEN "+str(curve_order_bitlen)+"\n" + ec_params_string += export_curve_int(name, "curve_order", npoints, getbytelen(npoints)) + + ec_params_string += export_curve_int(name, "gx", gx, bytesize) + ec_params_string += export_curve_int(name, "gy", gy, bytesize) + ec_params_string += export_curve_int(name, "gz", 0x01, bytesize) + + qbitlen = getbitlen(order) + + ec_params_string += export_curve_int(name, "gen_order", order, getbytelen(order)) + ec_params_string += "#define CURVE_"+name.upper()+"_Q_BITLEN "+str(qbitlen)+"\n" + ec_params_string += export_curve_int(name, "gen_order_bitlen", qbitlen, getbytelen(qbitlen)) + + ec_params_string += export_curve_int(name, "cofactor", cofactor, getbytelen(cofactor)) + + ec_params_string += export_curve_int(name, "alpha_montgomery", alpha_montgomery, getbytelen(alpha_montgomery)) + ec_params_string += export_curve_int(name, "gamma_montgomery", gamma_montgomery, getbytelen(gamma_montgomery)) + ec_params_string += export_curve_int(name, "alpha_edwards", alpha_edwards, getbytelen(alpha_edwards)) + + ec_params_string += export_curve_string(name, "name", name.upper()); + + if oid == None: + oid = "" + ec_params_string += export_curve_string(name, "oid", oid); + + ec_params_string += "static const ec_str_params "+name+"_str_params = {\n"+\ + export_curve_struct(name, "p", "p") +\ + export_curve_struct(name, "p_bitlen", "p_bitlen") +\ + export_curve_struct(name, "r", "r") +\ + export_curve_struct(name, "r_square", "r_square") +\ + export_curve_struct(name, "mpinv", "mpinv") +\ + export_curve_struct(name, "p_shift", "p_shift") +\ + export_curve_struct(name, "p_normalized", "p_normalized") +\ + export_curve_struct(name, "p_reciprocal", "p_reciprocal") +\ + export_curve_struct(name, "a", "a") +\ + export_curve_struct(name, "b", "b") +\ + export_curve_struct(name, "curve_order", "curve_order") +\ + export_curve_struct(name, "gx", "gx") +\ + export_curve_struct(name, "gy", "gy") +\ + export_curve_struct(name, "gz", "gz") +\ + export_curve_struct(name, "gen_order", "gen_order") +\ + export_curve_struct(name, "gen_order_bitlen", "gen_order_bitlen") +\ + export_curve_struct(name, "cofactor", "cofactor") +\ + export_curve_struct(name, "alpha_montgomery", "alpha_montgomery") +\ + export_curve_struct(name, "gamma_montgomery", "gamma_montgomery") +\ + export_curve_struct(name, "alpha_edwards", "alpha_edwards") +\ + export_curve_struct(name, "oid", "oid") +\ + export_curve_struct(name, "name", "name") + ec_params_string += "};\n\n" + + ec_params_string += "/*\n"+\ + " * Compute max bit length of all curves for p and q\n"+\ + " */\n"+\ + "#ifndef CURVES_MAX_P_BIT_LEN\n"+\ + "#define CURVES_MAX_P_BIT_LEN 0\n"+\ + "#endif\n"+\ + "#if (CURVES_MAX_P_BIT_LEN < CURVE_"+name.upper()+"_P_BITLEN)\n"+\ + "#undef CURVES_MAX_P_BIT_LEN\n"+\ + "#define CURVES_MAX_P_BIT_LEN CURVE_"+name.upper()+"_P_BITLEN\n"+\ + "#endif\n"+\ + "#ifndef CURVES_MAX_Q_BIT_LEN\n"+\ + "#define CURVES_MAX_Q_BIT_LEN 0\n"+\ + "#endif\n"+\ + "#if (CURVES_MAX_Q_BIT_LEN < CURVE_"+name.upper()+"_Q_BITLEN)\n"+\ + "#undef CURVES_MAX_Q_BIT_LEN\n"+\ + "#define CURVES_MAX_Q_BIT_LEN CURVE_"+name.upper()+"_Q_BITLEN\n"+\ + "#endif\n"+\ + "#ifndef CURVES_MAX_CURVE_ORDER_BIT_LEN\n"+\ + "#define CURVES_MAX_CURVE_ORDER_BIT_LEN 0\n"+\ + "#endif\n"+\ + "#if (CURVES_MAX_CURVE_ORDER_BIT_LEN < CURVE_"+name.upper()+"_CURVE_ORDER_BITLEN)\n"+\ + "#undef CURVES_MAX_CURVE_ORDER_BIT_LEN\n"+\ + "#define CURVES_MAX_CURVE_ORDER_BIT_LEN CURVE_"+name.upper()+"_CURVE_ORDER_BITLEN\n"+\ + "#endif\n\n" + + ec_params_string += "/*\n"+\ + " * Compute and adapt max name and oid length\n"+\ + " */\n"+\ + "#ifndef MAX_CURVE_OID_LEN\n"+\ + "#define MAX_CURVE_OID_LEN 0\n"+\ + "#endif\n"+\ + "#ifndef MAX_CURVE_NAME_LEN\n"+\ + "#define MAX_CURVE_NAME_LEN 0\n"+\ + "#endif\n"+\ + "#if (MAX_CURVE_OID_LEN < "+str(len(oid)+1)+")\n"+\ + "#undef MAX_CURVE_OID_LEN\n"+\ + "#define MAX_CURVE_OID_LEN "+str(len(oid)+1)+"\n"+\ + "#endif\n"+\ + "#if (MAX_CURVE_NAME_LEN < "+str(len(name.upper())+1)+")\n"+\ + "#undef MAX_CURVE_NAME_LEN\n"+\ + "#define MAX_CURVE_NAME_LEN "+str(len(name.upper())+1)+"\n"+\ + "#endif\n\n" + + ec_params_string += "#endif /* __EC_PARAMS_"+name.upper()+"_H__ */\n\n"+"#endif /* WITH_CURVE_"+name.upper()+" */\n" + + return ec_params_string + +def usage(): + print("This script is intented to *statically* expand the ECC library with user defined curves.") + print("By statically we mean that the source code of libecc is expanded with new curves parameters through") + print("automatic code generation filling place holders in the existing code base of the library. Though the") + print("choice of static code generation versus dynamic curves import (such as what OpenSSL does) might be") + print("argued, this choice has been driven by simplicity and security design decisions: we want libecc to have") + print("all its parameters (such as memory consumption) set at compile time and statically adapted to the curves.") + print("Since libecc only supports curves over prime fields, the script can only add this kind of curves.") + print("This script implements elliptic curves and ISO signature algorithms from scratch over Python's multi-precision") + print("big numbers library. Addition and doubling over curves use naive formulas. Please DO NOT use the functions of this") + print("script for production code: they are not securely implemented and are very inefficient. Their only purpose is to expand") + print("libecc and produce test vectors.") + print("") + print("In order to add a curve, there are two ways:") + print("Adding a user defined curve with explicit parameters:") + print("-----------------------------------------------------") + print(sys.argv[0]+" --name=\"YOURCURVENAME\" --prime=... --order=... --a=... --b=... --gx=... --gy=... --cofactor=... --oid=THEOID") + print("\t> name: name of the curve in the form of a string") + print("\t> prime: prime number representing the curve prime field") + print("\t> order: prime number representing the generator order") + print("\t> cofactor: cofactor of the curve") + print("\t> a: 'a' coefficient of the short Weierstrass equation of the curve") + print("\t> b: 'b' coefficient of the short Weierstrass equation of the curve") + print("\t> gx: x coordinate of the generator G") + print("\t> gy: y coordinate of the generator G") + print("\t> oid: optional OID of the curve") + print(" Notes:") + print(" ******") + print("\t1) These elements are verified to indeed satisfy the curve equation.") + print("\t2) All the numbers can be given either in decimal or hexadecimal format with a prepending '0x'.") + print("\t3) The script automatically generates all the necessary files for the curve to be included in the library." ) + print("\tYou will find the new curve definition in the usual 'lib_ecc_config.h' file (one can activate it or not at compile time).") + print("") + print("Adding a user defined curve through RFC3279 ASN.1 parameters:") + print("-------------------------------------------------------------") + print(sys.argv[0]+" --name=\"YOURCURVENAME\" --ECfile=... --oid=THEOID") + print("\t> ECfile: the DER or PEM encoded file containing the curve parameters (see RFC3279)") + print(" Notes:") + print("\tCurve parameters encoded in DER or PEM format can be generated with tools like OpenSSL (among others). As an illustrative example,") + print("\tone can list all the supported curves under OpenSSL with:") + print("\t $ openssl ecparam -list_curves") + print("\tOnly the listed so called \"prime\" curves are supported. Then, one can extract an explicit curve representation in ASN.1") + print("\tas defined in RFC3279, for example for BRAINPOOLP320R1:") + print("\t $ openssl ecparam -param_enc explicit -outform DER -name brainpoolP320r1 -out brainpoolP320r1.der") + print("") + print("Removing user defined curves:") + print("-----------------------------") + print("\t*All the user defined curves can be removed with the --remove-all toggle.") + print("\t*A specific named user define curve can be removed with the --remove toggle: in this case the --name option is used to ") + print("\tlocate which named curve must be deleted.") + print("") + print("Test vectors:") + print("-------------") + print("\tTest vectors can be automatically generated and added to the library self tests when providing the --add-test-vectors=X toggle.") + print("\tIn this case, X test vectors will be generated for *each* (curve, sign algorithm, hash algorithm) 3-uplet (beware of combinatorial") + print("\tissues when X is big!). These tests are transparently added and compiled with the self tests.") + return + +def get_int(instring): + if len(instring) == 0: + return 0 + if len(instring) >= 2: + if instring[:2] == "0x": + return int(instring, 16) + return int(instring) + +def parse_cmd_line(args): + """ + Get elliptic curve parameters from command line + """ + name = oid = prime = a = b = gx = gy = g = order = cofactor = ECfile = remove = remove_all = add_test_vectors = None + alpha_montgomery = gamma_montgomery = alpha_edwards = None + try: + opts, args = getopt.getopt(sys.argv[1:], ":h", ["help", "remove", "remove-all", "name=", "prime=", "a=", "b=", "generator=", "gx=", "gy=", "order=", "cofactor=", "alpha_montgomery=","gamma_montgomery=", "alpha_edwards=", "ECfile=", "oid=", "add-test-vectors="]) + except getopt.GetoptError as err: + # print help information and exit: + print(err) # will print something like "option -a not recognized" + usage() + return False + for o, arg in opts: + if o in ("-h", "--help"): + usage() + return True + elif o in ("--name"): + name = arg + # Prepend the custom string before name to avoid any collision + name = "user_defined_"+name + # Replace any unwanted name char + name = re.sub("\-", "_", name) + elif o in ("--oid="): + oid = arg + elif o in ("--prime"): + prime = get_int(arg.replace(' ', '')) + elif o in ("--a"): + a = get_int(arg.replace(' ', '')) + elif o in ("--b"): + b = get_int(arg.replace(' ', '')) + elif o in ("--gx"): + gx = get_int(arg.replace(' ', '')) + elif o in ("--gy"): + gy = get_int(arg.replace(' ', '')) + elif o in ("--generator"): + g = arg.replace(' ', '') + elif o in ("--order"): + order = get_int(arg.replace(' ', '')) + elif o in ("--cofactor"): + cofactor = get_int(arg.replace(' ', '')) + elif o in ("--alpha_montgomery"): + alpha_montgomery = get_int(arg.replace(' ', '')) + elif o in ("--gamma_montgomery"): + gamma_montgomery = get_int(arg.replace(' ', '')) + elif o in ("--alpha_edwards"): + alpha_edwards = get_int(arg.replace(' ', '')) + elif o in ("--remove"): + remove = True + elif o in ("--remove-all"): + remove_all = True + elif o in ("--add-test-vectors"): + add_test_vectors = get_int(arg.replace(' ', '')) + elif o in ("--ECfile"): + ECfile = arg + else: + print("unhandled option") + usage() + return False + + # File paths + script_path = os.path.abspath(os.path.dirname(sys.argv[0])) + "/" + ec_params_path = script_path + "../include/libecc/curves/user_defined/" + curves_list_path = script_path + "../include/libecc/curves/" + lib_ecc_types_path = script_path + "../include/libecc/" + lib_ecc_config_path = script_path + "../include/libecc/" + ec_self_tests_path = script_path + "../src/tests/" + meson_options_path = script_path + "../" + + # If remove is True, we have been asked to remove already existing user defined curves + if remove == True: + if name == None: + print("--remove option expects a curve name provided with --name") + return False + asked = "" + while asked != "y" and asked != "n": + asked = get_user_input("You asked to remove everything related to user defined "+name.replace("user_defined_", "")+" curve. Enter y to confirm, n to cancel [y/n]. ") + if asked == "n": + print("NOT removing curve "+name.replace("user_defined_", "")+" (cancelled).") + return True + # Remove any user defined stuff with given name + print("Removing user defined curve "+name.replace("user_defined_", "")+" ...") + if name == None: + print("Error: you must provide a curve name with --remove") + return False + file_remove_pattern(curves_list_path + "curves_list.h", ".*"+name+".*") + file_remove_pattern(curves_list_path + "curves_list.h", ".*"+name.upper()+".*") + file_remove_pattern(lib_ecc_types_path + "lib_ecc_types.h", ".*"+name.upper()+".*") + file_remove_pattern(lib_ecc_config_path + "lib_ecc_config.h", ".*"+name.upper()+".*") + file_remove_pattern(ec_self_tests_path + "ec_self_tests_core.h", ".*"+name+".*") + file_remove_pattern(ec_self_tests_path + "ec_self_tests_core.h", ".*"+name.upper()+".*") + file_remove_pattern(meson_options_path + "meson.options", ".*"+name.lower()+".*") + try: + remove_file(ec_params_path + "ec_params_"+name+".h") + except: + print("Error: curve name "+name+" does not seem to be present in the sources!") + return False + try: + remove_file(ec_self_tests_path + "ec_self_tests_core_"+name+".h") + except: + print("Warning: curve name "+name+" self tests do not seem to be present ...") + return True + return True + if remove_all == True: + asked = "" + while asked != "y" and asked != "n": + asked = get_user_input("You asked to remove everything related to ALL user defined curves. Enter y to confirm, n to cancel [y/n]. ") + if asked == "n": + print("NOT removing user defined curves (cancelled).") + return True + # Remove any user defined stuff with given name + print("Removing ALL user defined curves ...") + # Remove any user defined stuff (whatever name) + file_remove_pattern(curves_list_path + "curves_list.h", ".*user_defined.*") + file_remove_pattern(curves_list_path + "curves_list.h", ".*USER_DEFINED.*") + file_remove_pattern(lib_ecc_types_path + "lib_ecc_types.h", ".*USER_DEFINED.*") + file_remove_pattern(lib_ecc_config_path + "lib_ecc_config.h", ".*USER_DEFINED.*") + file_remove_pattern(ec_self_tests_path + "ec_self_tests_core.h", ".*USER_DEFINED.*") + file_remove_pattern(ec_self_tests_path + "ec_self_tests_core.h", ".*user_defined.*") + file_remove_pattern(meson_options_path + "meson.options", ".*user_defined.*") + remove_files_pattern(ec_params_path + "ec_params_user_defined_*.h") + remove_files_pattern(ec_self_tests_path + "ec_self_tests_core_user_defined_*.h") + return True + + # If a g is provided, split it in two gx and gy + if g != None: + if (len(g)/2)%2 == 0: + gx = get_int(g[:len(g)/2]) + gy = get_int(g[len(g)/2:]) + else: + # This is probably a generator encapsulated in a bit string + if g[0:2] != "04": + print("Error: provided generator g is not conforming!") + return False + else: + g = g[2:] + gx = get_int(g[:len(g)/2]) + gy = get_int(g[len(g)/2:]) + if ECfile != None: + # ASN.1 DER input incompatible with other options + if (prime != None) or (a != None) or (b != None) or (gx != None) or (gy != None) or (order != None) or (cofactor != None): + print("Error: option ECfile incompatible with explicit (prime, a, b, gx, gy, order, cofactor) options!") + return False + # We need at least a name + if (name == None): + print("Error: option ECfile needs a curve name!") + return False + # Open the file + try: + buf = open(ECfile, 'rb').read() + except: + print("Error: cannot open ECfile file "+ECfile) + return False + # Check if we have a PEM or a DER file + (check, derbuf) = buffer_remove_pattern(buf, "-----.*-----") + if (check == True): + # This a PEM file, proceed with base64 decoding + if(is_base64(derbuf) == False): + print("Error: error when decoding ECfile file "+ECfile+" (seems to be PEM, but failed to decode)") + return False + derbuf = base64.b64decode(derbuf) + (check, (a, b, prime, order, cofactor, gx, gy)) = parse_DER_ECParameters(derbuf) + if (check == False): + print("Error: error when parsing ECfile file "+ECfile+" (malformed or unsupported ASN.1)") + return False + + else: + if (prime == None) or (a == None) or (b == None) or (gx == None) or (gy == None) or (order == None) or (cofactor == None) or (name == None): + err_string = (prime == None)*"prime "+(a == None)*"a "+(b == None)*"b "+(gx == None)*"gx "+(gy == None)*"gy "+(order == None)*"order "+(cofactor == None)*"cofactor "+(name == None)*"name " + print("Error: missing "+err_string+" in explicit curve definition (name, prime, a, b, gx, gy, order, cofactor)!") + print("See the help with -h or --help") + return False + + # Some sanity checks here + # Check that prime is indeed a prime + if is_probprime(prime) == False: + print("Error: given prime is *NOT* prime!") + return False + if is_probprime(order) == False: + print("Error: given order is *NOT* prime!") + return False + if (a > prime) or (b > prime) or (gx > prime) or (gy > prime): + err_string = (a > prime)*"a "+(b > prime)*"b "+(gx > prime)*"gx "+(gy > prime)*"gy " + print("Error: "+err_string+"is > prime") + return False + # Check that the provided generator is on the curve + if pow(gy, 2, prime) != ((pow(gx, 3, prime) + (a*gx) + b) % prime): + print("Error: the given parameters (prime, a, b, gx, gy) do not verify the elliptic curve equation!") + return False + + # Check Montgomery and Edwards transfer coefficients + if ((alpha_montgomery != None) and (gamma_montgomery == None)) or ((alpha_montgomery == None) and (gamma_montgomery != None)): + print("Error: alpha_montgomery and gamma_montgomery must be both defined if used!") + return False + if (alpha_edwards != None): + if (alpha_montgomery == None) or (gamma_montgomery == None): + print("Error: alpha_edwards needs alpha_montgomery and gamma_montgomery to be both defined if used!") + return False + + # Now that we have our parameters, call the function to get bitlen + pbitlen = getbitlen(prime) + ec_params = curve_params(name, prime, pbitlen, a, b, gx, gy, order, cofactor, oid, alpha_montgomery, gamma_montgomery, alpha_edwards) + # Check if there is a name collision somewhere + if os.path.exists(ec_params_path + "ec_params_"+name+".h") == True : + print("Error: file %s already exists!" % (ec_params_path + "ec_params_"+name+".h")) + return False + if (check_in_file(curves_list_path + "curves_list.h", "ec_params_"+name+"_str_params") == True) or (check_in_file(curves_list_path + "curves_list.h", "WITH_CURVE_"+name.upper()+"\n") == True) or (check_in_file(lib_ecc_types_path + "lib_ecc_types.h", "WITH_CURVE_"+name.upper()+"\n") == True): + print("Error: name %s already exists in files" % ("ec_params_"+name)) + return False + # Create a new file with the parameters + if not os.path.exists(ec_params_path): + # Create the "user_defined" folder if it does not exist + os.mkdir(ec_params_path) + f = open(ec_params_path + "ec_params_"+name+".h", 'w') + f.write(ec_params) + f.close() + # Include the file in curves_list.h + magic = "ADD curves header here" + magic_re = "\/\* "+magic+" \*\/" + magic_back = "/* "+magic+" */" + file_replace_pattern(curves_list_path + "curves_list.h", magic_re, "#include \n"+magic_back) + # Add the curve mapping + magic = "ADD curves mapping here" + magic_re = "\/\* "+magic+" \*\/" + magic_back = "/* "+magic+" */" + file_replace_pattern(curves_list_path + "curves_list.h", magic_re, "#ifdef WITH_CURVE_"+name.upper()+"\n\t{ .type = "+name.upper()+", .params = &"+name+"_str_params },\n#endif /* WITH_CURVE_"+name.upper()+" */\n"+magic_back) + # Add the new curve type in the enum + # First we get the number of already defined curves so that we increment the enum counter + num_with_curve = num_patterns_in_file(lib_ecc_types_path + "lib_ecc_types.h", "#ifdef WITH_CURVE_") + magic = "ADD curves type here" + magic_re = "\/\* "+magic+" \*\/" + magic_back = "/* "+magic+" */" + file_replace_pattern(lib_ecc_types_path + "lib_ecc_types.h", magic_re, "#ifdef WITH_CURVE_"+name.upper()+"\n\t"+name.upper()+" = "+str(num_with_curve+1)+",\n#endif /* WITH_CURVE_"+name.upper()+" */\n"+magic_back) + # Add the new curve define in the config + magic = "ADD curves define here" + magic_re = "\/\* "+magic+" \*\/" + magic_back = "/* "+magic+" */" + file_replace_pattern(lib_ecc_config_path + "lib_ecc_config.h", magic_re, "#define WITH_CURVE_"+name.upper()+"\n"+magic_back) + # Add the new curve meson option in the meson.options file + magic = "ADD curves meson option here" + magic_re = "# " + magic + magic_back = "# " + magic + file_replace_pattern(meson_options_path + "meson.options", magic_re, "\t'"+name.lower()+"',\n"+magic_back) + + # Do we need to add some test vectors? + if add_test_vectors != None: + print("Test vectors generation asked: this can take some time! Please wait ...") + # Create curve + c = Curve(a, b, prime, order, cofactor, gx, gy, cofactor * order, name, oid) + # Generate key pair for the algorithm + vectors = gen_self_tests(c, add_test_vectors) + # Iterate through all the tests + f = open(ec_self_tests_path + "ec_self_tests_core_"+name+".h", 'w') + for l in vectors: + for v in l: + for case in v: + (case_name, case_vector) = case + # Add the new test case + magic = "ADD curve test case here" + magic_re = "\/\* "+magic+" \*\/" + magic_back = "/* "+magic+" */" + file_replace_pattern(ec_self_tests_path + "ec_self_tests_core.h", magic_re, case_name+"\n"+magic_back) + # Create/Increment the header file + f.write(case_vector) + f.close() + # Add the new test cases header + magic = "ADD curve test vectors header here" + magic_re = "\/\* "+magic+" \*\/" + magic_back = "/* "+magic+" */" + file_replace_pattern(ec_self_tests_path + "ec_self_tests_core.h", magic_re, "#include \"ec_self_tests_core_"+name+".h\"\n"+magic_back) + return True + + +#### Main +if __name__ == "__main__": + signal.signal(signal.SIGINT, handler) + parse_cmd_line(sys.argv[1:]) diff --git a/crypto/libecc/scripts/gen_curves_tests.sh b/crypto/libecc/scripts/gen_curves_tests.sh new file mode 100644 --- /dev/null +++ b/crypto/libecc/scripts/gen_curves_tests.sh @@ -0,0 +1,89 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#!/bin/sh + +# Find a suitable python command if none has been provided +if [ -z "$PYTHON" ] +then + echo "Looking for suitable python and deps" + # Try to guess which python we want to use depending on the installed + # packages. We need Pyscard, Crypto, and IntelHex + for i in python python3 python2; do + if [ -x "`which $i`" ]; then + echo "Found and using python=$i" + PYTHON=$i + break + fi + done +else + echo "Using user provided python=$PYTHON" +fi +if [ -z "$PYTHON" ]; then + echo "Failed to find working python cmd!" >&2 + exit +fi + +# Get the expand_libecc python script path +BASEDIR=$(dirname "$0") +EXPAND_LIBECC=$BASEDIR/expand_libecc.py + +# SECP192R1 +echo "SECP192R1" +$PYTHON $EXPAND_LIBECC --name="SECP192R1" --prime=6277101735386680763835789423207666416083908700390324961279 --a=6277101735386680763835789423207666416083908700390324961276 --b=2455155546008943817740293915197451784769108058161191238065 --gx=602046282375688656758213480587526111916698976636884684818 --gy=174050332293622031404857552280219410364023488927386650641 --order=6277101735386680763835789423176059013767194773182842284081 --cofactor=1 --add-test-vectors=2 + +# SECP224R1 +echo "SECP224R1" +$PYTHON $EXPAND_LIBECC --name="SECP224R1" --prime=26959946667150639794667015087019630673557916260026308143510066298881 --a=26959946667150639794667015087019630673557916260026308143510066298878 --b=18958286285566608000408668544493926415504680968679321075787234672564 --gx=19277929113566293071110308034699488026831934219452440156649784352033 --gy=19926808758034470970197974370888749184205991990603949537637343198772 --order=26959946667150639794667015087019625940457807714424391721682722368061 --cofactor=1 --add-test-vectors=2 + +# SECP256R1 +echo "SECP256R1" +$PYTHON $EXPAND_LIBECC --name="SECP256R1" --prime=115792089210356248762697446949407573530086143415290314195533631308867097853951 --a=115792089210356248762697446949407573530086143415290314195533631308867097853948 --b=41058363725152142129326129780047268409114441015993725554835256314039467401291 --gx=48439561293906451759052585252797914202762949526041747995844080717082404635286 --gy=36134250956749795798585127919587881956611106672985015071877198253568414405109 --order=115792089210356248762697446949407573529996955224135760342422259061068512044369 --cofactor=1 --add-test-vectors=2 + +# SECP384R1 +echo "SECP384R1" +$PYTHON $EXPAND_LIBECC --name="SECP384R1" --prime=39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319 --a=39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112316 --b=27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575 --gx=26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087 --gy=8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871 --order=39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643 --cofactor=1 --add-test-vectors=2 + +# SECP521R1 +echo "SECP521R1" +$PYTHON $EXPAND_LIBECC --name="SECP521R1" --prime=6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151 --a=6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057148 --b=1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984 --gx=2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846 --gy=3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784 --order=6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449 --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL160R1 +echo "BRAINPOOL160R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL160R1" --prime=1332297598440044874827085558802491743757193798159 --a=0x340E7BE2A280EB74E2BE61BADA745D97E8F7C300 --b=0x1E589A8595423412134FAA2DBDEC95C8D8675E58 --gx=0xBED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3 --gy=0x1667CB477A1A8EC338F94741669C976316DA6321 --order=0xE95E4A5F737059DC60DF5991D45029409E60FC09 --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL192R1 +echo "BRAINPOOL192R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL192R1" --prime=4781668983906166242955001894344923773259119655253013193367 --a=0x6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF --b=0x469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9 --gx=0xC0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6 --gy=0x14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F --order=0xC302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1 --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL224R1 +echo "BRAINPOOL224R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL224R1" --prime=22721622932454352787552537995910928073340732145944992304435472941311 --a=0x68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 --b=0x2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B --gx=0xD9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D --gy=0x58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD --order=0xD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL256R1 +echo "BRAINPOOL256R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL256R1" --prime=76884956397045344220809746629001649093037950200943055203735601445031516197751 --a=0x7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9 --b=0x26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6 --gx=0x8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262 --gy=0x547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997 --order=0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7 --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL320R1 +echo "BRAINPOOL320R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL320R1" --prime=1763593322239166354161909842446019520889512772719515192772960415288640868802149818095501499903527 --a=0x3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4 --b=0x520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6 --gx=0x43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E20611 --gy=0x14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1 --order=0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311 --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL384R1 +echo "BRAINPOOL384R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL384R1" --prime=21659270770119316173069236842332604979796116387017648600081618503821089934025961822236561982844534088440708417973331 --a=0x7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826 --b=0x4A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11 --gx=0x1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E --gy=0x8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315 --order=0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565 --cofactor=1 --add-test-vectors=2 + +# BRAINPOOL512R1 +echo "BRAINPOOL512R1" +$PYTHON $EXPAND_LIBECC --name="BRAINPOOL512R1" --prime=8948962207650232551656602815159153422162609644098354511344597187200057010413552439917934304191956942765446530386427345937963894309923928536070534607816947 --a=0x7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA --b=0x3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723 --gx=0x81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822 --gy=0x7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892 --order=0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069 --cofactor=1 --add-test-vectors=2 diff --git a/crypto/libecc/scripts/gen_openssl_curves_tests.sh b/crypto/libecc/scripts/gen_openssl_curves_tests.sh new file mode 100644 --- /dev/null +++ b/crypto/libecc/scripts/gen_openssl_curves_tests.sh @@ -0,0 +1,52 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#!/bin/sh + +CURVES=`openssl ecparam -list_curves | grep prime | cut -d':' -f1 | tr '\n' ' '` + +# Find a suitable python command if none has been provided +if [ -z "$PYTHON" ] +then + echo "Looking for suitable python and deps" + # Try to guess which python we want to use depending on the installed + # packages. We need Pyscard, Crypto, and IntelHex + for i in python python3 python2; do + if [ -x "`which $i`" ]; then + echo "Found and using python=$i" + PYTHON=$i + break + fi + done +else + echo "Using user provided python=$PYTHON" +fi + +if [ -z "$PYTHON" ]; then + echo "Failed to find working python cmd!" >&2 + exit +fi + +# Get the expand_libecc python script path +BASEDIR=$(dirname "$0") +EXPAND_LIBECC=$BASEDIR/expand_libecc.py + +for curve in $CURVES +do + echo "Adding $curve" + openssl ecparam -param_enc explicit -outform DER -name $curve -out "$curve".der + $PYTHON $EXPAND_LIBECC --name="$curve" --ECfile="$curve".der --add-test-vectors=2 + rm "$curve".der +done diff --git a/crypto/libecc/scripts/sha3.py b/crypto/libecc/scripts/sha3.py new file mode 100644 --- /dev/null +++ b/crypto/libecc/scripts/sha3.py @@ -0,0 +1,115 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +import struct, sys + +keccak_rc = [ + 0x0000000000000001, 0x0000000000008082, 0x800000000000808A, 0x8000000080008000, + 0x000000000000808B, 0x0000000080000001, 0x8000000080008081, 0x8000000000008009, + 0x000000000000008A, 0x0000000000000088, 0x0000000080008009, 0x000000008000000A, + 0x000000008000808B, 0x800000000000008B, 0x8000000000008089, 0x8000000000008003, + 0x8000000000008002, 0x8000000000000080, 0x000000000000800A, 0x800000008000000A, + 0x8000000080008081, 0x8000000000008080, 0x0000000080000001, 0x8000000080008008 +] + +keccak_rot = [ + [ 0, 36, 3, 41, 18 ], + [ 1, 44, 10, 45, 2 ], + [ 62, 6, 43, 15, 61 ], + [ 28, 55, 25, 21, 56 ], + [ 27, 20, 39, 8, 14 ], +] + +def is_python_2(): + if sys.version_info[0] < 3: + return True + else: + return False + +# Keccak function +def keccak_rotl(x, l): + return (((x << l) ^ (x >> (64 - l))) & (2**64-1)) + +def keccakround(bytestate, rc): + # Import little endian state + state = [0] * 25 + for i in range(0, 25): + to_unpack = ''.join(bytestate[(8*i):(8*i)+8]) + if is_python_2() == False: + to_unpack = to_unpack.encode('latin-1') + (state[i],) = struct.unpack(' +# * Arnaud EBALARD +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#!/bin/bash + +BASEDIR=$(dirname "$0") +EC_UTILS=$BASEDIR/../build/ec_utils + +# trap ctrl-c and call ctrl_c() +trap ctrl_c INT + +function ctrl_c() { + echo "** Trapped CTRL-C, cleaning ..." + rm -f test_key_public_key.bin test_key_private_key.bin test_key_private_key.h test_key_public_key.h signed_file.bin.signed + exit +} + +# Test ec_utils cases +curves=("FRP256V1" "SECP192R1" "SECP224R1" "SECP256R1" "SECP384R1" "SECP521R1" "BRAINPOOLP192R1" "BRAINPOOLP224R1" "BRAINPOOLP256R1" "BRAINPOOLP384R1" "BRAINPOOLP512R1" "GOST256" "GOST512" "SM2P256TEST" "SM2P256V1" "WEI25519" "WEI448" "GOST_R3410_2012_256_PARAMSETA" "SECP256K1") +signatures=("ECDSA" "ECKCDSA" "ECSDSA" "ECOSDSA" "ECFSDSA" "ECGDSA" "ECRDSA" "SM2" "EDDSA25519" "EDDSA25519CTX" "EDDSA25519PH" "EDDSA448" "EDDSA448PH" "DECDSA") +hashes=("SHA224" "SHA256" "SHA384" "SHA512" "SHA512_224" "SHA512_256" "SHA3_224" "SHA3_256" "SHA3_384" "SHA3_512" "SM3" "SHAKE256" "STREEBOG256" "STREEBOG512") + +for c in "${!curves[@]}" +do + for s in "${!signatures[@]}" + do + # Generate keys + # NOTE: EDDSA family only accepts WEI curves + if [[ "${signatures[s]}" == "EDDSA25519" || "${signatures[s]}" == "EDDSA25519CTX" || "${signatures[s]}" == "EDDSA25519PH" ]] + then + if [[ "${curves[c]}" != "WEI25519" ]] + then + continue + fi + fi + if [[ "${signatures[s]}" == "EDDSA448" || "${signatures[s]}" == "EDDSA448PH" ]] + then + if [[ "${curves[c]}" != "WEI448" ]] + then + continue + fi + fi + echo "===== ${curves[c]} ${signatures[s]}" + $EC_UTILS gen_keys ${curves[c]} ${signatures[s]} test_key || exit 0 + for h in "${!hashes[@]}" + do + if [[ "${signatures[s]}" == "EDDSA25519" || "${signatures[s]}" == "EDDSA25519CTX" || "${signatures[s]}" == "EDDSA25519PH" ]] + then + if [[ "${hashes[h]}" != "SHA512" ]] + then + continue + fi + fi + if [[ "${signatures[s]}" == "EDDSA448" || "${signatures[s]}" == "EDDSA448PH" ]] + then + if [[ "${hashes[h]}" != "SHAKE256" ]] + then + continue + fi + fi + echo "========= TESTING ${curves[c]} ${signatures[s]} ${hashes[h]}" + # Try to sign + $EC_UTILS sign ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_private_key.bin signed_file.bin.signed "ANCILLARY" || exit 0 + # Try to verify + $EC_UTILS verify ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_public_key.bin signed_file.bin.signed "ANCILLARY" || exit 0 + rm -f signed_file.bin.signed + # Try to "struct" sign + $EC_UTILS struct_sign ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_private_key.bin signed_file.bin.signed IMAGE_TYPE0 1337 "ANCILLARY" || exit 0 + # Try to "struct" verify + $EC_UTILS struct_verify ${curves[c]} ${signatures[s]} ${hashes[h]} signed_file.bin.signed test_key_public_key.bin "ANCILLARY" || exit 0 + rm -f signed_file.bin.signed + done + rm -f test_key_public_key.bin test_key_private_key.bin test_key_private_key.h test_key_public_key.h + done +done diff --git a/crypto/libecc/src/arithmetic_tests/Makefile b/crypto/libecc/src/arithmetic_tests/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/arithmetic_tests/Makefile @@ -0,0 +1,26 @@ +ROOT_DIR=../.. +BUILD_DIR=$(ROOT_DIR)/build +# NOTE: we do not want warnings to pollute our compilation ... +WNOERROR=1 +include $(ROOT_DIR)/common.mk + +BIN_CFLAGS += -I$(ROOT_DIR)/include/ -Wno-shadow -Wno-conversion -Wno-cast-align -Wno-unused-macros + +# Remove some false alarms +BIN_CFLAGS += -Wno-unused-but-set-variable -Wno-declaration-after-statement + +NUM_TESTS ?= 1000 + +all: bin tests + +bin: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DDEBUG -DWITH_STDLIB arithmetic_tests.c $(LIBARITH) $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) -o arithmetic_tests + +tests: bin + # Get the word size and maximum nn bit length + $(eval WORDSZ := $(shell ./arithmetic_tests -info | cut -d ' ' -f1)) + $(eval MAXBITS := $(shell ./arithmetic_tests -info | cut -d ' ' -f2)) + python2 arithmetic_tests_generator.py stdout $(WORDSZ) $(MAXBITS) $(NUM_TESTS) | ./arithmetic_tests + +clean: + @rm -f arithmetic_tests diff --git a/crypto/libecc/src/arithmetic_tests/arithmetic_tests.c b/crypto/libecc/src/arithmetic_tests/arithmetic_tests.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/arithmetic_tests/arithmetic_tests.c @@ -0,0 +1,1233 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +/* Include internal API as it is used in our tests */ +#include "../nn/nn_div.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WITH_ASSERT_BACKTRACE +#include +#include + +#define BACKTRACE_SIZE 4096 +static unsigned int backtrace_buffer_ptr = 0; +static char backtrace_buffer[BACKTRACE_SIZE]; + +/* assert trapping and backtracing */ +static void assert_signal_handler(int sig) +{ + if (sig != SIGINT) { + raise(sig); + } + /* Print the recorded backtrace */ + printf("**** BACKTRACE *****\n"); + printf("(from old to most recent calls)\n"); + printf("%s", backtrace_buffer); + exit(-1); +} + +#define ADD_TO_BACKTRACE(...) do {\ + int written_size;\ + written_size = snprintf(backtrace_buffer + backtrace_buffer_ptr, BACKTRACE_SIZE - 1 - backtrace_buffer_ptr, __VA_ARGS__);\ + backtrace_buffer_ptr += written_size;\ + if(backtrace_buffer_ptr >= BACKTRACE_SIZE - 1){\ + memset(backtrace_buffer, 0, sizeof(backtrace_buffer)-1);\ + backtrace_buffer_ptr = 0;\ + }\ +} while(0) +#else + +#define ADD_TO_BACKTRACE(...) do {\ +} while(0) + +#endif + +/* + * Import integer number (found in hexadecimal form in hbuf buffer + * of length hbuflen) into already allocated out_nn. hbuflen is + * expected to be of even size. out_nn parameter is expected to + * have a large enough storage space (i.e. hbuflen / 2) to hold + * imported number. + */ +static int nn_import_from_hexbuf(nn_t out_nn, const char *hbuf, u32 hbuflen) +{ + char buf[WORD_BYTES * 2 + 1]; + const char *start; + u32 wlen; + u32 k; + int ret; + + ret = nn_check_initialized(out_nn); EG(ret, err); + MUST_HAVE((hbuf != NULL), ret, err); + MUST_HAVE(((hbuflen / 2) / WORD_BYTES) == out_nn->wlen, ret, err); + + wlen = (hbuflen + WORD_BYTES - 1) / (2 * WORD_BYTES); + for (k = wlen; k > 0; k--) { + /* + * Copy current hex encoded word into null terminated + * scratch buffer + */ + memset(buf, 0, WORD_BYTES * 2 + 1); + start = hbuf + ((k - 1) * WORD_BYTES * 2); + memcpy(buf, start, WORD_BYTES * 2); + + /* Let strtoull() convert the value for us */ + out_nn->val[wlen - k] = strtoull(buf, NULL, 16); + } + + for (k = NN_MAX_WORD_LEN; k > wlen; k--) { + out_nn->val[k - 1] = 0; + } + +err: + return ret; +} + +#define DISPATCH_TABLE_MAGIC "FEEDBABE" +struct dispatch_table { + const char magic[sizeof(DISPATCH_TABLE_MAGIC)]; + const char *op_string; + const char *op_string_helper; + int (*fun) (const char *op, void **, int); +}; + +#define ADD_TO_DISPATCH_TABLE(fun, op_string, op_string_helper) \ + static const struct dispatch_table entry_##fun \ + ATTRIBUTE_SECTION("tests_dispatch_table_section") ATTRIBUTE_USED = \ + { DISPATCH_TABLE_MAGIC, op_string, op_string_helper, fun }; + +#define FIND_IN_DISPATCH_TABLE(op, to_find, type) do {\ + extern struct dispatch_table __start_tests_dispatch_table_section;\ + extern struct dispatch_table __stop_tests_dispatch_table_section;\ + struct dispatch_table *dt, *begin, *end;\ + char *ptr;\ + \ + begin = &__start_tests_dispatch_table_section;\ + end = &__stop_tests_dispatch_table_section;\ + ptr = (char*)begin;\ + \ + to_find = NULL;\ + \ + while(ptr < (char*)end){\ + dt = (struct dispatch_table*)ptr;\ + /* Find the magic */\ + while(memcmp(dt->magic, DISPATCH_TABLE_MAGIC, sizeof(DISPATCH_TABLE_MAGIC)) != 0){\ + ptr++;\ + dt = (struct dispatch_table*)ptr;\ + }\ + if(strcmp(dt->op_string, op) == 0){ \ + to_find = dt->type;\ + break;\ + }\ + ptr += sizeof(struct dispatch_table);\ + }\ +} while(0) + +#define FIND_FUN_IN_DISPATCH_TABLE(op, function) FIND_IN_DISPATCH_TABLE(op, function, fun) + +#define FIND_HELPER_IN_DISPATCH_TABLE(op, string_helper) FIND_IN_DISPATCH_TABLE(op, string_helper, op_string_helper) + +/*****************/ + +#define GENERIC_TEST_FP_DECL_INIT0(name, ctx) \ + fp_t name##_ptr[] = {NULL}; + +#define GENERIC_TEST_FP_DECL_INIT1(name, ctx) \ + fp name##0; \ + fp_t name##_ptr[] = { &name##0 };\ + ret |= fp_init(&name##0, ctx);\ + +#define GENERIC_TEST_FP_DECL_INIT2(name, ctx) \ + fp name##0, name##1;\ + fp_t name##_ptr[] = { &name##0, &name##1 };\ + ret |= fp_init(&name##0, ctx);\ + ret |= fp_init(&name##1, ctx);\ + +#define GENERIC_TEST_FP_DECL_INIT3(name, ctx) \ + fp name##0, name##1, name##2;\ + fp_t name##_ptr[] = { &name##0, &name##1, &name##2 };\ + ret |= fp_init(&name##0, ctx);\ + ret |= fp_init(&name##1, ctx);\ + ret |= fp_init(&name##2, ctx);\ + +#define GENERIC_TEST_FP_DECL_INIT4(name, ctx) \ + fp name##0, name##1, name##2, name##3;\ + fp_t name##_ptr[] = { &name##0, &name##1, &name##2, &name##3 };\ + ret |= fp_init(&name##0, ctx);\ + ret |= fp_init(&name##1, ctx);\ + ret |= fp_init(&name##2, ctx);\ + ret |= fp_init(&name##3, ctx);\ + +#define GENERIC_TEST_FP_DECL_INIT5(name, ctx) \ + fp name##0, name##1, name##2, name##3, name##4;\ + fp_t name##_ptr[] = { &name##0, &name##1, &name##2, &name##3, &name##4 };\ + ret |= fp_init(&name##0, ctx);\ + ret |= fp_init(&name##1, ctx);\ + ret |= fp_init(&name##2, ctx);\ + ret |= fp_init(&name##3, ctx);\ + ret |= fp_init(&name##4, ctx);\ + +#define GENERIC_TEST_FP_DECL_INIT6(name, ctx) \ + fp name##0, name##1, name##2, name##3, name##4, name##5;\ + fp_t name##_ptr[] = { &name##0, &name##1, &name##2, &name##3, &name##4, &name##5 };\ + ret |= fp_init(&name##0, ctx);\ + ret |= fp_init(&name##1, ctx);\ + ret |= fp_init(&name##2, ctx);\ + ret |= fp_init(&name##3, ctx);\ + ret |= fp_init(&name##4, ctx);\ + ret |= fp_init(&name##5, ctx);\ + +#define GENERIC_TEST_NN_DECL_INIT0(name, size) \ + nn_t name##_ptr[] = {NULL}; + +#define GENERIC_TEST_NN_DECL_INIT1(name, size) \ + nn name##0; \ + nn_t name##_ptr[] = { &name##0 }; \ + ret |= nn_init(&name##0, size); \ + +#define GENERIC_TEST_NN_DECL_INIT2(name, size) \ + nn name##0, name##1; \ + nn_t name##_ptr[] = { &name##0, &name##1 }; \ + ret |= nn_init(&name##0, size); \ + ret |= nn_init(&name##1, size); \ + +#define GENERIC_TEST_NN_DECL_INIT3(name, size) \ + nn name##0, name##1, name##2; \ + nn_t name##_ptr[] = { &name##0, &name##1, &name##2 }; \ + ret |= nn_init(&name##0, size); \ + ret |= nn_init(&name##1, size); \ + ret |= nn_init(&name##2, size); \ + +#define GENERIC_TEST_NN_DECL_INIT4(name, size) \ + nn name##0, name##1, name##2, name##3; \ + nn_t name##_ptr[] = { &name##0, &name##1, &name##2, &name##3 }; \ + ret |= nn_init(&name##0, size); \ + ret |= nn_init(&name##1, size); \ + ret |= nn_init(&name##2, size); \ + ret |= nn_init(&name##3, size); \ + +#define GENERIC_TEST_NN_DECL_INIT5(name, size) \ + nn name##0, name##1, name##2, name##3, name##4; \ + nn_t name##_ptr[] = { &name##0, &name##1, &name##2, &name##3, &name##4 };\ + ret |= nn_init(&name##0, size); \ + ret |= nn_init(&name##1, size); \ + ret |= nn_init(&name##2, size); \ + ret |= nn_init(&name##3, size); \ + ret |= nn_init(&name##4, size); \ + +#define GENERIC_TEST_NN_DECL_INIT6(name, size) \ + nn name##0, name##1, name##2, name##3, name##4, name##5; \ + nn_t name##_ptr[] = { &name##0, &name##1, &name##2, &name##3, &name##4, &name##5 };\ + ret |= nn_init(&name##0, size); \ + ret |= nn_init(&name##1, size); \ + ret |= nn_init(&name##2, size); \ + ret |= nn_init(&name##3, size); \ + ret |= nn_init(&name##4, size); \ + ret |= nn_init(&name##5, size); \ + +#define GENERIC_TEST_FP_CLEAR0(name) + +#define GENERIC_TEST_FP_CLEAR1(name) \ + fp_uninit(&name##0);\ + +#define GENERIC_TEST_FP_CLEAR2(name) \ + fp_uninit(&name##0);\ + fp_uninit(&name##1);\ + +#define GENERIC_TEST_FP_CLEAR3(name) \ + fp_uninit(&name##0);\ + fp_uninit(&name##1);\ + fp_uninit(&name##2);\ + +#define GENERIC_TEST_FP_CLEAR4(name) \ + fp_uninit(&name##0);\ + fp_uninit(&name##1);\ + fp_uninit(&name##2);\ + fp_uninit(&name##3);\ + +#define GENERIC_TEST_FP_CLEAR5(name) \ + fp_uninit(&name##0);\ + fp_uninit(&name##1);\ + fp_uninit(&name##2);\ + fp_uninit(&name##3);\ + fp_uninit(&name##4);\ + +#define GENERIC_TEST_FP_CLEAR6(name) \ + fp_uninit(&name##0);\ + fp_uninit(&name##1);\ + fp_uninit(&name##2);\ + fp_uninit(&name##3);\ + fp_uninit(&name##4);\ + fp_uninit(&name##5);\ + +#define GENERIC_TEST_nn_uninit0(name) + +#define GENERIC_TEST_nn_uninit1(name) \ + nn_uninit(&name##0);\ + +#define GENERIC_TEST_nn_uninit2(name) \ + nn_uninit(&name##0);\ + nn_uninit(&name##1);\ + +#define GENERIC_TEST_nn_uninit3(name) \ + nn_uninit(&name##0);\ + nn_uninit(&name##1);\ + nn_uninit(&name##2);\ + +#define GENERIC_TEST_nn_uninit4(name) \ + nn_uninit(&name##0);\ + nn_uninit(&name##1);\ + nn_uninit(&name##2);\ + nn_uninit(&name##3);\ + +#define GENERIC_TEST_nn_uninit5(name) \ + nn_uninit(&name##0);\ + nn_uninit(&name##1);\ + nn_uninit(&name##2);\ + nn_uninit(&name##3);\ + nn_uninit(&name##4);\ + +#define GENERIC_TEST_nn_uninit6(name) \ + nn_uninit(&name##0);\ + nn_uninit(&name##1);\ + nn_uninit(&name##2);\ + nn_uninit(&name##3);\ + nn_uninit(&name##4);\ + nn_uninit(&name##5);\ + +#define FP_CTX_T_GENERIC_IN(num) ((fp_ctx_t)params[num]) +#define FP_T_GENERIC_IN(num) ((fp_t)params[num]) +#define NN_T_GENERIC_IN(num) ((nn_t)params[num]) +#define UINT_GENERIC_IN(num) ((u64)*((u64*)params[num])) +#define WORD_T_GENERIC_IN(num) ((word_t)*((word_t*)params[num])) +#define INT_GENERIC_IN(num) ((int)*((int*)params[num])) + +#define FP_T_GENERIC_OUT(num) (&fp_out##num) +#define NN_T_GENERIC_OUT(num) (&nn_out##num) +#define WORD_T_GENERIC_OUT(num) (&(word_out[num])) +#define INT_GENERIC_OUT(num) (&(int_out[num])) + +#define CHECK_FUN_RET there_is_output = 1; fun_out_value = (int) + +#define CHECK_FUN_NO_RET there_is_output = 0; fun_out_value = (int) + +/* Number of pre-allocated */ +#define NUM_PRE_ALLOCATED_NN 6 +#define NUM_PRE_ALLOCATED_FP 6 +#define MAX_PARAMS 6 + +#define GENERIC_TEST_NN_DECL_INIT_MAX(name, n) GENERIC_TEST_NN_DECL_INIT6(name, n) +#define GENERIC_TEST_FP_DECL_INIT_MAX(name, ctx) GENERIC_TEST_FP_DECL_INIT6(name, ctx) + +/* Check that the string of parameters types only containes 'c', 'f', 'n' and 'u' + * Check that the string of parameters I/O only contains 'i', 'o' and 'O' + * + */ +#define PARAMETERS_SANITY_CHECK(test_num, param_types, param_io) do {\ + unsigned int i, real_output = 0;\ + assert(sizeof(param_types) == sizeof(param_io));\ + for(i = 0; i < sizeof(param_types)-1; i++){\ + if((param_types[i] != 'c') && (param_types[i] != 'f') && (param_types[i] != 'n') && (param_types[i] != 'u') && (param_types[i] != 's')){ \ + printf("Error: types parameters of test %d mismatch!\n", test_num);\ + return 0;\ + }\ + if((param_io[i] != 'i') && (param_io[i] != 'o') && (param_io[i] != 'O')){\ + printf("Error: I/O parameters of test %d mismatch!\n", test_num);\ + return 0;\ + }\ + if((param_io[i] == 'O') && (param_types[i] != 'u') && (param_types[i] != 's')){\ + printf("Error: types and I/O parameters of test %d mismatch!\n", test_num);\ + return 0;\ + }\ + if(param_io[i] == 'O'){\ + real_output++;\ + }\ + }\ + /* Check that we only have one function output */\ + if(real_output > 1){\ + printf("Error: multiple function output defined in I/O parameters of test %d!\n", test_num);\ + return 0;\ + }\ +} while(0); + +#define SET_PARAMETER_PRETTY_NAME1(a) a +#define SET_PARAMETER_PRETTY_NAME2(a, b) SET_PARAMETER_PRETTY_NAME1(a) "\0" b +#define SET_PARAMETER_PRETTY_NAME3(a, b, c) SET_PARAMETER_PRETTY_NAME2(a, b) "\0" c +#define SET_PARAMETER_PRETTY_NAME4(a, b, c, d) SET_PARAMETER_PRETTY_NAME3(a, b, c) "\0" d +#define SET_PARAMETER_PRETTY_NAME5(a, b, c, d, e) SET_PARAMETER_PRETTY_NAME4(a, b, c, d) "\0" e +#define SET_PARAMETER_PRETTY_NAME6(a, b, c, d, e, f) SET_PARAMETER_PRETTY_NAME5(a, b, c, d, e) "\0" f + +#define SET_PARAMETER_PRETTY_NAME(num, ...) SET_PARAMETER_PRETTY_NAME##num(__VA_ARGS__) + +/* Parse the helper string to get the pretty print names */ +#define GET_PARAMETER_PRETTY_NAME(parameters_string_names_, parameters_string_names, num, out) do {\ + unsigned int cnt = 0;\ + out = 0;\ + \ + /* Find the proper position */\ + while(out < sizeof(parameters_string_names_)-1){\ + if(cnt == num){\ + break;\ + }\ + if(parameters_string_names[out] == '\0'){\ + cnt++;\ + }\ + out++;\ + }\ +} while(0); + +/* Print for a given test all the inputs, outpus and expected outputs */ +#define PRINT_ALL(parameters_types, parameters_io, params, nn_out_ptr, fp_out_ptr, fun_output, there_is_output, parameters_string_names_, bad_num) do { \ + unsigned int j;\ + unsigned int nn_out_local_cnt = 0, fp_out_local_cnt = 0;\ + unsigned int str_pos;\ + const char parameters_string_names[] = parameters_string_names_;\ + const char real[] = "Real ";\ + const char expected[] = "Expected ";\ + char expected_modified_string_names[sizeof(expected)+sizeof(parameters_string_names_)];\ + char real_modified_string_names[sizeof(real)+sizeof(parameters_string_names_)];\ + /* First print the inputs */\ + for(j=0; jp)); \ + }\ + if(parameters_types[j] == 'f'){\ + nn_print(&(parameters_string_names[str_pos]), &(FP_T_GENERIC_IN(j)->fp_val)); \ + }\ + if(parameters_types[j] == 'n'){\ + nn_print(&(parameters_string_names[str_pos]), NN_T_GENERIC_IN(j));\ + }\ + if(parameters_types[j] == 'u'){\ + printf("%16s: 0x", &(parameters_string_names[str_pos])); \ + printf(PRINTF_WORD_HEX_FMT, WORD_T_GENERIC_IN(j)); \ + printf("\n"); \ + }\ + if(parameters_types[j] == 's'){\ + printf("%16s:", &(parameters_string_names[str_pos])); \ + printf("%d", INT_GENERIC_IN(j)); \ + printf("\n"); \ + }\ + }\ + }\ + /* Then print the outputs */\ + for(j=0; jfp_val)); \ + nn_print(expected_modified_string_names, &(FP_T_GENERIC_IN(j)->fp_val)); \ + fp_out_local_cnt++;\ + }\ + if(parameters_types[j] == 'n'){\ + nn_print(real_modified_string_names, nn_out_ptr[j]);\ + nn_print(expected_modified_string_names, NN_T_GENERIC_IN(j));\ + nn_out_local_cnt++;\ + }\ + if(parameters_types[j] == 'u'){\ + printf("%16s: 0x", real_modified_string_names); \ + printf(PRINTF_WORD_HEX_FMT, *(WORD_T_GENERIC_OUT(j))); \ + printf("\n"); \ + printf("%16s: 0x", expected_modified_string_names); \ + printf(PRINTF_WORD_HEX_FMT, WORD_T_GENERIC_IN(j)); \ + printf("\n"); \ + }\ + if(parameters_types[j] == 's'){\ + printf("%16s: ", real_modified_string_names); \ + printf("%d", *(INT_GENERIC_OUT(j))); \ + printf("\n"); \ + printf("%16s: ", expected_modified_string_names); \ + printf("%d", INT_GENERIC_IN(j)); \ + printf("\n"); \ + }\ + }\ + if((parameters_io[j] == 'O') && (there_is_output == 1)){\ + /* This is a real function output */\ + if(parameters_types[j] == 'u'){\ + printf("%16s: 0x", real_modified_string_names); \ + printf(PRINTF_WORD_HEX_FMT, (word_t)fun_output); \ + printf("\n"); \ + printf("%16s: 0x", expected_modified_string_names); \ + printf(PRINTF_WORD_HEX_FMT, WORD_T_GENERIC_IN(j)); \ + printf("\n"); \ + }\ + if(parameters_types[j] == 's'){\ + printf("%16s: ", real_modified_string_names); \ + printf("%d", (int)fun_output); \ + printf("\n"); \ + printf("%16s: ", expected_modified_string_names); \ + printf("%d", INT_GENERIC_IN(j)); \ + printf("\n"); \ + }\ + }\ + }\ +} while(0) + +/* Generic testing framework. Seems ugly but does the job! */ +#define GENERIC_TEST(test_name, operation_, given_string_helper, fun_name, parameters_types_, parameters_io_, parameters_string_names, fun_output, nn_out_num, fp_out_num, ...) \ +int test_##test_name(const char ATTRIBUTE_UNUSED *op, void **params, int test_num);\ +int test_##test_name(const char ATTRIBUTE_UNUSED *op, void **params, int test_num){\ + unsigned int i;\ + int ret = 0, cmp, mismatch = 0; \ + const char *op_string = NULL;\ + unsigned int n_len ATTRIBUTE_UNUSED = 0;\ + int fun_out_value = 0;\ + u8 there_is_output = 0;\ + unsigned int nn_out_local_cnt = 0, fp_out_local_cnt = 0;\ + fp_ctx_t fp_ctx_param ATTRIBUTE_UNUSED = NULL;\ + int fp_ctx_initialized ATTRIBUTE_UNUSED = 0;\ + \ + const char parameters_types[] = parameters_types_;\ + const char parameters_io[] = parameters_io_;\ + \ + const char operation[] = #operation_;\ + \ + /* Our words used as output of functions */\ + word_t word_out[MAX_PARAMS] ATTRIBUTE_UNUSED = { 0 };\ + int int_out[MAX_PARAMS] ATTRIBUTE_UNUSED = { 0 };\ + \ + assert(memcmp(operation, op, sizeof(operation)) == 0);\ + \ + /* Sanity check: check that the parameters passed from the file are the same as the ones declared in the test */\ + if(memcmp(global_parameters, parameters_types, LOCAL_MIN(MAX_PARAMS, strlen(parameters_types))) != 0){\ + printf("Error: parameters %s given in the test file differ from the test expected parameters (%s)\n", parameters_types, global_parameters);\ + return -1;\ + }\ + \ + PARAMETERS_SANITY_CHECK(test_num, parameters_types, parameters_io);\ + \ + /* If we find an fp or nn, assume its length is the common length. */\ + for(i=0; ifp_val.wlen;\ + break;\ + }\ + if((parameters_io[i] == 'o') && (parameters_types[i] == 'n')){\ + n_len = (NN_T_GENERIC_IN(i))->wlen;\ + break;\ + }\ + }\ + for(i=0; i>", nn_rshift_fixedlen, "nnu", "oii", + SET_PARAMETER_PRETTY_NAME(3, "output", "input", "fixed rshift"), NO_RET, 1, + NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), (bitcnt_t)UINT_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_lshift, NN_SHIFT_LEFT, "<<", nn_lshift, "nnu", "oii", + SET_PARAMETER_PRETTY_NAME(3, "output", "input", "lshift"), NO_RET, 1, + NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), (bitcnt_t)UINT_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_rshift, NN_SHIFT_RIGHT, ">>", nn_rshift, "nnu", "oii", + SET_PARAMETER_PRETTY_NAME(3, "output", "input", "rshift"), NO_RET, 1, + NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), (bitcnt_t)UINT_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_lrot, NN_ROTATE_LEFT, "lrot", nn_lrot, "nnuu", "oiii", + SET_PARAMETER_PRETTY_NAME(4, "output", "input", "lrot", "bitlen_base"), NO_RET, 1, + NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), (bitcnt_t)UINT_GENERIC_IN(2), (bitcnt_t)UINT_GENERIC_IN(3)) + GENERIC_TEST_NN(nn_rrot, NN_ROTATE_RIGHT, "rrot", nn_rrot, "nnuu", "oiii", + SET_PARAMETER_PRETTY_NAME(4, "output", "input", "rrot", "bitlen_base"), NO_RET, 1, + NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), (bitcnt_t)UINT_GENERIC_IN(2), (bitcnt_t)UINT_GENERIC_IN(3)) + + +/* Testing xor, or, and, not */ + GENERIC_TEST_NN(nn_xor, NN_XOR, "^", nn_xor, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "input2", "output"), NO_RET, 3, + NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), NN_T_GENERIC_IN(1)) + GENERIC_TEST_NN(nn_or, NN_OR, "|", nn_or, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "input2", "output"), NO_RET, 3, + NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), NN_T_GENERIC_IN(1)) + GENERIC_TEST_NN(nn_and, NN_AND, "&", nn_and, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "input2", "output"), NO_RET, 3, + NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), NN_T_GENERIC_IN(1)) + GENERIC_TEST_NN(nn_not, NN_NOT, "~", nn_not, "nn", "io", + SET_PARAMETER_PRETTY_NAME(2, "input", "output"), NO_RET, 2, + NN_T_GENERIC_OUT(1), NN_T_GENERIC_IN(0)) + +/* Testing add and sub */ + GENERIC_TEST_NN(nn_add, NN_ADD, "+", nn_add, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "input2", "output"), + NO_RET, 3, NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1)) + GENERIC_TEST_NN(nn_sub, NN_SUB, "-", nn_sub, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "input2", "output"), + NO_RET, 3, NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1)) + +/* Testing inc and dec */ + GENERIC_TEST_NN(nn_inc, NN_INC, "++", nn_inc, "nn", "io", + SET_PARAMETER_PRETTY_NAME(2, "input", "output"), NO_RET, 2, + NN_T_GENERIC_OUT(1), NN_T_GENERIC_IN(0)) + GENERIC_TEST_NN(nn_dec, NN_DEC, "--", nn_dec, "nn", "io", + SET_PARAMETER_PRETTY_NAME(2, "input", "output"), NO_RET, 2, + NN_T_GENERIC_OUT(1), NN_T_GENERIC_IN(0)) + +/* Testing modular add, sub, inc, dec, mul, exp (inputs are supposed < p except for exp) */ + GENERIC_TEST_NN(nn_mod_add, NN_MOD_ADD, "+%", nn_mod_add, "nnnn", "iiio", + SET_PARAMETER_PRETTY_NAME(4, "input1", "input2", "modulo", "output"), + NO_RET, 4, NN_T_GENERIC_OUT(3), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_mod_sub, NN_MOD_SUB, "-%", nn_mod_sub, "nnnn", "iiio", + SET_PARAMETER_PRETTY_NAME(4, "input1", "input2", "modulo", "output"), + NO_RET, 4, NN_T_GENERIC_OUT(3), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_mod_inc, NN_MOD_INC, "++%", nn_mod_inc, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "modulo", "output"), + NO_RET, 3, NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1)) + GENERIC_TEST_NN(nn_mod_dec, NN_MOD_DEC, "--%", nn_mod_dec, "nnn", "iio", + SET_PARAMETER_PRETTY_NAME(3, "input1", "modulo", "output"), + NO_RET, 3, NN_T_GENERIC_OUT(2), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1)) + GENERIC_TEST_NN(nn_mod_mul, NN_MOD_MUL, "*%", nn_mod_mul, "nnnn", "iiio", + SET_PARAMETER_PRETTY_NAME(4, "input1", "input2", "modulo", "output"), + NO_RET, 4, NN_T_GENERIC_OUT(3), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_mod_pow, NN_MOD_POW, "exp%", nn_mod_pow, "nnnn", "iiio", + SET_PARAMETER_PRETTY_NAME(4, "base", "exp", "modulo", "output"), + NO_RET, 4, NN_T_GENERIC_OUT(3), NN_T_GENERIC_IN(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2)) + + +/* Testing mul */ + GENERIC_TEST_NN(nn_mul, NN_MUL, "*", nn_mul, "nnn", "oii", + SET_PARAMETER_PRETTY_NAME(3, "output1", "input1", "input2"), + NO_RET, 1, NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), + NN_T_GENERIC_IN(2)) + GENERIC_TEST_NN(nn_sqr, NN_SQR, "(^2)", nn_sqr, "nn", "oi", + SET_PARAMETER_PRETTY_NAME(2, "output1", "input1"), + NO_RET, 1, NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1)) + +/* Testing division */ + GENERIC_TEST_NN(nn_divrem, NN_DIVREM, "/", nn_divrem, "nnnn", "ooii", + SET_PARAMETER_PRETTY_NAME(4, "quotient", "remainder", "input1", "input2"), + NO_RET, 2, NN_T_GENERIC_OUT(0), NN_T_GENERIC_OUT(1), + NN_T_GENERIC_IN(2), NN_T_GENERIC_IN(3)) + GENERIC_TEST_NN(nn_xgcd, NN_XGCD, "xgcd", nn_xgcd, "nnnnns", "oooiio", + SET_PARAMETER_PRETTY_NAME(6, "xgcd", "u", "v", "input1", "input2", "sign"), + NO_RET, 3, NN_T_GENERIC_OUT(0), NN_T_GENERIC_OUT(1), NN_T_GENERIC_OUT(2), + NN_T_GENERIC_IN(3), NN_T_GENERIC_IN(4), INT_GENERIC_OUT(5)) + GENERIC_TEST_NN(nn_gcd, NN_GCD, "gcd", nn_gcd, "nnns", "oiio", + SET_PARAMETER_PRETTY_NAME(4, "gcd", "input1", "input2", "sign"), + NO_RET, 1, NN_T_GENERIC_OUT(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2), INT_GENERIC_OUT(3)) + GENERIC_TEST_NN(nn_mod, NN_MOD, "%", nn_mod, "nnn", "oii", + SET_PARAMETER_PRETTY_NAME(3, "output", "input1", "input2"), + NO_RET, 1, NN_T_GENERIC_OUT(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2)) + +/* Testing modular inversion */ + GENERIC_TEST_NN(nn_modinv, NN_MODINV, "(^-1%)", nn_modinv, "nnns", "oiiO", + SET_PARAMETER_PRETTY_NAME(4, "output", "input1", "input2", "ret"), + RET, 1, NN_T_GENERIC_OUT(0), + NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2)) + +/* Testing modular inversion modulo a 2**n */ + GENERIC_TEST_NN(nn_modinv_2exp, NN_MODINV_2EXP, "(^-1%)(2exp)", nn_modinv_2exp, "nnus", "oiio", + SET_PARAMETER_PRETTY_NAME(4, "output", "input1", "input2", "isodd"), + NO_RET, 1, NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), + UINT_GENERIC_IN(2), INT_GENERIC_OUT(3)) + +/* Check Montgomery multiplication redcify primitives */ + GENERIC_TEST_NN(nn_compute_redc1_coefs, NN_COEF_REDC1, "coef_redc1", nn_compute_redc1_coefs, "nnnu", "ooio", + SET_PARAMETER_PRETTY_NAME(4, "r", "r_square", "p", "mpinv"), + NO_RET, 3, NN_T_GENERIC_OUT(0), NN_T_GENERIC_OUT(1), NN_T_GENERIC_IN(2), WORD_T_GENERIC_OUT(3)) + GENERIC_TEST_NN(nn_compute_div_coefs, NN_COEF_DIV, "coef_div", nn_compute_div_coefs, "nuun", "oooi", + SET_PARAMETER_PRETTY_NAME(4, "p_normalized", "p_shift", "p_reciprocal", "p"), + NO_RET, 3, NN_T_GENERIC_OUT(0), WORD_T_GENERIC_OUT(1), WORD_T_GENERIC_OUT(2), NN_T_GENERIC_IN(3)) + GENERIC_TEST_NN(nn_mul_redc1, NN_MUL_REDC1, "*_redc1", nn_mul_redc1, "nnnnu", "oiiii", + SET_PARAMETER_PRETTY_NAME(5, "output", "input1", "input2", "p", "mpinv"), + NO_RET, 1, NN_T_GENERIC_OUT(0), NN_T_GENERIC_IN(1), NN_T_GENERIC_IN(2), + NN_T_GENERIC_IN(3), WORD_T_GENERIC_IN(4)) + + + +/*********** Fp layer tests ************************************************/ +/* Testing addition in F_p */ + GENERIC_TEST_FP(fp_add, FP_ADD, "+", fp_add, "cfff", "ioii", + SET_PARAMETER_PRETTY_NAME(4, "p", "sum", "input1", "input2"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2), FP_T_GENERIC_IN(3)) + +/* Testing subtraction in F_p */ + GENERIC_TEST_FP(fp_sub, FP_SUB, "-", fp_sub, "cfff", "ioii", + SET_PARAMETER_PRETTY_NAME(4, "p", "diff", "input1", "input2"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2), FP_T_GENERIC_IN(3)) + +/* Testing multiplication in F_p */ + GENERIC_TEST_FP(fp_mul, FP_MUL, "*", fp_mul, "cfff", "ioii", + SET_PARAMETER_PRETTY_NAME(4, "p", "prod", "input1", "input2"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2), FP_T_GENERIC_IN(3)) + GENERIC_TEST_FP(fp_sqr, FP_SQR, "(^2)", fp_sqr, "cff", "ioi", + SET_PARAMETER_PRETTY_NAME(3, "p", "prod", "input1"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2)) + +/* Testing division in F_p */ + GENERIC_TEST_FP(fp_div, FP_DIV, "/", fp_div, "cfff", "ioii", + SET_PARAMETER_PRETTY_NAME(4, "p", "quo", "input1", "input2"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2), FP_T_GENERIC_IN(3)) + +/* Testing Montgomery multiplication in F_p */ + GENERIC_TEST_FP(fp_mul_monty, FP_MUL_MONTY, "*_monty", fp_mul_monty, "cfff", "ioii", + SET_PARAMETER_PRETTY_NAME(4, "p", "prod", "input1", "input2"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2), FP_T_GENERIC_IN(3)) + GENERIC_TEST_FP(fp_sqr_monty, FP_SQR_MONTY, "(^2)_monty", fp_sqr_monty, "cff", "ioi", + SET_PARAMETER_PRETTY_NAME(3, "p", "prod", "input1"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2)) + +/* Testing exponentiation in F_p */ + GENERIC_TEST_FP(fp_pow, FP_POW, "exp", fp_pow, "cffn", "ioii", + SET_PARAMETER_PRETTY_NAME(4, "p", "pow", "input", "exp"), + NO_RET, 0, 2, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_IN(2), NN_T_GENERIC_IN(3)) + +/* Testing square residue in F_p */ + GENERIC_TEST_FP(fp_sqrt, FP_SQRT, "sqrt", fp_sqrt, "cfffs", "iooiO", + SET_PARAMETER_PRETTY_NAME(4, "sqrt1", "sqrt2", "p", "ret"), + RET, 0, 3, + FP_T_GENERIC_OUT(1), FP_T_GENERIC_OUT(2), FP_T_GENERIC_IN(3)) + +/*****************************************************************/ + +/* + * Read data on given fd until first newline character and put it in buf + * followed by a null character. buffer size is passed via buflen. The + * length of read line is returned to the caller in buflen on success + * (not including null character terminating read string). + * + * 0 is returned on success. + * -1 is returned on end of file. + * -2 is returned on error (buffer not sufficient, etc) + */ +int read_string(int fd, char *buf, unsigned int *buflen); +int read_string(int fd, char *buf, unsigned int *buflen) +{ + unsigned int pos = 0, len; + int ret = -1; + char c; + + MUST_HAVE((buf != NULL) && (buflen != NULL), ret, err); + + len = *buflen; + + if (len < 2) { + ret = -2; + goto err; + } + + len -= 1; /* keep some space to terminate the string */ + + while ((len > 0) && ((ret = read(fd, &c, 1)) != 0) && (c != '\n')) { + buf[pos++] = c; + len -= 1; + } + + if (len == 0) { + ret = -2; + goto err; + } + + if (!ret) { + ret = -1; + goto err; + } + + /* Terminate the string */ + buf[pos] = 0; + *buflen = pos; + ret = 0; + +err: + return ret; +} + + +/* + * Parse a test file and perform the tests it provides, one + * by one, in order. + */ +int main(int argc, char *argv[]) +{ + nn fp_ctx_modulus, fp_ctx_r, fp_ctx_r_square, fp_ctx_mpinv; + nn fp_ctx_pshift, fp_ctx_pnorm, fp_ctx_prec; + fp_ctx fp_ctx_param; + int ret, cmp; + u64 u_params[MAX_PARAMS]; + void *params[MAX_PARAMS]; + unsigned int ibuflen = BIT_LEN_WORDS(NN_MAX_BIT_LEN) * WORD_BYTES * 10; + unsigned long int test_num, line = 0, oktests = 0; + int test_ret; + unsigned int len = ibuflen; + int nrecs; + int fd = 0, nn_local_cnt = 0, fp_local_cnt = 0, fp_ctx_local_cnt = 0; + unsigned int nn_len; + char op[1024]; + char *ibuf = NULL, *rec = NULL; + nn *tmp; + fp *fp_tmp; + int (*curr_test_fun) (const char *, void **, int); + unsigned long p_tmp; + + ret = nn_init(&fp_ctx_modulus, 0); + ret |= nn_init(&fp_ctx_r, 0); + ret |= nn_init(&fp_ctx_r_square, 0); + ret |= nn_init(&fp_ctx_mpinv, 0); + ret |= nn_init(&fp_ctx_pshift, 0); + ret |= nn_init(&fp_ctx_pnorm, 0); + ret |= nn_init(&fp_ctx_prec, 0); + + /* First "fake" context initialization with junk value + * one as prime number + */ + ret |= nn_one(&fp_ctx_modulus); + ret |= fp_ctx_init_from_p(&fp_ctx_param, &fp_ctx_modulus); + GENERIC_TEST_FP_DECL_INIT_MAX(fp_params, &fp_ctx_param) + GENERIC_TEST_NN_DECL_INIT_MAX(nn_params, 0) + + if(ret){ + goto err; + } + +#ifdef WITH_ASSERT_BACKTRACE + memset(backtrace_buffer, 0, sizeof(backtrace_buffer) - 1); + if (signal(SIGINT, assert_signal_handler) == SIG_ERR) { + printf("Error: can't catch SIGINT signal ...\n"); + return -1; + } +#endif + + if (argc > 2) { + printf("Usage: %s [test_file]\n", argv[0]); + printf(" If no test_file provided, stdin is taken\n"); + return -1; + } + + /* Special case where we want to dump information */ + if (argc == 2) { + if (memcmp(argv[1], "-info", sizeof("-info")) == 0){ + printf("%d %d\n", WORDSIZE, NN_MAX_BASE); + return 0; + } + } + + ibuf = (char*)malloc(ibuflen); + if (!ibuf) { + return -1; + } + memset(ibuf, 0, ibuflen); + + if(argc == 2){ + fd = open(argv[1], O_RDONLY); + } + else{ + fd = STDIN_FILENO; + } + while (read_string(fd, ibuf, &len) == 0) { + char *t, *s = ibuf; + int i; + + /* Find end of first record (the test number) */ + t = strchr(s, ' '); + if (t == NULL) { + printf("\nLine %lu: unable to find record #1\n", line); + return -1; + } + *t = 0; /* mark end of record */ + test_num = strtoul(s, NULL, 10); + assert(line == test_num); + s = t + 1; /* jump to beginning of next record */ + + /* Find end of second record (operation type) */ + t = strchr(s, ' '); + if (t == NULL) { + printf("\nLine %lu: unable to find record #2\n", line); + return -1; + } + *t = 0; /* mark end of record */ + strncpy(op, s, sizeof(op) - 1); /* Copy opcode */ + s = t + 1; /* jump to beginning of next record */ + + /* Pretty print the evolution of our tests */ + if((line % 1000 == 0) && (line != 0)){ + printf("\r%*s", 40, ""); + printf("\rTest %lu on the go [%s]", line, op); + fflush(stdout); + } + + /* Find end of third record (str of types for next records) */ + t = strchr(s, ' '); + if (t == NULL) { + printf("\nLine %lu: unable to find record #3\n", line); + return -1; + } + *t = 0; /* mark end of record */ + nrecs = (int)(t - s); + + rec = t + 1; + ADD_TO_BACKTRACE("--------------\n"); + for (i = 0; i < nrecs; i++) { + /* Find end of record */ + t = strchr(rec, ' '); + if (t == NULL) { + t = ibuf + len; + } + *t = 0; + switch (s[i]) { + case 'c': /* fp_ctx */ + if (fp_ctx_local_cnt > 0) { + printf("\nLine %lu: Only one fp_ctx allowed\n", line); + ret = -1; + goto err; + } + /* + * We expect a 3 nn of the same size (p, r, r^2) + * followed by a single word providing mpinv + * and an additional nn and two words. + */ + assert(((t - rec) % 2) == 0); + nn_len = (unsigned int)(t - rec - + 3 * (WORD_BYTES * 2)) / + (2 * 4); + assert((nn_len % WORD_BYTES) == 0); + fp_ctx_local_cnt++; + tmp = &fp_ctx_modulus; + ret = nn_set_wlen(tmp, (u8)(nn_len / WORD_BYTES)); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec, 2 * nn_len); EG(ret, err); + + /* Initialize fp context from the prime modulus */ + ret = fp_ctx_init_from_p(&fp_ctx_param, &fp_ctx_modulus); EG(ret, err); + /* Now get the other Fp context values and check that + * everything is OK + */ + tmp = &fp_ctx_r; + ret = nn_set_wlen(tmp, (u8)(nn_len / WORD_BYTES)); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec + (2 * nn_len), + 2 * nn_len); EG(ret, err); + + /* Compare r */ + ret = nn_cmp(&fp_ctx_r, &(fp_ctx_param.r), &cmp); + if(ret || cmp){ + printf("\nLine %lu: Fp context import failed\n", line); + nn_print("Imported r from file =", &fp_ctx_r); + nn_print("Computed r from modulus=", &(fp_ctx_param.r)); + ret = -1; + goto err; + } + tmp = &fp_ctx_r_square; + ret = nn_set_wlen(tmp, (u8)(nn_len / WORD_BYTES)); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec + (4 * nn_len), + 2 * nn_len); EG(ret, err); + + /* Compare r_square */ + ret = nn_cmp(&fp_ctx_r_square, &(fp_ctx_param.r_square), &cmp); + if(ret || cmp){ + printf("\nLine %lu: Fp context import failed\n", line); + nn_print("Imported r_square from file =", &fp_ctx_r_square); + nn_print("Computed r_square from modulus=", &(fp_ctx_param.r_square)); + ret = -1; + goto err; + } + tmp = &fp_ctx_mpinv; + ret = nn_set_wlen(tmp, 1); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec + (6 * nn_len), + WORD_BYTES * 2); EG(ret, err); + + /* Compare mpinv */ + if(fp_ctx_mpinv.val[0] != fp_ctx_param.mpinv){ + printf("\nLine %lu: Fp context import failed\n", line); + printf("Imported mpinv from modulus=" PRINTF_WORD_HEX_FMT, fp_ctx_mpinv.val[0]); + printf("Computed mpiv from file =" PRINTF_WORD_HEX_FMT, fp_ctx_param.mpinv); + ret = -1; + goto err; + } + tmp = &fp_ctx_pshift; + ret = nn_set_wlen(tmp, 1); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec + (6 * nn_len + 2 * WORD_BYTES), + WORD_BYTES * 2); EG(ret, err); + + /* Compare p_shift */ + if((bitcnt_t)fp_ctx_pshift.val[0] != fp_ctx_param.p_shift){ + printf("\nLine %lu: Fp context import failed\n", line); + printf("Imported mpinv from modulus=%d", (bitcnt_t)fp_ctx_pshift.val[0]); + printf("Computed mpiv from file =%d", fp_ctx_param.p_shift); + ret = -1; + goto err; + } + tmp = &fp_ctx_pnorm; + ret = nn_set_wlen(tmp, (u8)(nn_len / WORD_BYTES)); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec + (6 * nn_len + 4 * WORD_BYTES), + nn_len * 2); EG(ret, err); + + /* Compare p_normalized */ + ret = nn_cmp(&fp_ctx_pnorm, &(fp_ctx_param.p_normalized), &cmp); + if(ret || (cmp != 0)){ + printf("\nLine %lu: Fp context import failed\n", line); + nn_print("Imported r_square from file =", &fp_ctx_pnorm); + nn_print("Computed r_square from modulus=", &(fp_ctx_param.p_normalized)); + return -1; + } + tmp = &fp_ctx_prec; + ret = nn_set_wlen(tmp, 1); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec + (8 * nn_len + 4 * WORD_BYTES), + WORD_BYTES * 2); EG(ret, err); + + /* Compare p_reciprocal */ + if(fp_ctx_prec.val[0] != fp_ctx_param.p_reciprocal){ + printf("\nLine %lu: Fp context import failed\n", line); + printf("Imported mpinv from modulus=" PRINTF_WORD_HEX_FMT, fp_ctx_prec.val[0]); + printf("Computed mpiv from file =" PRINTF_WORD_HEX_FMT, fp_ctx_param.p_reciprocal); + ret = -1; + goto err; + } + params[i] = &fp_ctx_param; + ADD_TO_BACKTRACE("'c' param: %s\n", rec); + break; + case 'f': /* fp */ + if (fp_ctx_local_cnt != 1) { + printf("\nLine %lu: No fp_ctx available\n", line); + ret = -1; + goto err; + } + if (fp_local_cnt >= NUM_PRE_ALLOCATED_FP) { + printf("\nLine %lu: Not enough fp\n", + line); + ret = -1; + goto err; + } + assert(((t - rec) % 2) == 0); + nn_len = (unsigned int)(t - rec) / 2; + assert((nn_len / WORD_BYTES) <= + fp_ctx_param.p.wlen); + fp_tmp = fp_params_ptr[fp_local_cnt++]; + fp_tmp->ctx = &fp_ctx_param; + tmp = &(fp_tmp->fp_val); + ret = nn_set_wlen(tmp, (u8)(nn_len / WORD_BYTES)); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec, 2 * nn_len); EG(ret, err); + ret = nn_set_wlen(tmp, fp_ctx_param.p.wlen); EG(ret, err); + params[i] = fp_tmp; + ADD_TO_BACKTRACE("'f' param: %s\n", rec); + break; + case 'p': /* raw pointer value. Useful for NULL */ + p_tmp = strtoull(rec, NULL, 10); + params[i] = (void *)p_tmp; + ADD_TO_BACKTRACE("'p' param: %s\n", rec); + /* If this is not a NULL pointer, this is weird! + * Abort ... + */ + if(params[i] != NULL){ + printf("\nLine %lu: imported a pointer (type 'p') non NULL\n", + line); + ret = -1; + goto err; + } + break; + case 'n': /* nn */ + if (nn_local_cnt >= NUM_PRE_ALLOCATED_NN) { + printf("\nLine %lu: Not enough nn\n", + line); + return -1; + } + assert(((t - rec) % 2) == 0); + nn_len = (unsigned int)(t - rec) / 2; + assert((nn_len % WORD_BYTES) == 0); + tmp = nn_params_ptr[nn_local_cnt++]; + ret = nn_set_wlen(tmp, (u8)(nn_len / WORD_BYTES)); EG(ret, err); + ret = nn_import_from_hexbuf(tmp, rec, 2 * nn_len); EG(ret, err); + params[i] = tmp; + ADD_TO_BACKTRACE("'n' param: %s\n", rec); + break; + case 'u': /* unsigned long int (in base 10) */ + u_params[i] = (u64)strtoull(rec, NULL, 10); + params[i] = &u_params[i]; + ADD_TO_BACKTRACE("'u' param: %s\n", rec); + break; + case 's': /* signed long int (in base 10) */ + u_params[i] = (u64)strtoll(rec, NULL, 10); + params[i] = &u_params[i]; + ADD_TO_BACKTRACE("'s' param: %s\n", rec); + break; + default: + printf("\nUnknown record type '%c'\n", s[i]); + ret = -1; + goto err; + } + rec = t + 1; + } + /* Save current parameters format in the global variable */ + memcpy(global_parameters, s, LOCAL_MIN(nrecs, MAX_PARAMS)); + curr_test_fun = NULL; + FIND_FUN_IN_DISPATCH_TABLE(op, curr_test_fun); + if (curr_test_fun == NULL) { + printf("\nLine %lu: unknown opcode %s\n", line, op); + } else { + ADD_TO_BACKTRACE("\nLine %lu: testing opcode %s\n", line, op); + test_ret = curr_test_fun(op, params, (int)test_num); + if (test_ret == 1) { + ADD_TO_BACKTRACE("-- TEST OK ---\n"); + oktests += (unsigned long)test_ret; + } else { + ADD_TO_BACKTRACE("-- TEST NOK --\n"); + } + } + line += 1; + len = ibuflen; + nn_local_cnt = 0; + fp_local_cnt = 0; + fp_ctx_local_cnt = 0; + } + + printf("\n%lu/%lu tests passed successfully (%lu on error)\n", + oktests, line, line - oktests); + + if(fd != 0){ + close(fd); + } + if(ibuf != NULL){ + free(ibuf); + } + + return 0; +err: + printf("Error: critical error occured! Leaving ...\n"); + if(fd != 0){ + close(fd); + } + if(ibuf != NULL){ + free(ibuf); + } + return -1; +} diff --git a/crypto/libecc/src/arithmetic_tests/arithmetic_tests_generator.py b/crypto/libecc/src/arithmetic_tests/arithmetic_tests_generator.py new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/arithmetic_tests/arithmetic_tests_generator.py @@ -0,0 +1,2009 @@ +#/* +# * Copyright (C) 2017 - This file is part of libecc project +# * +# * Authors: +# * Ryad BENADJILA +# * Arnaud EBALARD +# * Jean-Pierre FLORI +# * +# * Contributors: +# * Nicolas VIVET +# * Karim KHALFALLAH +# * +# * This software is licensed under a dual BSD and GPL v2 license. +# * See LICENSE file at the root folder of the project. +# */ +#! /usr/bin/env python + +import random, sys, re, math, socket, os, select, signal +from datetime import datetime + +# Pre generated primes +first_primes_list = [ + 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, + 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, + 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, + 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, + 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, + 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, + 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, + 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, + 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, + 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, + 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, + 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, + 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, + 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, + 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, + 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, + 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, + 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, + 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, + 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, + 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, + 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, + 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, + 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, + 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, + 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, + 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, + 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, + 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, + 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, + 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, + 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, + 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, + 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, + 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, + 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, + 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, + 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, + 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, + 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, + 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, + 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, + 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, + 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, + 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, + 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, + 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, + 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, + 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, + 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, + 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, + 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, + 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, + 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, + 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, + 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, + 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, + 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, + 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, + 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, + 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, + 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, + 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, + 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, + 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, + 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, + 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, + 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, + 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, + 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, + 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, + 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, + 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, + 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, + 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, + 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, + 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, + 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, + 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, + 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, + 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, + 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, + 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, + 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, + 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, + 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, + 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, + 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, + 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, + 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, + 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, + 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, + 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, + 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, + 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, + 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, + 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, + 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, + 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, + 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, + 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, + 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, + 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, + 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, + 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, + 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, + 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, + 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, + 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, + 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, + 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, + 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, + 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, + 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, + 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, + 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, + 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, + 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, + 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, + 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, + 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, + 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, + 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973, 10007, + 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, + 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, + 10181, 10193, 10211, 10223, 10243, 10247, 10253, 10259, 10267, 10271, + 10273, 10289, 10301, 10303, 10313, 10321, 10331, 10333, 10337, 10343, + 10357, 10369, 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, + 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, 10559, 10567, + 10589, 10597, 10601, 10607, 10613, 10627, 10631, 10639, 10651, 10657, + 10663, 10667, 10687, 10691, 10709, 10711, 10723, 10729, 10733, 10739, + 10753, 10771, 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, + 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, 10939, 10949, + 10957, 10973, 10979, 10987, 10993, 11003, 11027, 11047, 11057, 11059, + 11069, 11071, 11083, 11087, 11093, 11113, 11117, 11119, 11131, 11149, + 11159, 11161, 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, + 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317, 11321, 11329, + 11351, 11353, 11369, 11383, 11393, 11399, 11411, 11423, 11437, 11443, + 11447, 11467, 11471, 11483, 11489, 11491, 11497, 11503, 11519, 11527, + 11549, 11551, 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657, + 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, 11743, 11777, + 11779, 11783, 11789, 11801, 11807, 11813, 11821, 11827, 11831, 11833, + 11839, 11863, 11867, 11887, 11897, 11903, 11909, 11923, 11927, 11933, + 11939, 11941, 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, + 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, 12107, 12109, + 12113, 12119, 12143, 12149, 12157, 12161, 12163, 12197, 12203, 12211, + 12227, 12239, 12241, 12251, 12253, 12263, 12269, 12277, 12281, 12289, + 12301, 12323, 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, + 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473, 12479, 12487, + 12491, 12497, 12503, 12511, 12517, 12527, 12539, 12541, 12547, 12553, + 12569, 12577, 12583, 12589, 12601, 12611, 12613, 12619, 12637, 12641, + 12647, 12653, 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, + 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, 12823, 12829, + 12841, 12853, 12889, 12893, 12899, 12907, 12911, 12917, 12919, 12923, + 12941, 12953, 12959, 12967, 12973, 12979, 12983, 13001, 13003, 13007, + 13009, 13033, 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, + 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, 13183, 13187, + 13217, 13219, 13229, 13241, 13249, 13259, 13267, 13291, 13297, 13309, + 13313, 13327, 13331, 13337, 13339, 13367, 13381, 13397, 13399, 13411, + 13417, 13421, 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499, + 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597, 13613, 13619, + 13627, 13633, 13649, 13669, 13679, 13681, 13687, 13691, 13693, 13697, + 13709, 13711, 13721, 13723, 13729, 13751, 13757, 13759, 13763, 13781, + 13789, 13799, 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879, + 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933, 13963, 13967, + 13997, 13999, 14009, 14011, 14029, 14033, 14051, 14057, 14071, 14081, + 14083, 14087, 14107, 14143, 14149, 14153, 14159, 14173, 14177, 14197, + 14207, 14221, 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323, + 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407, 14411, 14419, + 14423, 14431, 14437, 14447, 14449, 14461, 14479, 14489, 14503, 14519, + 14533, 14537, 14543, 14549, 14551, 14557, 14561, 14563, 14591, 14593, + 14621, 14627, 14629, 14633, 14639, 14653, 14657, 14669, 14683, 14699, + 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753, 14759, 14767, + 14771, 14779, 14783, 14797, 14813, 14821, 14827, 14831, 14843, 14851, + 14867, 14869, 14879, 14887, 14891, 14897, 14923, 14929, 14939, 14947, + 14951, 14957, 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073, + 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137, 15139, 15149, + 15161, 15173, 15187, 15193, 15199, 15217, 15227, 15233, 15241, 15259, + 15263, 15269, 15271, 15277, 15287, 15289, 15299, 15307, 15313, 15319, + 15329, 15331, 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401, + 15413, 15427, 15439, 15443, 15451, 15461, 15467, 15473, 15493, 15497, + 15511, 15527, 15541, 15551, 15559, 15569, 15581, 15583, 15601, 15607, + 15619, 15629, 15641, 15643, 15647, 15649, 15661, 15667, 15671, 15679, + 15683, 15727, 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773, + 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859, 15877, 15881, + 15887, 15889, 15901, 15907, 15913, 15919, 15923, 15937, 15959, 15971, + 15973, 15991, 16001, 16007, 16033, 16057, 16061, 16063, 16067, 16069, + 16073, 16087, 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183, + 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249, 16253, 16267, + 16273, 16301, 16319, 16333, 16339, 16349, 16361, 16363, 16369, 16381, + 16411, 16417, 16421, 16427, 16433, 16447, 16451, 16453, 16477, 16481, + 16487, 16493, 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603, + 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661, 16673, 16691, + 16693, 16699, 16703, 16729, 16741, 16747, 16759, 16763, 16787, 16811, + 16823, 16829, 16831, 16843, 16871, 16879, 16883, 16889, 16901, 16903, + 16921, 16927, 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993, + 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053, 17077, 17093, + 17099, 17107, 17117, 17123, 17137, 17159, 17167, 17183, 17189, 17191, + 17203, 17207, 17209, 17231, 17239, 17257, 17291, 17293, 17299, 17317, + 17321, 17327, 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389, + 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467, 17471, 17477, + 17483, 17489, 17491, 17497, 17509, 17519, 17539, 17551, 17569, 17573, + 17579, 17581, 17597, 17599, 17609, 17623, 17627, 17657, 17659, 17669, + 17681, 17683, 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783, + 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863, 17881, 17891, + 17903, 17909, 17911, 17921, 17923, 17929, 17939, 17957, 17959, 17971, + 17977, 17981, 17987, 17989, 18013, 18041, 18043, 18047, 18049, 18059, + 18061, 18077, 18089, 18097, 18119, 18121, 18127, 18131, 18133, 18143, + 18149, 18169, 18181, 18191, 18199, 18211, 18217, 18223, 18229, 18233, + 18251, 18253, 18257, 18269, 18287, 18289, 18301, 18307, 18311, 18313, + 18329, 18341, 18353, 18367, 18371, 18379, 18397, 18401, 18413, 18427, + 18433, 18439, 18443, 18451, 18457, 18461, 18481, 18493, 18503, 18517, + 18521, 18523, 18539, 18541, 18553, 18583, 18587, 18593, 18617, 18637, + 18661, 18671, 18679, 18691, 18701, 18713, 18719, 18731, 18743, 18749, + 18757, 18773, 18787, 18793, 18797, 18803, 18839, 18859, 18869, 18899, + 18911, 18913, 18917, 18919, 18947, 18959, 18973, 18979, 19001, 19009, + 19013, 19031, 19037, 19051, 19069, 19073, 19079, 19081, 19087, 19121, + 19139, 19141, 19157, 19163, 19181, 19183, 19207, 19211, 19213, 19219, + 19231, 19237, 19249, 19259, 19267, 19273, 19289, 19301, 19309, 19319, + 19333, 19373, 19379, 19381, 19387, 19391, 19403, 19417, 19421, 19423, + 19427, 19429, 19433, 19441, 19447, 19457, 19463, 19469, 19471, 19477, + 19483, 19489, 19501, 19507, 19531, 19541, 19543, 19553, 19559, 19571, + 19577, 19583, 19597, 19603, 19609, 19661, 19681, 19687, 19697, 19699, + 19709, 19717, 19727, 19739, 19751, 19753, 19759, 19763, 19777, 19793, + 19801, 19813, 19819, 19841, 19843, 19853, 19861, 19867, 19889, 19891, + 19913, 19919, 19927, 19937, 19949, 19961, 19963, 19973, 19979, 19991, + 19993, 19997, 20011, 20021, 20023, 20029, 20047, 20051, 20063, 20071, + 20089, 20101, 20107, 20113, 20117, 20123, 20129, 20143, 20147, 20149, + 20161, 20173, 20177, 20183, 20201, 20219, 20231, 20233, 20249, 20261, + 20269, 20287, 20297, 20323, 20327, 20333, 20341, 20347, 20353, 20357, + 20359, 20369, 20389, 20393, 20399, 20407, 20411, 20431, 20441, 20443, + 20477, 20479, 20483, 20507, 20509, 20521, 20533, 20543, 20549, 20551, + 20563, 20593, 20599, 20611, 20627, 20639, 20641, 20663, 20681, 20693, + 20707, 20717, 20719, 20731, 20743, 20747, 20749, 20753, 20759, 20771, + 20773, 20789, 20807, 20809, 20849, 20857, 20873, 20879, 20887, 20897, + 20899, 20903, 20921, 20929, 20939, 20947, 20959, 20963, 20981, 20983, + 21001, 21011, 21013, 21017, 21019, 21023, 21031, 21059, 21061, 21067, + 21089, 21101, 21107, 21121, 21139, 21143, 21149, 21157, 21163, 21169, + 21179, 21187, 21191, 21193, 21211, 21221, 21227, 21247, 21269, 21277, + 21283, 21313, 21317, 21319, 21323, 21341, 21347, 21377, 21379, 21383, + 21391, 21397, 21401, 21407, 21419, 21433, 21467, 21481, 21487, 21491, + 21493, 21499, 21503, 21517, 21521, 21523, 21529, 21557, 21559, 21563, + 21569, 21577, 21587, 21589, 21599, 21601, 21611, 21613, 21617, 21647, + 21649, 21661, 21673, 21683, 21701, 21713, 21727, 21737, 21739, 21751, + 21757, 21767, 21773, 21787, 21799, 21803, 21817, 21821, 21839, 21841, + 21851, 21859, 21863, 21871, 21881, 21893, 21911, 21929, 21937, 21943, + 21961, 21977, 21991, 21997, 22003, 22013, 22027, 22031, 22037, 22039, + 22051, 22063, 22067, 22073, 22079, 22091, 22093, 22109, 22111, 22123, + 22129, 22133, 22147, 22153, 22157, 22159, 22171, 22189, 22193, 22229, + 22247, 22259, 22271, 22273, 22277, 22279, 22283, 22291, 22303, 22307, + 22343, 22349, 22367, 22369, 22381, 22391, 22397, 22409, 22433, 22441, + 22447, 22453, 22469, 22481, 22483, 22501, 22511, 22531, 22541, 22543, + 22549, 22567, 22571, 22573, 22613, 22619, 22621, 22637, 22639, 22643, + 22651, 22669, 22679, 22691, 22697, 22699, 22709, 22717, 22721, 22727, + 22739, 22741, 22751, 22769, 22777, 22783, 22787, 22807, 22811, 22817, + 22853, 22859, 22861, 22871, 22877, 22901, 22907, 22921, 22937, 22943, + 22961, 22963, 22973, 22993, 23003, 23011, 23017, 23021, 23027, 23029, + 23039, 23041, 23053, 23057, 23059, 23063, 23071, 23081, 23087, 23099, + 23117, 23131, 23143, 23159, 23167, 23173, 23189, 23197, 23201, 23203, + 23209, 23227, 23251, 23269, 23279, 23291, 23293, 23297, 23311, 23321, + 23327, 23333, 23339, 23357, 23369, 23371, 23399, 23417, 23431, 23447, + 23459, 23473, 23497, 23509, 23531, 23537, 23539, 23549, 23557, 23561, + 23563, 23567, 23581, 23593, 23599, 23603, 23609, 23623, 23627, 23629, + 23633, 23663, 23669, 23671, 23677, 23687, 23689, 23719, 23741, 23743, + 23747, 23753, 23761, 23767, 23773, 23789, 23801, 23813, 23819, 23827, + 23831, 23833, 23857, 23869, 23873, 23879, 23887, 23893, 23899, 23909, + 23911, 23917, 23929, 23957, 23971, 23977, 23981, 23993, 24001, 24007, + 24019, 24023, 24029, 24043, 24049, 24061, 24071, 24077, 24083, 24091, + 24097, 24103, 24107, 24109, 24113, 24121, 24133, 24137, 24151, 24169, + 24179, 24181, 24197, 24203, 24223, 24229, 24239, 24247, 24251, 24281, + 24317, 24329, 24337, 24359, 24371, 24373, 24379, 24391, 24407, 24413, + 24419, 24421, 24439, 24443, 24469, 24473, 24481, 24499, 24509, 24517, + 24527, 24533, 24547, 24551, 24571, 24593, 24611, 24623, 24631, 24659, + 24671, 24677, 24683, 24691, 24697, 24709, 24733, 24749, 24763, 24767, + 24781, 24793, 24799, 24809, 24821, 24841, 24847, 24851, 24859, 24877, + 24889, 24907, 24917, 24919, 24923, 24943, 24953, 24967, 24971, 24977, + 24979, 24989, 25013, 25031, 25033, 25037, 25057, 25073, 25087, 25097, + 25111, 25117, 25121, 25127, 25147, 25153, 25163, 25169, 25171, 25183, + 25189, 25219, 25229, 25237, 25243, 25247, 25253, 25261, 25301, 25303, + 25307, 25309, 25321, 25339, 25343, 25349, 25357, 25367, 25373, 25391, + 25409, 25411, 25423, 25439, 25447, 25453, 25457, 25463, 25469, 25471, + 25523, 25537, 25541, 25561, 25577, 25579, 25583, 25589, 25601, 25603, + 25609, 25621, 25633, 25639, 25643, 25657, 25667, 25673, 25679, 25693, + 25703, 25717, 25733, 25741, 25747, 25759, 25763, 25771, 25793, 25799, + 25801, 25819, 25841, 25847, 25849, 25867, 25873, 25889, 25903, 25913, + 25919, 25931, 25933, 25939, 25943, 25951, 25969, 25981, 25997, 25999, + 26003, 26017, 26021, 26029, 26041, 26053, 26083, 26099, 26107, 26111, + 26113, 26119, 26141, 26153, 26161, 26171, 26177, 26183, 26189, 26203, + 26209, 26227, 26237, 26249, 26251, 26261, 26263, 26267, 26293, 26297, + 26309, 26317, 26321, 26339, 26347, 26357, 26371, 26387, 26393, 26399, + 26407, 26417, 26423, 26431, 26437, 26449, 26459, 26479, 26489, 26497, + 26501, 26513, 26539, 26557, 26561, 26573, 26591, 26597, 26627, 26633, + 26641, 26647, 26669, 26681, 26683, 26687, 26693, 26699, 26701, 26711, + 26713, 26717, 26723, 26729, 26731, 26737, 26759, 26777, 26783, 26801, + 26813, 26821, 26833, 26839, 26849, 26861, 26863, 26879, 26881, 26891, + 26893, 26903, 26921, 26927, 26947, 26951, 26953, 26959, 26981, 26987, + 26993, 27011, 27017, 27031, 27043, 27059, 27061, 27067, 27073, 27077, + 27091, 27103, 27107, 27109, 27127, 27143, 27179, 27191, 27197, 27211, + 27239, 27241, 27253, 27259, 27271, 27277, 27281, 27283, 27299, 27329, + 27337, 27361, 27367, 27397, 27407, 27409, 27427, 27431, 27437, 27449, + 27457, 27479, 27481, 27487, 27509, 27527, 27529, 27539, 27541, 27551, + 27581, 27583, 27611, 27617, 27631, 27647, 27653, 27673, 27689, 27691, + 27697, 27701, 27733, 27737, 27739, 27743, 27749, 27751, 27763, 27767, + 27773, 27779, 27791, 27793, 27799, 27803, 27809, 27817, 27823, 27827, + 27847, 27851, 27883, 27893, 27901, 27917, 27919, 27941, 27943, 27947, + 27953, 27961, 27967, 27983, 27997, 28001, 28019, 28027, 28031, 28051, + 28057, 28069, 28081, 28087, 28097, 28099, 28109, 28111, 28123, 28151, + 28163, 28181, 28183, 28201, 28211, 28219, 28229, 28277, 28279, 28283, + 28289, 28297, 28307, 28309, 28319, 28349, 28351, 28387, 28393, 28403, + 28409, 28411, 28429, 28433, 28439, 28447, 28463, 28477, 28493, 28499, + 28513, 28517, 28537, 28541, 28547, 28549, 28559, 28571, 28573, 28579, + 28591, 28597, 28603, 28607, 28619, 28621, 28627, 28631, 28643, 28649, + 28657, 28661, 28663, 28669, 28687, 28697, 28703, 28711, 28723, 28729, + 28751, 28753, 28759, 28771, 28789, 28793, 28807, 28813, 28817, 28837, + 28843, 28859, 28867, 28871, 28879, 28901, 28909, 28921, 28927, 28933, + 28949, 28961, 28979, 29009, 29017, 29021, 29023, 29027, 29033, 29059, + 29063, 29077, 29101, 29123, 29129, 29131, 29137, 29147, 29153, 29167, + 29173, 29179, 29191, 29201, 29207, 29209, 29221, 29231, 29243, 29251, + 29269, 29287, 29297, 29303, 29311, 29327, 29333, 29339, 29347, 29363, + 29383, 29387, 29389, 29399, 29401, 29411, 29423, 29429, 29437, 29443, + 29453, 29473, 29483, 29501, 29527, 29531, 29537, 29567, 29569, 29573, + 29581, 29587, 29599, 29611, 29629, 29633, 29641, 29663, 29669, 29671, + 29683, 29717, 29723, 29741, 29753, 29759, 29761, 29789, 29803, 29819, + 29833, 29837, 29851, 29863, 29867, 29873, 29879, 29881, 29917, 29921, + 29927, 29947, 29959, 29983, 29989, 30011, 30013, 30029, 30047, 30059, + 30071, 30089, 30091, 30097, 30103, 30109, 30113, 30119, 30133, 30137, + 30139, 30161, 30169, 30181, 30187, 30197, 30203, 30211, 30223, 30241, + 30253, 30259, 30269, 30271, 30293, 30307, 30313, 30319, 30323, 30341, + 30347, 30367, 30389, 30391, 30403, 30427, 30431, 30449, 30467, 30469, + 30491, 30493, 30497, 30509, 30517, 30529, 30539, 30553, 30557, 30559, + 30577, 30593, 30631, 30637, 30643, 30649, 30661, 30671, 30677, 30689, + 30697, 30703, 30707, 30713, 30727, 30757, 30763, 30773, 30781, 30803, + 30809, 30817, 30829, 30839, 30841, 30851, 30853, 30859, 30869, 30871, + 30881, 30893, 30911, 30931, 30937, 30941, 30949, 30971, 30977, 30983, + 31013, 31019, 31033, 31039, 31051, 31063, 31069, 31079, 31081, 31091, + 31121, 31123, 31139, 31147, 31151, 31153, 31159, 31177, 31181, 31183, + 31189, 31193, 31219, 31223, 31231, 31237, 31247, 31249, 31253, 31259, + 31267, 31271, 31277, 31307, 31319, 31321, 31327, 31333, 31337, 31357, + 31379, 31387, 31391, 31393, 31397, 31469, 31477, 31481, 31489, 31511, + 31513, 31517, 31531, 31541, 31543, 31547, 31567, 31573, 31583, 31601, + 31607, 31627, 31643, 31649, 31657, 31663, 31667, 31687, 31699, 31721, + 31723, 31727, 31729, 31741, 31751, 31769, 31771, 31793, 31799, 31817, + 31847, 31849, 31859, 31873, 31883, 31891, 31907, 31957, 31963, 31973, + 31981, 31991, 32003, 32009, 32027, 32029, 32051, 32057, 32059, 32063, + 32069, 32077, 32083, 32089, 32099, 32117, 32119, 32141, 32143, 32159, + 32173, 32183, 32189, 32191, 32203, 32213, 32233, 32237, 32251, 32257, + 32261, 32297, 32299, 32303, 32309, 32321, 32323, 32327, 32341, 32353, + 32359, 32363, 32369, 32371, 32377, 32381, 32401, 32411, 32413, 32423, + 32429, 32441, 32443, 32467, 32479, 32491, 32497, 32503, 32507, 32531, + 32533, 32537, 32561, 32563, 32569, 32573, 32579, 32587, 32603, 32609, + 32611, 32621, 32633, 32647, 32653, 32687, 32693, 32707, 32713, 32717, + 32719, 32749, 32771, 32779, 32783, 32789, 32797, 32801, 32803, 32831, + 32833, 32839, 32843, 32869, 32887, 32909, 32911, 32917, 32933, 32939, + 32941, 32957, 32969, 32971, 32983, 32987, 32993, 32999, 33013, 33023, + 33029, 33037, 33049, 33053, 33071, 33073, 33083, 33091, 33107, 33113, + 33119, 33149, 33151, 33161, 33179, 33181, 33191, 33199, 33203, 33211, + 33223, 33247, 33287, 33289, 33301, 33311, 33317, 33329, 33331, 33343, + 33347, 33349, 33353, 33359, 33377, 33391, 33403, 33409, 33413, 33427, + 33457, 33461, 33469, 33479, 33487, 33493, 33503, 33521, 33529, 33533, + 33547, 33563, 33569, 33577, 33581, 33587, 33589, 33599, 33601, 33613, + 33617, 33619, 33623, 33629, 33637, 33641, 33647, 33679, 33703, 33713, + 33721, 33739, 33749, 33751, 33757, 33767, 33769, 33773, 33791, 33797, + 33809, 33811, 33827, 33829, 33851, 33857, 33863, 33871, 33889, 33893, + 33911, 33923, 33931, 33937, 33941, 33961, 33967, 33997, 34019, 34031, + 34033, 34039, 34057, 34061, 34123, 34127, 34129, 34141, 34147, 34157, + 34159, 34171, 34183, 34211, 34213, 34217, 34231, 34253, 34259, 34261, + 34267, 34273, 34283, 34297, 34301, 34303, 34313, 34319, 34327, 34337, + 34351, 34361, 34367, 34369, 34381, 34403, 34421, 34429, 34439, 34457, + 34469, 34471, 34483, 34487, 34499, 34501, 34511, 34513, 34519, 34537, + 34543, 34549, 34583, 34589, 34591, 34603, 34607, 34613, 34631, 34649, + 34651, 34667, 34673, 34679, 34687, 34693, 34703, 34721, 34729, 34739, + 34747, 34757, 34759, 34763, 34781, 34807, 34819, 34841, 34843, 34847, + 34849, 34871, 34877, 34883, 34897, 34913, 34919, 34939, 34949, 34961, + 34963, 34981, 35023, 35027, 35051, 35053, 35059, 35069, 35081, 35083, + 35089, 35099, 35107, 35111, 35117, 35129, 35141, 35149, 35153, 35159, + 35171, 35201, 35221, 35227, 35251, 35257, 35267, 35279, 35281, 35291, + 35311, 35317, 35323, 35327, 35339, 35353, 35363, 35381, 35393, 35401, + 35407, 35419, 35423, 35437, 35447, 35449, 35461, 35491, 35507, 35509, + 35521, 35527, 35531, 35533, 35537, 35543, 35569, 35573, 35591, 35593, + 35597, 35603, 35617, 35671, 35677, 35729, 35731, 35747, 35753, 35759, + 35771, 35797, 35801, 35803, 35809, 35831, 35837, 35839, 35851, 35863, + 35869, 35879, 35897, 35899, 35911, 35923, 35933, 35951, 35963, 35969, + 35977, 35983, 35993, 35999, 36007, 36011, 36013, 36017, 36037, 36061, + 36067, 36073, 36083, 36097, 36107, 36109, 36131, 36137, 36151, 36161, + 36187, 36191, 36209, 36217, 36229, 36241, 36251, 36263, 36269, 36277, + 36293, 36299, 36307, 36313, 36319, 36341, 36343, 36353, 36373, 36383, + 36389, 36433, 36451, 36457, 36467, 36469, 36473, 36479, 36493, 36497, + 36523, 36527, 36529, 36541, 36551, 36559, 36563, 36571, 36583, 36587, + 36599, 36607, 36629, 36637, 36643, 36653, 36671, 36677, 36683, 36691, + 36697, 36709, 36713, 36721, 36739, 36749, 36761, 36767, 36779, 36781, + 36787, 36791, 36793, 36809, 36821, 36833, 36847, 36857, 36871, 36877, + 36887, 36899, 36901, 36913, 36919, 36923, 36929, 36931, 36943, 36947, + 36973, 36979, 36997, 37003, 37013, 37019, 37021, 37039, 37049, 37057, + 37061, 37087, 37097, 37117, 37123, 37139, 37159, 37171, 37181, 37189, + 37199, 37201, 37217, 37223, 37243, 37253, 37273, 37277, 37307, 37309, + 37313, 37321, 37337, 37339, 37357, 37361, 37363, 37369, 37379, 37397, + 37409, 37423, 37441, 37447, 37463, 37483, 37489, 37493, 37501, 37507, + 37511, 37517, 37529, 37537, 37547, 37549, 37561, 37567, 37571, 37573, + 37579, 37589, 37591, 37607, 37619, 37633, 37643, 37649, 37657, 37663, + 37691, 37693, 37699, 37717, 37747, 37781, 37783, 37799, 37811, 37813, + 37831, 37847, 37853, 37861, 37871, 37879, 37889, 37897, 37907, 37951, + 37957, 37963, 37967, 37987, 37991, 37993, 37997, 38011, 38039, 38047, + 38053, 38069, 38083, 38113, 38119, 38149, 38153, 38167, 38177, 38183, + 38189, 38197, 38201, 38219, 38231, 38237, 38239, 38261, 38273, 38281, + 38287, 38299, 38303, 38317, 38321, 38327, 38329, 38333, 38351, 38371, + 38377, 38393, 38431, 38447, 38449, 38453, 38459, 38461, 38501, 38543, + 38557, 38561, 38567, 38569, 38593, 38603, 38609, 38611, 38629, 38639, + 38651, 38653, 38669, 38671, 38677, 38693, 38699, 38707, 38711, 38713, + 38723, 38729, 38737, 38747, 38749, 38767, 38783, 38791, 38803, 38821, + 38833, 38839, 38851, 38861, 38867, 38873, 38891, 38903, 38917, 38921, + 38923, 38933, 38953, 38959, 38971, 38977, 38993, 39019, 39023, 39041, + 39043, 39047, 39079, 39089, 39097, 39103, 39107, 39113, 39119, 39133, + 39139, 39157, 39161, 39163, 39181, 39191, 39199, 39209, 39217, 39227, + 39229, 39233, 39239, 39241, 39251, 39293, 39301, 39313, 39317, 39323, + 39341, 39343, 39359, 39367, 39371, 39373, 39383, 39397, 39409, 39419, + 39439, 39443, 39451, 39461, 39499, 39503, 39509, 39511, 39521, 39541, + 39551, 39563, 39569, 39581, 39607, 39619, 39623, 39631, 39659, 39667, + 39671, 39679, 39703, 39709, 39719, 39727, 39733, 39749, 39761, 39769, + 39779, 39791, 39799, 39821, 39827, 39829, 39839, 39841, 39847, 39857, + 39863, 39869, 39877, 39883, 39887, 39901, 39929, 39937, 39953, 39971, + 39979, 39983, 39989, 40009, 40013, 40031, 40037, 40039, 40063, 40087, + 40093, 40099, 40111, 40123, 40127, 40129, 40151, 40153, 40163, 40169, + 40177, 40189, 40193, 40213, 40231, 40237, 40241, 40253, 40277, 40283, + 40289, 40343, 40351, 40357, 40361, 40387, 40423, 40427, 40429, 40433, + 40459, 40471, 40483, 40487, 40493, 40499, 40507, 40519, 40529, 40531, + 40543, 40559, 40577, 40583, 40591, 40597, 40609, 40627, 40637, 40639, + 40693, 40697, 40699, 40709, 40739, 40751, 40759, 40763, 40771, 40787, + 40801, 40813, 40819, 40823, 40829, 40841, 40847, 40849, 40853, 40867, + 40879, 40883, 40897, 40903, 40927, 40933, 40939, 40949, 40961, 40973, + 40993, 41011, 41017, 41023, 41039, 41047, 41051, 41057, 41077, 41081, + 41113, 41117, 41131, 41141, 41143, 41149, 41161, 41177, 41179, 41183, + 41189, 41201, 41203, 41213, 41221, 41227, 41231, 41233, 41243, 41257, + 41263, 41269, 41281, 41299, 41333, 41341, 41351, 41357, 41381, 41387, + 41389, 41399, 41411, 41413, 41443, 41453, 41467, 41479, 41491, 41507, + 41513, 41519, 41521, 41539, 41543, 41549, 41579, 41593, 41597, 41603, + 41609, 41611, 41617, 41621, 41627, 41641, 41647, 41651, 41659, 41669, + 41681, 41687, 41719, 41729, 41737, 41759, 41761, 41771, 41777, 41801, + 41809, 41813, 41843, 41849, 41851, 41863, 41879, 41887, 41893, 41897, + 41903, 41911, 41927, 41941, 41947, 41953, 41957, 41959, 41969, 41981, + 41983, 41999, 42013, 42017, 42019, 42023, 42043, 42061, 42071, 42073, + 42083, 42089, 42101, 42131, 42139, 42157, 42169, 42179, 42181, 42187, + 42193, 42197, 42209, 42221, 42223, 42227, 42239, 42257, 42281, 42283, + 42293, 42299, 42307, 42323, 42331, 42337, 42349, 42359, 42373, 42379, + 42391, 42397, 42403, 42407, 42409, 42433, 42437, 42443, 42451, 42457, + 42461, 42463, 42467, 42473, 42487, 42491, 42499, 42509, 42533, 42557, + 42569, 42571, 42577, 42589, 42611, 42641, 42643, 42649, 42667, 42677, + 42683, 42689, 42697, 42701, 42703, 42709, 42719, 42727, 42737, 42743, + 42751, 42767, 42773, 42787, 42793, 42797, 42821, 42829, 42839, 42841, + 42853, 42859, 42863, 42899, 42901, 42923, 42929, 42937, 42943, 42953, + 42961, 42967, 42979, 42989, 43003, 43013, 43019, 43037, 43049, 43051, + 43063, 43067, 43093, 43103, 43117, 43133, 43151, 43159, 43177, 43189, + 43201, 43207, 43223, 43237, 43261, 43271, 43283, 43291, 43313, 43319, + 43321, 43331, 43391, 43397, 43399, 43403, 43411, 43427, 43441, 43451, + 43457, 43481, 43487, 43499, 43517, 43541, 43543, 43573, 43577, 43579, + 43591, 43597, 43607, 43609, 43613, 43627, 43633, 43649, 43651, 43661, + 43669, 43691, 43711, 43717, 43721, 43753, 43759, 43777, 43781, 43783, + 43787, 43789, 43793, 43801, 43853, 43867, 43889, 43891, 43913, 43933, + 43943, 43951, 43961, 43963, 43969, 43973, 43987, 43991, 43997, 44017, + 44021, 44027, 44029, 44041, 44053, 44059, 44071, 44087, 44089, 44101, + 44111, 44119, 44123, 44129, 44131, 44159, 44171, 44179, 44189, 44201, + 44203, 44207, 44221, 44249, 44257, 44263, 44267, 44269, 44273, 44279, + 44281, 44293, 44351, 44357, 44371, 44381, 44383, 44389, 44417, 44449, + 44453, 44483, 44491, 44497, 44501, 44507, 44519, 44531, 44533, 44537, + 44543, 44549, 44563, 44579, 44587, 44617, 44621, 44623, 44633, 44641, + 44647, 44651, 44657, 44683, 44687, 44699, 44701, 44711, 44729, 44741, + 44753, 44771, 44773, 44777, 44789, 44797, 44809, 44819, 44839, 44843, + 44851, 44867, 44879, 44887, 44893, 44909, 44917, 44927, 44939, 44953, + 44959, 44963, 44971, 44983, 44987, 45007, 45013, 45053, 45061, 45077, + 45083, 45119, 45121, 45127, 45131, 45137, 45139, 45161, 45179, 45181, + 45191, 45197, 45233, 45247, 45259, 45263, 45281, 45289, 45293, 45307, + 45317, 45319, 45329, 45337, 45341, 45343, 45361, 45377, 45389, 45403, + 45413, 45427, 45433, 45439, 45481, 45491, 45497, 45503, 45523, 45533, + 45541, 45553, 45557, 45569, 45587, 45589, 45599, 45613, 45631, 45641, + 45659, 45667, 45673, 45677, 45691, 45697, 45707, 45737, 45751, 45757, + 45763, 45767, 45779, 45817, 45821, 45823, 45827, 45833, 45841, 45853, + 45863, 45869, 45887, 45893, 45943, 45949, 45953, 45959, 45971, 45979, + 45989, 46021, 46027, 46049, 46051, 46061, 46073, 46091, 46093, 46099, + 46103, 46133, 46141, 46147, 46153, 46171, 46181, 46183, 46187, 46199, + 46219, 46229, 46237, 46261, 46271, 46273, 46279, 46301, 46307, 46309, + 46327, 46337, 46349, 46351, 46381, 46399, 46411, 46439, 46441, 46447, + 46451, 46457, 46471, 46477, 46489, 46499, 46507, 46511, 46523, 46549, + 46559, 46567, 46573, 46589, 46591, 46601, 46619, 46633, 46639, 46643, + 46649, 46663, 46679, 46681, 46687, 46691, 46703, 46723, 46727, 46747, + 46751, 46757, 46769, 46771, 46807, 46811, 46817, 46819, 46829, 46831, + 46853, 46861, 46867, 46877, 46889, 46901, 46919, 46933, 46957, 46993, + 46997, 47017, 47041, 47051, 47057, 47059, 47087, 47093, 47111, 47119, + 47123, 47129, 47137, 47143, 47147, 47149, 47161, 47189, 47207, 47221, + 47237, 47251, 47269, 47279, 47287, 47293, 47297, 47303, 47309, 47317, + 47339, 47351, 47353, 47363, 47381, 47387, 47389, 47407, 47417, 47419, + 47431, 47441, 47459, 47491, 47497, 47501, 47507, 47513, 47521, 47527, + 47533, 47543, 47563, 47569, 47581, 47591, 47599, 47609, 47623, 47629, + 47639, 47653, 47657, 47659, 47681, 47699, 47701, 47711, 47713, 47717, + 47737, 47741, 47743, 47777, 47779, 47791, 47797, 47807, 47809, 47819, + 47837, 47843, 47857, 47869, 47881, 47903, 47911, 47917, 47933, 47939, + 47947, 47951, 47963, 47969, 47977, 47981, 48017, 48023, 48029, 48049, + 48073, 48079, 48091, 48109, 48119, 48121, 48131, 48157, 48163, 48179, + 48187, 48193, 48197, 48221, 48239, 48247, 48259, 48271, 48281, 48299, + 48311, 48313, 48337, 48341, 48353, 48371, 48383, 48397, 48407, 48409, + 48413, 48437, 48449, 48463, 48473, 48479, 48481, 48487, 48491, 48497, + 48523, 48527, 48533, 48539, 48541, 48563, 48571, 48589, 48593, 48611, + 48619, 48623, 48647, 48649, 48661, 48673, 48677, 48679, 48731, 48733, + 48751, 48757, 48761, 48767, 48779, 48781, 48787, 48799, 48809, 48817, + 48821, 48823, 48847, 48857, 48859, 48869, 48871, 48883, 48889, 48907, + 48947, 48953, 48973, 48989, 48991, 49003, 49009, 49019, 49031, 49033, + 49037, 49043, 49057, 49069, 49081, 49103, 49109, 49117, 49121, 49123, + 49139, 49157, 49169, 49171, 49177, 49193, 49199, 49201, 49207, 49211, + 49223, 49253, 49261, 49277, 49279, 49297, 49307, 49331, 49333, 49339, + 49363, 49367, 49369, 49391, 49393, 49409, 49411, 49417, 49429, 49433, + 49451, 49459, 49463, 49477, 49481, 49499, 49523, 49529, 49531, 49537, + 49547, 49549, 49559, 49597, 49603, 49613, 49627, 49633, 49639, 49663, + 49667, 49669, 49681, 49697, 49711, 49727, 49739, 49741, 49747, 49757, + 49783, 49787, 49789, 49801, 49807, 49811, 49823, 49831, 49843, 49853, + 49871, 49877, 49891, 49919, 49921, 49927, 49937, 49939, 49943, 49957, + 49991, 49993, 49999, 50021, 50023, 50033, 50047, 50051, 50053, 50069, + 50077, 50087, 50093, 50101, 50111, 50119, 50123, 50129, 50131, 50147, + 50153, 50159, 50177, 50207, 50221, 50227, 50231, 50261, 50263, 50273, + 50287, 50291, 50311, 50321, 50329, 50333, 50341, 50359, 50363, 50377, + 50383, 50387, 50411, 50417, 50423, 50441, 50459, 50461, 50497, 50503, + 50513, 50527, 50539, 50543, 50549, 50551, 50581, 50587, 50591, 50593, + 50599, 50627, 50647, 50651, 50671, 50683, 50707, 50723, 50741, 50753, + 50767, 50773, 50777, 50789, 50821, 50833, 50839, 50849, 50857, 50867, + 50873, 50891, 50893, 50909, 50923, 50929, 50951, 50957, 50969, 50971, + 50989, 50993, 51001, 51031, 51043, 51047, 51059, 51061, 51071, 51109, + 51131, 51133, 51137, 51151, 51157, 51169, 51193, 51197, 51199, 51203, + 51217, 51229, 51239, 51241, 51257, 51263, 51283, 51287, 51307, 51329, + 51341, 51343, 51347, 51349, 51361, 51383, 51407, 51413, 51419, 51421, + 51427, 51431, 51437, 51439, 51449, 51461, 51473, 51479, 51481, 51487, + 51503, 51511, 51517, 51521, 51539, 51551, 51563, 51577, 51581, 51593, + 51599, 51607, 51613, 51631, 51637, 51647, 51659, 51673, 51679, 51683, + 51691, 51713, 51719, 51721, 51749, 51767, 51769, 51787, 51797, 51803, + 51817, 51827, 51829, 51839, 51853, 51859, 51869, 51871, 51893, 51899, + 51907, 51913, 51929, 51941, 51949, 51971, 51973, 51977, 51991, 52009, + 52021, 52027, 52051, 52057, 52067, 52069, 52081, 52103, 52121, 52127, + 52147, 52153, 52163, 52177, 52181, 52183, 52189, 52201, 52223, 52237, + 52249, 52253, 52259, 52267, 52289, 52291, 52301, 52313, 52321, 52361, + 52363, 52369, 52379, 52387, 52391, 52433, 52453, 52457, 52489, 52501, + 52511, 52517, 52529, 52541, 52543, 52553, 52561, 52567, 52571, 52579, + 52583, 52609, 52627, 52631, 52639, 52667, 52673, 52691, 52697, 52709, + 52711, 52721, 52727, 52733, 52747, 52757, 52769, 52783, 52807, 52813, + 52817, 52837, 52859, 52861, 52879, 52883, 52889, 52901, 52903, 52919, + 52937, 52951, 52957, 52963, 52967, 52973, 52981, 52999, 53003, 53017, + 53047, 53051, 53069, 53077, 53087, 53089, 53093, 53101, 53113, 53117, + 53129, 53147, 53149, 53161, 53171, 53173, 53189, 53197, 53201, 53231, + 53233, 53239, 53267, 53269, 53279, 53281, 53299, 53309, 53323, 53327, + 53353, 53359, 53377, 53381, 53401, 53407, 53411, 53419, 53437, 53441, + 53453, 53479, 53503, 53507, 53527, 53549, 53551, 53569, 53591, 53593, + 53597, 53609, 53611, 53617, 53623, 53629, 53633, 53639, 53653, 53657, + 53681, 53693, 53699, 53717, 53719, 53731, 53759, 53773, 53777, 53783, + 53791, 53813, 53819, 53831, 53849, 53857, 53861, 53881, 53887, 53891, + 53897, 53899, 53917, 53923, 53927, 53939, 53951, 53959, 53987, 53993, + 54001, 54011, 54013, 54037, 54049, 54059, 54083, 54091, 54101, 54121, + 54133, 54139, 54151, 54163, 54167, 54181, 54193, 54217, 54251, 54269, + 54277, 54287, 54293, 54311, 54319, 54323, 54331, 54347, 54361, 54367, + 54371, 54377, 54401, 54403, 54409, 54413, 54419, 54421, 54437, 54443, + 54449, 54469, 54493, 54497, 54499, 54503, 54517, 54521, 54539, 54541, + 54547, 54559, 54563, 54577, 54581, 54583, 54601, 54617, 54623, 54629, + 54631, 54647, 54667, 54673, 54679, 54709, 54713, 54721, 54727, 54751, + 54767, 54773, 54779, 54787, 54799, 54829, 54833, 54851, 54869, 54877, + 54881, 54907, 54917, 54919, 54941, 54949, 54959, 54973, 54979, 54983, + 55001, 55009, 55021, 55049, 55051, 55057, 55061, 55073, 55079, 55103, + 55109, 55117, 55127, 55147, 55163, 55171, 55201, 55207, 55213, 55217, + 55219, 55229, 55243, 55249, 55259, 55291, 55313, 55331, 55333, 55337, + 55339, 55343, 55351, 55373, 55381, 55399, 55411, 55439, 55441, 55457, + 55469, 55487, 55501, 55511, 55529, 55541, 55547, 55579, 55589, 55603, + 55609, 55619, 55621, 55631, 55633, 55639, 55661, 55663, 55667, 55673, + 55681, 55691, 55697, 55711, 55717, 55721, 55733, 55763, 55787, 55793, + 55799, 55807, 55813, 55817, 55819, 55823, 55829, 55837, 55843, 55849, + 55871, 55889, 55897, 55901, 55903, 55921, 55927, 55931, 55933, 55949, + 55967, 55987, 55997, 56003, 56009, 56039, 56041, 56053, 56081, 56087, + 56093, 56099, 56101, 56113, 56123, 56131, 56149, 56167, 56171, 56179, + 56197, 56207, 56209, 56237, 56239, 56249, 56263, 56267, 56269, 56299, + 56311, 56333, 56359, 56369, 56377, 56383, 56393, 56401, 56417, 56431, + 56437, 56443, 56453, 56467, 56473, 56477, 56479, 56489, 56501, 56503, + 56509, 56519, 56527, 56531, 56533, 56543, 56569, 56591, 56597, 56599, + 56611, 56629, 56633, 56659, 56663, 56671, 56681, 56687, 56701, 56711, + 56713, 56731, 56737, 56747, 56767, 56773, 56779, 56783, 56807, 56809, + 56813, 56821, 56827, 56843, 56857, 56873, 56891, 56893, 56897, 56909, + 56911, 56921, 56923, 56929, 56941, 56951, 56957, 56963, 56983, 56989, + 56993, 56999, 57037, 57041, 57047, 57059, 57073, 57077, 57089, 57097, + 57107, 57119, 57131, 57139, 57143, 57149, 57163, 57173, 57179, 57191, + 57193, 57203, 57221, 57223, 57241, 57251, 57259, 57269, 57271, 57283, + 57287, 57301, 57329, 57331, 57347, 57349, 57367, 57373, 57383, 57389, + 57397, 57413, 57427, 57457, 57467, 57487, 57493, 57503, 57527, 57529, + 57557, 57559, 57571, 57587, 57593, 57601, 57637, 57641, 57649, 57653, + 57667, 57679, 57689, 57697, 57709, 57713, 57719, 57727, 57731, 57737, + 57751, 57773, 57781, 57787, 57791, 57793, 57803, 57809, 57829, 57839, + 57847, 57853, 57859, 57881, 57899, 57901, 57917, 57923, 57943, 57947, + 57973, 57977, 57991, 58013, 58027, 58031, 58043, 58049, 58057, 58061, + 58067, 58073, 58099, 58109, 58111, 58129, 58147, 58151, 58153, 58169, + 58171, 58189, 58193, 58199, 58207, 58211, 58217, 58229, 58231, 58237, + 58243, 58271, 58309, 58313, 58321, 58337, 58363, 58367, 58369, 58379, + 58391, 58393, 58403, 58411, 58417, 58427, 58439, 58441, 58451, 58453, + 58477, 58481, 58511, 58537, 58543, 58549, 58567, 58573, 58579, 58601, + 58603, 58613, 58631, 58657, 58661, 58679, 58687, 58693, 58699, 58711, + 58727, 58733, 58741, 58757, 58763, 58771, 58787, 58789, 58831, 58889, + 58897, 58901, 58907, 58909, 58913, 58921, 58937, 58943, 58963, 58967, + 58979, 58991, 58997, 59009, 59011, 59021, 59023, 59029, 59051, 59053, + 59063, 59069, 59077, 59083, 59093, 59107, 59113, 59119, 59123, 59141, + 59149, 59159, 59167, 59183, 59197, 59207, 59209, 59219, 59221, 59233, + 59239, 59243, 59263, 59273, 59281, 59333, 59341, 59351, 59357, 59359, + 59369, 59377, 59387, 59393, 59399, 59407, 59417, 59419, 59441, 59443, + 59447, 59453, 59467, 59471, 59473, 59497, 59509, 59513, 59539, 59557, + 59561, 59567, 59581, 59611, 59617, 59621, 59627, 59629, 59651, 59659, + 59663, 59669, 59671, 59693, 59699, 59707, 59723, 59729, 59743, 59747, + 59753, 59771, 59779, 59791, 59797, 59809, 59833, 59863, 59879, 59887, + 59921, 59929, 59951, 59957, 59971, 59981, 59999, 60013, 60017, 60029, + 60037, 60041, 60077, 60083, 60089, 60091, 60101, 60103, 60107, 60127, + 60133, 60139, 60149, 60161, 60167, 60169, 60209, 60217, 60223, 60251, + 60257, 60259, 60271, 60289, 60293, 60317, 60331, 60337, 60343, 60353, + 60373, 60383, 60397, 60413, 60427, 60443, 60449, 60457, 60493, 60497, + 60509, 60521, 60527, 60539, 60589, 60601, 60607, 60611, 60617, 60623, + 60631, 60637, 60647, 60649, 60659, 60661, 60679, 60689, 60703, 60719, + 60727, 60733, 60737, 60757, 60761, 60763, 60773, 60779, 60793, 60811, + 60821, 60859, 60869, 60887, 60889, 60899, 60901, 60913, 60917, 60919, + 60923, 60937, 60943, 60953, 60961, 61001, 61007, 61027, 61031, 61043, + 61051, 61057, 61091, 61099, 61121, 61129, 61141, 61151, 61153, 61169, + 61211, 61223, 61231, 61253, 61261, 61283, 61291, 61297, 61331, 61333, + 61339, 61343, 61357, 61363, 61379, 61381, 61403, 61409, 61417, 61441, + 61463, 61469, 61471, 61483, 61487, 61493, 61507, 61511, 61519, 61543, + 61547, 61553, 61559, 61561, 61583, 61603, 61609, 61613, 61627, 61631, + 61637, 61643, 61651, 61657, 61667, 61673, 61681, 61687, 61703, 61717, + 61723, 61729, 61751, 61757, 61781, 61813, 61819, 61837, 61843, 61861, + 61871, 61879, 61909, 61927, 61933, 61949, 61961, 61967, 61979, 61981, + 61987, 61991, 62003, 62011, 62017, 62039, 62047, 62053, 62057, 62071, + 62081, 62099, 62119, 62129, 62131, 62137, 62141, 62143, 62171, 62189, + 62191, 62201, 62207, 62213, 62219, 62233, 62273, 62297, 62299, 62303, + 62311, 62323, 62327, 62347, 62351, 62383, 62401, 62417, 62423, 62459, + 62467, 62473, 62477, 62483, 62497, 62501, 62507, 62533, 62539, 62549, + 62563, 62581, 62591, 62597, 62603, 62617, 62627, 62633, 62639, 62653, + 62659, 62683, 62687, 62701, 62723, 62731, 62743, 62753, 62761, 62773, + 62791, 62801, 62819, 62827, 62851, 62861, 62869, 62873, 62897, 62903, + 62921, 62927, 62929, 62939, 62969, 62971, 62981, 62983, 62987, 62989, + 63029, 63031, 63059, 63067, 63073, 63079, 63097, 63103, 63113, 63127, + 63131, 63149, 63179, 63197, 63199, 63211, 63241, 63247, 63277, 63281, + 63299, 63311, 63313, 63317, 63331, 63337, 63347, 63353, 63361, 63367, + 63377, 63389, 63391, 63397, 63409, 63419, 63421, 63439, 63443, 63463, + 63467, 63473, 63487, 63493, 63499, 63521, 63527, 63533, 63541, 63559, + 63577, 63587, 63589, 63599, 63601, 63607, 63611, 63617, 63629, 63647, + 63649, 63659, 63667, 63671, 63689, 63691, 63697, 63703, 63709, 63719, + 63727, 63737, 63743, 63761, 63773, 63781, 63793, 63799, 63803, 63809, + 63823, 63839, 63841, 63853, 63857, 63863, 63901, 63907, 63913, 63929, + 63949, 63977, 63997, 64007, 64013, 64019, 64033, 64037, 64063, 64067, + 64081, 64091, 64109, 64123, 64151, 64153, 64157, 64171, 64187, 64189, + 64217, 64223, 64231, 64237, 64271, 64279, 64283, 64301, 64303, 64319, + 64327, 64333, 64373, 64381, 64399, 64403, 64433, 64439, 64451, 64453, + 64483, 64489, 64499, 64513, 64553, 64567, 64577, 64579, 64591, 64601, + 64609, 64613, 64621, 64627, 64633, 64661, 64663, 64667, 64679, 64693, + 64709, 64717, 64747, 64763, 64781, 64783, 64793, 64811, 64817, 64849, + 64853, 64871, 64877, 64879, 64891, 64901, 64919, 64921, 64927, 64937, + 64951, 64969, 64997, 65003, 65011, 65027, 65029, 65033, 65053, 65063, + 65071, 65089, 65099, 65101, 65111, 65119, 65123, 65129, 65141, 65147, + 65167, 65171, 65173, 65179, 65183, 65203, 65213, 65239, 65257, 65267, + 65269, 65287, 65293, 65309, 65323, 65327, 65353, 65357, 65371, 65381, + 65393, 65407, 65413, 65419, 65423, 65437, 65447, 65449, 65479, 65497, + 65519, 65521, 65537, 65539, 65543, 65551, 65557, 65563, 65579, 65581, + 65587, 65599, 65609, 65617, 65629, 65633, 65647, 65651, 65657, 65677, + 65687, 65699, 65701, 65707, 65713, 65717, 65719, 65729, 65731, 65761, + 65777, 65789, 65809, 65827, 65831, 65837, 65839, 65843, 65851, 65867, + 65881, 65899, 65921, 65927, 65929, 65951, 65957, 65963, 65981, 65983, + 65993, 66029, 66037, 66041, 66047, 66067, 66071, 66083, 66089, 66103, + 66107, 66109, 66137, 66161, 66169, 66173, 66179, 66191, 66221, 66239, + 66271, 66293, 66301, 66337, 66343, 66347, 66359, 66361, 66373, 66377, + 66383, 66403, 66413, 66431, 66449, 66457, 66463, 66467, 66491, 66499, + 66509, 66523, 66529, 66533, 66541, 66553, 66569, 66571, 66587, 66593, + 66601, 66617, 66629, 66643, 66653, 66683, 66697, 66701, 66713, 66721, + 66733, 66739, 66749, 66751, 66763, 66791, 66797, 66809, 66821, 66841, + 66851, 66853, 66863, 66877, 66883, 66889, 66919, 66923, 66931, 66943, + 66947, 66949, 66959, 66973, 66977, 67003, 67021, 67033, 67043, 67049, + 67057, 67061, 67073, 67079, 67103, 67121, 67129, 67139, 67141, 67153, + 67157, 67169, 67181, 67187, 67189, 67211, 67213, 67217, 67219, 67231, + 67247, 67261, 67271, 67273, 67289, 67307, 67339, 67343, 67349, 67369, + 67391, 67399, 67409, 67411, 67421, 67427, 67429, 67433, 67447, 67453, + 67477, 67481, 67489, 67493, 67499, 67511, 67523, 67531, 67537, 67547, + 67559, 67567, 67577, 67579, 67589, 67601, 67607, 67619, 67631, 67651, + 67679, 67699, 67709, 67723, 67733, 67741, 67751, 67757, 67759, 67763, + 67777, 67783, 67789, 67801, 67807, 67819, 67829, 67843, 67853, 67867, + 67883, 67891, 67901, 67927, 67931, 67933, 67939, 67943, 67957, 67961, + 67967, 67979, 67987, 67993, 68023, 68041, 68053, 68059, 68071, 68087, + 68099, 68111, 68113, 68141, 68147, 68161, 68171, 68207, 68209, 68213, + 68219, 68227, 68239, 68261, 68279, 68281, 68311, 68329, 68351, 68371, + 68389, 68399, 68437, 68443, 68447, 68449, 68473, 68477, 68483, 68489, + 68491, 68501, 68507, 68521, 68531, 68539, 68543, 68567, 68581, 68597, + 68611, 68633, 68639, 68659, 68669, 68683, 68687, 68699, 68711, 68713, + 68729, 68737, 68743, 68749, 68767, 68771, 68777, 68791, 68813, 68819, + 68821, 68863, 68879, 68881, 68891, 68897, 68899, 68903, 68909, 68917, + 68927, 68947, 68963, 68993, 69001, 69011, 69019, 69029, 69031, 69061, + 69067, 69073, 69109, 69119, 69127, 69143, 69149, 69151, 69163, 69191, + 69193, 69197, 69203, 69221, 69233, 69239, 69247, 69257, 69259, 69263, + 69313, 69317, 69337, 69341, 69371, 69379, 69383, 69389, 69401, 69403, + 69427, 69431, 69439, 69457, 69463, 69467, 69473, 69481, 69491, 69493, + 69497, 69499, 69539, 69557, 69593, 69623, 69653, 69661, 69677, 69691, + 69697, 69709, 69737, 69739, 69761, 69763, 69767, 69779, 69809, 69821, + 69827, 69829, 69833, 69847, 69857, 69859, 69877, 69899, 69911, 69929, + 69931, 69941, 69959, 69991, 69997, 70001, 70003, 70009, 70019, 70039, + 70051, 70061, 70067, 70079, 70099, 70111, 70117, 70121, 70123, 70139, + 70141, 70157, 70163, 70177, 70181, 70183, 70199, 70201, 70207, 70223, + 70229, 70237, 70241, 70249, 70271, 70289, 70297, 70309, 70313, 70321, + 70327, 70351, 70373, 70379, 70381, 70393, 70423, 70429, 70439, 70451, + 70457, 70459, 70481, 70487, 70489, 70501, 70507, 70529, 70537, 70549, + 70571, 70573, 70583, 70589, 70607, 70619, 70621, 70627, 70639, 70657, + 70663, 70667, 70687, 70709, 70717, 70729, 70753, 70769, 70783, 70793, + 70823, 70841, 70843, 70849, 70853, 70867, 70877, 70879, 70891, 70901, + 70913, 70919, 70921, 70937, 70949, 70951, 70957, 70969, 70979, 70981, + 70991, 70997, 70999, 71011, 71023, 71039, 71059, 71069, 71081, 71089, + 71119, 71129, 71143, 71147, 71153, 71161, 71167, 71171, 71191, 71209, + 71233, 71237, 71249, 71257, 71261, 71263, 71287, 71293, 71317, 71327, + 71329, 71333, 71339, 71341, 71347, 71353, 71359, 71363, 71387, 71389, + 71399, 71411, 71413, 71419, 71429, 71437, 71443, 71453, 71471, 71473, + 71479, 71483, 71503, 71527, 71537, 71549, 71551, 71563, 71569, 71593, + 71597, 71633, 71647, 71663, 71671, 71693, 71699, 71707, 71711, 71713, + 71719, 71741, 71761, 71777, 71789, 71807, 71809, 71821, 71837, 71843, + 71849, 71861, 71867, 71879, 71881, 71887, 71899, 71909, 71917, 71933, + 71941, 71947, 71963, 71971, 71983, 71987, 71993, 71999, 72019, 72031, + 72043, 72047, 72053, 72073, 72077, 72089, 72091, 72101, 72103, 72109, + 72139, 72161, 72167, 72169, 72173, 72211, 72221, 72223, 72227, 72229, + 72251, 72253, 72269, 72271, 72277, 72287, 72307, 72313, 72337, 72341, + 72353, 72367, 72379, 72383, 72421, 72431, 72461, 72467, 72469, 72481, + 72493, 72497, 72503, 72533, 72547, 72551, 72559, 72577, 72613, 72617, + 72623, 72643, 72647, 72649, 72661, 72671, 72673, 72679, 72689, 72701, + 72707, 72719, 72727, 72733, 72739, 72763, 72767, 72797, 72817, 72823, + 72859, 72869, 72871, 72883, 72889, 72893, 72901, 72907, 72911, 72923, + 72931, 72937, 72949, 72953, 72959, 72973, 72977, 72997, 73009, 73013, + 73019, 73037, 73039, 73043, 73061, 73063, 73079, 73091, 73121, 73127, + 73133, 73141, 73181, 73189, 73237, 73243, 73259, 73277, 73291, 73303, + 73309, 73327, 73331, 73351, 73361, 73363, 73369, 73379, 73387, 73417, + 73421, 73433, 73453, 73459, 73471, 73477, 73483, 73517, 73523, 73529, + 73547, 73553, 73561, 73571, 73583, 73589, 73597, 73607, 73609, 73613, + 73637, 73643, 73651, 73673, 73679, 73681, 73693, 73699, 73709, 73721, + 73727, 73751, 73757, 73771, 73783, 73819, 73823, 73847, 73849, 73859, + 73867, 73877, 73883, 73897, 73907, 73939, 73943, 73951, 73961, 73973, + 73999, 74017, 74021, 74027, 74047, 74051, 74071, 74077, 74093, 74099, + 74101, 74131, 74143, 74149, 74159, 74161, 74167, 74177, 74189, 74197, + 74201, 74203, 74209, 74219, 74231, 74257, 74279, 74287, 74293, 74297, + 74311, 74317, 74323, 74353, 74357, 74363, 74377, 74381, 74383, 74411, + 74413, 74419, 74441, 74449, 74453, 74471, 74489, 74507, 74509, 74521, + 74527, 74531, 74551, 74561, 74567, 74573, 74587, 74597, 74609, 74611, + 74623, 74653, 74687, 74699, 74707, 74713, 74717, 74719, 74729, 74731, + 74747, 74759, 74761, 74771, 74779, 74797, 74821, 74827, 74831, 74843, + 74857, 74861, 74869, 74873, 74887, 74891, 74897, 74903, 74923, 74929, + 74933, 74941, 74959, 75011, 75013, 75017, 75029, 75037, 75041, 75079, + 75083, 75109, 75133, 75149, 75161, 75167, 75169, 75181, 75193, 75209, + 75211, 75217, 75223, 75227, 75239, 75253, 75269, 75277, 75289, 75307, + 75323, 75329, 75337, 75347, 75353, 75367, 75377, 75389, 75391, 75401, + 75403, 75407, 75431, 75437, 75479, 75503, 75511, 75521, 75527, 75533, + 75539, 75541, 75553, 75557, 75571, 75577, 75583, 75611, 75617, 75619, + 75629, 75641, 75653, 75659, 75679, 75683, 75689, 75703, 75707, 75709, + 75721, 75731, 75743, 75767, 75773, 75781, 75787, 75793, 75797, 75821, + 75833, 75853, 75869, 75883, 75913, 75931, 75937, 75941, 75967, 75979, + 75983, 75989, 75991, 75997, 76001, 76003, 76031, 76039, 76079, 76081, + 76091, 76099, 76103, 76123, 76129, 76147, 76157, 76159, 76163, 76207, + 76213, 76231, 76243, 76249, 76253, 76259, 76261, 76283, 76289, 76303, + 76333, 76343, 76367, 76369, 76379, 76387, 76403, 76421, 76423, 76441, + 76463, 76471, 76481, 76487, 76493, 76507, 76511, 76519, 76537, 76541, + 76543, 76561, 76579, 76597, 76603, 76607, 76631, 76649, 76651, 76667, + 76673, 76679, 76697, 76717, 76733, 76753, 76757, 76771, 76777, 76781, + 76801, 76819, 76829, 76831, 76837, 76847, 76871, 76873, 76883, 76907, + 76913, 76919, 76943, 76949, 76961, 76963, 76991, 77003, 77017, 77023, + 77029, 77041, 77047, 77069, 77081, 77093, 77101, 77137, 77141, 77153, + 77167, 77171, 77191, 77201, 77213, 77237, 77239, 77243, 77249, 77261, + 77263, 77267, 77269, 77279, 77291, 77317, 77323, 77339, 77347, 77351, + 77359, 77369, 77377, 77383, 77417, 77419, 77431, 77447, 77471, 77477, + 77479, 77489, 77491, 77509, 77513, 77521, 77527, 77543, 77549, 77551, + 77557, 77563, 77569, 77573, 77587, 77591, 77611, 77617, 77621, 77641, + 77647, 77659, 77681, 77687, 77689, 77699, 77711, 77713, 77719, 77723, + 77731, 77743, 77747, 77761, 77773, 77783, 77797, 77801, 77813, 77839, + 77849, 77863, 77867, 77893, 77899, 77929, 77933, 77951, 77969, 77977, + 77983, 77999, 78007, 78017, 78031, 78041, 78049, 78059, 78079, 78101, + 78121, 78137, 78139, 78157, 78163, 78167, 78173, 78179, 78191, 78193, + 78203, 78229, 78233, 78241, 78259, 78277, 78283, 78301, 78307, 78311, + 78317, 78341, 78347, 78367, 78401, 78427, 78437, 78439, 78467, 78479, + 78487, 78497, 78509, 78511, 78517, 78539, 78541, 78553, 78569, 78571, + 78577, 78583, 78593, 78607, 78623, 78643, 78649, 78653, 78691, 78697, + 78707, 78713, 78721, 78737, 78779, 78781, 78787, 78791, 78797, 78803, + 78809, 78823, 78839, 78853, 78857, 78877, 78887, 78889, 78893, 78901, + 78919, 78929, 78941, 78977, 78979, 78989, 79031, 79039, 79043, 79063, + 79087, 79103, 79111, 79133, 79139, 79147, 79151, 79153, 79159, 79181, + 79187, 79193, 79201, 79229, 79231, 79241, 79259, 79273, 79279, 79283, + 79301, 79309, 79319, 79333, 79337, 79349, 79357, 79367, 79379, 79393, + 79397, 79399, 79411, 79423, 79427, 79433, 79451, 79481, 79493, 79531, + 79537, 79549, 79559, 79561, 79579, 79589, 79601, 79609, 79613, 79621, + 79627, 79631, 79633, 79657, 79669, 79687, 79691, 79693, 79697, 79699, + 79757, 79769, 79777, 79801, 79811, 79813, 79817, 79823, 79829, 79841, + 79843, 79847, 79861, 79867, 79873, 79889, 79901, 79903, 79907, 79939, + 79943, 79967, 79973, 79979, 79987, 79997, 79999, 80021, 80039, 80051, + 80071, 80077, 80107, 80111, 80141, 80147, 80149, 80153, 80167, 80173, + 80177, 80191, 80207, 80209, 80221, 80231, 80233, 80239, 80251, 80263, + 80273, 80279, 80287, 80309, 80317, 80329, 80341, 80347, 80363, 80369, + 80387, 80407, 80429, 80447, 80449, 80471, 80473, 80489, 80491, 80513, + 80527, 80537, 80557, 80567, 80599, 80603, 80611, 80621, 80627, 80629, + 80651, 80657, 80669, 80671, 80677, 80681, 80683, 80687, 80701, 80713, + 80737, 80747, 80749, 80761, 80777, 80779, 80783, 80789, 80803, 80809, + 80819, 80831, 80833, 80849, 80863, 80897, 80909, 80911, 80917, 80923, + 80929, 80933, 80953, 80963, 80989, 81001, 81013, 81017, 81019, 81023, + 81031, 81041, 81043, 81047, 81049, 81071, 81077, 81083, 81097, 81101, + 81119, 81131, 81157, 81163, 81173, 81181, 81197, 81199, 81203, 81223, + 81233, 81239, 81281, 81283, 81293, 81299, 81307, 81331, 81343, 81349, + 81353, 81359, 81371, 81373, 81401, 81409, 81421, 81439, 81457, 81463, + 81509, 81517, 81527, 81533, 81547, 81551, 81553, 81559, 81563, 81569, + 81611, 81619, 81629, 81637, 81647, 81649, 81667, 81671, 81677, 81689, + 81701, 81703, 81707, 81727, 81737, 81749, 81761, 81769, 81773, 81799, + 81817, 81839, 81847, 81853, 81869, 81883, 81899, 81901, 81919, 81929, + 81931, 81937, 81943, 81953, 81967, 81971, 81973, 82003, 82007, 82009, + 82013, 82021, 82031, 82037, 82039, 82051, 82067, 82073, 82129, 82139, + 82141, 82153, 82163, 82171, 82183, 82189, 82193, 82207, 82217, 82219, + 82223, 82231, 82237, 82241, 82261, 82267, 82279, 82301, 82307, 82339, + 82349, 82351, 82361, 82373, 82387, 82393, 82421, 82457, 82463, 82469, + 82471, 82483, 82487, 82493, 82499, 82507, 82529, 82531, 82549, 82559, + 82561, 82567, 82571, 82591, 82601, 82609, 82613, 82619, 82633, 82651, + 82657, 82699, 82721, 82723, 82727, 82729, 82757, 82759, 82763, 82781, + 82787, 82793, 82799, 82811, 82813, 82837, 82847, 82883, 82889, 82891, + 82903, 82913, 82939, 82963, 82981, 82997, 83003, 83009, 83023, 83047, + 83059, 83063, 83071, 83077, 83089, 83093, 83101, 83117, 83137, 83177, + 83203, 83207, 83219, 83221, 83227, 83231, 83233, 83243, 83257, 83267, + 83269, 83273, 83299, 83311, 83339, 83341, 83357, 83383, 83389, 83399, + 83401, 83407, 83417, 83423, 83431, 83437, 83443, 83449, 83459, 83471, + 83477, 83497, 83537, 83557, 83561, 83563, 83579, 83591, 83597, 83609, + 83617, 83621, 83639, 83641, 83653, 83663, 83689, 83701, 83717, 83719, + 83737, 83761, 83773, 83777, 83791, 83813, 83833, 83843, 83857, 83869, + 83873, 83891, 83903, 83911, 83921, 83933, 83939, 83969, 83983, 83987, + 84011, 84017, 84047, 84053, 84059, 84061, 84067, 84089, 84121, 84127, + 84131, 84137, 84143, 84163, 84179, 84181, 84191, 84199, 84211, 84221, + 84223, 84229, 84239, 84247, 84263, 84299, 84307, 84313, 84317, 84319, + 84347, 84349, 84377, 84389, 84391, 84401, 84407, 84421, 84431, 84437, + 84443, 84449, 84457, 84463, 84467, 84481, 84499, 84503, 84509, 84521, + 84523, 84533, 84551, 84559, 84589, 84629, 84631, 84649, 84653, 84659, + 84673, 84691, 84697, 84701, 84713, 84719, 84731, 84737, 84751, 84761, + 84787, 84793, 84809, 84811, 84827, 84857, 84859, 84869, 84871, 84913, + 84919, 84947, 84961, 84967, 84977, 84979, 84991, 85009, 85021, 85027, + 85037, 85049, 85061, 85081, 85087, 85091, 85093, 85103, 85109, 85121, + 85133, 85147, 85159, 85193, 85199, 85201, 85213, 85223, 85229, 85237, + 85243, 85247, 85259, 85297, 85303, 85313, 85331, 85333, 85361, 85363, + 85369, 85381, 85411, 85427, 85429, 85439, 85447, 85451, 85453, 85469, + 85487, 85513, 85517, 85523, 85531, 85549, 85571, 85577, 85597, 85601, + 85607, 85619, 85621, 85627, 85639, 85643, 85661, 85667, 85669, 85691, + 85703, 85711, 85717, 85733, 85751, 85781, 85793, 85817, 85819, 85829, + 85831, 85837, 85843, 85847, 85853, 85889, 85903, 85909, 85931, 85933, + 85991, 85999, 86011, 86017, 86027, 86029, 86069, 86077, 86083, 86111, + 86113, 86117, 86131, 86137, 86143, 86161, 86171, 86179, 86183, 86197, + 86201, 86209, 86239, 86243, 86249, 86257, 86263, 86269, 86287, 86291, + 86293, 86297, 86311, 86323, 86341, 86351, 86353, 86357, 86369, 86371, + 86381, 86389, 86399, 86413, 86423, 86441, 86453, 86461, 86467, 86477, + 86491, 86501, 86509, 86531, 86533, 86539, 86561, 86573, 86579, 86587, + 86599, 86627, 86629, 86677, 86689, 86693, 86711, 86719, 86729, 86743, + 86753, 86767, 86771, 86783, 86813, 86837, 86843, 86851, 86857, 86861, + 86869, 86923, 86927, 86929, 86939, 86951, 86959, 86969, 86981, 86993, + 87011, 87013, 87037, 87041, 87049, 87071, 87083, 87103, 87107, 87119, + 87121, 87133, 87149, 87151, 87179, 87181, 87187, 87211, 87221, 87223, + 87251, 87253, 87257, 87277, 87281, 87293, 87299, 87313, 87317, 87323, + 87337, 87359, 87383, 87403, 87407, 87421, 87427, 87433, 87443, 87473, + 87481, 87491, 87509, 87511, 87517, 87523, 87539, 87541, 87547, 87553, + 87557, 87559, 87583, 87587, 87589, 87613, 87623, 87629, 87631, 87641, + 87643, 87649, 87671, 87679, 87683, 87691, 87697, 87701, 87719, 87721, + 87739, 87743, 87751, 87767, 87793, 87797, 87803, 87811, 87833, 87853, + 87869, 87877, 87881, 87887, 87911, 87917, 87931, 87943, 87959, 87961, + 87973, 87977, 87991, 88001, 88003, 88007, 88019, 88037, 88069, 88079, + 88093, 88117, 88129, 88169, 88177, 88211, 88223, 88237, 88241, 88259, + 88261, 88289, 88301, 88321, 88327, 88337, 88339, 88379, 88397, 88411, + 88423, 88427, 88463, 88469, 88471, 88493, 88499, 88513, 88523, 88547, + 88589, 88591, 88607, 88609, 88643, 88651, 88657, 88661, 88663, 88667, + 88681, 88721, 88729, 88741, 88747, 88771, 88789, 88793, 88799, 88801, + 88807, 88811, 88813, 88817, 88819, 88843, 88853, 88861, 88867, 88873, + 88883, 88897, 88903, 88919, 88937, 88951, 88969, 88993, 88997, 89003, + 89009, 89017, 89021, 89041, 89051, 89057, 89069, 89071, 89083, 89087, + 89101, 89107, 89113, 89119, 89123, 89137, 89153, 89189, 89203, 89209, + 89213, 89227, 89231, 89237, 89261, 89269, 89273, 89293, 89303, 89317, + 89329, 89363, 89371, 89381, 89387, 89393, 89399, 89413, 89417, 89431, + 89443, 89449, 89459, 89477, 89491, 89501, 89513, 89519, 89521, 89527, + 89533, 89561, 89563, 89567, 89591, 89597, 89599, 89603, 89611, 89627, + 89633, 89653, 89657, 89659, 89669, 89671, 89681, 89689, 89753, 89759, + 89767, 89779, 89783, 89797, 89809, 89819, 89821, 89833, 89839, 89849, + 89867, 89891, 89897, 89899, 89909, 89917, 89923, 89939, 89959, 89963, + 89977, 89983, 89989, 90001, 90007, 90011, 90017, 90019, 90023, 90031, + 90053, 90059, 90067, 90071, 90073, 90089, 90107, 90121, 90127, 90149, + 90163, 90173, 90187, 90191, 90197, 90199, 90203, 90217, 90227, 90239, + 90247, 90263, 90271, 90281, 90289, 90313, 90353, 90359, 90371, 90373, + 90379, 90397, 90401, 90403, 90407, 90437, 90439, 90469, 90473, 90481, + 90499, 90511, 90523, 90527, 90529, 90533, 90547, 90583, 90599, 90617, + 90619, 90631, 90641, 90647, 90659, 90677, 90679, 90697, 90703, 90709, + 90731, 90749, 90787, 90793, 90803, 90821, 90823, 90833, 90841, 90847, + 90863, 90887, 90901, 90907, 90911, 90917, 90931, 90947, 90971, 90977, + 90989, 90997, 91009, 91019, 91033, 91079, 91081, 91097, 91099, 91121, + 91127, 91129, 91139, 91141, 91151, 91153, 91159, 91163, 91183, 91193, + 91199, 91229, 91237, 91243, 91249, 91253, 91283, 91291, 91297, 91303, + 91309, 91331, 91367, 91369, 91373, 91381, 91387, 91393, 91397, 91411, + 91423, 91433, 91453, 91457, 91459, 91463, 91493, 91499, 91513, 91529, + 91541, 91571, 91573, 91577, 91583, 91591, 91621, 91631, 91639, 91673, + 91691, 91703, 91711, 91733, 91753, 91757, 91771, 91781, 91801, 91807, + 91811, 91813, 91823, 91837, 91841, 91867, 91873, 91909, 91921, 91939, + 91943, 91951, 91957, 91961, 91967, 91969, 91997, 92003, 92009, 92033, + 92041, 92051, 92077, 92083, 92107, 92111, 92119, 92143, 92153, 92173, + 92177, 92179, 92189, 92203, 92219, 92221, 92227, 92233, 92237, 92243, + 92251, 92269, 92297, 92311, 92317, 92333, 92347, 92353, 92357, 92363, + 92369, 92377, 92381, 92383, 92387, 92399, 92401, 92413, 92419, 92431, + 92459, 92461, 92467, 92479, 92489, 92503, 92507, 92551, 92557, 92567, + 92569, 92581, 92593, 92623, 92627, 92639, 92641, 92647, 92657, 92669, + 92671, 92681, 92683, 92693, 92699, 92707, 92717, 92723, 92737, 92753, + 92761, 92767, 92779, 92789, 92791, 92801, 92809, 92821, 92831, 92849, + 92857, 92861, 92863, 92867, 92893, 92899, 92921, 92927, 92941, 92951, + 92957, 92959, 92987, 92993, 93001, 93047, 93053, 93059, 93077, 93083, + 93089, 93097, 93103, 93113, 93131, 93133, 93139, 93151, 93169, 93179, + 93187, 93199, 93229, 93239, 93241, 93251, 93253, 93257, 93263, 93281, + 93283, 93287, 93307, 93319, 93323, 93329, 93337, 93371, 93377, 93383, + 93407, 93419, 93427, 93463, 93479, 93481, 93487, 93491, 93493, 93497, + 93503, 93523, 93529, 93553, 93557, 93559, 93563, 93581, 93601, 93607, + 93629, 93637, 93683, 93701, 93703, 93719, 93739, 93761, 93763, 93787, + 93809, 93811, 93827, 93851, 93871, 93887, 93889, 93893, 93901, 93911, + 93913, 93923, 93937, 93941, 93949, 93967, 93971, 93979, 93983, 93997, + 94007, 94009, 94033, 94049, 94057, 94063, 94079, 94099, 94109, 94111, + 94117, 94121, 94151, 94153, 94169, 94201, 94207, 94219, 94229, 94253, + 94261, 94273, 94291, 94307, 94309, 94321, 94327, 94331, 94343, 94349, + 94351, 94379, 94397, 94399, 94421, 94427, 94433, 94439, 94441, 94447, + 94463, 94477, 94483, 94513, 94529, 94531, 94541, 94543, 94547, 94559, + 94561, 94573, 94583, 94597, 94603, 94613, 94621, 94649, 94651, 94687, + 94693, 94709, 94723, 94727, 94747, 94771, 94777, 94781, 94789, 94793, + 94811, 94819, 94823, 94837, 94841, 94847, 94849, 94873, 94889, 94903, + 94907, 94933, 94949, 94951, 94961, 94993, 94999, 95003, 95009, 95021, + 95027, 95063, 95071, 95083, 95087, 95089, 95093, 95101, 95107, 95111, + 95131, 95143, 95153, 95177, 95189, 95191, 95203, 95213, 95219, 95231, + 95233, 95239, 95257, 95261, 95267, 95273, 95279, 95287, 95311, 95317, + 95327, 95339, 95369, 95383, 95393, 95401, 95413, 95419, 95429, 95441, + 95443, 95461, 95467, 95471, 95479, 95483, 95507, 95527, 95531, 95539, + 95549, 95561, 95569, 95581, 95597, 95603, 95617, 95621, 95629, 95633, + 95651, 95701, 95707, 95713, 95717, 95723, 95731, 95737, 95747, 95773, + 95783, 95789, 95791, 95801, 95803, 95813, 95819, 95857, 95869, 95873, + 95881, 95891, 95911, 95917, 95923, 95929, 95947, 95957, 95959, 95971, + 95987, 95989, 96001, 96013, 96017, 96043, 96053, 96059, 96079, 96097, + 96137, 96149, 96157, 96167, 96179, 96181, 96199, 96211, 96221, 96223, + 96233, 96259, 96263, 96269, 96281, 96289, 96293, 96323, 96329, 96331, + 96337, 96353, 96377, 96401, 96419, 96431, 96443, 96451, 96457, 96461, + 96469, 96479, 96487, 96493, 96497, 96517, 96527, 96553, 96557, 96581, + 96587, 96589, 96601, 96643, 96661, 96667, 96671, 96697, 96703, 96731, + 96737, 96739, 96749, 96757, 96763, 96769, 96779, 96787, 96797, 96799, + 96821, 96823, 96827, 96847, 96851, 96857, 96893, 96907, 96911, 96931, + 96953, 96959, 96973, 96979, 96989, 96997, 97001, 97003, 97007, 97021, + 97039, 97073, 97081, 97103, 97117, 97127, 97151, 97157, 97159, 97169, + 97171, 97177, 97187, 97213, 97231, 97241, 97259, 97283, 97301, 97303, + 97327, 97367, 97369, 97373, 97379, 97381, 97387, 97397, 97423, 97429, + 97441, 97453, 97459, 97463, 97499, 97501, 97511, 97523, 97547, 97549, + 97553, 97561, 97571, 97577, 97579, 97583, 97607, 97609, 97613, 97649, + 97651, 97673, 97687, 97711, 97729, 97771, 97777, 97787, 97789, 97813, + 97829, 97841, 97843, 97847, 97849, 97859, 97861, 97871, 97879, 97883, + 97919, 97927, 97931, 97943, 97961, 97967, 97973, 97987, 98009, 98011, + 98017, 98041, 98047, 98057, 98081, 98101, 98123, 98129, 98143, 98179, + 98207, 98213, 98221, 98227, 98251, 98257, 98269, 98297, 98299, 98317, + 98321, 98323, 98327, 98347, 98369, 98377, 98387, 98389, 98407, 98411, + 98419, 98429, 98443, 98453, 98459, 98467, 98473, 98479, 98491, 98507, + 98519, 98533, 98543, 98561, 98563, 98573, 98597, 98621, 98627, 98639, + 98641, 98663, 98669, 98689, 98711, 98713, 98717, 98729, 98731, 98737, + 98773, 98779, 98801, 98807, 98809, 98837, 98849, 98867, 98869, 98873, + 98887, 98893, 98897, 98899, 98909, 98911, 98927, 98929, 98939, 98947, + 98953, 98963, 98981, 98993, 98999, 99013, 99017, 99023, 99041, 99053, + 99079, 99083, 99089, 99103, 99109, 99119, 99131, 99133, 99137, 99139, + 99149, 99173, 99181, 99191, 99223, 99233, 99241, 99251, 99257, 99259, + 99277, 99289, 99317, 99347, 99349, 99367, 99371, 99377, 99391, 99397, + 99401, 99409, 99431, 99439, 99469, 99487, 99497, 99523, 99527, 99529, + 99551, 99559, 99563, 99571, 99577, 99581, 99607, 99611, 99623, 99643, + 99661, 99667, 99679, 99689, 99707, 99709, 99713, 99719, 99721, 99733, + 99761, 99767, 99787, 99793, 99809, 99817, 99823, 99829, 99833, 99839, + 99859, 99871, 99877, 99881, 99901, 99907, 99923, 99929, 99961, 99971, + 99989, 99991, 100003, 100019, 100043, 100049, 100057, 100069, 100103, 100109, +100129, 100151, 100153, 100169, 100183, 100189, 100193, 100207, 100213, 100237, +100267, 100271, 100279, 100291, 100297, 100313, 100333, 100343, 100357, 100361, +100363, 100379, 100391, 100393, 100403, 100411, 100417, 100447, 100459, 100469, +100483, 100493, 100501, 100511, 100517, 100519, 100523, 100537, 100547, 100549, +100559, 100591, 100609, 100613, 100621, 100649, 100669, 100673, 100693, 100699, +100703, 100733, 100741, 100747, 100769, 100787, 100799, 100801, 100811, 100823, +100829, 100847, 100853, 100907, 100913, 100927, 100931, 100937, 100943, 100957, +100981, 100987, 100999, 101009, 101021, 101027, 101051, 101063, 101081, 101089, +101107, 101111, 101113, 101117, 101119, 101141, 101149, 101159, 101161, 101173, +101183, 101197, 101203, 101207, 101209, 101221, 101267, 101273, 101279, 101281, +101287, 101293, 101323, 101333, 101341, 101347, 101359, 101363, 101377, 101383, +101399, 101411, 101419, 101429, 101449, 101467, 101477, 101483, 101489, 101501, +101503, 101513, 101527, 101531, 101533, 101537, 101561, 101573, 101581, 101599, +101603, 101611, 101627, 101641, 101653, 101663, 101681, 101693, 101701, 101719, +101723, 101737, 101741, 101747, 101749, 101771, 101789, 101797, 101807, 101833, +101837, 101839, 101863, 101869, 101873, 101879, 101891, 101917, 101921, 101929, +101939, 101957, 101963, 101977, 101987, 101999, 102001, 102013, 102019, 102023, +102031, 102043, 102059, 102061, 102071, 102077, 102079, 102101, 102103, 102107, +102121, 102139, 102149, 102161, 102181, 102191, 102197, 102199, 102203, 102217, +102229, 102233, 102241, 102251, 102253, 102259, 102293, 102299, 102301, 102317, +102329, 102337, 102359, 102367, 102397, 102407, 102409, 102433, 102437, 102451, +102461, 102481, 102497, 102499, 102503, 102523, 102533, 102539, 102547, 102551, +102559, 102563, 102587, 102593, 102607, 102611, 102643, 102647, 102653, 102667, +102673, 102677, 102679, 102701, 102761, 102763, 102769, 102793, 102797, 102811, +102829, 102841, 102859, 102871, 102877, 102881, 102911, 102913, 102929, 102931, +102953, 102967, 102983, 103001, 103007, 103043, 103049, 103067, 103069, 103079, +103087, 103091, 103093, 103099, 103123, 103141, 103171, 103177, 103183, 103217, +103231, 103237, 103289, 103291, 103307, 103319, 103333, 103349, 103357, 103387, +103391, 103393, 103399, 103409, 103421, 103423, 103451, 103457, 103471, 103483, +103511, 103529, 103549, 103553, 103561, 103567, 103573, 103577, 103583, 103591, +103613, 103619, 103643, 103651, 103657, 103669, 103681, 103687, 103699, 103703, +103723, 103769, 103787, 103801, 103811, 103813, 103837, 103841, 103843, 103867, +103889, 103903, 103913, 103919, 103951, 103963, 103967, 103969, 103979, 103981, +103991, 103993, 103997, 104003, 104009, 104021, 104033, 104047, 104053, 104059, +104087, 104089, 104107, 104113, 104119, 104123, 104147, 104149, 104161, 104173, +104179, 104183, 104207, 104231, 104233, 104239, 104243, 104281, 104287, 104297, +104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383, 104393, 104399, +104417, 104459, 104471, 104473, 104479, 104491, 104513, 104527, 104537, 104543, +104549, 104551, 104561, 104579, 104593, 104597, 104623, 104639, 104651, 104659, +104677, 104681, 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729, +] + + + +### Ctrl-C handler +def handler(signal, frame): + sys.tracebacklimit = 0 + exit(0) + +DEFBUFSIZE=32768 + +def get_cpu_count(): + """ + Try and estimate the number of CPU on the host. First using multiprocessing + native function, other using content of /proc/cpuinfo. If none of those + methods did work, 4 is returned. + """ + try: + import multiprocessing + cpucount = multiprocessing.cpu_count() + except: + try: + s = open("/proc/cpuinfo").read() + cpucount = int(s.split('processor')[-1].split(":")[1].split("\n")[0]) + cpucount += 1 + except: + cpucount = 4 + return cpucount + +# Simple helper to remove comments from a C program +def C_comment_remover(text): + def replacer(match): + s = match.group(0) + if s.startswith('/'): + return " " # note: a space and not an empty string + else: + return s + regexp = r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"' + pattern = re.compile(regexp, re.DOTALL | re.MULTILINE) + return re.sub(pattern, replacer, text) + + +def egcd(b, n): + x0, x1, y0, y1 = 1, 0, 0, 1 + while n != 0: + q, b, n = b // n, n, b % n + x0, x1 = x1, x0 - q * x1 + y0, y1 = y1, y0 - q * y1 + return b, x0, y0 + +def modinv(a, m): + g, x, y = egcd(a, m) + if g != 1: + raise Exception('modular inverse does not exist') + else: + return x % m + +def is_probprime(n): + # ensure n is odd + if n % 2 == 0: + return False + # write n-1 as 2**s * d + # repeatedly try to divide n-1 by 2 + s = 0 + d = n-1 + while True: + quotient, remainder = divmod(d, 2) + if remainder == 1: + break + s += 1 + d = quotient + assert(2**s * d == n-1) + # test the base a to see whether it is a witness for the compositeness of n + def try_composite(a): + if pow(a, d, n) == 1: + return False + for i in range(s): + if pow(a, 2**i * d, n) == n-1: + return False + return True # n is definitely composite + for i in range(5): + a = random.randrange(2, n) + if try_composite(a): + return False + return True # no base tested showed n as composite + +def compute_monty_coef(nn_p, p_bitsize): + """ + Compute montgomery coeff r, r^2 and mpinv. p_bitsize is the size + of p in bits. It is expected to be a multiple of word + bit size. + """ + r = (1 << p_bitsize) % nn_p + r_square = (1 << (2 * p_bitsize)) % nn_p + mpinv = 2**wlen - (modinv(nn_p, 2**wlen)) + return r, r_square, mpinv + +def compute_div_coef(nn_p, p_bitsize): + """ + Compute division coeffs p_normalized, p_shift and p_reciprocal. + """ + tmp = nn_p + cnt = 0 + while tmp != 0: + tmp = tmp >> 1 + cnt += 1 + pshift = p_bitsize - cnt + nn_pnorm = nn_p << pshift + B = 2**wlen + prec = B**3 // ((nn_pnorm >> (p_bitsize - 2*wlen)) + 1) - B + return pshift, nn_pnorm, prec + +def getbitlen(bint): + """ + Returns the number of bits encoding an integer + """ + if bint == 0: + return 1 + else: + return int(bint).bit_length() + +def getwlenbitlen(bint, wlen): + """ + Returns the number of bits encoding an integer + """ + rounded_wlen_bitlen = ((getbitlen(bint) + wlen - 1) // wlen) * wlen + if(rounded_wlen_bitlen == 0): + rounded_wlen_bitlen = wlen + return rounded_wlen_bitlen + +def legendre_symbol(a, p): + ls = pow(a, (p - 1) // 2, p) + return -1 if ls == p - 1 else ls + +# Tonelli-Shanks algorithm to find square roots +# over prime fields +def mod_sqrt(a, p): + # Simple cases + if legendre_symbol(a, p) != 1: + # No quadratic residue + return None + elif a == 0: + return 0 + elif p == 2: + return a + elif p % 4 == 3: + return pow(a, (p + 1) // 4, p) + s = p - 1 + e = 0 + while s % 2 == 0: + s = s // 2 + e += 1 + n = 2 + while legendre_symbol(n, p) != -1: + n += 1 + x = pow(a, (s + 1) // 2, p) + b = pow(a, s, p) + g = pow(n, s, p) + r = e + while True: + t = b + m = 0 + for m in xrange(r): + if t == 1: + break + t = pow(t, 2, p) + if m == 0: + return x + gs = pow(g, 2 ** (r - m - 1), p) + g = (gs * gs) % p + x = (x * gs) % p + b = (b * g) % p + r = m + +def format_int_string(bint, wlen): + """ + Returns the string format of an integer rounded to wlen + """ + rounded_bytelen = (wlen/8) * ((getbitlen(bint) + wlen - 1) // wlen) + # Special case of zero bit length + if(rounded_bytelen == 0): + rounded_bytelen = wlen//8 + return (("%%0%dx" % (2 * rounded_bytelen)) % bint) + +def get_random_bigint(wlen, maxwlensize): + nn_nwords = random.randint(1, maxwlensize) + nn_maxval = 2 ** (nn_nwords * wlen) - 1 + return random.randint(0, nn_maxval) + +# Eratostene sieve for fast candidates +def get_random_prime_sieve_candidate(wlen, maxwlensize): + global first_primes_list + while True: + # Choose a random odd number + r = get_random_bigint(wlen, maxwlensize) | 1 + for divisor in first_primes_list: + if (r % divisor) == 0 and (divisor**2 <= r): + break + else: + # r is a suitable candidate + return r + +def get_random_prime(wlen, maxwlensize): + while True: + # Get a random integer + r = get_random_prime_sieve_candidate(wlen, maxwlensize) + # Check its primality + if is_probprime(r): + return r + +if ((len(sys.argv) != 5) and (len(sys.argv) != 6)): + sys.stderr.write("Usage: %s outfile wlen ntests [tests]\n" % sys.argv[0]) + sys.stderr.write("with\n") + sys.stderr.write(" outfile: file in which generated tests will be stored\n") + sys.stderr.write(" wlen : target architecture word length in bits (64, 32 or 16)\n") + sys.stderr.write(" maxlen : maximum bit length of tests (e.g. 521 bits, ...)\n") + sys.stderr.write(" ntests : a multiplier for the number of tests to perform\n") + sys.stderr.write(" tests : (optional) specific tests to perform (regexp opcodes) OR\n") + sys.stderr.write(" a '.c' file where to get the implemented tests. filename\n") + sys.stderr.write(" is given using e.g. file=fp_pow.c\n") + sys.exit(-1) + +testfile = sys.argv[1] +wlen = int(sys.argv[2]) +maxlen = int(sys.argv[3]) +ntests = int(sys.argv[4]) + +nn_logical_tests = ["NN_SHIFT_RIGHT", "NN_SHIFT_LEFT", "NN_ROTATE_RIGHT", "NN_ROTATE_LEFT", + "NN_AND", "NN_XOR", "NN_OR", "NN_NOT"] +nn_addition_tests = ["NN_ADD", "NN_SUB", "NN_INC", "NN_DEC", "NN_MOD_ADD", "NN_MOD_SUB", "NN_MOD_INC", "NN_MOD_DEC"] +nn_mul_tests = ["NN_MUL", "NN_SQR", "NN_MUL_REDC1", "NN_COEF_REDC1", "NN_COEF_DIV", "NN_MOD_MUL", "NN_MOD_POW"] +nn_div_tests = ["NN_MOD", "NN_DIVREM", "NN_MODINV", "NN_MODINV_2EXP", "NN_XGCD", "NN_GCD"] + +nn_tests = nn_logical_tests + nn_addition_tests + nn_mul_tests + nn_div_tests + +fp_add_tests = ["FP_ADD", "FP_SUB"] +fp_mul_tests = ["FP_MUL", "FP_SQR", "FP_DIV", "FP_MUL_MONTY", "FP_SQR_MONTY", "FP_POW"] +fp_sqrt_tests = ["FP_SQRT"] + +fp_tests = fp_add_tests + fp_mul_tests + fp_sqrt_tests + +all_tests = nn_tests + fp_tests + +# Get optional specific parameters +asked_tests = all_tests +if (len(sys.argv) == 6): + # Do we have a .c file given as input? + if (sys.argv[5])[:5] == "file=": + file_name = (sys.argv[5])[5:] + # Open the .c file + C_string = C_comment_remover(open(file_name, 'r').read()) + # Grep the interesting tests + lines = C_string.split("\n") + asked_tests = [] + for line in lines: + if line[:13] == "GENERIC_TEST(": + # Get second argument, which is the opcode + the_test = line.split(",")[1].replace(" ", "") + asked_tests += [the_test] + # We have a list of opcode regexps + else: + def check_regexp(regexp, string): + return re.match(regexp+"$", string) + asked_tests = [] + asked_tests_regexps = ((sys.argv[5]).replace(" ", "")).split(",") + # Check for regexps + for regexp in asked_tests_regexps: + # Asked operations must be known + match = [x for x in all_tests if check_regexp(regexp, x)] + if match == []: + print "Warning: regexp matches no known operation ", regexp + asked_tests += match + +# Unnecessary test (we can keep it though) +if len(list(set(asked_tests) & set(all_tests))) != len(asked_tests): + print "Error: unknown asked tests ", list(set(asked_tests) - set(all_tests)) + exit(-1) + +# Delta to use on word boundaries. +WORD_BOUNDARY_DELTA=3 + +# Max size (in words) of input numbers (nn, fp) on which to perform tests +MAX_INPUT_PARAM_WLEN= ((maxlen + wlen - 1) // wlen) + +test_funcs = { } + +# Generate tests for NN_SHIFT_RIGHT and NN_SHIFT_LEFT operations. +def test_NN_SHIFT(op): + nn_nwords = random.randint(1, MAX_INPUT_PARAM_WLEN) + nn_maxval = 2 ** (nn_nwords * wlen) - 1 + nn_nbits = nn_nwords * wlen + + nn_val = random.randint(0, nn_maxval) + + res = [] + + # try and consider all possible words boundary on input ... + for boundary in range(0, (nn_nwords + 1) * wlen, wlen): + # and generate shift for bitcount in an interval around + # that boundary, i.e. [boundary - delta, boundary + delta] + min_cnt = max(0, boundary - WORD_BOUNDARY_DELTA) + max_cnt = min(nn_nbits, boundary + WORD_BOUNDARY_DELTA) + cnt = random.randint(min_cnt, max_cnt); + msk = nn_maxval + + # we try different bitlen for output + for outbitlen in [boundary - wlen, boundary, boundary + wlen]: + if outbitlen <= wlen: + outbitlen = wlen + + # Depending on the type of shift operation we consider, + # we adapt the & mask + if (op == "NN_SHIFT_RIGHT_FIXEDLEN"): # NN_SHIFT_RIGHT_FIXEDLEN + msk = (2 ** outbitlen) - 1 + out = (nn_val >> cnt) & msk + elif (op == "NN_SHIFT_LEFT_FIXEDLEN"): # NN_SHIFT_LEFT_FIXEDLEN + msk = (2 ** outbitlen) - 1 + out = (nn_val << cnt) & msk + elif (op == "NN_SHIFT_RIGHT"): # NN_SHIFT_RIGHT + outbitlen = nn_nbits + msk = (2 ** outbitlen) - 1 + out = (nn_val >> cnt) & msk + else: # NN_SHIFT_LEFT + outbitlen = nn_nbits + cnt + # Round the bit length to the word boundary + outbitlen = ((outbitlen + wlen - 1) // wlen) * wlen + msk = (2 ** outbitlen) - 1 + out = (nn_val << cnt) & msk + + fmt = "%s nnu %s %s %d\n" + res.append(fmt % (op, format_int_string(out, wlen), format_int_string(nn_val, wlen), cnt)) + + return res + +test_funcs["NN_SHIFT_RIGHT_FIXEDLEN"] = test_NN_SHIFT +test_funcs["NN_SHIFT_LEFT_FIXEDLEN"] = test_NN_SHIFT +test_funcs["NN_SHIFT_RIGHT"] = test_NN_SHIFT +test_funcs["NN_SHIFT_LEFT"] = test_NN_SHIFT + +# Generate tests for NN_ROTATE_LEFT and NN_ROTATE_RIGHT operations. +def test_NN_ROTATE(op): + # random value for both input numbers + nn_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + bitlen = random.randint(1, getbitlen(nn_val)) + cnt = random.randint(0, bitlen-1) + + res = [] + + if (op == "NN_ROTATE_LEFT"): # NN_ROTATE_LEFT + nn_exp_res = ((nn_val << cnt) ^ (nn_val >> (bitlen - cnt))) & (2**bitlen - 1) + else: # NN_ROTATE_RIGHT + nn_exp_res = ((nn_val >> cnt) ^ (nn_val << (bitlen - cnt))) & (2**bitlen - 1) + + fmt = "%s nnuu %s %s %d %d\n" + res.append(fmt % (op, format_int_string(nn_exp_res, wlen), format_int_string(nn_val, wlen), cnt, bitlen)) + + return res + +test_funcs["NN_ROTATE_LEFT"] = test_NN_ROTATE +test_funcs["NN_ROTATE_RIGHT"] = test_NN_ROTATE + + +# Generate tests for NN_XOR, NN_OR and NN_AND operations. +def test_NN_XOR_OR_AND(op): + # random value for both input numbers + nn1_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn2_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + res = [] + + if (op == "NN_XOR"): # NN_XOR + nn_exp_res = nn1_val ^ nn2_val + elif (op == "NN_OR"): # NN_OR + nn_exp_res = nn1_val | nn2_val + else: # NN_AND + nn_exp_res = nn1_val & nn2_val + + fmt = "%s nnn %s %s %s\n" + res.append(fmt % (op, format_int_string(nn1_val, wlen), format_int_string(nn2_val, wlen), format_int_string(nn_exp_res, wlen))) + + return res + +test_funcs["NN_XOR"] = test_NN_XOR_OR_AND +test_funcs["NN_OR"] = test_NN_XOR_OR_AND +test_funcs["NN_AND"] = test_NN_XOR_OR_AND + + +def test_NN_NOT(op): + """ Generate tests for NN_NOT """ + nn_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + res = [] + + # python sucks at computing logical not. It generates a two's complement + # representation, which mays result in a negative value i.e. not what we + # are looking for. + nn_exp_res = ((2 ** getwlenbitlen(nn_val, wlen)) - 1) & (~nn_val) + + fmt = "%s nn %s %s\n" + res.append(fmt % (op, format_int_string(nn_val, wlen), format_int_string(nn_exp_res, wlen))) + + return res + +test_funcs["NN_NOT"] = test_NN_NOT + + +def test_NN_ADD_SUB(op): + """ Generate tests for NN_ADD and NN_SUB """ + # Get two random big num + nn_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + # Compute the result depending on the operation + if (op == "NN_ADD"): + res = nn_val1 + nn_val2 + else: + if (nn_val1 < nn_val2): + tmp = nn_val1 + nn_val1 = nn_val2 + nn_val2 = tmp + res = nn_val1 - nn_val2 + nn_exp_res = res + + fmt = "%s nnn %s %s %s\n" + s = fmt % (op, format_int_string(nn_val1, wlen), format_int_string(nn_val2, wlen), format_int_string(nn_exp_res, wlen)) + + return [ s ] + +test_funcs["NN_ADD"] = test_NN_ADD_SUB +test_funcs["NN_SUB"] = test_NN_ADD_SUB + + +def test_NN_INC_DEC(op): + """ Generate tests for NN_INC and NN_DEC """ + nn_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + # Compute the result depending on the operation + if (op == "NN_INC"): + res = nn_val + 1 + else: + res = nn_val - 1 + nn_exp_res = res + + fmt = "%s nn %s %s\n" + s = fmt % (op, format_int_string(nn_val, wlen), format_int_string(nn_exp_res, wlen)) + + return [ s ] + +test_funcs["NN_INC"] = test_NN_INC_DEC +test_funcs["NN_DEC"] = test_NN_INC_DEC + +def test_NN_MOD_ADD_SUB(op): + """ Generate tests for modular NN_ADD and NN_SUB """ + # Get three random big num + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + nn_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + + # Compute the result depending on the operation + if (op == "NN_MOD_ADD"): + res = (nn_val1 + nn_val2) % nn_mod + else: + if (nn_val1 < nn_val2): + tmp = nn_val1 + nn_val1 = nn_val2 + nn_val2 = tmp + res = (nn_val1 - nn_val2) % nn_mod + nn_exp_res = res + + fmt = "%s nnnn %s %s %s %s\n" + s = fmt % (op, format_int_string(nn_val1, wlen), format_int_string(nn_val2, wlen), format_int_string(nn_mod, wlen), format_int_string(nn_exp_res, wlen)) + + return [ s ] + +test_funcs["NN_MOD_ADD"] = test_NN_MOD_ADD_SUB +test_funcs["NN_MOD_SUB"] = test_NN_MOD_ADD_SUB + +def test_NN_MOD_INC_DEC(op): + """ Generate tests for NN_MOD_INC and NN_MOD_DEC """ + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + + # Compute the result depending on the operation + if (op == "NN_MOD_INC"): + res = (nn_val + 1) % nn_mod + else: + if nn_val == 0: + nn_val = nn_val + 1 + res = (nn_val - 1) % nn_mod + nn_exp_res = res + + fmt = "%s nnn %s %s %s\n" + s = fmt % (op, format_int_string(nn_val, wlen), format_int_string(nn_mod, wlen), format_int_string(nn_exp_res, wlen)) + + return [ s ] + +test_funcs["NN_MOD_INC"] = test_NN_MOD_INC_DEC +test_funcs["NN_MOD_DEC"] = test_NN_MOD_INC_DEC + + +def test_NN_MUL_SQR(op): + """ Generate tests for NN_MUL and NN_SQR """ + # random value for input numbers + nn_in1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_in2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + if (op == "NN_MUL"): + out = nn_in1 * nn_in2 + + fmt = "%s nnnu %s %s %s\n" + s = fmt % (op, format_int_string(out, wlen), format_int_string(nn_in1, wlen), format_int_string(nn_in2, wlen)) + else: + out = nn_in1 * nn_in1 + + fmt = "%s nnu %s %s\n" + s = fmt % (op, format_int_string(out, wlen), format_int_string(nn_in1, wlen)) + + return [ s ] + +test_funcs["NN_MUL"] = test_NN_MUL_SQR +test_funcs["NN_SQR"] = test_NN_MUL_SQR + +def test_NN_MOD_MUL(op): + """ Generate tests for modular NN_MOD_MUL """ + # Get three random big num + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + nn_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + + # Compute the result depending on the operation + res = (nn_val1 * nn_val2) % nn_mod + nn_exp_res = res + + fmt = "%s nnnn %s %s %s %s\n" + s = fmt % (op, format_int_string(nn_val1, wlen), format_int_string(nn_val2, wlen), format_int_string(nn_mod, wlen), format_int_string(nn_exp_res, wlen)) + + return [ s ] + +test_funcs["NN_MOD_MUL"] = test_NN_MOD_MUL + +def test_NN_MOD_POW(op): + """ Generate tests for modular NN_MOD_POW """ + # Get three random big num + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_base = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + nn_exp = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + + # Compute the result depending on the operation + res = pow(nn_base, nn_exp, nn_mod) + nn_exp_res = res + + fmt = "%s nnnn %s %s %s %s\n" + s = fmt % (op, format_int_string(nn_base, wlen), format_int_string(nn_exp, wlen), format_int_string(nn_mod, wlen), format_int_string(nn_exp_res, wlen)) + + return [ s ] + +test_funcs["NN_MOD_POW"] = test_NN_MOD_POW + + +def test_NN_MOD(op): + """ Generate tests for NN_MOD """ + # random value for input numbers + nn_c = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_d = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + nn_exp_r = nn_c % nn_d + + fmt = "%s nnn %s %s %s\n" + s = fmt % (op, format_int_string(nn_exp_r, wlen), format_int_string(nn_c, wlen), format_int_string(nn_d, wlen)) + + return [ s ] + +test_funcs["NN_MOD"] = test_NN_MOD + +def test_NN_DIVREM(op): + """ Generate tests for NN_DIVREM """ + # random value for input numbers with second one non zero + nn_c = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_d = 0 + while nn_d == 0: + nn_d = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + nn_exp_q = (nn_c // nn_d) + nn_exp_r = nn_c % nn_d + + fmt = "%s nnnn %s %s %s %s\n" + s = fmt % (op, format_int_string(nn_exp_q, wlen), format_int_string(nn_exp_r, wlen), format_int_string(nn_c, wlen), format_int_string(nn_d, wlen)) + + return [ s ] + +test_funcs["NN_DIVREM"] = test_NN_DIVREM + +def test_NN_XGCD(op): + """ Generate tests for NN_XGCD """ + # random value for input numbers + nn_a = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_b = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + (nn_exp_g, nn_exp_u, nn_exp_v) = egcd(nn_a, nn_b) + # Check sign of u and v and adapt output + if nn_exp_u < 0: + sign = -1 + nn_exp_u = (((2 ** getbitlen(nn_exp_u)) - 1) & (~nn_exp_u)) + 1 + else: + sign = 1 + nn_exp_v = (((2 ** getbitlen(nn_exp_v)) - 1) & (~nn_exp_v)) + 1 + fmt = "%s nnnnns %s %s %s %s %s %d\n" + s = fmt % (op, format_int_string(nn_exp_g, wlen), format_int_string(nn_exp_u, wlen), format_int_string(nn_exp_v, wlen), format_int_string(nn_a, wlen), format_int_string(nn_b, wlen), sign) + + return [ s ] + +test_funcs["NN_XGCD"] = test_NN_XGCD + +def test_NN_GCD(op): + """ Generate tests for NN_GCD """ + # random value for input numbers + nn_a = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_b = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + (nn_exp_g, nn_exp_u, nn_exp_v) = egcd(nn_a, nn_b) + + (nn_exp_g, nn_exp_u, nn_exp_v) = egcd(nn_a, nn_b) + # Check sign of u and v and adapt output + if nn_exp_u < 0: + sign = -1 + else: + sign = 1 + + fmt = "%s nnns %s %s %s %d\n" + s = fmt % (op, format_int_string(nn_exp_g, wlen), format_int_string(nn_a, wlen), format_int_string(nn_b, wlen), sign) + + return [ s ] + +test_funcs["NN_GCD"] = test_NN_GCD + +def test_NN_MODINV(op): + """ Generate tests for NN_MODINV """ + # random value for input numbers, first one non zero + nn_x = 0 + while nn_x == 0: + nn_x = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + nn_m = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) + + try: + nn_exp_v = modinv(nn_x, nn_m) + exp_r = 0 + except Exception: + nn_exp_v = 0 + exp_r = -1 + + fmt = "%s nnns %s %s %s %d\n" + s = fmt % (op, format_int_string(nn_exp_v, wlen), format_int_string(nn_x, wlen), format_int_string(nn_m, wlen), exp_r) + + return [ s ] + +test_funcs["NN_MODINV"] = test_NN_MODINV + +def test_NN_MODINV_2EXP(op): + """ Generate tests for NN_MODINV_2EXP """ + # random value for input number, must be odd + nn_x = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + exp = random.randint(1, MAX_INPUT_PARAM_WLEN * wlen) + + nn_exp_v = modinv(nn_x, 2**exp) + isodd = 1 + if (nn_x % 2) == 0: + isodd = 0 + + fmt = "%s nnus %s %s %d %d\n" + s = fmt % (op, format_int_string(nn_exp_v, wlen), format_int_string(nn_x, wlen), exp, isodd) + + return [ s ] + +test_funcs["NN_MODINV_2EXP"] = test_NN_MODINV_2EXP + +def test_NN_MUL_REDC1(op): + """ Generate tests for NN_MUL_REDC1 """ + # Odd modulus + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + nn_r, nn_r_square, mpinv = compute_monty_coef(nn_mod, getwlenbitlen(nn_mod, wlen)) + + # random value for input numbers modulo our random mod + nn_in1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + nn_in2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_mod + + # Montgomery multiplication computes in1 * in2 * r^-1 (mod) + out = (nn_in1 * nn_in2 * modinv(nn_r, nn_mod)) % nn_mod + + fmt = "%s nnnnu %s %s %s %s %d\n" + s = fmt % (op, format_int_string(out, wlen), format_int_string(nn_in1, wlen), format_int_string(nn_in2, wlen), format_int_string(nn_mod, wlen), mpinv) + + return [ s ] + +test_funcs["NN_MUL_REDC1"] = test_NN_MUL_REDC1 + +def test_NN_COEF_REDC1(op): + """ Generate tests for NN_COEF_REDC1 """ + # Odd modulus + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + # Get the results + # Expand the modulus size if necessary + if getwlenbitlen(nn_mod, wlen) == wlen: + nn_r, nn_r_square, mpinv = compute_monty_coef(nn_mod, 2*getwlenbitlen(nn_mod, wlen)) + else: + nn_r, nn_r_square, mpinv = compute_monty_coef(nn_mod, getwlenbitlen(nn_mod, wlen)) + + fmt = "%s nnnu %s %s %s %d\n" + s = fmt % (op, format_int_string(nn_r, wlen), format_int_string(nn_r_square, wlen), format_int_string(nn_mod, wlen), mpinv) + + return [ s ] + +test_funcs["NN_COEF_REDC1"] = test_NN_COEF_REDC1 + +def test_NN_COEF_DIV(op): + """ Generate tests for NN_COEF_DIV """ + # Odd modulus + nn_mod = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + # Get the results + # Expand the modulus size if necessary + if getwlenbitlen(nn_mod, wlen) == wlen: + pshift, nn_pnorm, prec = compute_div_coef(nn_mod, 2*getwlenbitlen(nn_mod, wlen)) + else: + pshift, nn_pnorm, prec = compute_div_coef(nn_mod, getwlenbitlen(nn_mod, wlen)) + + fmt = "%s nuun %s %d %d %s\n" + s = fmt % (op, format_int_string(nn_pnorm, wlen), pshift, prec, format_int_string(nn_mod, wlen)) + + return [ s ] + +test_funcs["NN_COEF_DIV"] = test_NN_COEF_DIV + + +# Helper to compute and export an Fp context +def format_fp_context(nn_p, wlen): + nn_nbits = getwlenbitlen(nn_p, wlen) + if nn_nbits == wlen: + nn_nbits = 2 * wlen + nn_r, nn_r_square, mpinv = compute_monty_coef(nn_p, nn_nbits) + pshift, nn_pnorm, prec = compute_div_coef(nn_p, nn_nbits) + f = "%%0%dx" % ((nn_nbits // 8) * 2) + fmpinv = "%%0%dx" % (((wlen // 8)) * 2) + return ("%s%s%s%s%s%s%s" % (f % nn_p, f % nn_r, f % nn_r_square, fmpinv % mpinv, + fmpinv % pshift, f % nn_pnorm, fmpinv % prec)) + +def test_FP_ADD_SUB(op): + """ Generate tests for FP_ADD_SUB """ + # Use random odd number for faster generation + nn_p = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + + # Get two random big num + fp_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + fp_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + + # Compute the result depending on the operation + if (op == "FP_ADD"): + fp_exp_res = (fp_val1 + fp_val2) % nn_p + else: + fp_exp_res = (fp_val1 - fp_val2) % nn_p + + fmt = "%s cfff %s %s %s %s\n" + s = fmt % (op, format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val1, wlen), format_int_string(fp_val2, wlen)) + + return [ s ] + +test_funcs["FP_ADD"] = test_FP_ADD_SUB +test_funcs["FP_SUB"] = test_FP_ADD_SUB + +def test_FP_DIV(op): + """ Generate tests for FP_DIV """ + # Get random prime + # NOTE: since we use Fermat's little theorem for inversion, p + # MUST be prime for DIV (while p is relaxed only to be odd for most + # of the other operations). + # Generate a random prime + nn_p = get_random_prime(wlen, MAX_INPUT_PARAM_WLEN) + + # Get two random big num + fp_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + fp_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + + fp_exp_res = (fp_val1 * modinv(fp_val2, nn_p)) % nn_p + + fmt = "%s cfff %s %s %s %s\n" + s = fmt % (op,format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val1, wlen), format_int_string(fp_val2, wlen)) + + return [ s ] + +test_funcs["FP_DIV"] = test_FP_DIV + +def test_FP_MUL_SQR(op): + """ Generate tests for FP_MUL_SQR """ + # Use random odd number for faster generation + nn_p = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + + # Get two random big num + fp_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + fp_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + + # Compute the result depending on the operation + if (op == "FP_MUL") or (op == "FP_SQR"): + if (op == "FP_MUL"): + fp_exp_res = (fp_val1 * fp_val2) % nn_p + else: + fp_exp_res = (fp_val1 * fp_val1) % nn_p + + if (op == "FP_SQR"): + fmt = "%s cff %s %s %s\n" + s = fmt % (op,format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val1, wlen)) + else: + fmt = "%s cfff %s %s %s %s\n" + s = fmt % (op,format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val1, wlen), format_int_string(fp_val2, wlen)) + + return [ s ] + +test_funcs["FP_MUL"] = test_FP_MUL_SQR +test_funcs["FP_SQR"] = test_FP_MUL_SQR + + +def test_FP_MUL_SQR_MONTY(op): + """ Generate tests for FP_MUL_SQR_MONTY """ + # Use random odd number for faster generation + nn_p = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + if getwlenbitlen(nn_p, wlen) == wlen: + nn_r, nn_r_square, mpinv = compute_monty_coef(nn_p, 2*getwlenbitlen(nn_p, wlen)) + else: + nn_r, nn_r_square, mpinv = compute_monty_coef(nn_p, getwlenbitlen(nn_p, wlen)) + + # Get two random big num + fp_val1 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + fp_val2 = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + # representations of fp_val1 and fp_val2 in Montgomery's world + fp_val1_mont = (fp_val1 * nn_r ) % nn_p + fp_val2_mont = (fp_val2 * nn_r ) % nn_p + + + if (op == "FP_MUL_MONTY") or (op == "FP_SQR_MONTY"): + if (op == "FP_MUL_MONTY"): + fp_exp_res = (fp_val1_mont * fp_val2_mont * modinv(nn_r%nn_p, nn_p)) % nn_p + else: + fp_exp_res = (fp_val1_mont * fp_val1_mont * modinv(nn_r%nn_p, nn_p)) % nn_p + + if (op == "FP_SQR"): + fmt = "%s cff %s %s %s\n" + s = fmt % (op, format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val1_mont, wlen)) + else: + fmt = "%s cfff %s %s %s %s\n" + s = fmt % (op, format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val1_mont, wlen), format_int_string(fp_val2_mont, wlen)) + + return [ s ] + +test_funcs["FP_MUL_MONTY"] = test_FP_MUL_SQR_MONTY +test_funcs["FP_SQR_MONTY"] = test_FP_MUL_SQR_MONTY + + +def test_FP_POW(op): + """ Generate tests for FP_POW """ + # Instead of random prime, use random odd number for faster generation + nn_p = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) | 1 + + # Get two random big num + fp_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + nn_exp = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + + fp_exp_res = pow(fp_val, nn_exp, nn_p) + + fmt = "%s cffn %s %s %s %s\n" + s = fmt % (op, format_fp_context(nn_p, wlen), format_int_string(fp_exp_res, wlen), format_int_string(fp_val, wlen), format_int_string(nn_exp, wlen)) + + return [ s ] + +test_funcs["FP_POW"] = test_FP_POW + + +def test_FP_SQRT(op): + """ Generate tests for FP_SQRT """ + # Generate a random prime + nn_p = get_random_prime(wlen, MAX_INPUT_PARAM_WLEN) + + # Get a random big num in Fp + fp_val = get_random_bigint(wlen, MAX_INPUT_PARAM_WLEN) % nn_p + + # Compute the first square root + fp_sqrt1 = mod_sqrt(fp_val, nn_p) + # Compute the other square root + if fp_sqrt1 != None: + fp_sqrt2 = (-fp_sqrt1) % nn_p + + fmt = "%s cfffs %s %s %s %s %s\n" + if fp_sqrt1 != None: + s = fmt % (op, format_fp_context(nn_p, wlen), format_int_string(fp_sqrt1, wlen), format_int_string(fp_sqrt2, wlen), format_int_string(fp_val, wlen), 0) + else: + s = fmt % (op, format_fp_context(nn_p, wlen), format_int_string(0, wlen), format_int_string(0, wlen), format_int_string(fp_val, wlen), -1) + + return [ s ] + +test_funcs["FP_SQRT"] = test_FP_SQRT + + + +def do_test(sockfd, op, n): + """ + Do given test and send back result on given socket + before leaving. + """ + res = [] + for k in range(n): + res += test_funcs[op](op) + remain = "".join(res) + while (remain): + cur = remain[:DEFBUFSIZE] + sockfd.send(cur) + remain = remain[DEFBUFSIZE:] + sockfd.close() + + +# The way we make generation parallel is by splitting ntests equally +# on the number of proc we have. +signal.signal(signal.SIGINT, handler) + +# ATM, we spawn as many processes as the number of tests we have. +# We adapt the output on stdout or regular file. +if testfile == "stdout": + fd = sys.stdout +else: + fd = open(testfile, "w") +numproc = get_cpu_count() +line = 0 + +sys.stderr.write("[+] Dispatching our %d tests on %d proc\n" % (ntests, numproc)) + +for test in asked_tests: + socks = [] + + # Before forking, we need to be sure there is no + # remaining data in file fd buffers, otherwise + # those will end up being flushed by out childs + # and create duplicates in the file. + fd.flush() + + n = max((ntests // numproc), 1) + for k in range(0, ntests, n): + # Create a pair of sockets for us and the child we'll spawn + a, b = socket.socketpair() + a.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, DEFBUFSIZE) + b.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, DEFBUFSIZE) + a.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, DEFBUFSIZE) + b.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, DEFBUFSIZE) + + # keep track of our socket + socks.append(a) + + # Double fork a helper to create the campaign for this specific + # test. + pid = os.fork() + if pid != 0: + os.waitpid(pid, 0) + else: + pid = os.fork() + if pid != 0: + sys.exit() + else: + a.close() + # Properly seeding to avoid duplicate random generation + random.seed(datetime.now()) + do_test(b, test, n) + sys.exit() + + b.close() + + # Now that we have fork all helpers, let's just wait until they are + # done and read back the results to write them to file. + while socks: + tmp = select.select(socks, [], []) + for s in tmp[0]: + socks.remove(s) + tmp = s.recv(DEFBUFSIZE) + res = "" + while tmp: + res += tmp + tmp = s.recv(DEFBUFSIZE) + res = res.split('\n')[:-1] + reslen = len(res) + res = zip(range(reslen), res) + fd.write("".join(map(lambda (x,y): "%d %s\n" % (x + line, y), res))) + line += reslen + +fd.close() diff --git a/crypto/libecc/src/curves/aff_pt.c b/crypto/libecc/src/curves/aff_pt.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/aff_pt.c @@ -0,0 +1,346 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#define AFF_PT_MAGIC ((word_t)(0x4c82a9bcd0d9ffabULL)) + +/* + * Verify that an affine point has already been initialized. Return 0 on + * success, -1 otherwise. + */ +int aff_pt_check_initialized(aff_pt_src_t in) +{ + int ret; + + MUST_HAVE(((in != NULL) && (in->magic == AFF_PT_MAGIC)), ret, err); + ret = ec_shortw_crv_check_initialized(in->crv); + +err: + return ret; +} + +/* + * Initialize pointed aff_pt structure to make it usable by library + * function on given curve. Return 0 on success, -1 on error. + */ +int aff_pt_init(aff_pt_t in, ec_shortw_crv_src_t curve) +{ + int ret; + + MUST_HAVE((in != NULL), ret, err); + MUST_HAVE((curve != NULL), ret, err); + + ret = ec_shortw_crv_check_initialized(curve); EG(ret, err); + ret = fp_init(&(in->x), curve->a.ctx); EG(ret, err); + ret = fp_init(&(in->y), curve->a.ctx); EG(ret, err); + + in->crv = curve; + in->magic = AFF_PT_MAGIC; + +err: + return ret; +} + +/* + * Initialize given point 'in' on given curve 'curve' and set its coordinates to + * 'xcoord' and 'ycoord'. Return 0 on success, -1 on error. + */ +int aff_pt_init_from_coords(aff_pt_t in, + ec_shortw_crv_src_t curve, + fp_src_t xcoord, fp_src_t ycoord) +{ + int ret; + + ret = aff_pt_init(in, curve); EG(ret, err); + ret = fp_copy(&(in->x), xcoord); EG(ret, err); + ret = fp_copy(&(in->y), ycoord); + +err: + return ret; +} + +/* + * Uninitialize pointed affine point 'in' to prevent further use (magic field + * in the structure is zeroized) and zeroize associated storage space. Note + * that the curve context pointed to by the point element (passed during init) + * is left untouched. + */ +void aff_pt_uninit(aff_pt_t in) +{ + if((in != NULL) && (in->magic == AFF_PT_MAGIC) && (in->crv != NULL)){ + in->crv = NULL; + in->magic = WORD(0); + + fp_uninit(&(in->x)); + fp_uninit(&(in->y)); + } + + return; +} + +/* + * Recover the two possible y coordinates from one x on a given + * curve. + * The two outputs y1 and y2 are initialized in the function. + * + * The function returns -1 on error, 0 on success. + * + */ +int aff_pt_y_from_x(fp_t y1, fp_t y2, fp_src_t x, ec_shortw_crv_src_t curve) +{ + int ret; + + MUST_HAVE((y1 != NULL) && (y2 != NULL), ret, err); + ret = ec_shortw_crv_check_initialized(curve); EG(ret, err); + ret = fp_check_initialized(x); EG(ret, err); + /* Aliasing is not supported */ + MUST_HAVE((y1 != y2) && (y1 != x), ret, err); + + + /* Initialize our elements */ + ret = fp_copy(y1, x); EG(ret, err); + ret = fp_copy(y2, x); EG(ret, err); + + /* Compute x^3 + ax + b */ + ret = fp_sqr(y1, y1); EG(ret, err); + ret = fp_mul(y1, y1, x); EG(ret, err); + ret = fp_mul(y2, y2, &(curve->a)); EG(ret, err); + ret = fp_add(y1, y1, y2); EG(ret, err); + ret = fp_add(y1, y1, &(curve->b)); EG(ret, err); + + /* Now compute the two possible square roots + * realizing y^2 = x^3 + ax + b + */ + ret = fp_sqrt(y1, y2, y1); + +err: + return ret; +} + +/* + * Check if given point of coordinate ('x', 'y') is on given curve 'curve' (i.e. + * if it verifies curve equation y^2 = x^3 + ax + b). On success, the verdict is + * given using 'on_curve' out parameter (1 if on curve, 0 if not). On error, + * the function returns -1 and 'on_curve' is left unmodified. + */ +int is_on_shortw_curve(fp_src_t x, fp_src_t y, ec_shortw_crv_src_t curve, int *on_curve) +{ + fp tmp1, tmp2; + int ret, cmp; + tmp1.magic = tmp2.magic = WORD(0); + + ret = ec_shortw_crv_check_initialized(curve); EG(ret, err); + ret = fp_check_initialized(x); EG(ret, err); + ret = fp_check_initialized(y); EG(ret, err); + MUST_HAVE((on_curve != NULL), ret, err); + + MUST_HAVE((x->ctx == y->ctx), ret, err); + MUST_HAVE((x->ctx == curve->a.ctx), ret, err); + + /* Note: to optimize local variables, we instead check that + * (y^2 - b) = (x^2 + a) * x + */ + + /* Compute y^2 - b */ + ret = fp_init(&tmp1, x->ctx); EG(ret, err); + ret = fp_sqr(&tmp1, y); EG(ret, err); + ret = fp_sub(&tmp1, &tmp1, &(curve->b)); EG(ret, err); + + /* Compute (x^2 + a) * x */ + ret = fp_init(&tmp2, x->ctx); EG(ret, err); + ret = fp_sqr(&tmp2, x); EG(ret, err); + ret = fp_add(&tmp2, &tmp2, &(curve->a)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, x); EG(ret, err); + + /* Now check*/ + ret = fp_cmp(&tmp1, &tmp2, &cmp); EG(ret, err); + + (*on_curve) = (!cmp); + +err: + fp_uninit(&tmp1); + fp_uninit(&tmp2); + + return ret; +} + +/* + * Same as previous but using an affine point instead of pair of coordinates + * and a curve + */ +int aff_pt_is_on_curve(aff_pt_src_t pt, int *on_curve) +{ + int ret; + + MUST_HAVE((on_curve != NULL), ret, err); + ret = aff_pt_check_initialized(pt); EG(ret, err); + ret = is_on_shortw_curve(&(pt->x), &(pt->y), pt->crv, on_curve); + +err: + return ret; +} + +/* + * Copy 'in' affine point into 'out'. 'out' is initialized by the function. + * 0 is returned on success, -1 on error. + */ +int ec_shortw_aff_copy(aff_pt_t out, aff_pt_src_t in) +{ + int ret; + + ret = aff_pt_check_initialized(in); EG(ret, err); + ret = aff_pt_init(out, in->crv); EG(ret, err); + ret = fp_copy(&(out->x), &(in->x)); EG(ret, err); + ret = fp_copy(&(out->y), &(in->y)); + +err: + return ret; +} + +/* + * Compare affine points 'in1' and 'in2'. On success, 0 is returned and + * comparison value is given using 'cmp' (0 if equal, a non-zero value + * if they are different). -1 is returned on error. + */ +int ec_shortw_aff_cmp(aff_pt_src_t in1, aff_pt_src_t in2, int *cmp) +{ + int ret, cmp_x, cmp_y; + + MUST_HAVE((cmp != NULL), ret, err); + + ret = aff_pt_check_initialized(in1); EG(ret, err); + ret = aff_pt_check_initialized(in2); EG(ret, err); + + MUST_HAVE((in1->crv == in2->crv), ret, err); + + ret = fp_cmp(&(in1->x), &(in2->x), &cmp_x); EG(ret, err); + ret = fp_cmp(&(in1->y), &(in2->y), &cmp_y); EG(ret, err); + + (*cmp) = (cmp_x | cmp_y); + +err: + return ret; +} + +/* + * Check if given affine points 'in1' and 'in2' on the same curve are equal + * or opposite. On success, 0 is returned and 'aff_is_eq_or_opp' contains: + * - 1 if points are equal or opposite + * - 0 if not + * The function returns -1 on error, in which case 'aff_is_eq_or_opp' + * is left untouched. + */ +int ec_shortw_aff_eq_or_opp(aff_pt_src_t in1, aff_pt_src_t in2, + int *aff_is_eq_or_opp) +{ + int ret, cmp, eq_or_opp; + + ret = aff_pt_check_initialized(in1); EG(ret, err); + ret = aff_pt_check_initialized(in2); EG(ret, err); + MUST_HAVE((in1->crv == in2->crv), ret, err); + MUST_HAVE((aff_is_eq_or_opp != NULL), ret, err); + + ret = fp_cmp(&(in1->x), &(in2->x), &cmp); EG(ret, err); + ret = fp_eq_or_opp(&(in1->y), &(in2->y), &eq_or_opp); EG(ret, err); + + (*aff_is_eq_or_opp) = ((cmp == 0) & eq_or_opp); + +err: + return ret; +} + +/* + * Import an affine point from a buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. The function returns 0 on success, -1 on error. + */ +int aff_pt_import_from_buf(aff_pt_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_shortw_crv_src_t crv) +{ + fp_ctx_src_t ctx; + u16 coord_len; + int ret, on_curve; + + MUST_HAVE((pt_buf != NULL), ret, err); + MUST_HAVE((pt != NULL), ret, err); + ret = ec_shortw_crv_check_initialized(crv); EG(ret, err); + + ctx = crv->a.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + ret = fp_init_from_buf(&(pt->x), ctx, pt_buf, coord_len); EG(ret, err); + ret = fp_init_from_buf(&(pt->y), ctx, pt_buf + coord_len, coord_len); EG(ret, err); + + /* Set the curve */ + pt->crv = crv; + + /* Mark the point as initialized */ + pt->magic = AFF_PT_MAGIC; + + /* + * Check that the point is indeed on provided curve, uninitialize it + * if this is not the case. + */ + ret = aff_pt_is_on_curve(pt, &on_curve); EG(ret, err); + + if (!on_curve) { + aff_pt_uninit(pt); + ret = -1; + } else { + ret = 0; + } + +err: + PTR_NULLIFY(ctx); + + return ret; +} + + +/* + * Export an affine point 'pt' to a buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. + */ +int aff_pt_export_to_buf(aff_pt_src_t pt, u8 *pt_buf, u32 pt_buf_len) +{ + u16 coord_len; + int ret, on_curve; + + MUST_HAVE((pt_buf != NULL), ret, err); + + /* The point to be exported must be on the curve */ + ret = aff_pt_is_on_curve(pt, &on_curve); EG(ret, err); + MUST_HAVE((on_curve), ret, err); + + /* buffer size must match 2 * p_len */ + coord_len = (u16)BYTECEIL(pt->crv->a.ctx->p_bitlen); + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + /* Export the two coordinates */ + ret = fp_export_to_buf(pt_buf, coord_len, &(pt->x)); EG(ret, err); + ret = fp_export_to_buf(pt_buf + coord_len, coord_len, &(pt->y)); + +err: + return ret; +} diff --git a/crypto/libecc/src/curves/aff_pt_edwards.c b/crypto/libecc/src/curves/aff_pt_edwards.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/aff_pt_edwards.c @@ -0,0 +1,855 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* NOTE: Edwards here implies Twisted Edwards curves + * (these in fact include/extend basic form Edwards curves). + */ + +#define AFF_PT_EDWARDS_MAGIC ((word_t)(0x8390a9bc43d9ffabULL)) + +/* Verify that an affine point has already been initialized + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_check_initialized(aff_pt_edwards_src_t in) +{ + int ret; + + MUST_HAVE(((in != NULL) && (in->magic == AFF_PT_EDWARDS_MAGIC)), ret, err); + ret = ec_edwards_crv_check_initialized(in->crv); + +err: + return ret; +} + +/* + * Initialize pointed aff_pt_edwards structure to make it usable by library + * function on given curve. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_init(aff_pt_edwards_t in, ec_edwards_crv_src_t curve) +{ + int ret; + + MUST_HAVE((in != NULL), ret, err); + ret = ec_edwards_crv_check_initialized(curve); EG(ret, err); + + ret = fp_init(&(in->x), curve->a.ctx); EG(ret, err); + ret = fp_init(&(in->y), curve->a.ctx); EG(ret, err); + + in->crv = curve; + in->magic = AFF_PT_EDWARDS_MAGIC; + +err: + return ret; +} + +/* + * Initialize pointed aff_pt_edwards structure to make it usable by library + * function on given curve with explicit coordinates. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_init_from_coords(aff_pt_edwards_t in, + ec_edwards_crv_src_t curve, + fp_src_t xcoord, fp_src_t ycoord) +{ + int ret; + + ret = aff_pt_edwards_init(in, curve); EG(ret, err); + ret = fp_copy(&(in->x), xcoord); EG(ret, err); + ret = fp_copy(&(in->y), ycoord); + +err: + return ret; +} + +/* + * Uninitialize pointed affine point to prevent further use (magic field + * in the structure is zeroized) and zeroize associated storage space. + * Note that the curve context pointed to by the point element (passed + * during init) is left untouched. + * + */ +void aff_pt_edwards_uninit(aff_pt_edwards_t in) +{ + if ((in != NULL) && (in->magic == AFF_PT_EDWARDS_MAGIC) && (in->crv != NULL)) { + fp_uninit(&(in->x)); + fp_uninit(&(in->y)); + + in->crv = NULL; + in->magic = WORD(0); + } + + return; +} + +/* + * 'on_curve' set to 1 if the point of coordinates (u,v) is on the curve, i.e. if it + * verifies curve equation a*x^2 + y^2 = 1 + d*x^2*y^2. It is set to 0 otherwise. + * 'on_curve' is not meaningful on error. + * + * Returns 0 on success, -1 on error. + */ +int is_on_edwards_curve(fp_src_t x, fp_src_t y, + ec_edwards_crv_src_t curve, + int *on_curve) +{ + fp x2, y2, tmp1, tmp2; + int ret, cmp; + x2.magic = y2.magic = tmp1.magic = tmp2.magic = WORD(0); + + MUST_HAVE((on_curve != NULL), ret, err); + ret = ec_edwards_crv_check_initialized(curve); EG(ret, err); + + ret = fp_check_initialized(x); EG(ret, err); + ret = fp_check_initialized(y); EG(ret, err); + + MUST_HAVE((x->ctx == y->ctx), ret, err); + MUST_HAVE((x->ctx == curve->a.ctx), ret, err); + + ret = fp_init(&x2, x->ctx); EG(ret, err); + ret = fp_sqr(&x2, x); EG(ret, err); + ret = fp_init(&y2, x->ctx); EG(ret, err); + ret = fp_sqr(&y2, y); EG(ret, err); + + ret = fp_init(&tmp1, x->ctx); EG(ret, err); + ret = fp_init(&tmp2, x->ctx); EG(ret, err); + + ret = fp_mul(&tmp1, &x2, &y2); EG(ret, err); + ret = fp_mul(&tmp1, &tmp1, &(curve->d)); EG(ret, err); + ret = fp_inc(&tmp1, &tmp1); EG(ret, err); + + ret = fp_mul(&tmp2, &x2, &(curve->a)); EG(ret, err); + ret = fp_add(&tmp2, &tmp2, &y2); EG(ret, err); + + ret = fp_cmp(&tmp1, &tmp2, &cmp); + + if (!ret) { + (*on_curve) = (!cmp); + } + +err: + fp_uninit(&x2); + fp_uninit(&y2); + fp_uninit(&tmp1); + fp_uninit(&tmp2); + + return ret; +} + +/* + * Checks if affine coordinates point is on an Edwards curve. 'on_curve' is set + * to 1 if yes, 0 if no. 'on_curve' is not meaningful in case of error. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_is_on_curve(aff_pt_edwards_src_t pt, int *on_curve) +{ + int ret; + + ret = aff_pt_edwards_check_initialized(pt); EG(ret, err); + + ret = is_on_edwards_curve(&(pt->x), &(pt->y), pt->crv, on_curve); + +err: + return ret; +} + +/* + * Copy an Edwards affine point in an output. The output is initialized properly. + * + * Returns 0 on success, -1 on error. + */ +int ec_edwards_aff_copy(aff_pt_edwards_t out, aff_pt_edwards_src_t in) +{ + int ret; + + ret = aff_pt_edwards_check_initialized(in); EG(ret, err); + ret = aff_pt_edwards_init(out, in->crv); EG(ret, err); + + ret = fp_copy(&(out->x), &(in->x)); EG(ret, err); + ret = fp_copy(&(out->y), &(in->y)); + +err: + return ret; +} + +/* + * Compares two given affine points on an Edwards curve, it returns 0 in input + * 'cmp' if they correspond or not 0 if not. 'cmp' is not meaningful on error. + * + * Returns 0 on success, -1 on error. + */ +int ec_edwards_aff_cmp(aff_pt_edwards_src_t in1, aff_pt_edwards_src_t in2, + int *cmp) +{ + int ret, cmp1, cmp2; + + MUST_HAVE((cmp != NULL), ret, err); + ret = aff_pt_edwards_check_initialized(in1); EG(ret, err); + ret = aff_pt_edwards_check_initialized(in2); EG(ret, err); + + MUST_HAVE((in1->crv == in2->crv), ret, err); + + ret = fp_cmp(&(in1->x), &(in2->x), &cmp1); EG(ret, err); + ret = fp_cmp(&(in1->y), &(in2->y), &cmp2); + + if (!ret) { + (*cmp) = (cmp1 | cmp2); + } + +err: + return ret; +} + +/* + * Import an Edwards affine point from a buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_import_from_buf(aff_pt_edwards_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_edwards_crv_src_t crv) +{ + fp_ctx_src_t ctx; + u16 coord_len; + int ret, on_curve; + + ret = ec_edwards_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE(((pt_buf != NULL) && (pt != NULL)), ret, err); + + ctx = crv->a.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + ret = fp_init_from_buf(&(pt->x), ctx, pt_buf, coord_len); EG(ret, err); + ret = fp_init_from_buf(&(pt->y), ctx, pt_buf + coord_len, coord_len); EG(ret, err); + + /* Set the curve */ + pt->crv = crv; + + /* Mark the point as initialized */ + pt->magic = AFF_PT_EDWARDS_MAGIC; + + /* Check that the point is indeed on the provided curve, uninitialize it + * if this is not the case. + */ + ret = aff_pt_edwards_is_on_curve(pt, &on_curve); EG(ret, err); + if (!on_curve) { + aff_pt_edwards_uninit(pt); + ret = -1; + } + +err: + return ret; +} + + +/* Export an Edwards affine point to a buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_export_to_buf(aff_pt_edwards_src_t pt, + u8 *pt_buf, u32 pt_buf_len) +{ + fp_ctx_src_t ctx; + u16 coord_len; + int ret, on_curve; + + ret = aff_pt_edwards_check_initialized(pt); EG(ret, err); + MUST_HAVE((pt_buf != NULL), ret, err); + + /* The point to be exported must be on the curve */ + ret = aff_pt_edwards_is_on_curve(pt, &on_curve); EG(ret, err); + MUST_HAVE(on_curve, ret, err); + + ctx = pt->crv->a.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + /* Export the three coordinates */ + ret = fp_export_to_buf(pt_buf, coord_len, &(pt->x)); EG(ret, err); + ret = fp_export_to_buf(pt_buf + coord_len, coord_len, &(pt->y)); + +err: + return ret; +} + +/* + * Mapping curves from twisted Edwards to Montgomery. + * + * E{a, d} is mapped to M{A, B} using the formula: + * A = 2(a+d)/(a-d) + * B = 4/((a-d) * alpha^2) + * + * Returns 0 on success, -1 on error. + */ +int curve_edwards_to_montgomery(ec_edwards_crv_src_t edwards_crv, + ec_montgomery_crv_t montgomery_crv, + fp_src_t alpha_edwards) +{ + fp tmp1, tmp2, A, B; + int ret; + tmp1.magic = tmp2.magic = A.magic = B.magic = WORD(0); + + ret = ec_edwards_crv_check_initialized(edwards_crv); EG(ret, err); + ret = fp_check_initialized(alpha_edwards); EG(ret, err); + MUST_HAVE((edwards_crv->a.ctx == alpha_edwards->ctx), ret, err); + + ret = fp_init(&tmp1, edwards_crv->a.ctx); EG(ret, err); + ret = fp_init(&tmp2, edwards_crv->a.ctx); EG(ret, err); + ret = fp_init(&A, edwards_crv->a.ctx); EG(ret, err); + ret = fp_init(&B, edwards_crv->a.ctx); EG(ret, err); + + + /* Compute Z = (alpha ^ 2) et T = 2 / ((a-d) * Z) + * and then: + * A = 2(a+d)/(a-d) = Z * (a + d) * T + * B = 4/((a-d) * alpha^2) = 2 * T + */ + ret = fp_sqr(&tmp1, alpha_edwards); EG(ret, err); + ret = fp_sub(&tmp2, &(edwards_crv->a), &(edwards_crv->d)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &tmp1); EG(ret, err); + ret = fp_inv(&tmp2, &tmp2); EG(ret, err); + ret = fp_set_word_value(&B, WORD(2)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &B); EG(ret, err); + + ret = fp_add(&A, &(edwards_crv->a), &(edwards_crv->d)); EG(ret, err); + ret = fp_mul(&A, &A, &tmp1); EG(ret, err); + ret = fp_mul(&A, &A, &tmp2); EG(ret, err); + ret = fp_mul(&B, &B, &tmp2); EG(ret, err); + + /* Initialize our Montgomery curve */ + ret = ec_montgomery_crv_init(montgomery_crv, &A, &B, &(edwards_crv->order)); + +err: + fp_uninit(&tmp1); + fp_uninit(&tmp2); + fp_uninit(&A); + fp_uninit(&B); + + return ret; +} + +/* + * Checks that an Edwards curve and Montgomery curve are compatible. + * + * Returns 0 on success, -1 on error. + */ +int curve_edwards_montgomery_check(ec_edwards_crv_src_t e_crv, + ec_montgomery_crv_src_t m_crv, + fp_src_t alpha_edwards) +{ + int ret, cmp; + ec_montgomery_crv check; + check.magic = WORD(0); + + ret = ec_montgomery_crv_check_initialized(m_crv); EG(ret, err); + ret = curve_edwards_to_montgomery(e_crv, &check, alpha_edwards); EG(ret, err); + + /* Check elements */ + MUST_HAVE((!fp_cmp(&(check.A), &(m_crv->A), &cmp)) && (!cmp), ret, err); + MUST_HAVE((!fp_cmp(&(check.B), &(m_crv->B), &cmp)) && (!cmp), ret, err); + MUST_HAVE((!nn_cmp(&(check.order), &(m_crv->order), &cmp)) && (!cmp), ret, err); + +err: + ec_montgomery_crv_uninit(&check); + + return ret; +} + +/* + * Mapping curves from Montgomery to twisted Edwards. + * + * M{A, B} is mapped to E{a, d} using the formula: + * a = (A+2)/(B * alpha^2) + * d = (A-2)/(B * alpha^2) + * + * Or the inverse (switch a and d roles). + * + * Returns 0 on success, -1 on error. + */ +int curve_montgomery_to_edwards(ec_montgomery_crv_src_t m_crv, + ec_edwards_crv_t e_crv, + fp_src_t alpha_edwards) +{ + int ret, cmp; + fp tmp, tmp2, a, d; + tmp.magic = tmp2.magic = a.magic = d.magic = WORD(0); + + ret = ec_montgomery_crv_check_initialized(m_crv); EG(ret, err); + ret = fp_check_initialized(alpha_edwards); EG(ret, err); + MUST_HAVE((m_crv->A.ctx == alpha_edwards->ctx), ret, err); + + ret = fp_init(&tmp, m_crv->A.ctx); EG(ret, err); + ret = fp_init(&tmp2, m_crv->A.ctx); EG(ret, err); + ret = fp_init(&a, m_crv->A.ctx); EG(ret, err); + ret = fp_init(&d, m_crv->A.ctx); EG(ret, err); + + ret = fp_set_word_value(&tmp, WORD(2)); EG(ret, err); + ret = fp_mul(&tmp2, &(m_crv->B), alpha_edwards); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, alpha_edwards); EG(ret, err); + ret = fp_inv(&tmp2, &tmp2); EG(ret, err); + + /* a = (A+2)/(B * alpha^2) */ + ret = fp_add(&a, &(m_crv->A), &tmp); EG(ret, err); + ret = fp_mul(&a, &a, &tmp2); EG(ret, err); + + /* d = (A-2)/(B * alpha^2) */ + ret = fp_sub(&d, &(m_crv->A), &tmp); EG(ret, err); + ret = fp_mul(&d, &d, &tmp2); EG(ret, err); + + /* Initialize our Edwards curve */ + /* Check if we have to inverse a and d */ + ret = fp_one(&tmp); EG(ret, err); + ret = fp_cmp(&d, &tmp, &cmp); EG(ret, err); + if (cmp == 0) { + ret = ec_edwards_crv_init(e_crv, &d, &a, &(m_crv->order)); + } else { + ret = ec_edwards_crv_init(e_crv, &a, &d, &(m_crv->order)); + } + +err: + fp_uninit(&tmp); + fp_uninit(&tmp2); + fp_uninit(&a); + fp_uninit(&d); + + return ret; +} + +/* + * Mapping curve from Edwards to short Weierstrass. + * + * Returns 0 on success, -1 on error. + */ +int curve_edwards_to_shortw(ec_edwards_crv_src_t edwards_crv, + ec_shortw_crv_t shortw_crv, + fp_src_t alpha_edwards) +{ + int ret; + ec_montgomery_crv montgomery_crv; + montgomery_crv.magic = WORD(0); + + ret = curve_edwards_to_montgomery(edwards_crv, &montgomery_crv, alpha_edwards); EG(ret, err); + ret = curve_montgomery_to_shortw(&montgomery_crv, shortw_crv); + +err: + ec_montgomery_crv_uninit(&montgomery_crv); + + return ret; +} + +/* Checking if an Edwards curve and short Weierstrass curve are compliant (through Montgomery mapping). + * + * Returns 0 on success, -1 on error. + */ +int curve_edwards_shortw_check(ec_edwards_crv_src_t edwards_crv, + ec_shortw_crv_src_t shortw_crv, + fp_src_t alpha_edwards) +{ + int ret; + ec_montgomery_crv montgomery_crv; + montgomery_crv.magic = WORD(0); + + ret = curve_edwards_to_montgomery(edwards_crv, &montgomery_crv, alpha_edwards); EG(ret, err); + + ret = curve_montgomery_shortw_check(&montgomery_crv, shortw_crv); + +err: + ec_montgomery_crv_uninit(&montgomery_crv); + + return ret; +} + +/* + * Mapping curve from short Weierstrass to Edwards. + * + * Returns 0 on success, -1 on error. + */ +int curve_shortw_to_edwards(ec_shortw_crv_src_t shortw_crv, + ec_edwards_crv_t edwards_crv, + fp_src_t alpha_montgomery, + fp_src_t gamma_montgomery, + fp_src_t alpha_edwards) +{ + int ret; + ec_montgomery_crv montgomery_crv; + montgomery_crv.magic = WORD(0); + + ret = curve_shortw_to_montgomery(shortw_crv, &montgomery_crv, alpha_montgomery, gamma_montgomery); EG(ret, err); + + ret = curve_montgomery_to_edwards(&montgomery_crv, edwards_crv, alpha_edwards); + +err: + ec_montgomery_crv_uninit(&montgomery_crv); + + return ret; +} + +/* + * Mapping points from twisted Edwards to Montgomery. + * Point E(x, y) is mapped to M(u, v) with the formula: + * - (0, 1) mapped to the point at infinity (not possible in our affine coordinates) + * - (0, -1) mapped to (0, 0) + * - (u, v) mapped to ((1+y)/(1-y), alpha * (1+y)/((1-y)x)) + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_to_montgomery(aff_pt_edwards_src_t in_edwards, + ec_montgomery_crv_src_t montgomery_crv, + aff_pt_montgomery_t out_montgomery, + fp_src_t alpha_edwards) +{ + /* NOTE: we attempt to perform the (0, -1) -> (0, 0) mapping in constant time. + * Hence the weird table selection. + */ + int ret, iszero, on_curve, cmp; + fp tmp, tmp2, x, y; + fp tab_x[2]; + fp_src_t tab_x_t[2] = { &tab_x[0], &tab_x[1] }; + fp tab_y[2]; + fp_src_t tab_y_t[2] = { &tab_y[0], &tab_y[1] }; + u8 idx = 0; + tmp.magic = tmp2.magic = x.magic = y.magic = WORD(0); + tab_x[0].magic = tab_x[1].magic = WORD(0); + tab_y[0].magic = tab_y[1].magic = WORD(0); + + ret = ec_montgomery_crv_check_initialized(montgomery_crv); EG(ret, err); + + /* Check input point is on its curve */ + ret = aff_pt_edwards_is_on_curve(in_edwards, &on_curve); EG(ret, err); + MUST_HAVE(on_curve, ret, err); + + ret = curve_edwards_montgomery_check(in_edwards->crv, montgomery_crv, alpha_edwards); EG(ret, err); + + ret = fp_init(&tmp, in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&tmp2, in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&x, in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&y, in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&tab_x[0], in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&tab_x[1], in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&tab_y[0], in_edwards->crv->a.ctx); EG(ret, err); + ret = fp_init(&tab_y[1], in_edwards->crv->a.ctx); EG(ret, err); + + ret = fp_one(&tmp); EG(ret, err); + /* We do not handle point at infinity in affine coordinates */ + ret = fp_iszero(&(in_edwards->x), &iszero); EG(ret, err); + ret = fp_cmp(&(in_edwards->y), &tmp, &cmp); EG(ret, err); + MUST_HAVE(!(iszero && (cmp == 0)), ret, err); + /* Map (0, -1) to (0, 0) */ + ret = fp_zero(&tmp2); EG(ret, err); + ret = fp_sub(&tmp2, &tmp2, &tmp); EG(ret, err); + /* Copy 1 as x as dummy value */ + ret = fp_one(&tab_x[0]); EG(ret, err); + ret = fp_copy(&tab_x[1], &(in_edwards->x)); EG(ret, err); + /* Copy -1 as y to produce (0, 0) */ + ret = fp_copy(&tab_y[0], &tmp2); EG(ret, err); + ret = fp_copy(&tab_y[1], &(in_edwards->y)); EG(ret, err); + + ret = fp_iszero(&(in_edwards->x), &iszero); EG(ret, err); + ret = fp_cmp(&(in_edwards->y), &tmp2, &cmp); EG(ret, err); + idx = !(iszero && cmp); + ret = fp_tabselect(&x, idx, tab_x_t, 2); EG(ret, err); + ret = fp_tabselect(&y, idx, tab_y_t, 2); EG(ret, err); + + ret = aff_pt_montgomery_init(out_montgomery, montgomery_crv); EG(ret, err); + /* Compute general case */ + ret = fp_copy(&tmp2, &tmp); EG(ret, err); + /* Put 1/(1-y) in tmp */ + ret = fp_sub(&tmp, &tmp, &y); EG(ret, err); + ret = fp_inv(&tmp, &tmp); EG(ret, err); + /* Put (1+y) in tmp2 */ + ret = fp_add(&tmp2, &tmp2, &y); EG(ret, err); + /* u = (1+y) / (1-y) */ + ret = fp_mul(&(out_montgomery->u), &tmp, &tmp2); EG(ret, err); + /* v = alpha_edwards * (1+y)/((1-y)x) */ + ret = fp_inv(&(out_montgomery->v), &x); EG(ret, err); + ret = fp_mul(&(out_montgomery->v), &(out_montgomery->v), alpha_edwards); EG(ret, err); + ret = fp_mul(&(out_montgomery->v), &(out_montgomery->u), &(out_montgomery->v)); EG(ret, err); + + /* Final check that the point is on the curve */ + ret = aff_pt_montgomery_is_on_curve(out_montgomery, &on_curve); EG(ret, err); + if (!on_curve) { + ret = -1; + } + +err: + fp_uninit(&tmp); + fp_uninit(&tmp2); + fp_uninit(&x); + fp_uninit(&y); + fp_uninit(&tab_x[0]); + fp_uninit(&tab_x[1]); + fp_uninit(&tab_y[0]); + fp_uninit(&tab_y[1]); + + return ret; +} + +/* + * Mapping points from Montgomery to twisted Edwards. + * Point M(u, v) is mapped to E(x, y) with the formula: + * - Point at infinity mapped to (0, 1) (not possible in our affine coordinates) + * - (0, 0) mapped to (0, -1) + * - (x, y) mapped to (alpha * (u/v), (u-1)/(u+1)) + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_to_edwards(aff_pt_montgomery_src_t in_montgomery, + ec_edwards_crv_src_t edwards_crv, + aff_pt_edwards_t out_edwards, + fp_src_t alpha) +{ + /* NOTE: we attempt to perform the (0, 0) -> (0, -1) mapping in constant time. + * Hence the weird table selection. + */ + int ret, iszero1, iszero2, on_curve; + fp tmp, u, v; + fp tab_u[2]; + fp_src_t tab_u_t[2] = { &tab_u[0], &tab_u[1] }; + fp tab_v[2]; + fp_src_t tab_v_t[2] = { &tab_v[0], &tab_v[1] }; + u8 idx = 0; + tmp.magic = u.magic = v.magic = 0; + tab_u[0].magic = tab_u[1].magic = WORD(0); + tab_v[0].magic = tab_v[1].magic = WORD(0); + + ret = ec_edwards_crv_check_initialized(edwards_crv); EG(ret, err); + + /* Check input point is on its curve */ + ret = aff_pt_montgomery_is_on_curve(in_montgomery, &on_curve); EG(ret, err); + MUST_HAVE(on_curve, ret, err); + + ret = curve_edwards_montgomery_check(edwards_crv, in_montgomery->crv, alpha); EG(ret, err); + + ret = fp_init(&tmp, in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&u, in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&v, in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&tab_u[0], in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&tab_u[1], in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&tab_v[0], in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&tab_v[1], in_montgomery->crv->A.ctx); EG(ret, err); + + ret = fp_one(&tmp); EG(ret, err); + /* Map (0, 0) to (0, -1) */ + /* Copy 0 as u as dummy value */ + ret = fp_zero(&tab_u[0]); EG(ret, err); + ret = fp_copy(&tab_u[1], &(in_montgomery->u)); EG(ret, err); + /* Copy 1 as v dummy value to produce (0, -1) */ + ret = fp_copy(&tab_v[0], &tmp); EG(ret, err); + ret = fp_copy(&tab_v[1], &(in_montgomery->v)); EG(ret, err); + + ret = fp_iszero(&(in_montgomery->u), &iszero1); EG(ret, err); + ret = fp_iszero(&(in_montgomery->v), &iszero2); EG(ret, err); + idx = (iszero1 && iszero2) ? 0 : 1; + ret = fp_tabselect(&u, idx, tab_u_t, 2); EG(ret, err); + ret = fp_tabselect(&v, idx, tab_v_t, 2); EG(ret, err); + + ret = aff_pt_edwards_init(out_edwards, edwards_crv); EG(ret, err); + /* x = alpha * (u / v) */ + ret = fp_inv(&(out_edwards->x), &v); EG(ret, err); + ret = fp_mul(&(out_edwards->x), &(out_edwards->x), alpha); EG(ret, err); + ret = fp_mul(&(out_edwards->x), &(out_edwards->x), &u); EG(ret, err); + /* y = (u-1)/(u+1) */ + ret = fp_add(&(out_edwards->y), &u, &tmp); EG(ret, err); + ret = fp_inv(&(out_edwards->y), &(out_edwards->y)); EG(ret, err); + ret = fp_sub(&tmp, &u, &tmp); EG(ret, err); + ret = fp_mul(&(out_edwards->y), &(out_edwards->y), &tmp); EG(ret, err); + + /* Final check that the point is on the curve */ + ret = aff_pt_edwards_is_on_curve(out_edwards, &on_curve); EG(ret, err); + if (!on_curve) { + ret = -1; + } + +err: + fp_uninit(&tmp); + fp_uninit(&u); + fp_uninit(&v); + fp_uninit(&tab_u[0]); + fp_uninit(&tab_u[1]); + fp_uninit(&tab_v[0]); + fp_uninit(&tab_v[1]); + + return ret; +} + + +/* + * Map points from Edwards to short Weierstrass through Montgomery (composition mapping). + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_edwards_to_shortw(aff_pt_edwards_src_t in_edwards, + ec_shortw_crv_src_t shortw_crv, + aff_pt_t out_shortw, fp_src_t alpha_edwards) +{ + int ret; + aff_pt_montgomery inter_montgomery; + ec_montgomery_crv inter_montgomery_crv; + inter_montgomery.magic = inter_montgomery_crv.magic = WORD(0); + + /* First, map from Edwards to Montgomery */ + ret = aff_pt_edwards_check_initialized(in_edwards); EG(ret, err); + ret = curve_edwards_to_montgomery(in_edwards->crv, &inter_montgomery_crv, alpha_edwards); EG(ret, err); + ret = aff_pt_edwards_to_montgomery(in_edwards, &inter_montgomery_crv, &inter_montgomery, alpha_edwards); EG(ret, err); + + /* Then map from Montgomery to short Weierstrass */ + ret = aff_pt_montgomery_to_shortw(&inter_montgomery, shortw_crv, out_shortw); + +err: + aff_pt_montgomery_uninit(&inter_montgomery); + ec_montgomery_crv_uninit(&inter_montgomery_crv); + + return ret; +} + +/* + * Map points from projective short Weierstrass to Edwards through Montgomery (composition mapping). + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_shortw_to_edwards(aff_pt_src_t in_shortw, + ec_edwards_crv_src_t edwards_crv, + aff_pt_edwards_t out_edwards, + fp_src_t alpha_edwards) +{ + int ret; + aff_pt_montgomery inter_montgomery; + ec_montgomery_crv inter_montgomery_crv; + inter_montgomery.magic = inter_montgomery_crv.magic = WORD(0); + + /* First, map from short Weierstrass to Montgomery */ + ret = curve_edwards_to_montgomery(edwards_crv, &inter_montgomery_crv, alpha_edwards); EG(ret, err); + ret = aff_pt_shortw_to_montgomery(in_shortw, &inter_montgomery_crv, &inter_montgomery); EG(ret, err); + + /* Then map from Montgomery to Edwards */ + ret = aff_pt_montgomery_to_edwards(&inter_montgomery, edwards_crv, out_edwards, alpha_edwards); + +err: + aff_pt_montgomery_uninit(&inter_montgomery); + ec_montgomery_crv_uninit(&inter_montgomery_crv); + + return ret; +} + +/* + * Recover the two possible y coordinates from one x on a given + * curve. + * The two outputs y1 and y2 are initialized in the function. + * + * The function returns -1 on error, 0 on success. + * + */ +int aff_pt_edwards_y_from_x(fp_t y1, fp_t y2, fp_src_t x, ec_edwards_crv_src_t crv) +{ + int ret; + fp tmp; + tmp.magic = WORD(0); + + /* Sanity checks */ + ret = fp_check_initialized(x); EG(ret, err); + ret = ec_edwards_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE((x->ctx == crv->a.ctx) && (x->ctx == crv->d.ctx), ret, err); + MUST_HAVE((y1 != NULL) && (y2 != NULL), ret, err); + /* Aliasing is not supported */ + MUST_HAVE((y1 != y2) && (y1 != x), ret, err); + + ret = fp_init(y1, x->ctx); EG(ret, err); + ret = fp_init(y2, x->ctx); EG(ret, err); + ret = fp_init(&tmp, x->ctx); EG(ret, err); + + /* In order to find our two possible y, we have to find the square + * roots of (1 - a x**2) / (1 - d * x**2). + */ + ret = fp_one(&tmp); EG(ret, err); + /* (1 - a x**2) */ + ret = fp_mul(y1, x, &(crv->a)); EG(ret, err); + ret = fp_mul(y1, y1, x); EG(ret, err); + ret = fp_sub(y1, &tmp, y1); EG(ret, err); + /* 1 / (1 - d * x**2) */ + ret = fp_mul(y2, x, &(crv->d)); EG(ret, err); + ret = fp_mul(y2, y2, x); EG(ret, err); + ret = fp_sub(y2, &tmp, y2); EG(ret, err); + ret = fp_inv(y2, y2); EG(ret, err); + + ret = fp_mul(&tmp, y1, y2); EG(ret, err); + + ret = fp_sqrt(y1, y2, &tmp); + +err: + fp_uninit(&tmp); + + return ret; +} + +/* + * Recover the two possible x coordinates from one y on a given + * curve. + * The two outputs x1 and x2 are initialized in the function. + * + * The function returns -1 on error, 0 on success. + * + */ +int aff_pt_edwards_x_from_y(fp_t x1, fp_t x2, fp_src_t y, ec_edwards_crv_src_t crv) +{ + int ret; + fp tmp; + tmp.magic = WORD(0); + + /* Sanity checks */ + ret = fp_check_initialized(y); EG(ret, err); + ret = ec_edwards_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE((y->ctx == crv->a.ctx) && (y->ctx == crv->d.ctx), ret, err); + MUST_HAVE((x1 != NULL) && (x2 != NULL), ret, err); + /* Aliasing is not supported */ + MUST_HAVE((x1 != x2) && (x1 != y), ret, err); + + ret = fp_init(x1, y->ctx); EG(ret, err); + ret = fp_init(x2, y->ctx); EG(ret, err); + ret = fp_init(&tmp, y->ctx); EG(ret, err); + + /* In order to find our two possible y, we have to find the square + * roots of (1 - y**2) / (a - d * y**2). + */ + ret = fp_one(&tmp); EG(ret, err); + /* (1 - y**2) */ + ret = fp_mul(x1, y, y); EG(ret, err); + ret = fp_sub(x1, &tmp, x1); EG(ret, err); + /* 1 / (a - d * x**2) */ + ret = fp_mul(x2, y, &(crv->d)); EG(ret, err); + ret = fp_mul(x2, x2, y); EG(ret, err); + ret = fp_sub(x2, &(crv->a), x2); EG(ret, err); + ret = fp_inv(x2, x2); EG(ret, err); + + ret = fp_mul(&tmp, x1, x2); EG(ret, err); + + ret = fp_sqrt(x1, x2, &tmp); + +err: + fp_uninit(&tmp); + + return ret; +} diff --git a/crypto/libecc/src/curves/aff_pt_montgomery.c b/crypto/libecc/src/curves/aff_pt_montgomery.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/aff_pt_montgomery.c @@ -0,0 +1,579 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#define AFF_PT_MONTGOMERY_MAGIC ((word_t)(0x7390a9bc43d94598ULL)) + +/* Verify that an affine point has already been initialized. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_check_initialized(aff_pt_montgomery_src_t in) +{ + int ret; + + MUST_HAVE(((in != NULL) && (in->magic == AFF_PT_MONTGOMERY_MAGIC)), ret, err); + ret = ec_montgomery_crv_check_initialized(in->crv); + +err: + return ret; +} + +/* + * Initialize pointed aff_pt_montgomery structure to make it usable by library + * function on given curve. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_init(aff_pt_montgomery_t in, ec_montgomery_crv_src_t curve) +{ + int ret; + + MUST_HAVE((in != NULL), ret, err); + ret = ec_montgomery_crv_check_initialized(curve); EG(ret, err); + + ret = fp_init(&(in->u), curve->A.ctx); EG(ret, err); + ret = fp_init(&(in->v), curve->A.ctx); EG(ret, err); + + in->crv = curve; + in->magic = AFF_PT_MONTGOMERY_MAGIC; + +err: + return ret; +} + +/* + * Initialize pointed aff_pt_montgomery structure to make it usable by library + * function on given curve with explicit coordinates. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_init_from_coords(aff_pt_montgomery_t in, + ec_montgomery_crv_src_t curve, + fp_src_t ucoord, fp_src_t vcoord) +{ + int ret; + + ret = aff_pt_montgomery_init(in, curve); EG(ret, err); + ret = fp_copy(&(in->u), ucoord); EG(ret, err); + ret = fp_copy(&(in->v), vcoord); + +err: + return ret; +} + +/* + * Uninitialize pointed affine point to prevent further use (magic field + * in the structure is zeroized) and zeroize associated storage space. + * Note that the curve context pointed to by the point element (passed + * during init) is left untouched. + * + */ +void aff_pt_montgomery_uninit(aff_pt_montgomery_t in) +{ + if ((in != NULL) && (in->magic == AFF_PT_MONTGOMERY_MAGIC) && (in->crv != NULL)) { + fp_uninit(&(in->u)); + fp_uninit(&(in->v)); + + in->crv = NULL; + in->magic = WORD(0); + } + + return; +} + +/* + * 'on_curve' set to 1 if the point of coordinates (u,v) is on the curve, i.e. if it + * verifies curve equation B*v^2 = u^3 + A*u^2 + u. It is set to 0 otherwise. + * 'on_curve' is not meaningful on error. + * + * Returns 0 on success, -1 on error. + */ +int is_on_montgomery_curve(fp_src_t u, fp_src_t v, ec_montgomery_crv_src_t curve, int *on_curve) +{ + fp Bv2, u3, Au2, tmp; + int ret, cmp; + Bv2.magic = u3.magic = Au2.magic = tmp.magic = WORD(0); + + MUST_HAVE((on_curve != NULL), ret, err); + ret = ec_montgomery_crv_check_initialized(curve); EG(ret, err); + + ret = fp_check_initialized(u); EG(ret, err); + ret = fp_check_initialized(v); EG(ret, err); + + MUST_HAVE((u->ctx == v->ctx), ret, err); + MUST_HAVE((u->ctx == curve->A.ctx), ret, err); + + ret = fp_init(&Bv2, v->ctx); EG(ret, err); + ret = fp_sqr(&Bv2, v); EG(ret, err); + ret = fp_mul(&Bv2, &(curve->B), &Bv2); EG(ret, err); + + ret = fp_init(&Au2, u->ctx); EG(ret, err); + ret = fp_sqr(&Au2, u); EG(ret, err); + ret = fp_copy(&u3, &Au2); EG(ret, err); + ret = fp_mul(&Au2, &(curve->A), &Au2); EG(ret, err); + + ret = fp_mul(&u3, &u3, u); EG(ret, err); + + ret = fp_init(&tmp, u->ctx); EG(ret, err); + ret = fp_add(&tmp, &u3, &Au2); EG(ret, err); + ret = fp_add(&tmp, &tmp, u); EG(ret, err); + + ret = fp_cmp(&tmp, &Bv2, &cmp); EG(ret, err); + + (*on_curve) = (!cmp); + +err: + fp_uninit(&Bv2); + fp_uninit(&u3); + fp_uninit(&Au2); + fp_uninit(&tmp); + + return ret; +} + +/* Checks if affine coordinates point is on a Montgomery curve. 'on_curve' is set to 1 if yes, + * 0 if no. 'on_curve' is not meaningful in case of error. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_is_on_curve(aff_pt_montgomery_src_t pt, int *on_curve) +{ + int ret; + + ret = aff_pt_montgomery_check_initialized(pt); EG(ret, err); + + ret = is_on_montgomery_curve(&(pt->u), &(pt->v), pt->crv, on_curve); + +err: + return ret; +} + +/* Copy a Montgomery affine point in an output. The output is initialized properly. + * + * Returns 0 on success, -1 on error. + */ +int ec_montgomery_aff_copy(aff_pt_montgomery_t out, aff_pt_montgomery_src_t in) +{ + int ret; + + ret = aff_pt_montgomery_check_initialized(in); EG(ret, err); + + ret = aff_pt_montgomery_init(out, in->crv); EG(ret, err); + ret = fp_copy(&(out->u), &(in->u)); EG(ret, err); + ret = fp_copy(&(out->v), &(in->v)); + +err: + return ret; +} + +/* + * Compares two given affine points on a Montgomery curve, it returns 0 in input 'cmp' if + * they correspond or not 0 if not. 'cmp' is not meaningful on error. + * + * Returns 0 on success, -1 on error. + */ +int ec_montgomery_aff_cmp(aff_pt_montgomery_src_t in1, aff_pt_montgomery_src_t in2, int *cmp) +{ + int ret, cmp1, cmp2; + + MUST_HAVE((cmp != NULL), ret, err); + ret = aff_pt_montgomery_check_initialized(in1); EG(ret, err); + ret = aff_pt_montgomery_check_initialized(in2); EG(ret, err); + MUST_HAVE((in1->crv == in2->crv), ret, err); + + ret = fp_cmp(&(in1->u), &(in2->u), &cmp1); EG(ret, err); + ret = fp_cmp(&(in1->v), &(in2->v), &cmp2); EG(ret, err); + + (*cmp) = (cmp1 | cmp2); + +err: + return ret; +} + +/* + * Import an Montgomery affine point from a buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_import_from_buf(aff_pt_montgomery_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_montgomery_crv_src_t crv) +{ + fp_ctx_src_t ctx; + u16 coord_len; + int ret, on_curve; + + ret = ec_montgomery_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE((pt_buf != NULL) && (pt != NULL), ret, err); + + ctx = crv->A.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + ret = fp_init_from_buf(&(pt->u), ctx, pt_buf, coord_len); EG(ret, err); + ret = fp_init_from_buf(&(pt->v), ctx, pt_buf + coord_len, coord_len); EG(ret, err); + + /* Set the curve */ + pt->crv = crv; + + /* Mark the point as initialized */ + pt->magic = AFF_PT_MONTGOMERY_MAGIC; + + /* Check that the point is indeed on the provided curve, uninitialize it + * if this is not the case. + */ + ret = aff_pt_montgomery_is_on_curve(pt, &on_curve); EG(ret, err); + if (!on_curve) { + aff_pt_montgomery_uninit(pt); + ret = -1; + } + +err: + return ret; +} + + +/* Export an Montgomery affine point to a buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_export_to_buf(aff_pt_montgomery_src_t pt, u8 *pt_buf, u32 pt_buf_len) +{ + fp_ctx_src_t ctx; + u16 coord_len; + int ret, on_curve; + + ret = aff_pt_montgomery_check_initialized(pt); EG(ret, err); + MUST_HAVE((pt_buf != NULL), ret, err); + + /* The point to be exported must be on the curve */ + ret = aff_pt_montgomery_is_on_curve(pt, &on_curve); EG(ret, err); + MUST_HAVE(on_curve, ret, err); + + ctx = pt->crv->A.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + /* Export the three coordinates */ + ret = fp_export_to_buf(pt_buf, coord_len, &(pt->u)); EG(ret, err); + ret = fp_export_to_buf(pt_buf + coord_len, coord_len, &(pt->v)); + +err: + return ret; +} + +/**** Mappings between curves *************/ +/* + * Mapping curves from Montgomery to short Weiertstrass. + * + * M{A, B} is mapped to W{a, b} using the formula: + * a = (3-A^2)/(3*B^2) + * b = (2*A^3-9*A)/(27*B^3) + * + * Returns 0 on success, -1 on error. + */ +int curve_montgomery_to_shortw(ec_montgomery_crv_src_t montgomery_crv, ec_shortw_crv_t shortw_crv) +{ + fp tmp, tmp2, a, b; + int ret; + tmp.magic = tmp2.magic = a.magic = b.magic = WORD(0); + + ret = ec_montgomery_crv_check_initialized(montgomery_crv); EG(ret, err); + + ret = fp_init(&tmp, montgomery_crv->A.ctx); EG(ret, err); + ret = fp_init(&tmp2, montgomery_crv->A.ctx); EG(ret, err); + ret = fp_init(&a, montgomery_crv->A.ctx); EG(ret, err); + ret = fp_init(&b, montgomery_crv->A.ctx); EG(ret, err); + + /* Compute a */ + ret = fp_sqr(&tmp, &(montgomery_crv->B)); EG(ret, err); + ret = fp_set_word_value(&tmp2, WORD(3)); EG(ret, err); + /* 3*B^2 */ + ret = fp_mul(&tmp, &tmp, &tmp2); EG(ret, err); + /* (3*B^2)^-1 */ + ret = fp_inv(&tmp, &tmp); EG(ret, err); + + /* (3-A^2) */ + ret = fp_sqr(&tmp2, &(montgomery_crv->A)); EG(ret, err); + ret = fp_set_word_value(&a, WORD(3)); EG(ret, err); + ret = fp_sub(&tmp2, &a, &tmp2); EG(ret, err); + + ret = fp_mul(&a, &tmp2, &tmp); EG(ret, err); + + /* Compute b */ + ret = fp_sqr(&tmp, &(montgomery_crv->B)); EG(ret, err); + ret = fp_mul(&tmp, &tmp, &(montgomery_crv->B)); EG(ret, err); + ret = fp_set_word_value(&tmp2, WORD(27)); EG(ret, err); + /* (27*B^3) */ + ret = fp_mul(&tmp, &tmp, &tmp2); EG(ret, err); + /* (27*B^3)^-1 */ + ret = fp_inv(&tmp, &tmp); EG(ret, err); + + /* (2*A^3-9*A) */ + ret = fp_set_word_value(&tmp2, WORD(2)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &(montgomery_crv->A)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &(montgomery_crv->A)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &(montgomery_crv->A)); EG(ret, err); + + ret = fp_set_word_value(&b, WORD(9)); EG(ret, err); + ret = fp_mul(&b, &b, &(montgomery_crv->A)); EG(ret, err); + ret = fp_sub(&b, &tmp2, &b); EG(ret, err); + + ret = fp_mul(&b, &b, &tmp); EG(ret, err); + + /* Initialize our short Weiertstrass curve */ + ret = ec_shortw_crv_init(shortw_crv, &a, &b, &(montgomery_crv->order)); + +err: + fp_uninit(&a); + fp_uninit(&b); + fp_uninit(&tmp); + fp_uninit(&tmp2); + + return ret; +} + +/* + * Checks that a short Weiertstrass curve and Montgomery curve are compatible. + * + * Returns 0 on success, -1 on error. + */ +int curve_montgomery_shortw_check(ec_montgomery_crv_src_t montgomery_crv, + ec_shortw_crv_src_t shortw_crv) +{ + int ret, cmp; + ec_shortw_crv check; + check.magic = WORD(0); + + ret = ec_shortw_crv_check_initialized(shortw_crv); EG(ret, err); + ret = curve_montgomery_to_shortw(montgomery_crv, &check); EG(ret, err); + + /* Check elements */ + MUST_HAVE((!fp_cmp(&(check.a), &(shortw_crv->a), &cmp)) && (!cmp), ret, err); + MUST_HAVE((!fp_cmp(&(check.b), &(shortw_crv->b), &cmp)) && (!cmp), ret, err); + MUST_HAVE((!nn_cmp(&(check.order), &(shortw_crv->order), &cmp)) && (!cmp), ret, err); + +err: + ec_shortw_crv_uninit(&check); + + return ret; +} + +/* + * Mapping curves from short Weiertstrass to Montgomery + * + * W{a, b} is mapped to M{A, B} using the formula: + * A = 3 * alpha / gamma + * B = 1 / gamma + * with gamma square root of c = a + 3 * alpha**2 + * + * Returns 0 on success, -1 on error. + */ +int curve_shortw_to_montgomery(ec_shortw_crv_src_t shortw_crv, + ec_montgomery_crv_t montgomery_crv, + fp_src_t alpha, fp_src_t gamma) +{ + int ret, cmp; + fp c, gamma_inv, A, tmp; + c.magic = gamma_inv.magic = A.magic = tmp.magic = WORD(0); + + ret = ec_shortw_crv_check_initialized(shortw_crv); EG(ret, err); + ret = fp_check_initialized(alpha); EG(ret, err); + ret = fp_check_initialized(gamma); EG(ret, err); + MUST_HAVE((alpha->ctx == shortw_crv->a.ctx) && (gamma->ctx == shortw_crv->a.ctx), ret, err); + + ret = fp_init(&A, shortw_crv->a.ctx); EG(ret, err); + ret = fp_init(&gamma_inv, shortw_crv->a.ctx); EG(ret, err); + ret = fp_init(&c, shortw_crv->a.ctx); EG(ret, err); + ret = fp_init(&tmp, shortw_crv->a.ctx); EG(ret, err); + + /* Compute 1 / gamma */ + ret = fp_inv(&gamma_inv, gamma); EG(ret, err); + + /* Compute A */ + ret = fp_set_word_value(&A, WORD(3)); EG(ret, err); + ret = fp_mul(&A, &A, alpha); EG(ret, err); + ret = fp_mul(&A, &A, &gamma_inv); EG(ret, err); + + /* Sanity check on c */ + ret = fp_set_word_value(&c, WORD(3)); EG(ret, err); + ret = fp_mul(&c, &c, alpha); EG(ret, err); + ret = fp_mul(&c, &c, alpha); EG(ret, err); + ret = fp_add(&c, &c, &(shortw_crv->a)); EG(ret, err); + ret = fp_sqr(&tmp, gamma); EG(ret, err); + /* gamma ** 2 must be equal to c */ + MUST_HAVE((!fp_cmp(&c, &tmp, &cmp)) && (!cmp), ret, err); + + /* B is simply the inverse of gamma */ + ret = ec_montgomery_crv_init(montgomery_crv, &A, &gamma_inv, &(shortw_crv->order)); + +err: + fp_uninit(&A); + fp_uninit(&gamma_inv); + fp_uninit(&c); + fp_uninit(&tmp); + + return ret; +} + +/* + * Mapping points from Montgomery to short Weierstrass. + * Point M(u, v) is mapped to W(x, y) with the formula: + * - (x, y) = ((u/B)+(A/3B), v/B) + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_to_shortw(aff_pt_montgomery_src_t in_montgomery, + ec_shortw_crv_src_t shortw_crv, aff_pt_t out_shortw) +{ + int ret, on_curve; + fp tmp, tmp2; + tmp.magic = tmp2.magic = WORD(0); + + ret = ec_shortw_crv_check_initialized(shortw_crv); EG(ret, err); + + /* Check that our input point is on its curve */ + MUST_HAVE((!aff_pt_montgomery_is_on_curve(in_montgomery, &on_curve)) && on_curve, ret, err); + + ret = fp_init(&tmp, in_montgomery->crv->A.ctx); EG(ret, err); + ret = fp_init(&tmp2, in_montgomery->crv->A.ctx); EG(ret, err); + + ret = aff_pt_montgomery_check_initialized(in_montgomery); EG(ret, err); + ret = curve_montgomery_shortw_check(in_montgomery->crv, shortw_crv); EG(ret, err); + + ret = aff_pt_init(out_shortw, shortw_crv); EG(ret, err); + + ret = fp_inv(&tmp, &(in_montgomery->crv->B)); EG(ret, err); + ret = fp_mul(&tmp, &tmp, &(in_montgomery->u)); EG(ret, err); + + ret = fp_set_word_value(&tmp2, WORD(3)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &(in_montgomery->crv->B)); EG(ret, err); + ret = fp_inv(&tmp2, &tmp2); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, &(in_montgomery->crv->A)); EG(ret, err); + + ret = fp_add(&(out_shortw->x), &tmp, &tmp2); EG(ret, err); + + ret = fp_inv(&tmp, &(in_montgomery->crv->B)); EG(ret, err); + ret = fp_mul(&(out_shortw->y), &tmp, &(in_montgomery->v)); EG(ret, err); + + /* Final check that the point is on the curve */ + MUST_HAVE((!aff_pt_is_on_curve(out_shortw, &on_curve)) && on_curve, ret, err); + +err: + fp_uninit(&tmp); + fp_uninit(&tmp2); + + return ret; +} + +/* + * Mapping from short Weierstrass to Montgomery. + * Point W(x, y) is mapped to M(u, v) with the formula: + * - (u, v) = (((Bx)−(A/3), By) + * + * Returns 0 on success, -1 on error. + */ +int aff_pt_shortw_to_montgomery(aff_pt_src_t in_shortw, + ec_montgomery_crv_src_t montgomery_crv, + aff_pt_montgomery_t out_montgomery) +{ + int ret, on_curve; + fp tmp, tmp2; + tmp.magic = tmp2.magic = WORD(0); + + ret = ec_montgomery_crv_check_initialized(montgomery_crv); EG(ret, err); + + /* Check that our input point is on its curve */ + MUST_HAVE((!aff_pt_is_on_curve(in_shortw, &on_curve)) && on_curve, ret, err); + + ret = fp_init(&tmp, in_shortw->crv->a.ctx); EG(ret, err); + ret = fp_init(&tmp2, in_shortw->crv->a.ctx); EG(ret, err); + + ret = curve_montgomery_shortw_check(montgomery_crv, in_shortw->crv); EG(ret, err); + + ret = aff_pt_montgomery_init(out_montgomery, montgomery_crv); EG(ret, err); + + /* A/3 */ + ret = fp_inv_word(&tmp, WORD(3)); EG(ret, err); + ret = fp_mul(&tmp, &tmp, &(montgomery_crv->A)); EG(ret, err); + + /* Bx */ + ret = fp_mul(&tmp2, &(montgomery_crv->B), &(in_shortw->x)); EG(ret, err); + + /* u = (Bx) - (A/3) */ + ret = fp_sub(&(out_montgomery->u), &tmp2, &tmp); EG(ret, err); + + /* v = By */ + ret = fp_mul(&(out_montgomery->v), &(montgomery_crv->B), &(in_shortw->y)); EG(ret, err); + + /* Final check that the point is on the curve */ + MUST_HAVE((!aff_pt_montgomery_is_on_curve(out_montgomery, &on_curve)) && on_curve, ret, err); + +err: + fp_uninit(&tmp); + fp_uninit(&tmp2); + + return ret; +} + + +/* + * Recover the two possible v coordinates from one u on a given + * curve. + * The two outputs v1 and v2 are initialized in the function. + * + * The function returns -1 on error, 0 on success. + * + */ +int aff_pt_montgomery_v_from_u(fp_t v1, fp_t v2, fp_src_t u, ec_montgomery_crv_src_t crv) +{ + int ret; + + /* Sanity checks */ + ret = fp_check_initialized(u); EG(ret, err); + ret = ec_montgomery_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE((u->ctx == crv->A.ctx) && (u->ctx == crv->B.ctx), ret, err); + MUST_HAVE((v1 != NULL) && (v2 != NULL), ret, err); + /* Aliasing is not supported */ + MUST_HAVE((v1 != v2) && (v1 != u), ret, err); + + /* Initialize v1 and v2 with context */ + ret = fp_init(v1, u->ctx); EG(ret, err); + ret = fp_init(v2, u->ctx); EG(ret, err); + + /* v must satisfy the equation B v^2 = u^3 + A u^2 + u, + * so we compute square root for B^-1 * (u^3 + A u^2 + u) + */ + ret = fp_sqr(v2, u); EG(ret, err); + ret = fp_mul(v1, v2, u); EG(ret, err); + ret = fp_mul(v2, v2, &(crv->A)); EG(ret, err); + ret = fp_add(v1, v1, v2); EG(ret, err); + ret = fp_add(v1, v1, u); EG(ret, err); + ret = fp_inv(v2, &(crv->B)); EG(ret, err); + ret = fp_mul(v1, v1, v2); EG(ret, err); + + /* Choose any of the two square roots as the solution */ + ret = fp_sqrt(v1, v2, v1); + +err: + return ret; +} diff --git a/crypto/libecc/src/curves/curves.c b/crypto/libecc/src/curves/curves.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/curves.c @@ -0,0 +1,256 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* + * From a null-terminated string 'ec_name' of exact length 'ec_name_len' + * (including final null character), the function returns a pointer + * to the parameters for that curve via 'ec_params'. The function returns + * -1 on error or if the search was unsuccessful. It returns 0 on success. + * 'ec_params' is not meaningful on error. + */ +int ec_get_curve_params_by_name(const u8 *ec_name, u8 ec_name_len, + const ec_str_params **ec_s_params) +{ + const ec_str_params *params; + u8 comp_len, name_len; + u32 len; + const ec_mapping *map; + const u8 *name; + unsigned int i; + int ret, check; + + MUST_HAVE((ec_name != NULL), ret, err); + MUST_HAVE((ec_s_params != NULL), ret, err); + MUST_HAVE(((ec_name_len > 2) && (ec_name_len <= MAX_CURVE_NAME_LEN)), ret, err); + + /* + * User has been warned ec_name_len is expected to include final + * null character. + */ + ret = local_strnlen((const char *)ec_name, ec_name_len, &len); EG(ret, err); + comp_len = (u8)len; + MUST_HAVE(((comp_len + 1) == ec_name_len), ret, err); + + /* Iterate on our list of curves */ + ret = -1; + for (i = 0; i < EC_CURVES_NUM; i++) { + map = &ec_maps[i]; + params = map->params; + + MUST_HAVE((params != NULL), ret, err); + MUST_HAVE((params->name != NULL), ret, err); + MUST_HAVE((params->name->buf != NULL), ret, err); + + name = params->name->buf; + name_len = params->name->buflen; + + if (name_len != ec_name_len) { + continue; + } + + if ((!are_str_equal((const char *)ec_name, (const char *)name, &check)) && check) { + (*ec_s_params) = params; + ret = 0; + break; + } + } + + err: + return ret; +} + +/* + * From given curve type 'ec_type', the function provides a pointer to the + * parameters for that curve if it is known, using 'ec_params' out parameter. + * On error, or if the curve is unknown, the function returns -1, in which + * case 'ec_params' is not meaningful. The function returns 0 on success. + */ +int ec_get_curve_params_by_type(ec_curve_type ec_type, + const ec_str_params **ec_s_params) +{ + const ec_str_params *params; + const ec_mapping *map; + const u8 *name; + u32 len; + u8 name_len; + unsigned int i; + int ret; + + MUST_HAVE((ec_s_params != NULL), ret, err); + + ret = -1; + for (i = 0; i < EC_CURVES_NUM; i++) { + map = &ec_maps[i]; + params = map->params; + + MUST_HAVE((params != NULL), ret, err); + + if (ec_type == map->type) { + /* Do some sanity check before returning */ + MUST_HAVE((params->name != NULL), ret, err); + MUST_HAVE((params->name->buf != NULL), ret, err); + + name = params->name->buf; + ret = local_strlen((const char *)name, &len); EG(ret, err); + MUST_HAVE(len < 256, ret, err); + name_len = (u8)len; + + MUST_HAVE((params->name->buflen == (name_len + 1)), ret, err); + + (*ec_s_params) = params; + ret = 0; + break; + } + } + +err: + return ret; +} + +/* + * From a null-terminated string 'ec_name' of exact length 'ec_name_len' + * (including final null character), the function returns the curve type + * via 'ec_type'. The function returns -1 on error or if the search was + * unsuccessful. It returns 0 on success. 'ec_types' is not meaningful + * on error. + */ +int ec_get_curve_type_by_name(const u8 *ec_name, u8 ec_name_len, + ec_curve_type *ec_type) +{ + const ec_str_params *params; + u32 len; + u8 name_len, comp_len; + const ec_mapping *map; + const u8 *name; + unsigned int i; + int ret, check; + + /* No need to bother w/ obvious crap */ + MUST_HAVE(((ec_name_len > 2) && (ec_name_len <= MAX_CURVE_NAME_LEN)), ret, err); + MUST_HAVE((ec_type != NULL), ret, err); + MUST_HAVE((ec_name != NULL), ret, err); + + /* + * User has been warned ec_name_len is expected to include final + * null character. + */ + ret = local_strnlen((const char *)ec_name, ec_name_len, &len); EG(ret, err); + MUST_HAVE(len < 256, ret, err); + comp_len = (u8)len; + MUST_HAVE(((comp_len + 1) == ec_name_len), ret, err); + + /* Iterate on our list of curves */ + ret = -1; + for (i = 0; i < EC_CURVES_NUM; i++) { + map = &ec_maps[i]; + params = map->params; + + MUST_HAVE((params != NULL), ret, err); + MUST_HAVE((params->name != NULL), ret, err); + MUST_HAVE((params->name->buf != NULL), ret, err); + + name = params->name->buf; + name_len = params->name->buflen; + + if (name_len != ec_name_len) { + continue; + } + + if((!are_str_equal((const char *)ec_name, (const char *)name, &check)) && check) { + (*ec_type) = map->type; + ret = 0; + break; + } + } + + err: + return ret; +} + +/* + * Given a curve type, the function finds the curve described by given type + * and write its name (null terminated string) to given output buffer 'out' + * of length 'outlen'. 0 is returned on success, -1 otherwise. + */ +int ec_get_curve_name_by_type(const ec_curve_type ec_type, u8 *out, u8 outlen) +{ + const ec_str_params *by_type; + const u8 *name; + u8 name_len; + int ret; + + MUST_HAVE((out != NULL), ret, err); + + /* Let's first do the lookup by type */ + ret = ec_get_curve_params_by_type(ec_type, &by_type); EG(ret, err); + + /* Found a curve for that type. Let's check name matches. */ + MUST_HAVE((by_type != NULL), ret, err); + MUST_HAVE((by_type->name != NULL), ret, err); + MUST_HAVE((by_type->name->buf != NULL), ret, err); + + name_len = by_type->name->buflen; + name = by_type->name->buf; + + /* Not enough room to copy curve name? */ + MUST_HAVE((name_len <= outlen), ret, err); + + ret = local_memcpy(out, name, name_len); + + err: + return ret; +} + +/* + * The function verifies the coherency between given curve type value and + * associated name 'ec_name' of length 'ec_name_len' (including final + * null character). The function returns 0 if the curve type is known + * and provided name matches expected one. The function returns -1 + * otherwise. + */ +int ec_check_curve_type_and_name(const ec_curve_type ec_type, + const u8 *ec_name, u8 ec_name_len) +{ + const ec_str_params *by_type; + const u8 *name; + u8 name_len; + int ret, check; + + /* No need to bother w/ obvious crap */ + MUST_HAVE((ec_name != NULL), ret, err); + MUST_HAVE(((ec_name_len > 2) && (ec_name_len <= MAX_CURVE_NAME_LEN)), ret, err); + + /* Let's first do the lookup by type */ + ret = ec_get_curve_params_by_type(ec_type, &by_type); EG(ret, err); + + /* Found a curve for that type. Let's check name matches. */ + MUST_HAVE((by_type != NULL), ret, err); + MUST_HAVE((by_type->name != NULL), ret, err); + MUST_HAVE((by_type->name->buf != NULL), ret, err); + + name = by_type->name->buf; + name_len = by_type->name->buflen; + + MUST_HAVE((name_len == ec_name_len), ret, err); + + if ((!are_str_equal((const char *)ec_name, (const char *)name, &check)) && (!check)) { + ret = -1; + } + +err: + return ret; +} diff --git a/crypto/libecc/src/curves/ec_edwards.c b/crypto/libecc/src/curves/ec_edwards.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/ec_edwards.c @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#define EC_EDWARDS_CRV_MAGIC ((word_t)(0x9c7349a1837c6794ULL)) + +/* + * Check pointed Edwards curve structure has already been + * initialized. + * + * Returns 0 on success, -1 on error. + */ +int ec_edwards_crv_check_initialized(ec_edwards_crv_src_t crv) +{ + int ret; + + MUST_HAVE((crv != NULL) && (crv->magic == EC_EDWARDS_CRV_MAGIC), ret, err); + ret = 0; + +err: + return ret; +} + +/* + * Initialize pointed Edwards curve structure using given a and d + * Fp elements representing curve equation (a x^2 + y^2 = 1 + d x^2 y^2) parameters. + * + * Returns 0 on success, -1 on error. + */ +int ec_edwards_crv_init(ec_edwards_crv_t crv, fp_src_t a, fp_src_t d, nn_src_t order) +{ + int ret, iszero, cmp; + + ret = nn_check_initialized(order); EG(ret, err); + ret = fp_check_initialized(a); EG(ret, err); + ret = fp_check_initialized(d); EG(ret, err); + MUST_HAVE((a->ctx == d->ctx), ret, err); + MUST_HAVE((crv != NULL), ret, err); + + /* a and d in Fp, must be distinct and non zero */ + MUST_HAVE((!fp_iszero(a, &iszero)) && (!iszero), ret, err); + MUST_HAVE((!fp_iszero(d, &iszero)) && (!iszero), ret, err); + MUST_HAVE((!fp_cmp(a, d, &cmp)) && cmp, ret, err); + + ret = fp_init(&(crv->a), a->ctx); EG(ret, err); + ret = fp_init(&(crv->d), d->ctx); EG(ret, err); + ret = fp_copy(&(crv->a), a); EG(ret, err); + ret = fp_copy(&(crv->d), d); EG(ret, err); + ret = nn_copy(&(crv->order), order); EG(ret, err); + + crv->magic = EC_EDWARDS_CRV_MAGIC; + +err: + return ret; +} + + +/* Uninitialize curve */ +void ec_edwards_crv_uninit(ec_edwards_crv_t crv) +{ + if ((crv != NULL) && (crv->magic == EC_EDWARDS_CRV_MAGIC)) { + crv->magic = WORD(0); + } + + return; +} diff --git a/crypto/libecc/src/curves/ec_montgomery.c b/crypto/libecc/src/curves/ec_montgomery.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/ec_montgomery.c @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#define EC_MONTGOMERY_CRV_MAGIC ((word_t)(0x83734673a0443720ULL)) + +/* Check if a Montgomery curve is initialized. + * Returns 0 on success, -1 on error. + */ +int ec_montgomery_crv_check_initialized(ec_montgomery_crv_src_t crv) +{ + int ret; + + MUST_HAVE((crv != NULL) && (crv->magic == EC_MONTGOMERY_CRV_MAGIC), ret, err); + ret = 0; + +err: + return ret; +} + +/* + * Initialize pointed Montgomery curve structure using given A and B + * Fp elements representing curve equation (B v^2 = u^3 + A u^2 + u) parameters. + * + * The function returns 0 on success, -1 on error. + */ +int ec_montgomery_crv_init(ec_montgomery_crv_t crv, fp_src_t A, fp_src_t B, nn_src_t order) +{ + int ret, iszero; + fp tmp; + tmp.magic = WORD(0); + + MUST_HAVE((crv != NULL), ret, err); + + ret = nn_check_initialized(order); EG(ret, err); + ret = fp_check_initialized(A); EG(ret, err); + ret = fp_check_initialized(B); EG(ret, err); + MUST_HAVE(A->ctx == B->ctx, ret, err); + + ret = fp_init(&tmp, A->ctx); EG(ret, err); + + /* A and B elements of Fp, A unequal to (+/-)2 and B non zero */ + ret = fp_set_word_value(&tmp, 2); EG(ret, err); + ret = fp_add(&tmp, A, &tmp); EG(ret, err); + MUST_HAVE((!fp_iszero(&tmp, &iszero)) && (!iszero), ret, err); + + ret = fp_set_word_value(&tmp, 2); EG(ret, err); + ret = fp_sub(&tmp, A, &tmp); EG(ret, err); + MUST_HAVE((!fp_iszero(&tmp, &iszero)) && (!iszero), ret, err); + MUST_HAVE((!fp_iszero(B, &iszero)) && (!iszero), ret, err); + + ret = fp_init(&(crv->A), A->ctx); EG(ret, err); + ret = fp_init(&(crv->B), B->ctx); EG(ret, err); + + ret = fp_copy(&(crv->A), A); EG(ret, err); + ret = fp_copy(&(crv->B), B); EG(ret, err); + + ret = nn_copy(&(crv->order), order); EG(ret, err); + + crv->magic = EC_MONTGOMERY_CRV_MAGIC; + +err: + fp_uninit(&tmp); + + return ret; +} + +/* Uninitialize curve + */ +void ec_montgomery_crv_uninit(ec_montgomery_crv_t crv) +{ + if ((crv != NULL) && (crv->magic == EC_MONTGOMERY_CRV_MAGIC)) { + crv->magic = WORD(0); + } + + return; +} diff --git a/crypto/libecc/src/curves/ec_params.c b/crypto/libecc/src/curves/ec_params.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/ec_params.c @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* + * Initialize (already allocated) curve parameters structure pointed by + * ec_params using value provided in remaining parameters. The function + * returns 0 on success, -1 on error. + */ +int import_params(ec_params *out_params, const ec_str_params *in_str_params) +{ + nn tmp_p, tmp_p_bitlen, tmp_r, tmp_r_square, tmp_mpinv, tmp_p_shift; + nn tmp_p_normalized, tmp_p_reciprocal, tmp_curve_order, tmp_order; + nn tmp_order_bitlen, tmp_cofactor; + fp tmp_a, tmp_b, tmp_gx, tmp_gy, tmp_gz; + ec_curve_type curve_type; + int ret; + tmp_p.magic = tmp_r.magic = tmp_r_square.magic = tmp_mpinv.magic = WORD(0); + tmp_p_shift.magic = tmp_p_normalized.magic = tmp_p_reciprocal.magic = WORD(0); + tmp_a.magic = tmp_b.magic = tmp_curve_order.magic = tmp_gx.magic = WORD(0); + tmp_gy.magic = tmp_gz.magic = tmp_order.magic = tmp_cofactor.magic = WORD(0); + tmp_order_bitlen.magic = tmp_p_bitlen.magic = WORD(0); + + MUST_HAVE(((out_params != NULL) && (in_str_params != NULL)), ret, err); + + ret = local_memset(out_params, 0, sizeof(ec_params)); EG(ret, err); + + /* + * We first need to import p, the prime defining Fp and associated + * Montgomery parameters (r, r^2 and mpinv) + */ + ret = nn_init_from_buf(&tmp_p, PARAM_BUF_PTR(in_str_params->p), + PARAM_BUF_LEN(in_str_params->p)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_p_bitlen, + PARAM_BUF_PTR(in_str_params->p_bitlen), + PARAM_BUF_LEN(in_str_params->p_bitlen)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_r, PARAM_BUF_PTR(in_str_params->r), + PARAM_BUF_LEN(in_str_params->r)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_r_square, + PARAM_BUF_PTR(in_str_params->r_square), + PARAM_BUF_LEN(in_str_params->r_square)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_mpinv, + PARAM_BUF_PTR(in_str_params->mpinv), + PARAM_BUF_LEN(in_str_params->mpinv)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_p_shift, + PARAM_BUF_PTR(in_str_params->p_shift), + PARAM_BUF_LEN(in_str_params->p_shift)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_p_normalized, + PARAM_BUF_PTR(in_str_params->p_normalized), + PARAM_BUF_LEN(in_str_params->p_normalized)); EG(ret, err); + + ret = nn_init_from_buf(&tmp_p_reciprocal, + PARAM_BUF_PTR(in_str_params->p_reciprocal), + PARAM_BUF_LEN(in_str_params->p_reciprocal)); EG(ret, err); + + /* From p, we can create global Fp context */ + ret = fp_ctx_init(&(out_params->ec_fp), &tmp_p, + (bitcnt_t)(tmp_p_bitlen.val[0]), + &tmp_r, &tmp_r_square, + tmp_mpinv.val[0], (bitcnt_t)tmp_p_shift.val[0], + &tmp_p_normalized, tmp_p_reciprocal.val[0]); EG(ret, err); + + /* + * Having Fp context, we can import a and b, the coefficient of + * of Weierstrass equation. + */ + ret = fp_init_from_buf(&tmp_a, &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->a), + PARAM_BUF_LEN(in_str_params->a)); EG(ret, err); + ret = fp_init_from_buf(&tmp_b, &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->b), + PARAM_BUF_LEN(in_str_params->b)); EG(ret, err); + + /* + * Now we can store the number of points in the group generated + * by g and the associated cofactor (i.e. npoints / order). + */ + ret = nn_init_from_buf(&tmp_order, + PARAM_BUF_PTR(in_str_params->gen_order), + PARAM_BUF_LEN(in_str_params->gen_order)); EG(ret, err); + ret = nn_init(&(out_params->ec_gen_order), (u16)(tmp_order.wlen * WORD_BYTES)); EG(ret, err); + ret = nn_copy(&(out_params->ec_gen_order), &tmp_order); EG(ret, err); + + ret = nn_init_from_buf(&tmp_order_bitlen, + PARAM_BUF_PTR(in_str_params->gen_order_bitlen), + PARAM_BUF_LEN(in_str_params->gen_order_bitlen)); EG(ret, err); + out_params->ec_gen_order_bitlen = (bitcnt_t)(tmp_order_bitlen.val[0]); + + ret = nn_init_from_buf(&tmp_cofactor, + PARAM_BUF_PTR(in_str_params->cofactor), + PARAM_BUF_LEN(in_str_params->cofactor)); EG(ret, err); + ret = nn_init(&(out_params->ec_gen_cofactor), + (u16)(tmp_cofactor.wlen * WORD_BYTES)); EG(ret, err); + ret = nn_copy(&(out_params->ec_gen_cofactor), &tmp_cofactor); EG(ret, err); + + /* Now we can store the number of points on the curve (curve order) */ + ret = nn_init_from_buf(&tmp_curve_order, + PARAM_BUF_PTR(in_str_params->curve_order), + PARAM_BUF_LEN(in_str_params->curve_order)); EG(ret, err); + + /* Now, we can create curve context from a and b. */ + ret = ec_shortw_crv_init(&(out_params->ec_curve), &tmp_a, &tmp_b, &tmp_curve_order); EG(ret, err); + + /* Let's now import G from its affine coordinates (gx,gy) */ + ret = fp_init_from_buf(&tmp_gx, &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->gx), + PARAM_BUF_LEN(in_str_params->gx)); EG(ret, err); + ret = fp_init_from_buf(&tmp_gy, &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->gy), + PARAM_BUF_LEN(in_str_params->gy)); EG(ret, err); + ret = fp_init_from_buf(&tmp_gz, &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->gz), + PARAM_BUF_LEN(in_str_params->gz)); EG(ret, err); + ret = prj_pt_init_from_coords(&(out_params->ec_gen), + &(out_params->ec_curve), + &tmp_gx, &tmp_gy, &tmp_gz); EG(ret, err); + +#if !defined(USE_SMALL_STACK) + /* Let's get the optional alpha transfert coefficients */ + ret = fp_init_from_buf(&(out_params->ec_alpha_montgomery), &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->alpha_montgomery), + PARAM_BUF_LEN(in_str_params->alpha_montgomery)); EG(ret, err); + ret = fp_init_from_buf(&(out_params->ec_gamma_montgomery), &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->gamma_montgomery), + PARAM_BUF_LEN(in_str_params->gamma_montgomery)); EG(ret, err); + + ret = fp_init_from_buf(&(out_params->ec_alpha_edwards), &(out_params->ec_fp), + PARAM_BUF_PTR(in_str_params->alpha_edwards), + PARAM_BUF_LEN(in_str_params->alpha_edwards)); EG(ret, err); +#endif + + /* Import a local copy of curve OID */ + MUST_HAVE(in_str_params->oid->buflen < MAX_CURVE_OID_LEN, ret, err); + ret = local_memset(out_params->curve_oid, 0, MAX_CURVE_OID_LEN); EG(ret, err); + ret = local_strncpy((char *)(out_params->curve_oid), + (const char *)(in_str_params->oid->buf), + in_str_params->oid->buflen); EG(ret, err); + + /* Import a local copy of curve name */ + MUST_HAVE(in_str_params->name->buflen < MAX_CURVE_NAME_LEN, ret, err); + ret = local_memset(out_params->curve_name, 0, MAX_CURVE_NAME_LEN); EG(ret, err); + ret = local_strncpy((char *)(out_params->curve_name), + (const char *)(in_str_params->name->buf), + in_str_params->name->buflen); EG(ret, err); + + /* Get the curve type */ + ret = ec_get_curve_type_by_name(in_str_params->name->buf, + in_str_params->name->buflen, + &curve_type); EG(ret, err); + MUST_HAVE(curve_type != UNKNOWN_CURVE, ret, err); + out_params->curve_type = curve_type; + +err: + /* Uninit temporary parameters */ + nn_uninit(&tmp_p_bitlen); + nn_uninit(&tmp_order_bitlen); + nn_uninit(&tmp_p); + nn_uninit(&tmp_r); + nn_uninit(&tmp_r_square); + nn_uninit(&tmp_mpinv); + nn_uninit(&tmp_p_shift); + nn_uninit(&tmp_p_normalized); + nn_uninit(&tmp_p_reciprocal); + fp_uninit(&tmp_a); + fp_uninit(&tmp_b); + nn_uninit(&tmp_curve_order); + fp_uninit(&tmp_gx); + fp_uninit(&tmp_gy); + fp_uninit(&tmp_gz); + nn_uninit(&tmp_order); + nn_uninit(&tmp_cofactor); + + return ret; +} diff --git a/crypto/libecc/src/curves/ec_shortw.c b/crypto/libecc/src/curves/ec_shortw.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/ec_shortw.c @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#define EC_SHORTW_CRV_MAGIC ((word_t)(0x9c7c46a1a04c6720ULL)) + +/* + * Check pointed short Weierstrass curve structure has already been + * initialized. Returns -1 on error, 0 on success. + */ +int ec_shortw_crv_check_initialized(ec_shortw_crv_src_t crv) +{ + int ret; + + MUST_HAVE((crv != NULL) && (crv->magic == EC_SHORTW_CRV_MAGIC), ret, err); + ret = 0; + +err: + return ret; +} + +/* + * Initialize pointed short Weierstrass curve structure using given a and b + * Fp elements representing curve equation (y^2 = x^3 + ax + b) parameters. + * 'order' parameter is the generator point order. The function returns 0 + * on success, -1 on error. + */ +int ec_shortw_crv_init(ec_shortw_crv_t crv, fp_src_t a, fp_src_t b, nn_src_t order) +{ + fp tmp, tmp2; + int ret, iszero; + tmp.magic = tmp2.magic = WORD(0); + + ret = nn_check_initialized(order); EG(ret, err); + ret = fp_check_initialized(a); EG(ret, err); + ret = fp_check_initialized(b); EG(ret, err); + MUST_HAVE((a->ctx == b->ctx), ret, err); + MUST_HAVE((crv != NULL), ret, err); + + /* The discriminant (4 a^3 + 27 b^2) must be non zero */ + ret = fp_init(&tmp, a->ctx); EG(ret, err); + ret = fp_init(&tmp2, a->ctx); EG(ret, err); + ret = fp_sqr(&tmp, a); EG(ret, err); + ret = fp_mul(&tmp, &tmp, a); EG(ret, err); + ret = fp_set_word_value(&tmp2, WORD(4)); EG(ret, err); + ret = fp_mul(&tmp, &tmp, &tmp2); EG(ret, err); + + ret = fp_set_word_value(&tmp2, WORD(27)); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, b); EG(ret, err); + ret = fp_mul(&tmp2, &tmp2, b); EG(ret, err); + + ret = fp_add(&tmp, &tmp, &tmp2); EG(ret, err); + ret = fp_iszero(&tmp, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + ret = fp_init(&(crv->a), a->ctx); EG(ret, err); + ret = fp_init(&(crv->b), b->ctx); EG(ret, err); + ret = fp_init(&(crv->a_monty), a->ctx); EG(ret, err); + + ret = fp_copy(&(crv->a), a); EG(ret, err); + ret = fp_copy(&(crv->b), b); EG(ret, err); + ret = fp_redcify(&(crv->a_monty), a); EG(ret, err); + + ret = nn_copy(&(crv->order), order); EG(ret, err); + +#ifndef NO_USE_COMPLETE_FORMULAS + ret = fp_init(&(crv->b3), b->ctx); EG(ret, err); + ret = fp_init(&(crv->b_monty), b->ctx); EG(ret, err); + ret = fp_init(&(crv->b3_monty), b->ctx); EG(ret, err); + + ret = fp_add(&(crv->b3), b, b); EG(ret, err); + ret = fp_add(&(crv->b3), &(crv->b3), b); EG(ret, err); + ret = fp_redcify(&(crv->b_monty), b); EG(ret, err); + ret = fp_redcify(&(crv->b3_monty), &(crv->b3)); EG(ret, err); +#endif + + crv->magic = EC_SHORTW_CRV_MAGIC; + +err: + fp_uninit(&tmp); + fp_uninit(&tmp2); + + return ret; +} + +/* Uninitialize curve */ +void ec_shortw_crv_uninit(ec_shortw_crv_t crv) +{ + if((crv != NULL) && (crv->magic == EC_SHORTW_CRV_MAGIC)){ + crv->magic = WORD(0); + } + + return; +} diff --git a/crypto/libecc/src/curves/meson.build b/crypto/libecc/src/curves/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/meson.build @@ -0,0 +1,11 @@ +curves_mod_src = files( + 'aff_pt.c', + 'aff_pt_montgomery.c', + 'ec_edwards.c', + 'ec_montgomery.c', + 'ec_params.c', + 'ec_shortw.c', + 'aff_pt_edwards.c', + 'curves.c', + 'prj_pt.c', + ) diff --git a/crypto/libecc/src/curves/prj_pt.c b/crypto/libecc/src/curves/prj_pt.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/curves/prj_pt.c @@ -0,0 +1,2113 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define PRJ_PT_MAGIC ((word_t)(0xe1cd70babb1d5afeULL)) + +/* + * Check given projective point has been correctly initialized (using + * prj_pt_init()). Returns 0 on success, -1 on error. + */ +int prj_pt_check_initialized(prj_pt_src_t in) +{ + int ret; + + MUST_HAVE(((in != NULL) && (in->magic == PRJ_PT_MAGIC)), ret, err); + ret = ec_shortw_crv_check_initialized(in->crv); + +err: + return ret; +} + +/* + * Initialize the projective point structure on given curve as the point at + * infinity. The function returns 0 on success, -1 on error. + */ +int prj_pt_init(prj_pt_t in, ec_shortw_crv_src_t curve) +{ + int ret; + + ret = ec_shortw_crv_check_initialized(curve); EG(ret, err); + + MUST_HAVE((in != NULL), ret, err); + + ret = fp_init(&(in->X), curve->a.ctx); EG(ret, err); + ret = fp_init(&(in->Y), curve->a.ctx); EG(ret, err); + ret = fp_init(&(in->Z), curve->a.ctx); EG(ret, err); + in->crv = curve; + in->magic = PRJ_PT_MAGIC; + +err: + return ret; +} + +/* + * Initialize the projective point structure on given curve using given + * coordinates. The function returns 0 on success, -1 on error. + */ +int prj_pt_init_from_coords(prj_pt_t in, + ec_shortw_crv_src_t curve, + fp_src_t xcoord, fp_src_t ycoord, fp_src_t zcoord) +{ + int ret; + + ret = prj_pt_init(in, curve); EG(ret, err); + ret = fp_copy(&(in->X), xcoord); EG(ret, err); + ret = fp_copy(&(in->Y), ycoord); EG(ret, err); + ret = fp_copy(&(in->Z), zcoord); + +err: + return ret; +} + +/* + * Uninit given projective point structure. The function returns 0 on success, + * -1 on error. This is an error if passed point has not already been + * initialized first. + */ +void prj_pt_uninit(prj_pt_t in) +{ + if((in != NULL) && (in->magic == PRJ_PT_MAGIC) && (in->crv != NULL)){ + in->crv = NULL; + in->magic = WORD(0); + + fp_uninit(&(in->X)); + fp_uninit(&(in->Y)); + fp_uninit(&(in->Z)); + } + + return; +} + +/* + * Checks if projective point is the point at infinity (last coordinate is 0). + * In that case, 'iszero' out parameter is set to 1. It is set to 0 if the + * point is not the point at infinity. The function returns 0 on success, -1 on + * error. On error, 'iszero' is not meaningful. + */ +int prj_pt_iszero(prj_pt_src_t in, int *iszero) +{ + int ret; + + ret = prj_pt_check_initialized(in); EG(ret, err); + ret = fp_iszero(&(in->Z), iszero); + +err: + return ret; +} + +/* + * Set given projective point 'out' to the point at infinity. The functions + * returns 0 on success, -1 on error. + */ +int prj_pt_zero(prj_pt_t out) +{ + int ret; + + ret = prj_pt_check_initialized(out); EG(ret, err); + + ret = fp_zero(&(out->X)); EG(ret, err); + ret = fp_one(&(out->Y)); EG(ret, err); + ret = fp_zero(&(out->Z)); + +err: + return ret; +} + +/* + * Check if a projective point is indeed on its curve. The function sets + * 'on_curve' out parameter to 1 if the point is on the curve, 0 if not. + * The function returns 0 on success, -1 on error. 'on_curve' is not + * meaningful on error. + */ +int prj_pt_is_on_curve(prj_pt_src_t in, int *on_curve) +{ + int ret, cmp; + + /* In order to check that we are on the curve, we + * use the projective formula of the curve: + * + * Y**2 * Z = X**3 + a * X * Z**2 + b * Z**3 + * + */ + fp X, Y, Z; + X.magic = Y.magic = Z.magic = WORD(0); + + ret = prj_pt_check_initialized(in); EG(ret, err); + ret = ec_shortw_crv_check_initialized(in->crv); EG(ret, err); + MUST_HAVE((on_curve != NULL), ret, err); + + ret = fp_init(&X, in->X.ctx); EG(ret, err); + ret = fp_init(&Y, in->X.ctx); EG(ret, err); + ret = fp_init(&Z, in->X.ctx); EG(ret, err); + + /* Compute X**3 + a * X * Z**2 + b * Z**3 on one side */ + ret = fp_sqr(&X, &(in->X)); EG(ret, err); + ret = fp_mul(&X, &X, &(in->X)); EG(ret, err); + ret = fp_mul(&Z, &(in->X), &(in->crv->a)); EG(ret, err); + ret = fp_mul(&Y, &(in->crv->b), &(in->Z)); EG(ret, err); + ret = fp_add(&Z, &Z, &Y); EG(ret, err); + ret = fp_mul(&Z, &Z, &(in->Z)); EG(ret, err); + ret = fp_mul(&Z, &Z, &(in->Z)); EG(ret, err); + ret = fp_add(&X, &X, &Z); EG(ret, err); + + /* Compute Y**2 * Z on the other side */ + ret = fp_sqr(&Y, &(in->Y)); EG(ret, err); + ret = fp_mul(&Y, &Y, &(in->Z)); EG(ret, err); + + /* Compare the two values */ + ret = fp_cmp(&X, &Y, &cmp); EG(ret, err); + + (*on_curve) = (!cmp); + +err: + fp_uninit(&X); + fp_uninit(&Y); + fp_uninit(&Z); + + return ret; +} + +/* + * The function copies 'in' projective point to 'out'. 'out' is initialized by + * the function. The function returns 0 on sucess, -1 on error. + */ +int prj_pt_copy(prj_pt_t out, prj_pt_src_t in) +{ + int ret; + + ret = prj_pt_check_initialized(in); EG(ret, err); + + ret = prj_pt_init(out, in->crv); EG(ret, err); + + ret = fp_copy(&(out->X), &(in->X)); EG(ret, err); + ret = fp_copy(&(out->Y), &(in->Y)); EG(ret, err); + ret = fp_copy(&(out->Z), &(in->Z)); + +err: + return ret; +} + +/* + * Convert given projective point 'in' to affine representation in 'out'. 'out' + * is initialized by the function. The function returns 0 on success, -1 on + * error. Passing the point at infinty to the function is considered as an + * error. + */ +int prj_pt_to_aff(aff_pt_t out, prj_pt_src_t in) +{ + int ret, iszero; + + ret = prj_pt_check_initialized(in); EG(ret, err); + + ret = prj_pt_iszero(in, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + ret = aff_pt_init(out, in->crv); EG(ret, err); + + ret = fp_inv(&(out->x), &(in->Z)); EG(ret, err); + ret = fp_mul(&(out->y), &(in->Y), &(out->x)); EG(ret, err); + ret = fp_mul(&(out->x), &(in->X), &(out->x)); + +err: + return ret; +} + +/* + * Get the unique Z = 1 projective point representation ("equivalent" to affine + * point). The function returns 0 on success, -1 on error. + */ +int prj_pt_unique(prj_pt_t out, prj_pt_src_t in) +{ + int ret, iszero; + + ret = prj_pt_check_initialized(in); EG(ret, err); + ret = prj_pt_iszero(in, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + if(out == in){ + /* Aliasing case */ + fp tmp; + tmp.magic = WORD(0); + + ret = fp_init(&tmp, (in->Z).ctx); EG(ret, err); + ret = fp_inv(&tmp, &(in->Z)); EG(ret, err1); + ret = fp_mul(&(out->Y), &(in->Y), &tmp); EG(ret, err1); + ret = fp_mul(&(out->X), &(in->X), &tmp); EG(ret, err1); + ret = fp_one(&(out->Z)); EG(ret, err1); +err1: + fp_uninit(&tmp); EG(ret, err); + } + else{ + ret = prj_pt_init(out, in->crv); EG(ret, err); + ret = fp_inv(&(out->X), &(in->Z)); EG(ret, err); + ret = fp_mul(&(out->Y), &(in->Y), &(out->X)); EG(ret, err); + ret = fp_mul(&(out->X), &(in->X), &(out->X)); EG(ret, err); + ret = fp_one(&(out->Z)); EG(ret, err); + } + + +err: + return ret; +} + +/* + * Converts affine point 'in' to projective representation in 'out'. 'out' is + * initialized by the function. The function returns 0 on success, -1 on error. + */ +int ec_shortw_aff_to_prj(prj_pt_t out, aff_pt_src_t in) +{ + int ret, on_curve; + + ret = aff_pt_check_initialized(in); EG(ret, err); + + /* The input affine point must be on the curve */ + ret = aff_pt_is_on_curve(in, &on_curve); EG(ret, err); + MUST_HAVE(on_curve, ret, err); + + ret = prj_pt_init(out, in->crv); EG(ret, err); + ret = fp_copy(&(out->X), &(in->x)); EG(ret, err); + ret = fp_copy(&(out->Y), &(in->y)); EG(ret, err); + ret = nn_one(&(out->Z).fp_val); /* Z = 1 */ + +err: + return ret; +} + +/* + * Compare projective points 'in1' and 'in2'. On success, 'cmp' is set to + * the result of the comparison (0 if in1 == in2, !0 if in1 != in2). The + * function returns 0 on success, -1 on error. + */ +int prj_pt_cmp(prj_pt_src_t in1, prj_pt_src_t in2, int *cmp) +{ + fp X1, X2, Y1, Y2; + int ret, x_cmp, y_cmp; + X1.magic = X2.magic = Y1.magic = Y2.magic = WORD(0); + + MUST_HAVE((cmp != NULL), ret, err); + ret = prj_pt_check_initialized(in1); EG(ret, err); + ret = prj_pt_check_initialized(in2); EG(ret, err); + + MUST_HAVE((in1->crv == in2->crv), ret, err); + + ret = fp_init(&X1, (in1->X).ctx); EG(ret, err); + ret = fp_init(&X2, (in2->X).ctx); EG(ret, err); + ret = fp_init(&Y1, (in1->Y).ctx); EG(ret, err); + ret = fp_init(&Y2, (in2->Y).ctx); EG(ret, err); + + /* + * Montgomery multiplication is used as it is faster than + * usual multiplication and the spurious multiplicative + * factor does not matter. + */ + ret = fp_mul_monty(&X1, &(in1->X), &(in2->Z)); EG(ret, err); + ret = fp_mul_monty(&X2, &(in2->X), &(in1->Z)); EG(ret, err); + ret = fp_mul_monty(&Y1, &(in1->Y), &(in2->Z)); EG(ret, err); + ret = fp_mul_monty(&Y2, &(in2->Y), &(in1->Z)); EG(ret, err); + + ret = fp_mul_monty(&X1, &(in1->X), &(in2->Z)); EG(ret, err); + ret = fp_mul_monty(&X2, &(in2->X), &(in1->Z)); EG(ret, err); + ret = fp_mul_monty(&Y1, &(in1->Y), &(in2->Z)); EG(ret, err); + ret = fp_mul_monty(&Y2, &(in2->Y), &(in1->Z)); EG(ret, err); + ret = fp_cmp(&X1, &X2, &x_cmp); EG(ret, err); + ret = fp_cmp(&Y1, &Y2, &y_cmp); + + if (!ret) { + (*cmp) = (x_cmp | y_cmp); + } + +err: + fp_uninit(&Y2); + fp_uninit(&Y1); + fp_uninit(&X2); + fp_uninit(&X1); + + return ret; +} + +/* + * NOTE: this internal functions assumes that upper layer have checked that in1 and in2 + * are initialized, and that cmp is not NULL. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _prj_pt_eq_or_opp_X(prj_pt_src_t in1, prj_pt_src_t in2, int *cmp) +{ + int ret; + fp X1, X2; + X1.magic = X2.magic = WORD(0); + + /* + * Montgomery multiplication is used as it is faster than + * usual multiplication and the spurious multiplicative + * factor does not matter. + */ + ret = fp_init(&X1, (in1->X).ctx); EG(ret, err); + ret = fp_init(&X2, (in2->X).ctx); EG(ret, err); + ret = fp_mul_monty(&X1, &(in1->X), &(in2->Z)); EG(ret, err); + ret = fp_mul_monty(&X2, &(in2->X), &(in1->Z)); EG(ret, err); + ret = fp_cmp(&X1, &X2, cmp); + +err: + fp_uninit(&X1); + fp_uninit(&X2); + + return ret; +} + +/* + * NOTE: this internal functions assumes that upper layer have checked that in1 and in2 + * are initialized, and that eq_or_opp is not NULL. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _prj_pt_eq_or_opp_Y(prj_pt_src_t in1, prj_pt_src_t in2, int *eq_or_opp) +{ + int ret; + fp Y1, Y2; + Y1.magic = Y2.magic = WORD(0); + + /* + * Montgomery multiplication is used as it is faster than + * usual multiplication and the spurious multiplicative + * factor does not matter. + */ + ret = fp_init(&Y1, (in1->Y).ctx); EG(ret, err); + ret = fp_init(&Y2, (in2->Y).ctx); EG(ret, err); + ret = fp_mul_monty(&Y1, &(in1->Y), &(in2->Z)); EG(ret, err); + ret = fp_mul_monty(&Y2, &(in2->Y), &(in1->Z)); EG(ret, err); + ret = fp_eq_or_opp(&Y1, &Y2, eq_or_opp); + +err: + fp_uninit(&Y1); + fp_uninit(&Y2); + + return ret; +} + + /* + * The functions tests if given projective points 'in1' and 'in2' are equal or + * opposite. On success, the result of the comparison is given via 'eq_or_opp' + * out parameter (1 if equal or opposite, 0 otherwise). The function returns + * 0 on succes, -1 on error. + */ +int prj_pt_eq_or_opp(prj_pt_src_t in1, prj_pt_src_t in2, int *eq_or_opp) +{ + int ret, cmp, _eq_or_opp; + + ret = prj_pt_check_initialized(in1); EG(ret, err); + ret = prj_pt_check_initialized(in2); EG(ret, err); + MUST_HAVE((in1->crv == in2->crv), ret, err); + MUST_HAVE((eq_or_opp != NULL), ret, err); + + ret = _prj_pt_eq_or_opp_X(in1, in2, &cmp); EG(ret, err); + ret = _prj_pt_eq_or_opp_Y(in1, in2, &_eq_or_opp); + + if (!ret) { + (*eq_or_opp) = ((cmp == 0) & _eq_or_opp); + } + +err: + return ret; +} + +/* Compute the opposite of a projective point. Supports aliasing. + * Returns 0 on success, -1 on failure. + */ +int prj_pt_neg(prj_pt_t out, prj_pt_src_t in) +{ + int ret; + + ret = prj_pt_check_initialized(in); EG(ret, err); + + if (out != in) { /* Copy point if not aliased */ + ret = prj_pt_init(out, in->crv); EG(ret, err); + ret = prj_pt_copy(out, in); EG(ret, err); + } + + /* Then, negate Y */ + ret = fp_neg(&(out->Y), &(out->Y)); + +err: + return ret; +} + +/* + * Import a projective point from a buffer with the following layout; the 3 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 3 * p_len. The projective point is initialized by the function. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_import_from_buf(prj_pt_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_shortw_crv_src_t crv) +{ + int on_curve, ret; + fp_ctx_src_t ctx; + u16 coord_len; + + ret = ec_shortw_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE((pt_buf != NULL) && (pt != NULL), ret, err); + + ctx = crv->a.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + MUST_HAVE((pt_buf_len == (3 * coord_len)), ret, err); + + ret = fp_init_from_buf(&(pt->X), ctx, pt_buf, coord_len); EG(ret, err); + ret = fp_init_from_buf(&(pt->Y), ctx, pt_buf + coord_len, coord_len); EG(ret, err); + ret = fp_init_from_buf(&(pt->Z), ctx, pt_buf + (2 * coord_len), coord_len); EG(ret, err); + + /* Set the curve */ + pt->crv = crv; + + /* Mark the point as initialized */ + pt->magic = PRJ_PT_MAGIC; + + /* Check that the point is indeed on the provided curve, uninitialize it + * if this is not the case. + */ + ret = prj_pt_is_on_curve(pt, &on_curve); EG(ret, err); + if (!on_curve){ + prj_pt_uninit(pt); + ret = -1; + } + +err: + PTR_NULLIFY(ctx); + + return ret; +} + +/* + * Import a projective point from an affine point buffer with the following layout; the 2 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. The projective point is initialized by the function. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_import_from_aff_buf(prj_pt_t pt, + const u8 *pt_buf, + u16 pt_buf_len, ec_shortw_crv_src_t crv) +{ + int ret, on_curve; + fp_ctx_src_t ctx; + u16 coord_len; + + ret = ec_shortw_crv_check_initialized(crv); EG(ret, err); + MUST_HAVE((pt_buf != NULL) && (pt != NULL), ret, err); + + ctx = crv->a.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + MUST_HAVE((pt_buf_len == (2 * coord_len)), ret, err); + + ret = fp_init_from_buf(&(pt->X), ctx, pt_buf, coord_len); EG(ret, err); + ret = fp_init_from_buf(&(pt->Y), ctx, pt_buf + coord_len, coord_len); EG(ret, err); + /* Z coordinate is set to 1 */ + ret = fp_init(&(pt->Z), ctx); EG(ret, err); + ret = fp_one(&(pt->Z)); EG(ret, err); + + /* Set the curve */ + pt->crv = crv; + + /* Mark the point as initialized */ + pt->magic = PRJ_PT_MAGIC; + + /* Check that the point is indeed on the provided curve, uninitialize it + * if this is not the case. + */ + ret = prj_pt_is_on_curve(pt, &on_curve); EG(ret, err); + if (!on_curve){ + prj_pt_uninit(pt); + ret = -1; + } + +err: + PTR_NULLIFY(ctx); + + return ret; +} + + +/* Export a projective point to a buffer with the following layout; the 3 + * coordinates (elements of Fp) are each encoded on p_len bytes, where p_len + * is the size of p in bytes (e.g. 66 for a prime p of 521 bits). Each + * coordinate is encoded in big endian. Size of buffer must exactly match + * 3 * p_len. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_export_to_buf(prj_pt_src_t pt, u8 *pt_buf, u32 pt_buf_len) +{ + fp_ctx_src_t ctx; + u16 coord_len; + int ret, on_curve; + + ret = prj_pt_check_initialized(pt); EG(ret, err); + + MUST_HAVE((pt_buf != NULL), ret, err); + + /* The point to be exported must be on the curve */ + ret = prj_pt_is_on_curve(pt, &on_curve); EG(ret, err); + MUST_HAVE((on_curve), ret, err); + + ctx = pt->crv->a.ctx; + coord_len = (u16)BYTECEIL(ctx->p_bitlen); + MUST_HAVE((pt_buf_len == (3 * coord_len)), ret, err); + + /* Export the three coordinates */ + ret = fp_export_to_buf(pt_buf, coord_len, &(pt->X)); EG(ret, err); + ret = fp_export_to_buf(pt_buf + coord_len, coord_len, &(pt->Y)); EG(ret, err); + ret = fp_export_to_buf(pt_buf + (2 * coord_len), coord_len, &(pt->Z)); + +err: + PTR_NULLIFY(ctx); + + return ret; +} + +/* + * Export a projective point to an affine point buffer with the following + * layout; the 2 coordinates (elements of Fp) are each encoded on p_len bytes, + * where p_len is the size of p in bytes (e.g. 66 for a prime p of 521 bits). + * Each coordinate is encoded in big endian. Size of buffer must exactly match + * 2 * p_len. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_export_to_aff_buf(prj_pt_src_t pt, u8 *pt_buf, u32 pt_buf_len) +{ + int ret, on_curve; + aff_pt tmp_aff; + tmp_aff.magic = WORD(0); + + ret = prj_pt_check_initialized(pt); EG(ret, err); + + MUST_HAVE((pt_buf != NULL), ret, err); + + /* The point to be exported must be on the curve */ + ret = prj_pt_is_on_curve(pt, &on_curve); EG(ret, err); + MUST_HAVE((on_curve), ret, err); + + /* Move to the affine unique representation */ + ret = prj_pt_to_aff(&tmp_aff, pt); EG(ret, err); + + /* Export the affine point to the buffer */ + ret = aff_pt_export_to_buf(&tmp_aff, pt_buf, pt_buf_len); + +err: + aff_pt_uninit(&tmp_aff); + + return ret; +} + + +#ifdef NO_USE_COMPLETE_FORMULAS + +/* + * The function is an internal one: no check is performed on parameters, + * this MUST be done by the caller: + * + * - in is initialized + * - in and out must not be aliased + * + * The function will initialize 'out'. The function returns 0 on success, -1 + * on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int __prj_pt_dbl_monty_no_cf(prj_pt_t out, prj_pt_src_t in) +{ + fp XX, ZZ, w, s, ss, sss, R, RR, B, h; + int ret; + XX.magic = ZZ.magic = w.magic = s.magic = WORD(0); + ss.magic = sss.magic = R.magic = WORD(0); + RR.magic = B.magic = h.magic = WORD(0); + + ret = prj_pt_init(out, in->crv); EG(ret, err); + + ret = fp_init(&XX, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&ZZ, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&w, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&s, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&ss, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&sss, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&R, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&RR, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&B, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&h, out->crv->a.ctx); EG(ret, err); + + /* XX = X1² */ + ret = fp_sqr_monty(&XX, &(in->X)); EG(ret, err); + + /* ZZ = Z1² */ + ret = fp_sqr_monty(&ZZ, &(in->Z)); EG(ret, err); + + /* w = a*ZZ+3*XX */ + ret = fp_mul_monty(&w, &(in->crv->a_monty), &ZZ); EG(ret, err); + ret = fp_add_monty(&w, &w, &XX); EG(ret, err); + ret = fp_add_monty(&w, &w, &XX); EG(ret, err); + ret = fp_add_monty(&w, &w, &XX); EG(ret, err); + + /* s = 2*Y1*Z1 */ + ret = fp_mul_monty(&s, &(in->Y), &(in->Z)); EG(ret, err); + ret = fp_add_monty(&s, &s, &s); EG(ret, err); + + /* ss = s² */ + ret = fp_sqr_monty(&ss, &s); EG(ret, err); + + /* sss = s*ss */ + ret = fp_mul_monty(&sss, &s, &ss); EG(ret, err); + + /* R = Y1*s */ + ret = fp_mul_monty(&R, &(in->Y), &s); EG(ret, err); + + /* RR = R² */ + ret = fp_sqr_monty(&RR, &R); EG(ret, err); + + /* B = (X1+R)²-XX-RR */ + ret = fp_add_monty(&R, &R, &(in->X)); EG(ret, err); + ret = fp_sqr_monty(&B, &R); EG(ret, err); + ret = fp_sub_monty(&B, &B, &XX); EG(ret, err); + ret = fp_sub_monty(&B, &B, &RR); EG(ret, err); + + /* h = w²-2*B */ + ret = fp_sqr_monty(&h, &w); EG(ret, err); + ret = fp_sub_monty(&h, &h, &B); EG(ret, err); + ret = fp_sub_monty(&h, &h, &B); EG(ret, err); + + /* X3 = h*s */ + ret = fp_mul_monty(&(out->X), &h, &s); EG(ret, err); + + /* Y3 = w*(B-h)-2*RR */ + ret = fp_sub_monty(&B, &B, &h); EG(ret, err); + ret = fp_mul_monty(&(out->Y), &w, &B); EG(ret, err); + ret = fp_sub_monty(&(out->Y), &(out->Y), &RR); EG(ret, err); + ret = fp_sub_monty(&(out->Y), &(out->Y), &RR); EG(ret, err); + + /* Z3 = sss */ + ret = fp_copy(&(out->Z), &sss); + +err: + fp_uninit(&XX); + fp_uninit(&ZZ); + fp_uninit(&w); + fp_uninit(&s); + fp_uninit(&ss); + fp_uninit(&sss); + fp_uninit(&R); + fp_uninit(&RR); + fp_uninit(&B); + fp_uninit(&h); + + return ret; +} + +/* + * The function is an internal one: no check is performed on parameters, + * this MUST be done by the caller: + * + * - in1 and in2 are initialized + * - in1 and in2 are on the same curve + * - in1/in2 and out must not be aliased + * - in1 and in2 must not be equal, opposite or have identical value + * + * The function will initialize 'out'. The function returns 0 on success, -1 + * on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int ___prj_pt_add_monty_no_cf(prj_pt_t out, + prj_pt_src_t in1, + prj_pt_src_t in2) +{ + fp Y1Z2, X1Z2, Z1Z2, u, uu, v, vv, vvv, R, A; + int ret; + Y1Z2.magic = X1Z2.magic = Z1Z2.magic = u.magic = uu.magic = v.magic = WORD(0); + vv.magic = vvv.magic = R.magic = A.magic = WORD(0); + + ret = prj_pt_init(out, in1->crv); EG(ret, err); + + ret = fp_init(&Y1Z2, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&X1Z2, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&Z1Z2, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&u, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&uu, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&v, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&vv, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&vvv, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&R, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&A, out->crv->a.ctx); EG(ret, err); + + /* Y1Z2 = Y1*Z2 */ + ret = fp_mul_monty(&Y1Z2, &(in1->Y), &(in2->Z)); EG(ret, err); + + /* X1Z2 = X1*Z2 */ + ret = fp_mul_monty(&X1Z2, &(in1->X), &(in2->Z)); EG(ret, err); + + /* Z1Z2 = Z1*Z2 */ + ret = fp_mul_monty(&Z1Z2, &(in1->Z), &(in2->Z)); EG(ret, err); + + /* u = Y2*Z1-Y1Z2 */ + ret = fp_mul_monty(&u, &(in2->Y), &(in1->Z)); EG(ret, err); + ret = fp_sub_monty(&u, &u, &Y1Z2); EG(ret, err); + + /* uu = u² */ + ret = fp_sqr_monty(&uu, &u); EG(ret, err); + + /* v = X2*Z1-X1Z2 */ + ret = fp_mul_monty(&v, &(in2->X), &(in1->Z)); EG(ret, err); + ret = fp_sub_monty(&v, &v, &X1Z2); EG(ret, err); + + /* vv = v² */ + ret = fp_sqr_monty(&vv, &v); EG(ret, err); + + /* vvv = v*vv */ + ret = fp_mul_monty(&vvv, &v, &vv); EG(ret, err); + + /* R = vv*X1Z2 */ + ret = fp_mul_monty(&R, &vv, &X1Z2); EG(ret, err); + + /* A = uu*Z1Z2-vvv-2*R */ + ret = fp_mul_monty(&A, &uu, &Z1Z2); EG(ret, err); + ret = fp_sub_monty(&A, &A, &vvv); EG(ret, err); + ret = fp_sub_monty(&A, &A, &R); EG(ret, err); + ret = fp_sub_monty(&A, &A, &R); EG(ret, err); + + /* X3 = v*A */ + ret = fp_mul_monty(&(out->X), &v, &A); EG(ret, err); + + /* Y3 = u*(R-A)-vvv*Y1Z2 */ + ret = fp_sub_monty(&R, &R, &A); EG(ret, err); + ret = fp_mul_monty(&(out->Y), &u, &R); EG(ret, err); + ret = fp_mul_monty(&R, &vvv, &Y1Z2); EG(ret, err); + ret = fp_sub_monty(&(out->Y), &(out->Y), &R); EG(ret, err); + + /* Z3 = vvv*Z1Z2 */ + ret = fp_mul_monty(&(out->Z), &vvv, &Z1Z2); + +err: + fp_uninit(&Y1Z2); + fp_uninit(&X1Z2); + fp_uninit(&Z1Z2); + fp_uninit(&u); + fp_uninit(&uu); + fp_uninit(&v); + fp_uninit(&vv); + fp_uninit(&vvv); + fp_uninit(&R); + fp_uninit(&A); + + return ret; +} + +/* + * Public version of the addition w/o complete formulas to handle the case + * where the inputs are zero or opposite. Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int __prj_pt_add_monty_no_cf(prj_pt_t out, prj_pt_src_t in1, prj_pt_src_t in2) +{ + int ret, iszero, eq_or_opp, cmp; + + ret = prj_pt_check_initialized(in1); EG(ret, err); + ret = prj_pt_check_initialized(in2); EG(ret, err); + MUST_HAVE((in1->crv == in2->crv), ret, err); + + ret = prj_pt_iszero(in1, &iszero); EG(ret, err); + if (iszero) { + /* in1 at infinity, output in2 in all cases */ + ret = prj_pt_init(out, in2->crv); EG(ret, err); + ret = prj_pt_copy(out, in2); EG(ret, err); + } else { + /* in1 not at infinity, output in2 */ + ret = prj_pt_iszero(in2, &iszero); EG(ret, err); + if (iszero) { + /* in2 at infinity, output in1 */ + ret = prj_pt_init(out, in1->crv); EG(ret, err); + ret = prj_pt_copy(out, in1); EG(ret, err); + } else { + /* enither in1, nor in2 at infinity */ + + /* + * The following test which guarantees in1 and in2 are not + * equal or opposite needs to be rewritten because it + * has a *HUGE* impact on perf (ec_self_tests run on + * all test vectors takes 24 times as long with this + * enabled). The same exists in non monty version. + */ + ret = prj_pt_eq_or_opp(in1, in2, &eq_or_opp); EG(ret, err); + if (eq_or_opp) { + /* in1 and in2 are either equal or opposite */ + ret = prj_pt_cmp(in1, in2, &cmp); EG(ret, err); + if (cmp == 0) { + /* in1 == in2 => doubling w/o cf */ + ret = __prj_pt_dbl_monty_no_cf(out, in1); EG(ret, err); + } else { + /* in1 == -in2 => output zero (point at infinity) */ + ret = prj_pt_init(out, in1->crv); EG(ret, err); + ret = prj_pt_zero(out); EG(ret, err); + } + } else { + /* + * in1 and in2 are neither 0, nor equal or + * opposite. Use the basic monty addition + * implementation w/o complete formulas. + */ + ret = ___prj_pt_add_monty_no_cf(out, in1, in2); EG(ret, err); + } + } + } + +err: + return ret; +} + + +#else /* NO_USE_COMPLETE_FORMULAS */ + + +/* + * If NO_USE_COMPLETE_FORMULAS flag is not defined addition formulas from Algorithm 3 + * of https://joostrenes.nl/publications/complete.pdf are used, otherwise + * http://www.hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#doubling-dbl-2007-bl + */ +ATTRIBUTE_WARN_UNUSED_RET static int __prj_pt_dbl_monty_cf(prj_pt_t out, prj_pt_src_t in) +{ + fp t0, t1, t2, t3; + int ret; + t0.magic = t1.magic = t2.magic = t3.magic = WORD(0); + + ret = prj_pt_init(out, in->crv); EG(ret, err); + + ret = fp_init(&t0, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t1, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t2, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t3, out->crv->a.ctx); EG(ret, err); + + ret = fp_mul_monty(&t0, &in->X, &in->X); EG(ret, err); + ret = fp_mul_monty(&t1, &in->Y, &in->Y); EG(ret, err); + ret = fp_mul_monty(&t2, &in->Z, &in->Z); EG(ret, err); + ret = fp_mul_monty(&t3, &in->X, &in->Y); EG(ret, err); + ret = fp_add_monty(&t3, &t3, &t3); EG(ret, err); + + ret = fp_mul_monty(&out->Z, &in->X, &in->Z); EG(ret, err); + ret = fp_add_monty(&out->Z, &out->Z, &out->Z); EG(ret, err); + ret = fp_mul_monty(&out->X, &in->crv->a_monty, &out->Z); EG(ret, err); + ret = fp_mul_monty(&out->Y, &in->crv->b3_monty, &t2); EG(ret, err); + ret = fp_add_monty(&out->Y, &out->X, &out->Y); EG(ret, err); + + ret = fp_sub_monty(&out->X, &t1, &out->Y); EG(ret, err); + ret = fp_add_monty(&out->Y, &t1, &out->Y); EG(ret, err); + ret = fp_mul_monty(&out->Y, &out->X, &out->Y); EG(ret, err); + ret = fp_mul_monty(&out->X, &t3, &out->X); EG(ret, err); + ret = fp_mul_monty(&out->Z, &in->crv->b3_monty, &out->Z); EG(ret, err); + + ret = fp_mul_monty(&t2, &in->crv->a_monty, &t2); EG(ret, err); + ret = fp_sub_monty(&t3, &t0, &t2); EG(ret, err); + ret = fp_mul_monty(&t3, &in->crv->a_monty, &t3); EG(ret, err); + ret = fp_add_monty(&t3, &t3, &out->Z); EG(ret, err); + ret = fp_add_monty(&out->Z, &t0, &t0); EG(ret, err); + + ret = fp_add_monty(&t0, &out->Z, &t0); EG(ret, err); + ret = fp_add_monty(&t0, &t0, &t2); EG(ret, err); + ret = fp_mul_monty(&t0, &t0, &t3); EG(ret, err); + ret = fp_add_monty(&out->Y, &out->Y, &t0); EG(ret, err); + ret = fp_mul_monty(&t2, &in->Y, &in->Z); EG(ret, err); + + ret = fp_add_monty(&t2, &t2, &t2); EG(ret, err); + ret = fp_mul_monty(&t0, &t2, &t3); EG(ret, err); + ret = fp_sub_monty(&out->X, &out->X, &t0); EG(ret, err); + ret = fp_mul_monty(&out->Z, &t2, &t1); EG(ret, err); + ret = fp_add_monty(&out->Z, &out->Z, &out->Z); EG(ret, err); + + ret = fp_add_monty(&out->Z, &out->Z, &out->Z); + +err: + fp_uninit(&t0); + fp_uninit(&t1); + fp_uninit(&t2); + fp_uninit(&t3); + + return ret; +} + +/* + * If NO_USE_COMPLETE_FORMULAS flag is not defined addition formulas from Algorithm 1 + * of https://joostrenes.nl/publications/complete.pdf are used, otherwise + * http://www.hyperelliptic.org/EFD/g1p/auto-shortw-projective.html#addition-add-1998-cmo-2 + */ + +/* + * The function is an internal one: no check is performed on parameters, + * this MUST be done by the caller: + * + * - in1 and in2 are initialized + * - in1 and in2 are on the same curve + * - in1/in2 and out must not be aliased + * - in1 and in2 must not be an "exceptional" pair, i.e. (in1-in2) is not a point + * of order exactly 2 + * + * The function will initialize 'out'. The function returns 0 on success, -1 + * on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int __prj_pt_add_monty_cf(prj_pt_t out, + prj_pt_src_t in1, + prj_pt_src_t in2) +{ + int cmp1, cmp2; + fp t0, t1, t2, t3, t4, t5; + int ret; + t0.magic = t1.magic = t2.magic = WORD(0); + t3.magic = t4.magic = t5.magic = WORD(0); + + ret = prj_pt_init(out, in1->crv); EG(ret, err); + + ret = fp_init(&t0, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t1, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t2, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t3, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t4, out->crv->a.ctx); EG(ret, err); + ret = fp_init(&t5, out->crv->a.ctx); EG(ret, err); + + ret = fp_mul_monty(&t0, &in1->X, &in2->X); EG(ret, err); + ret = fp_mul_monty(&t1, &in1->Y, &in2->Y); EG(ret, err); + ret = fp_mul_monty(&t2, &in1->Z, &in2->Z); EG(ret, err); + ret = fp_add_monty(&t3, &in1->X, &in1->Y); EG(ret, err); + ret = fp_add_monty(&t4, &in2->X, &in2->Y); EG(ret, err); + + ret = fp_mul_monty(&t3, &t3, &t4); EG(ret, err); + ret = fp_add_monty(&t4, &t0, &t1); EG(ret, err); + ret = fp_sub_monty(&t3, &t3, &t4); EG(ret, err); + ret = fp_add_monty(&t4, &in1->X, &in1->Z); EG(ret, err); + ret = fp_add_monty(&t5, &in2->X, &in2->Z); EG(ret, err); + + ret = fp_mul_monty(&t4, &t4, &t5); EG(ret, err); + ret = fp_add_monty(&t5, &t0, &t2); EG(ret, err); + ret = fp_sub_monty(&t4, &t4, &t5); EG(ret, err); + ret = fp_add_monty(&t5, &in1->Y, &in1->Z); EG(ret, err); + ret = fp_add_monty(&out->X, &in2->Y, &in2->Z); EG(ret, err); + + ret = fp_mul_monty(&t5, &t5, &out->X); EG(ret, err); + ret = fp_add_monty(&out->X, &t1, &t2); EG(ret, err); + ret = fp_sub_monty(&t5, &t5, &out->X); EG(ret, err); + ret = fp_mul_monty(&out->Z, &in1->crv->a_monty, &t4); EG(ret, err); + ret = fp_mul_monty(&out->X, &in1->crv->b3_monty, &t2); EG(ret, err); + + ret = fp_add_monty(&out->Z, &out->X, &out->Z); EG(ret, err); + ret = fp_sub_monty(&out->X, &t1, &out->Z); EG(ret, err); + ret = fp_add_monty(&out->Z, &t1, &out->Z); EG(ret, err); + ret = fp_mul_monty(&out->Y, &out->X, &out->Z); EG(ret, err); + ret = fp_add_monty(&t1, &t0, &t0); EG(ret, err); + + ret = fp_add_monty(&t1, &t1, &t0); EG(ret, err); + ret = fp_mul_monty(&t2, &in1->crv->a_monty, &t2); EG(ret, err); + ret = fp_mul_monty(&t4, &in1->crv->b3_monty, &t4); EG(ret, err); + ret = fp_add_monty(&t1, &t1, &t2); EG(ret, err); + ret = fp_sub_monty(&t2, &t0, &t2); EG(ret, err); + + ret = fp_mul_monty(&t2, &in1->crv->a_monty, &t2); EG(ret, err); + ret = fp_add_monty(&t4, &t4, &t2); EG(ret, err); + ret = fp_mul_monty(&t0, &t1, &t4); EG(ret, err); + ret = fp_add_monty(&out->Y, &out->Y, &t0); EG(ret, err); + ret = fp_mul_monty(&t0, &t5, &t4); EG(ret, err); + + ret = fp_mul_monty(&out->X, &t3, &out->X); EG(ret, err); + ret = fp_sub_monty(&out->X, &out->X, &t0); EG(ret, err); + ret = fp_mul_monty(&t0, &t3, &t1); EG(ret, err); + ret = fp_mul_monty(&out->Z, &t5, &out->Z); EG(ret, err); + ret = fp_add_monty(&out->Z, &out->Z, &t0); + + /* Check for "exceptional" pairs of input points with + * checking if Y = Z = 0 as output (see the Bosma-Lenstra + * article "Complete Systems of Two Addition Laws for + * Elliptic Curves"). This should only happen on composite + * order curves (i.e. not on prime order curves). + * + * In this case, we raise an error as the result is + * not sound. This should not happen in our nominal + * cases with regular signature and protocols, and if + * it happens this usually means that bad points have + * been injected. + * + * NOTE: if for some reasons you need to deal with + * all the possible pairs of points including these + * exceptional pairs of inputs with an order 2 difference, + * you should fallback to the incomplete formulas using the + * COMPLETE=0 compilation toggle. Beware that in this + * case, the library will be more sensitive to + * side-channel attacks. + */ + ret = fp_iszero(&(out->Z), &cmp1); EG(ret, err); + ret = fp_iszero(&(out->Y), &cmp2); EG(ret, err); + MUST_HAVE(!((cmp1) && (cmp2)), ret, err); + +err: + fp_uninit(&t0); + fp_uninit(&t1); + fp_uninit(&t2); + fp_uninit(&t3); + fp_uninit(&t4); + fp_uninit(&t5); + + return ret; +} +#endif /* NO_USE_COMPLETE_FORMULAS */ + +/* + * Internal function: + * + * - not supporting aliasing, + * - requiring caller to check in parameter is initialized + * + * Based on library configuration, the function either use complete formulas + * or not. + */ +static int _prj_pt_dbl_monty(prj_pt_t out, prj_pt_src_t in) +{ + int ret; + +#ifdef NO_USE_COMPLETE_FORMULAS + int iszero; + ret = prj_pt_iszero(in, &iszero); EG(ret, err); + if (iszero) { + ret = prj_pt_init(out, in->crv); EG(ret, err); + ret = prj_pt_zero(out); + } else { + ret = __prj_pt_dbl_monty_no_cf(out, in); + } +#else + ret = __prj_pt_dbl_monty_cf(out, in); EG(ret, err); +#endif + +err: + return ret; +} + +/* + * Internal version that peform in place doubling of given val, + * by using a temporary copy. Sanity checks on parameters must + * be done by caller. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_dbl_monty_aliased(prj_pt_t val) +{ + prj_pt out_cpy; + int ret; + out_cpy.magic = WORD(0); + + ret = _prj_pt_dbl_monty(&out_cpy, val); EG(ret, err); + ret = prj_pt_copy(val, &out_cpy); + +err: + prj_pt_uninit(&out_cpy); + + return ret; +} + +/* + * Public function for projective point doubling. The function handles the init + * check of 'in' parameter which must be guaranteed for internal functions. + * 'out' parameter need not be initialized and can be aliased with 'in' + * parameter. + * + * The function returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int prj_pt_dbl(prj_pt_t out, prj_pt_src_t in) +{ + int ret; + + ret = prj_pt_check_initialized(in); EG(ret, err); + + if (out == in) { + ret = _prj_pt_dbl_monty_aliased(out); + } else { + ret = _prj_pt_dbl_monty(out, in); + } + +err: + return ret; +} + +/* + * Internal function: + * + * - not supporting aliasing, + * - requiring caller to check in1 and in2 parameter + * + * Based on library configuration, the function either use complete formulas + * or not. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _prj_pt_add_monty(prj_pt_t out, + prj_pt_src_t in1, + prj_pt_src_t in2) +{ +#ifndef NO_USE_COMPLETE_FORMULAS + return __prj_pt_add_monty_cf(out, in1, in2); +#else + return __prj_pt_add_monty_no_cf(out, in1, in2); +#endif +} + +/* + * The function is an internal one that specifically handles aliasing. No check + * is performed on parameters, this MUST be done by the caller: + * + * - in1 and in2 are initialized + * - in1 and in2 are on the same curve + * + * The function will initialize 'out'. The function returns 0 on success, -1 + * on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_add_monty_aliased(prj_pt_t out, + prj_pt_src_t in1, + prj_pt_src_t in2) +{ + int ret; + prj_pt out_cpy; + out_cpy.magic = WORD(0); + + ret = _prj_pt_add_monty(&out_cpy, in1, in2); EG(ret, err); + ret = prj_pt_copy(out, &out_cpy); EG(ret, err); + +err: + prj_pt_uninit(&out_cpy); + + return ret; +} + +/* + * Public function for projective point addition. The function handles the + * init checks of 'in1' and 'in2' parameters, along with the check they + * use the same curve. This must be guaranteed for internal functions. + * 'out' parameter need not be initialized and can be aliased with either + * 'in1' or 'in2' parameter. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_add(prj_pt_t out, prj_pt_src_t in1, prj_pt_src_t in2) +{ + int ret; + + ret = prj_pt_check_initialized(in1); EG(ret, err); + ret = prj_pt_check_initialized(in2); EG(ret, err); + MUST_HAVE((in1->crv == in2->crv), ret, err); + + if ((out == in1) || (out == in2)) { + ret = _prj_pt_add_monty_aliased(out, in1, in2); + } else { + ret = _prj_pt_add_monty(out, in1, in2); + } + +err: + return ret; +} + +/*******************************************************************************/ +/****** Scalar multiplication algorithms ***************************************/ +/***********/ +/* + * The description below summarizes the following algorithms. + * + * Double-and-Add-Always and Montgomery Ladder masked using Itoh et al. anti-ADPA + * (Address-bit DPA) countermeasure. + * See "A Practical Countermeasure against Address-Bit Differential Power Analysis" + * by Itoh, Izu and Takenaka for more information. + * + * NOTE: these masked variants of the Double-and-Add-Always and Montgomery Ladder algorithms + * are used by default as Itoh et al. countermeasure has a very small impact on performance + * and is inherently more robust againt DPA. The only case where we use another variant is + * for devices with low memory as Itoh requires many temporary variables that consume many + * temporary stack space. + * + * NOTE: the algorithms inherently depend on the MSB of the + * scalar. In order to avoid leaking this MSB and fall into HNP (Hidden Number + * Problem) issues, we use the trick described in https://eprint.iacr.org/2011/232.pdf + * to have the MSB always set. However, since the scalar m might be less or bigger than + * the order q of the curve, we distinguish three situations: + * - The scalar m is < q (the order), in this case we compute: + * - + * | m' = m + (2 * q) if [log(k + q)] == [log(q)], + * | m' = m + q otherwise. + * - + * - The scalar m is >= q and < q**2, in this case we compute: + * - + * | m' = m + (2 * (q**2)) if [log(k + (q**2))] == [log(q**2)], + * | m' = m + (q**2) otherwise. + * - + * - The scalar m is >= (q**2), in this case m == m' + * + * => We only deal with 0 <= m < (q**2) using the countermeasure. When m >= (q**2), + * we stick with m' = m, accepting MSB issues (not much can be done in this case + * anyways). In the two first cases, Double-and-Add-Always and Montgomery Ladder are + * performed in constant time wrt the size of the scalar m. + */ +/***********/ +/* + * Internal point blinding function: as it is internal, in is supposed to be initialized and + * aliasing is NOT supported. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _blind_projective_point(prj_pt_t out, prj_pt_src_t in) +{ + int ret; + + /* Random for projective coordinates masking */ + /* NOTE: to limit stack usage, we reuse out->Z as a temporary + * variable. This does not work if in == out, hence the check. + */ + MUST_HAVE((in != out), ret, err); + + ret = prj_pt_init(out, in->crv); EG(ret, err); + + /* Get a random value l in Fp */ + ret = fp_get_random(&(out->Z), in->X.ctx); EG(ret, err); + + /* + * Blind the point with projective coordinates + * (X, Y, Z) => (l*X, l*Y, l*Z) + */ + ret = fp_mul_monty(&(out->X), &(in->X), &(out->Z)); EG(ret, err); + ret = fp_mul_monty(&(out->Y), &(in->Y), &(out->Z)); EG(ret, err); + ret = fp_mul_monty(&(out->Z), &(in->Z), &(out->Z)); + +err: + return ret; +} + +/* If nothing is specified regarding the scalar multiplication algorithm, we use + * the Montgomery Ladder. For the specific case of small stack devices, we release + * some pressure on the stack by explicitly using double and always WITHOUT the Itoh + * et al. countermeasure against A-DPA as it is quite consuming. + */ +#if defined(USE_SMALL_STACK) && defined(USE_MONTY_LADDER) +#error "Small stack is only compatible with USE_DOUBLE_ADD_ALWAYS while USE_MONTY_LADDER has been explicitly asked!" +#endif + +#if defined(USE_SMALL_STACK) +#ifndef USE_DOUBLE_ADD_ALWAYS +#define USE_DOUBLE_ADD_ALWAYS +#endif +#endif + +#if !defined(USE_DOUBLE_ADD_ALWAYS) && !defined(USE_MONTY_LADDER) +#define USE_MONTY_LADDER +#endif + +#if defined(USE_DOUBLE_ADD_ALWAYS) && defined(USE_MONTY_LADDER) +#error "You can either choose USE_DOUBLE_ADD_ALWAYS or USE_MONTY_LADDER, not both!" +#endif + +#if defined(USE_DOUBLE_ADD_ALWAYS) && !defined(USE_SMALL_STACK) +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_mul_ltr_monty_dbl_add_always(prj_pt_t out, nn_src_t m, prj_pt_src_t in) +{ + /* We use Itoh et al. notations here for T and the random r */ + prj_pt T[3]; + bitcnt_t mlen; + u8 mbit, rbit; + /* Random for masking the Double and Add Always algorithm */ + nn r; + /* The new scalar we will use with MSB fixed to 1 (noted m' above). + * This helps dealing with constant time. + */ + nn m_msb_fixed; + nn_src_t curve_order; + nn curve_order_square; + int ret, ret_ops, cmp; + r.magic = m_msb_fixed.magic = curve_order_square.magic = WORD(0); + T[0].magic = T[1].magic = T[2].magic = WORD(0); + + /* Compute m' from m depending on the rule described above */ + curve_order = &(in->crv->order); + /* First compute q**2 */ + ret = nn_sqr(&curve_order_square, curve_order); EG(ret, err); + /* Then compute m' depending on m size */ + ret = nn_cmp(m, curve_order, &cmp); EG(ret, err); + if (cmp < 0){ + bitcnt_t msb_bit_len, order_bitlen; + + /* Case where m < q */ + ret = nn_add(&m_msb_fixed, m, curve_order); EG(ret, err); + ret = nn_bitlen(&m_msb_fixed, &msb_bit_len); EG(ret, err); + ret = nn_bitlen(curve_order, &order_bitlen); EG(ret, err); + ret = nn_cnd_add((msb_bit_len == order_bitlen), &m_msb_fixed, + &m_msb_fixed, curve_order); EG(ret, err); + } else { + ret = nn_cmp(m, &curve_order_square, &cmp); EG(ret, err); + if (cmp < 0) { + bitcnt_t msb_bit_len, curve_order_square_bitlen; + + /* Case where m >= q and m < (q**2) */ + ret = nn_add(&m_msb_fixed, m, &curve_order_square); EG(ret, err); + ret = nn_bitlen(&m_msb_fixed, &msb_bit_len); EG(ret, err); + ret = nn_bitlen(&curve_order_square, &curve_order_square_bitlen); EG(ret, err); + ret = nn_cnd_add((msb_bit_len == curve_order_square_bitlen), + &m_msb_fixed, &m_msb_fixed, &curve_order_square); EG(ret, err); + } else { + /* Case where m >= (q**2) */ + ret = nn_copy(&m_msb_fixed, m); EG(ret, err); + } + } + ret = nn_bitlen(&m_msb_fixed, &mlen); EG(ret, err); + MUST_HAVE(mlen != 0, ret, err); + mlen--; + + /* Hide possible internal failures for double and add + * operations and perform the operation in constant time. + */ + ret_ops = 0; + + /* Get a random r with the same size of m_msb_fixed */ + ret = nn_get_random_len(&r, m_msb_fixed.wlen * WORD_BYTES); EG(ret, err); + + ret = nn_getbit(&r, mlen, &rbit); EG(ret, err); + + /* Initialize points */ + ret = prj_pt_init(&T[0], in->crv); EG(ret, err); + ret = prj_pt_init(&T[1], in->crv); EG(ret, err); + + /* + * T[2] = R(P) + * Blind the point with projective coordinates + * (X, Y, Z) => (l*X, l*Y, l*Z) + */ + ret = _blind_projective_point(&T[2], in); EG(ret, err); + + /* T[r[n-1]] = T[2] */ + ret = prj_pt_copy(&T[rbit], &T[2]); EG(ret, err); + + /* Main loop of Double and Add Always */ + while (mlen > 0) { + u8 rbit_next; + --mlen; + /* rbit is r[i+1], and rbit_next is r[i] */ + ret = nn_getbit(&r, mlen, &rbit_next); EG(ret, err); + + /* mbit is m[i] */ + ret = nn_getbit(&m_msb_fixed, mlen, &mbit); EG(ret, err); + + /* Double: T[r[i+1]] = ECDBL(T[r[i+1]]) */ +#ifndef NO_USE_COMPLETE_FORMULAS + /* + * NOTE: in case of complete formulas, we use the + * addition for doubling, incurring a small performance hit + * for better SCA resistance. + */ + ret_ops |= prj_pt_add(&T[rbit], &T[rbit], &T[rbit]); +#else + ret_ops |= prj_pt_dbl(&T[rbit], &T[rbit]); +#endif + /* Add: T[1-r[i+1]] = ECADD(T[r[i+1]],T[2]) */ + ret_ops |= prj_pt_add(&T[1-rbit], &T[rbit], &T[2]); + + /* + * T[r[i]] = T[d[i] ^ r[i+1]] + * NOTE: we use the low level nn_copy function here to avoid + * any possible leakage on operands with prj_pt_copy + */ + ret = nn_copy(&(T[rbit_next].X.fp_val), &(T[mbit ^ rbit].X.fp_val)); EG(ret, err); + ret = nn_copy(&(T[rbit_next].Y.fp_val), &(T[mbit ^ rbit].Y.fp_val)); EG(ret, err); + ret = nn_copy(&(T[rbit_next].Z.fp_val), &(T[mbit ^ rbit].Z.fp_val)); EG(ret, err); + + /* Update rbit */ + rbit = rbit_next; + } + /* Output: T[r[0]] */ + ret = prj_pt_copy(out, &T[rbit]); EG(ret, err); + + /* Take into consideration our double and add errors */ + ret |= ret_ops; + +err: + prj_pt_uninit(&T[0]); + prj_pt_uninit(&T[1]); + prj_pt_uninit(&T[2]); + nn_uninit(&r); + nn_uninit(&m_msb_fixed); + nn_uninit(&curve_order_square); + + PTR_NULLIFY(curve_order); + + return ret; +} +#endif + +#if defined(USE_DOUBLE_ADD_ALWAYS) && defined(USE_SMALL_STACK) +/* NOTE: in small stack case where we compile for low memory devices, we do not use Itoh et al. countermeasure + * as it requires too much temporary space on the stack. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_mul_ltr_monty_dbl_add_always(prj_pt_t out, nn_src_t m, prj_pt_src_t in) +{ + int ret, ret_ops; + + /* Hide possible internal failures for double and add + * operations and perform the operation in constant time. + */ + ret_ops = 0; + + /* Blind the input point projective coordinates */ + ret = _blind_projective_point(out, in); EG(ret, err); + + /*******************/ + { + bitcnt_t mlen; + u8 mbit; + /* The new scalar we will use with MSB fixed to 1 (noted m' above). + * This helps dealing with constant time. + */ + nn m_msb_fixed; + nn_src_t curve_order; + int cmp; + m_msb_fixed.magic = WORD(0); + + { + nn curve_order_square; + curve_order_square.magic = WORD(0); + + /* Compute m' from m depending on the rule described above */ + curve_order = &(in->crv->order); + /* First compute q**2 */ + ret = nn_sqr(&curve_order_square, curve_order); EG(ret, err1); + /* Then compute m' depending on m size */ + ret = nn_cmp(m, curve_order, &cmp); EG(ret, err1); + if (cmp < 0){ + bitcnt_t msb_bit_len, order_bitlen; + + /* Case where m < q */ + ret = nn_add(&m_msb_fixed, m, curve_order); EG(ret, err1); + ret = nn_bitlen(&m_msb_fixed, &msb_bit_len); EG(ret, err1); + ret = nn_bitlen(curve_order, &order_bitlen); EG(ret, err1); + ret = nn_cnd_add((msb_bit_len == order_bitlen), &m_msb_fixed, + &m_msb_fixed, curve_order); EG(ret, err1); + } else { + ret = nn_cmp(m, &curve_order_square, &cmp); EG(ret, err1); + if (cmp < 0) { + bitcnt_t msb_bit_len, curve_order_square_bitlen; + + /* Case where m >= q and m < (q**2) */ + ret = nn_add(&m_msb_fixed, m, &curve_order_square); EG(ret, err1); + ret = nn_bitlen(&m_msb_fixed, &msb_bit_len); EG(ret, err1); + ret = nn_bitlen(&curve_order_square, &curve_order_square_bitlen); EG(ret, err1); + ret = nn_cnd_add((msb_bit_len == curve_order_square_bitlen), + &m_msb_fixed, &m_msb_fixed, &curve_order_square); EG(ret, err1); + } else { + /* Case where m >= (q**2) */ + ret = nn_copy(&m_msb_fixed, m); EG(ret, err1); + } + } +err1: + nn_uninit(&curve_order_square); EG(ret, err); + } + + ret = nn_bitlen(&m_msb_fixed, &mlen); EG(ret, err); + MUST_HAVE((mlen != 0), ret, err); + mlen--; + + { + prj_pt dbl; + dbl.magic = WORD(0); + + /* Initialize temporary point */ + ret = prj_pt_init(&dbl, in->crv); EG(ret, err2); + + /* Main loop of Double and Add Always */ + while (mlen > 0) { + --mlen; + /* mbit is m[i] */ + ret = nn_getbit(&m_msb_fixed, mlen, &mbit); EG(ret, err2); + +#ifndef NO_USE_COMPLETE_FORMULAS + /* + * NOTE: in case of complete formulas, we use the + * addition for doubling, incurring a small performance hit + * for better SCA resistance. + */ + ret_ops |= prj_pt_add(&dbl, out, out); +#else + ret_ops |= prj_pt_dbl(&dbl, out); +#endif + ret_ops |= prj_pt_add(out, &dbl, in); + /* Swap */ + ret = nn_cnd_swap(!mbit, &(out->X.fp_val), &(dbl.X.fp_val)); EG(ret, err2); + ret = nn_cnd_swap(!mbit, &(out->Y.fp_val), &(dbl.Y.fp_val)); EG(ret, err2); + ret = nn_cnd_swap(!mbit, &(out->Z.fp_val), &(dbl.Z.fp_val)); EG(ret, err2); + } +err2: + prj_pt_uninit(&dbl); EG(ret, err); + } + +err: + nn_uninit(&m_msb_fixed); + + PTR_NULLIFY(curve_order); + } + + /* Take into consideration our double and add errors */ + ret |= ret_ops; + + return ret; +} +#endif + + +#ifdef USE_MONTY_LADDER +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_mul_ltr_monty_ladder(prj_pt_t out, nn_src_t m, prj_pt_src_t in) +{ + /* We use Itoh et al. notations here for T and the random r */ + prj_pt T[3]; + bitcnt_t mlen; + u8 mbit, rbit; + /* Random for masking the Montgomery Ladder algorithm */ + nn r; + /* The new scalar we will use with MSB fixed to 1 (noted m' above). + * This helps dealing with constant time. + */ + nn m_msb_fixed; + nn_src_t curve_order; + nn curve_order_square; + int ret, ret_ops, cmp; + r.magic = m_msb_fixed.magic = curve_order_square.magic = WORD(0); + T[0].magic = T[1].magic = T[2].magic = WORD(0); + + /* Compute m' from m depending on the rule described above */ + curve_order = &(in->crv->order); + + /* First compute q**2 */ + ret = nn_sqr(&curve_order_square, curve_order); EG(ret, err); + + /* Then compute m' depending on m size */ + ret = nn_cmp(m, curve_order, &cmp); EG(ret, err); + if (cmp < 0) { + bitcnt_t msb_bit_len, order_bitlen; + + /* Case where m < q */ + ret = nn_add(&m_msb_fixed, m, curve_order); EG(ret, err); + ret = nn_bitlen(&m_msb_fixed, &msb_bit_len); EG(ret, err); + ret = nn_bitlen(curve_order, &order_bitlen); EG(ret, err); + ret = nn_cnd_add((msb_bit_len == order_bitlen), &m_msb_fixed, + &m_msb_fixed, curve_order); EG(ret, err); + } else { + ret = nn_cmp(m, &curve_order_square, &cmp); EG(ret, err); + if (cmp < 0) { + bitcnt_t msb_bit_len, curve_order_square_bitlen; + + /* Case where m >= q and m < (q**2) */ + ret = nn_add(&m_msb_fixed, m, &curve_order_square); EG(ret, err); + ret = nn_bitlen(&m_msb_fixed, &msb_bit_len); EG(ret, err); + ret = nn_bitlen(&curve_order_square, &curve_order_square_bitlen); EG(ret, err); + ret = nn_cnd_add((msb_bit_len == curve_order_square_bitlen), + &m_msb_fixed, &m_msb_fixed, &curve_order_square); EG(ret, err); + } else { + /* Case where m >= (q**2) */ + ret = nn_copy(&m_msb_fixed, m); EG(ret, err); + } + } + + ret = nn_bitlen(&m_msb_fixed, &mlen); EG(ret, err); + MUST_HAVE((mlen != 0), ret, err); + mlen--; + + /* Hide possible internal failures for double and add + * operations and perform the operation in constant time. + */ + ret_ops = 0; + + /* Get a random r with the same size of m_msb_fixed */ + ret = nn_get_random_len(&r, (u16)(m_msb_fixed.wlen * WORD_BYTES)); EG(ret, err); + + ret = nn_getbit(&r, mlen, &rbit); EG(ret, err); + + /* Initialize points */ + ret = prj_pt_init(&T[0], in->crv); EG(ret, err); + ret = prj_pt_init(&T[1], in->crv); EG(ret, err); + ret = prj_pt_init(&T[2], in->crv); EG(ret, err); + + /* Initialize T[r[n-1]] to input point */ + /* + * Blind the point with projective coordinates + * (X, Y, Z) => (l*X, l*Y, l*Z) + */ + ret = _blind_projective_point(&T[rbit], in); EG(ret, err); + + /* Initialize T[1-r[n-1]] with ECDBL(T[r[n-1]])) */ +#ifndef NO_USE_COMPLETE_FORMULAS + /* + * NOTE: in case of complete formulas, we use the + * addition for doubling, incurring a small performance hit + * for better SCA resistance. + */ + ret_ops |= prj_pt_add(&T[1-rbit], &T[rbit], &T[rbit]); +#else + ret_ops |= prj_pt_dbl(&T[1-rbit], &T[rbit]); +#endif + + /* Main loop of the Montgomery Ladder */ + while (mlen > 0) { + u8 rbit_next; + --mlen; + /* rbit is r[i+1], and rbit_next is r[i] */ + ret = nn_getbit(&r, mlen, &rbit_next); EG(ret, err); + + /* mbit is m[i] */ + ret = nn_getbit(&m_msb_fixed, mlen, &mbit); EG(ret, err); + /* Double: T[2] = ECDBL(T[d[i] ^ r[i+1]]) */ + +#ifndef NO_USE_COMPLETE_FORMULAS + /* NOTE: in case of complete formulas, we use the + * addition for doubling, incurring a small performance hit + * for better SCA resistance. + */ + ret_ops |= prj_pt_add(&T[2], &T[mbit ^ rbit], &T[mbit ^ rbit]); +#else + ret_ops |= prj_pt_dbl(&T[2], &T[mbit ^ rbit]); +#endif + + /* Add: T[1] = ECADD(T[0],T[1]) */ + ret_ops |= prj_pt_add(&T[1], &T[0], &T[1]); + + /* T[0] = T[2-(d[i] ^ r[i])] */ + /* + * NOTE: we use the low level nn_copy function here to avoid + * any possible leakage on operands with prj_pt_copy + */ + ret = nn_copy(&(T[0].X.fp_val), &(T[2-(mbit ^ rbit_next)].X.fp_val)); EG(ret, err); + ret = nn_copy(&(T[0].Y.fp_val), &(T[2-(mbit ^ rbit_next)].Y.fp_val)); EG(ret, err); + ret = nn_copy(&(T[0].Z.fp_val), &(T[2-(mbit ^ rbit_next)].Z.fp_val)); EG(ret, err); + + /* T[1] = T[1+(d[i] ^ r[i])] */ + /* NOTE: we use the low level nn_copy function here to avoid + * any possible leakage on operands with prj_pt_copy + */ + ret = nn_copy(&(T[1].X.fp_val), &(T[1+(mbit ^ rbit_next)].X.fp_val)); EG(ret, err); + ret = nn_copy(&(T[1].Y.fp_val), &(T[1+(mbit ^ rbit_next)].Y.fp_val)); EG(ret, err); + ret = nn_copy(&(T[1].Z.fp_val), &(T[1+(mbit ^ rbit_next)].Z.fp_val)); EG(ret, err); + + /* Update rbit */ + rbit = rbit_next; + } + /* Output: T[r[0]] */ + ret = prj_pt_copy(out, &T[rbit]); EG(ret, err); + + /* Take into consideration our double and add errors */ + ret |= ret_ops; + +err: + prj_pt_uninit(&T[0]); + prj_pt_uninit(&T[1]); + prj_pt_uninit(&T[2]); + nn_uninit(&r); + nn_uninit(&m_msb_fixed); + nn_uninit(&curve_order_square); + + PTR_NULLIFY(curve_order); + + return ret; +} +#endif + +/* Main projective scalar multiplication function. + * Depending on the preprocessing options, we use either the + * Double and Add Always algorithm, or the Montgomery Ladder one. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_mul_ltr_monty(prj_pt_t out, nn_src_t m, prj_pt_src_t in){ +#if defined(USE_DOUBLE_ADD_ALWAYS) + return _prj_pt_mul_ltr_monty_dbl_add_always(out, m, in); +#elif defined(USE_MONTY_LADDER) + return _prj_pt_mul_ltr_monty_ladder(out, m, in); +#else +#error "Error: neither Double and Add Always nor Montgomery Ladder has been selected!" +#endif +} + +/* version with 'm' passed via 'out'. */ +ATTRIBUTE_WARN_UNUSED_RET static int _prj_pt_mul_ltr_monty_aliased(prj_pt_t out, nn_src_t m, prj_pt_src_t in) +{ + prj_pt out_cpy; + int ret; + out_cpy.magic = WORD(0); + + ret = prj_pt_init(&out_cpy, in->crv); EG(ret, err); + ret = _prj_pt_mul_ltr_monty(&out_cpy, m, in); EG(ret, err); + ret = prj_pt_copy(out, &out_cpy); + +err: + prj_pt_uninit(&out_cpy); + return ret; +} + +/* Aliased version. This is the public main interface of our + * scalar multiplication algorithm. Checks that the input point + * and that the output point are on the curve are performed here + * (before and after calling the core algorithm, albeit Double and + * Add Always or Montgomery Ladder). + */ +int prj_pt_mul(prj_pt_t out, nn_src_t m, prj_pt_src_t in) +{ + int ret, on_curve; + + ret = prj_pt_check_initialized(in); EG(ret, err); + ret = nn_check_initialized(m); EG(ret, err); + + /* Check that the input is on the curve */ + MUST_HAVE((!prj_pt_is_on_curve(in, &on_curve)) && on_curve, ret, err); + + if (out == in) { + ret = _prj_pt_mul_ltr_monty_aliased(out, m, in); EG(ret, err); + } else { + ret = _prj_pt_mul_ltr_monty(out, m, in); EG(ret, err); + } + + /* Check that the output is on the curve */ + MUST_HAVE((!prj_pt_is_on_curve(out, &on_curve)) && on_curve, ret, err); + +err: + return ret; +} + +int prj_pt_mul_blind(prj_pt_t out, nn_src_t m, prj_pt_src_t in) +{ + /* Blind the scalar m with (b*q) where q is the curve order. + * NOTE: the curve order and the "generator" order are + * usually the same (i.e. cofactor = 1) for the classical + * prime fields curves. However some exceptions exist + * (e.g. Wei25519 and Wei448), and in this case it is + * curcial to use the curve order for a generic blinding + * working on any point on the curve. + */ + nn b; + nn_src_t q; + int ret; + b.magic = WORD(0); + + ret = prj_pt_check_initialized(in); EG(ret, err); + + q = &(in->crv->order); + + ret = nn_init(&b, 0); EG(ret, err); + + ret = nn_get_random_mod(&b, q); EG(ret, err); + + ret = nn_mul(&b, &b, q); EG(ret, err); + ret = nn_add(&b, &b, m); EG(ret, err); + + /* NOTE: point blinding is performed in the lower functions */ + /* NOTE: check that input and output points are on the curve are + * performed in the lower functions. + */ + + /* Perform the scalar multiplication */ + ret = prj_pt_mul(out, &b, in); + +err: + nn_uninit(&b); + + PTR_NULLIFY(q); + + return ret; +} + +/* Naive double and add scalar multiplication. + * + * This scalar multiplication is used on public values and is optimized with no + * countermeasures, and it is usually faster as scalar can be small with few bits + * to process (e.g. cofactors, etc.). + * + * out is initialized by the function. + * + * XXX: WARNING: this function must only be used on public points! + * + */ +static int __prj_pt_unprotected_mult(prj_pt_t out, nn_src_t scalar, prj_pt_src_t public_in) +{ + u8 expbit; + bitcnt_t explen; + int ret, iszero, on_curve; + + ret = prj_pt_check_initialized(public_in); EG(ret, err); + ret = nn_check_initialized(scalar); EG(ret, err); + + /* This function does not support aliasing */ + MUST_HAVE((out != public_in), ret, err); + + /* Check that the input is on the curve */ + MUST_HAVE((!prj_pt_is_on_curve(public_in, &on_curve)) && on_curve, ret, err); + + ret = nn_iszero(scalar, &iszero); EG(ret, err); + /* Multiplication by zero is the point at infinity */ + if(iszero){ + ret = prj_pt_zero(out); EG(ret, err); + goto err; + } + + ret = nn_bitlen(scalar, &explen); EG(ret, err); + /* Sanity check */ + MUST_HAVE((explen > 0), ret, err); + explen = (bitcnt_t)(explen - 1); + ret = prj_pt_copy(out, public_in); EG(ret, err); + + while (explen > 0) { + explen = (bitcnt_t)(explen - 1); + ret = nn_getbit(scalar, explen, &expbit); EG(ret, err); + ret = prj_pt_dbl(out, out); EG(ret, err); + if(expbit){ + ret = prj_pt_add(out, out, public_in); EG(ret, err); + } + } + + /* Check that the output is on the curve */ + MUST_HAVE((!prj_pt_is_on_curve(out, &on_curve)) && on_curve, ret, err); + +err: + VAR_ZEROIFY(expbit); + VAR_ZEROIFY(explen); + + return ret; +} + +/* Aliased version of __prj_pt_unprotected_mult */ +int _prj_pt_unprotected_mult(prj_pt_t out, nn_src_t scalar, prj_pt_src_t public_in) +{ + int ret; + + if(out == public_in){ + prj_pt A; + A.magic = WORD(0); + + ret = prj_pt_copy(&A, public_in); EG(ret, err1); + ret = __prj_pt_unprotected_mult(out, scalar, &A); +err1: + prj_pt_uninit(&A); + goto err; + } + else{ + ret = __prj_pt_unprotected_mult(out, scalar, public_in); + } +err: + return ret; +} +/* + * Check if an integer is (a multiple of) a projective point order. + * + * The function returns 0 on success, -1 on error. The value check is set to 1 if the projective + * point has order in_isorder, 0 otherwise. The value is meaningless on error. + */ +int check_prj_pt_order(prj_pt_src_t in_shortw, nn_src_t in_isorder, prj_pt_sensitivity s, int *check) +{ + int ret, iszero; + prj_pt res; + res.magic = WORD(0); + + /* First sanity checks */ + ret = prj_pt_check_initialized(in_shortw); EG(ret, err); + ret = nn_check_initialized(in_isorder); EG(ret, err); + MUST_HAVE((check != NULL), ret, err); + + /* Then, perform the scalar multiplication */ + if(s == PUBLIC_PT){ + /* If this is a public point, we can use the naive scalar multiplication */ + ret = _prj_pt_unprotected_mult(&res, in_isorder, in_shortw); EG(ret, err); + } + else{ + /* If the point is private, it is sensitive and we proceed with the secure + * scalar blind multiplication. + */ + ret = prj_pt_mul_blind(&res, in_isorder, in_shortw); EG(ret, err); + } + + /* Check if we have the point at infinity */ + ret = prj_pt_iszero(&res, &iszero); EG(ret, err); + (*check) = iszero; + +err: + prj_pt_uninit(&res); + + return ret; +} + +/*****************************************************************************/ + +/* + * Map points from Edwards to short Weierstrass projective points through Montgomery (composition mapping). + * Point at infinity (0, 1) -> (0, 1, 0) is treated as an exception, which is trivially not constant time. + * This is OK since our mapping functions should be used at the non sensitive input and output + * interfaces. + * + * The function returns 0 on success, -1 on error. + */ +int aff_pt_edwards_to_prj_pt_shortw(aff_pt_edwards_src_t in_edwards, + ec_shortw_crv_src_t shortw_crv, + prj_pt_t out_shortw, + fp_src_t alpha_edwards) +{ + int ret, iszero, cmp; + aff_pt out_shortw_aff; + fp one; + out_shortw_aff.magic = one.magic = WORD(0); + + /* Check the curves compatibility */ + ret = aff_pt_edwards_check_initialized(in_edwards); EG(ret, err); + ret = curve_edwards_shortw_check(in_edwards->crv, shortw_crv, alpha_edwards); EG(ret, err); + + /* Initialize output point with curve */ + ret = prj_pt_init(out_shortw, shortw_crv); EG(ret, err); + + ret = fp_init(&one, in_edwards->x.ctx); EG(ret, err); + ret = fp_one(&one); EG(ret, err); + + /* Check if we are the point at infinity + * This check induces a non consant time exception, but the current function must be called on + * public data anyways. + */ + ret = fp_iszero(&(in_edwards->x), &iszero); EG(ret, err); + ret = fp_cmp(&(in_edwards->y), &one, &cmp); EG(ret, err); + if(iszero && (cmp == 0)){ + ret = prj_pt_zero(out_shortw); EG(ret, err); + ret = 0; + goto err; + } + + /* Use the affine mapping */ + ret = aff_pt_edwards_to_shortw(in_edwards, shortw_crv, &out_shortw_aff, alpha_edwards); EG(ret, err); + /* And then map the short Weierstrass affine to projective coordinates */ + ret = ec_shortw_aff_to_prj(out_shortw, &out_shortw_aff); + +err: + fp_uninit(&one); + aff_pt_uninit(&out_shortw_aff); + + return ret; +} + +/* + * Map points from short Weierstrass projective points to Edwards through Montgomery (composition mapping). + * Point at infinity with Z=0 (in projective coordinates) -> (0, 1) is treated as an exception, which is trivially not constant time. + * This is OK since our mapping functions should be used at the non sensitive input and output + * interfaces. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_shortw_to_aff_pt_edwards(prj_pt_src_t in_shortw, + ec_edwards_crv_src_t edwards_crv, + aff_pt_edwards_t out_edwards, + fp_src_t alpha_edwards) +{ + int ret, iszero; + aff_pt in_shortw_aff; + in_shortw_aff.magic = WORD(0); + + /* Check the curves compatibility */ + ret = prj_pt_check_initialized(in_shortw); EG(ret, err); + ret = curve_edwards_shortw_check(edwards_crv, in_shortw->crv, alpha_edwards); EG(ret, err); + + /* Initialize output point with curve */ + ret = aff_pt_init(&in_shortw_aff, in_shortw->crv); EG(ret, err); + + /* Check if we are the point at infinity + * This check induces a non consant time exception, but the current function must be called on + * public data anyways. + */ + ret = prj_pt_iszero(in_shortw, &iszero); EG(ret, err); + if(iszero){ + fp zero, one; + zero.magic = one.magic = WORD(0); + + ret = fp_init(&zero, in_shortw->X.ctx); EG(ret, err1); + ret = fp_init(&one, in_shortw->X.ctx); EG(ret, err1); + + ret = fp_zero(&zero); EG(ret, err1); + ret = fp_one(&one); EG(ret, err1); + + ret = aff_pt_edwards_init_from_coords(out_edwards, edwards_crv, &zero, &one); + +err1: + fp_uninit(&zero); + fp_uninit(&one); + + goto err; + } + + /* Map projective to affine on the short Weierstrass */ + ret = prj_pt_to_aff(&in_shortw_aff, in_shortw); EG(ret, err); + /* Use the affine mapping */ + ret = aff_pt_shortw_to_edwards(&in_shortw_aff, edwards_crv, out_edwards, alpha_edwards); + +err: + aff_pt_uninit(&in_shortw_aff); + + return ret; +} + +/* + * Map points from Montgomery to short Weierstrass projective points. + * + * The function returns 0 on success, -1 on error. + */ +int aff_pt_montgomery_to_prj_pt_shortw(aff_pt_montgomery_src_t in_montgomery, + ec_shortw_crv_src_t shortw_crv, + prj_pt_t out_shortw) +{ + int ret; + aff_pt out_shortw_aff; + out_shortw_aff.magic = WORD(0); + + /* Check the curves compatibility */ + ret = aff_pt_montgomery_check_initialized(in_montgomery); EG(ret, err); + ret = curve_montgomery_shortw_check(in_montgomery->crv, shortw_crv); EG(ret, err); + + /* Initialize output point with curve */ + ret = prj_pt_init(out_shortw, shortw_crv); EG(ret, err); + + /* Use the affine mapping */ + ret = aff_pt_montgomery_to_shortw(in_montgomery, shortw_crv, &out_shortw_aff); EG(ret, err); + /* And then map the short Weierstrass affine to projective coordinates */ + ret = ec_shortw_aff_to_prj(out_shortw, &out_shortw_aff); + +err: + aff_pt_uninit(&out_shortw_aff); + + return ret; +} + +/* + * Map points from short Weierstrass projective points to Montgomery. + * + * The function returns 0 on success, -1 on error. + */ +int prj_pt_shortw_to_aff_pt_montgomery(prj_pt_src_t in_shortw, ec_montgomery_crv_src_t montgomery_crv, aff_pt_montgomery_t out_montgomery) +{ + int ret; + aff_pt in_shortw_aff; + in_shortw_aff.magic = WORD(0); + + /* Check the curves compatibility */ + ret = prj_pt_check_initialized(in_shortw); EG(ret, err); + ret = curve_montgomery_shortw_check(montgomery_crv, in_shortw->crv); EG(ret, err); + + /* Initialize output point with curve */ + ret = aff_pt_init(&in_shortw_aff, in_shortw->crv); EG(ret, err); + + /* Map projective to affine on the short Weierstrass */ + ret = prj_pt_to_aff(&in_shortw_aff, in_shortw); EG(ret, err); + /* Use the affine mapping */ + ret = aff_pt_shortw_to_montgomery(&in_shortw_aff, montgomery_crv, out_montgomery); + +err: + aff_pt_uninit(&in_shortw_aff); + + return ret; +} diff --git a/crypto/libecc/src/ecdh/ecccdh.c b/crypto/libecc/src/ecdh/ecccdh.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/ecdh/ecccdh.c @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_ECCCDH) + +#include + +/* + * This module implements the "Elliptic Curve Cryptography Cofactor Diffie-Hellman (ECC CDH) + * Primitive" as described in section 5.7.1.2 of the NIST SP 800-56A Rev. 3 standard. + * + */ + +/* + * Get the size of the shared secret associated to the curve parameters. + */ +int ecccdh_shared_secret_size(const ec_params *params, u8 *size) +{ + int ret; + + MUST_HAVE((params != NULL) && (size != NULL), ret, err); + MUST_HAVE((BYTECEIL(params->ec_fp.p_bitlen) <= 255), ret, err); + + (*size) = (u8)(BYTECEIL(params->ec_fp.p_bitlen)); + ret = 0; + +err: + return ret; +} + +/* + * Get the size of the serialized public key associated to the curve parameters. + */ +int ecccdh_serialized_pub_key_size(const ec_params *params, u8 *size) +{ + int ret; + + MUST_HAVE((params != NULL) && (size != NULL), ret, err); + MUST_HAVE(((2 * BYTECEIL(params->ec_fp.p_bitlen)) <= 255), ret, err); + + (*size) = (u8)(2 * BYTECEIL(params->ec_fp.p_bitlen)); + ret = 0; + +err: + return ret; +} + + +/* + * Initialize ECCCDH public key from an initialized private key. + */ +int ecccdh_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + prj_pt_src_t G; + int ret, cmp; + nn_src_t q; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, ECCCDH); EG(ret, err); + q = &(in_priv->params->ec_gen_order); + + /* Sanity check on key compliance */ + MUST_HAVE((!nn_cmp(&(in_priv->x), q, &cmp)) && (cmp < 0), ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = ECCCDH; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +/* + * Generate a key pair for ECCCDH given curve parameters as input. + */ +int ecccdh_gen_key_pair(ec_key_pair *kp, const ec_params *params) +{ + int ret; + + MUST_HAVE((kp != NULL) && (params != NULL), ret, err); + + /* Use our generic key pair generation primitive */ + kp->priv_key.magic = PRIV_KEY_MAGIC; + kp->priv_key.key_type = ECCCDH; + kp->priv_key.params = params; + ret = generic_gen_priv_key(&(kp->priv_key)); EG(ret, err); + + /* Then, derive the public key */ + ret = ecccdh_init_pub_key(&(kp->pub_key), &(kp->priv_key)); + +err: + /* If we have failed our generation, uninitialize + * the key pair. + */ + if(ret && (kp != NULL)){ + IGNORE_RET_VAL(local_memset(kp, 0, sizeof(ec_key_pair))); + } + return ret; +} + +/* + * Create a key pair from a serialized private key. + */ +int ecccdh_import_key_pair_from_priv_key_buf(ec_key_pair *kp, const ec_params *params, const u8 *priv_key_buf, u8 priv_key_buf_len) +{ + int ret; + + MUST_HAVE((kp != NULL), ret, err); + + /* Use our import primitive */ + ret = ec_priv_key_import_from_buf(&(kp->priv_key), params, priv_key_buf, priv_key_buf_len, ECCCDH); EG(ret, err); + + /* Now derive the public key from the private one */ + ret = ecccdh_init_pub_key(&(kp->pub_key), &(kp->priv_key)); + +err: + return ret; +} + +/* + * Serialize our public key in a buffer. + */ +int ecccdh_serialize_pub_key(const ec_pub_key *our_pub_key, u8 *buf, u8 buf_len) +{ + int ret, iszero; + + /* Sanity check */ + ret = pub_key_check_initialized_and_type(our_pub_key, ECCCDH); EG(ret, err); + + /* Reject the point at infinity */ + ret = prj_pt_iszero(&(our_pub_key->y), &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Export our public key as an affine point + * NOTE: sanity checks on buf_len are performed in the lower layers. + */ + ret = ec_pub_key_export_to_aff_buf(our_pub_key, buf, buf_len); + +err: + return ret; +} + +/* + * Derive the ECCCDH shared secret and store it in a buffer given the peer + * public key and our private key. + * + * The shared_secret_len length MUST be exactly equal to the expected shared secret size: + * the function fails otherwise. + */ +int ecccdh_derive_secret(const ec_priv_key *our_priv_key, const u8 *peer_pub_key_buf, u8 peer_pub_key_buf_len, u8 *shared_secret, u8 shared_secret_len) +{ + int ret, iszero, isone; + ec_pub_key peer_pub_key; + prj_pt_t Q; + nn_src_t cofactor; + u8 expected_shared_secret_len; + peer_pub_key.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((shared_secret != NULL), ret, err); + ret = priv_key_check_initialized_and_type(our_priv_key, ECCCDH); EG(ret, err); + + /* Try to import the peer public key. + * NOTE: the check that this public key is indeed on the curve is performed in the lower layer + * functions. + */ + ret = ec_pub_key_import_from_aff_buf(&peer_pub_key, our_priv_key->params, peer_pub_key_buf, peer_pub_key_buf_len, ECCCDH); EG(ret, err); + Q = &(peer_pub_key.y); + + cofactor = &(our_priv_key->params->ec_gen_cofactor); + ret = nn_isone(cofactor, &isone); EG(ret, err); + if(!isone){ + /* Perform a cofactor multiplication if necessary. + * NOTE: since the cofactor and the base point are public, we perform an unprotected + * scalar multiplication here. + */ + ret = _prj_pt_unprotected_mult(Q, cofactor, Q); EG(ret, err); + } + + /* + * Reject the point at infinity or low order point as input as a trivial wrong public key. + * This would be rejected in any case by the check post scalar multiplication below, but we + * do not want to use and possibly leak the secret scalar if not necessary! + */ + ret = prj_pt_iszero(Q, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Compute the shared secret using scalar multiplication */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(Q, &(our_priv_key->x), Q); EG(ret, err); +#else + ret = prj_pt_mul(Q, &(our_priv_key->x), Q); EG(ret, err); +#endif + + /* NOTE: scalar multiplication primitive checks that the resulting point is on + * the curve. + */ + /* Reject the point at infinity */ + ret = prj_pt_iszero(Q, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Get the unique affine representation of the resulting point */ + ret = prj_pt_unique(Q, Q); EG(ret, err); + /* Now export the X coordinate as the shared secret in the output buffer */ + ret = ecccdh_shared_secret_size(our_priv_key->params, &expected_shared_secret_len); EG(ret, err); + MUST_HAVE((shared_secret_len == expected_shared_secret_len), ret, err); + ret = fp_export_to_buf(shared_secret, shared_secret_len, &(Q->X)); + +err: + PTR_NULLIFY(Q); + PTR_NULLIFY(cofactor); + /* Uninit local peer pub key and zeroize intermediate computations */ + IGNORE_RET_VAL(local_memset(&peer_pub_key, 0, sizeof(ec_pub_key))); + + return ret; +} + +#else /* !defined(WITH_ECCCDH) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; + +#endif /* WITH_ECCCDH */ diff --git a/crypto/libecc/src/ecdh/meson.build b/crypto/libecc/src/ecdh/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/ecdh/meson.build @@ -0,0 +1,4 @@ +ecdh_mod_src = files( + 'ecccdh.c', + 'x25519_448.c', + ) diff --git a/crypto/libecc/src/ecdh/x25519_448.c b/crypto/libecc/src/ecdh/x25519_448.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/ecdh/x25519_448.c @@ -0,0 +1,435 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_X25519) || defined(WITH_X448) + +/* + * XXX: X25519 and X448 are incompatible with small stack devices for now ... + */ +#if defined(USE_SMALL_STACK) +#error "Error: X25519 and X448 are incompatible with USE_SMALL_STACK (devices low on memory)" +#endif + +#if defined(WITH_X25519) && !defined(WITH_CURVE_WEI25519) +#error "Error: X25519 needs curve WEI25519 to be defined! Please define it in libecc config file" +#endif +#if defined(WITH_X448) && !defined(WITH_CURVE_WEI448) +#error "Error: X448 needs curve WEI448 to be defined! Please define it in libecc config file" +#endif + +#include + +#include +#include +#include +#include + +/* For randomness source */ +#include + +/* This module mainly implements the X25519 and X448 functions strictly as defined in + * RFC7748. + */ + + +/* Scalar clamping/decoding + * + * NOTE: the scalar encoding is mainly here to ensure that it is of the form + * 2^254 plus eight times a value between 0 and 2^251 - 1 inclusive for X25519 + * (2^447 plus four times a value between 0 and 2^445 - 1 inclusive for X448). + * + * This ensures "clearing the cofactor" to avoid small subgroup attacks as well + * as setting the scalar MSB to avoid timing/SCA attacks on scalar multiplication. + * These two desirable properties are part of the rationale behind X25519/X448). + */ +ATTRIBUTE_WARN_UNUSED_RET static int decode_scalar(u8 *scalar_decoded, const u8 *scalar, u8 len) +{ + int ret; + u8 i; + + /* Aliasing is not supported */ + MUST_HAVE((scalar != scalar_decoded), ret, err); + /* Zero length is not accepted */ + MUST_HAVE((len > 0), ret, err); + + /* Endianness swapping */ + for(i = 0; i < len; i++){ + scalar_decoded[len - 1 - i] = scalar[i]; + } + if(len == X25519_SIZE){ + /* Curve25519 */ + scalar_decoded[len - 1] &= 248; + scalar_decoded[0] &= 127; + scalar_decoded[0] |= 64; + } + else if(len == X448_SIZE){ + /* Curve448 */ + scalar_decoded[len - 1] &= 252; + scalar_decoded[0] |= 128; + } + else{ + /* Error, unknown type */ + ret = -1; + goto err; + } + + ret = 0; + +err: + return ret; +} + +/* U coordinate decoding, mainly endianness swapping */ +ATTRIBUTE_WARN_UNUSED_RET static int decode_u_coordinate(u8 *u_decoded, const u8 *u, u8 len) +{ + int ret; + u8 i; + + /* Aliasing is not supported */ + MUST_HAVE((u != u_decoded), ret, err); + /* Zero length is not accepted */ + MUST_HAVE((len > 0), ret, err); + + for(i = 0; i < len; i++){ + u_decoded[len - 1 - i] = u[i]; + } + + ret = 0; + +err: + return ret; +} + +/* U coordinate encoding, mainly endianness swapping */ +ATTRIBUTE_WARN_UNUSED_RET static int encode_u_coordinate(u8 *u_encoded, const u8 *u, u8 len) +{ + return decode_u_coordinate(u_encoded, u, len); +} + + +/* Find V coordinate from U coordinate on Curve25519 or Curve448 */ +ATTRIBUTE_WARN_UNUSED_RET static int compute_v_from_u(fp_src_t u, fp_t v, ec_montgomery_crv_src_t crv) +{ + int ret; + fp tmp; + + tmp.magic = 0; + + ret = aff_pt_montgomery_v_from_u(v, &tmp, u, crv); + /* NOTE: this square root is possibly non-existing if the + * u coordinate is on the quadratic twist of the curve. + * An error is returned in this case. + */ + + fp_uninit(&tmp); + + return ret; +} + + +/* + * This is the core computation of X25519 and X448. + * + * NOTE: the user of this primitive should be warned and aware that is is not fully compliant with the + * RFC7748 description as u coordinates on the quadratic twist of the curve are rejected as well + * as non canonical u. + * See the explanations in the implementation of the function for more context and explanations. + */ +ATTRIBUTE_WARN_UNUSED_RET static int x25519_448_core(const u8 *k, const u8 *u, u8 *res, u8 len) +{ + int ret, iszero, loaded, cmp; + /* Note: our local variables holding scalar and coordinate have the maximum size + * (X448 size if it is defined, X25519 else). + */ +#if defined(WITH_X448) + u8 k_[X448_SIZE], u_[X448_SIZE]; +#else + u8 k_[X25519_SIZE], u_[X25519_SIZE]; +#endif + aff_pt_montgomery _Tmp; + prj_pt Q; + ec_montgomery_crv montgomery_curve; + ec_params shortw_curve_params; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + nn scalar; + nn_t v_coord_nn; + fp_t u_coord, v_coord; + nn_t cofactor; + + _Tmp.magic = montgomery_curve.magic = Q.magic = WORD(0); + scalar.magic = WORD(0); + + MUST_HAVE((k != NULL) && (u != NULL) && (res != NULL), ret, err); + /* Sanity check on sizes */ + MUST_HAVE(((len == X25519_SIZE) || (len == X448_SIZE)), ret, err); + MUST_HAVE(((sizeof(k_) >= len) && (sizeof(u_) >= len)), ret, err); + + /* First of all, we clamp and decode the scalar and u */ + ret = decode_scalar(k_, k, len); EG(ret, err); + ret = decode_u_coordinate(u_, u, len); EG(ret, err); + + /* Import curve parameters */ + loaded = 0; +#if defined(WITH_X25519) + if(len == X25519_SIZE){ + ret = import_params(&shortw_curve_params, &wei25519_str_params); EG(ret, err); + loaded = 1; + } +#endif +#if defined(WITH_X448) + if(len == X448_SIZE){ + ret = import_params(&shortw_curve_params, &wei448_str_params); EG(ret, err); + loaded = 1; + } +#endif + /* Sanity check that we have loaded our curve parameters */ + MUST_HAVE((loaded == 1), ret, err); + + /* Make things more readable */ + shortw_curve = &(shortw_curve_params.ec_curve); + cofactor = &(shortw_curve_params.ec_gen_cofactor); + alpha_montgomery = &(shortw_curve_params.ec_alpha_montgomery); + gamma_montgomery = &(shortw_curve_params.ec_gamma_montgomery); + /* NOTE: we use the projective point Q Fp values as temporary + * space to save some stack here. + */ + u_coord = &(Q.X); + v_coord = &(Q.Y); + v_coord_nn = &(v_coord->fp_val); + + /* Get the isogenic Montgomery curve */ + ret = curve_shortw_to_montgomery(shortw_curve, &montgomery_curve, alpha_montgomery, + gamma_montgomery); EG(ret, err); + + /* Import the u coordinate as a big integer and Fp element */ + ret = nn_init_from_buf(v_coord_nn, u_, len); EG(ret, err); + /* Reject non canonical u values. + * NOTE: we use v here as a temporary value. + */ + ret = nn_cmp(v_coord_nn, &(montgomery_curve.A.ctx->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Now initialize u as Fp element with the reduced value */ + ret = fp_init(u_coord, montgomery_curve.A.ctx); EG(ret, err); + ret = fp_set_nn(u_coord, v_coord_nn); EG(ret, err); + + /* Compute the v coordinate from u */ + ret = compute_v_from_u(u_coord, v_coord, &montgomery_curve); EG(ret, err); + /* NOTE: since we use isogenies of the Curve25519/448, we must stick to points + * belonging to this curve. Since not all u coordinates provide a v coordinate + * (i.e. a square residue from the curve formula), the computation above can trigger an error. + * When this is the case, this means that the u coordinate is on the quadtratic twist of + * the Montgomery curve (which is a secure curve by design here). We could perform computations + * on an isogenic curve of this twist, however we choose to return an error instead. + * + * Although this is not compliant with the Curve2551/448 original spirit (that accepts any u + * coordinate thanks to the x-coordinate only computations with the Montgomery Ladder), + * we emphasize here that in the key exchange defined in RFC7748 all the exchanged points + * (i.e. public keys) are derived from base points that are on the curve and not on its twist, meaning + * that all the exchanged u coordinates should belong to the curve. Diverging from this behavior would + * suggest that an attacker is trying to inject other values, and we are safe to reject them in the + * context of Diffie-Hellman based key exchange as defined in RFC7748. + * + * On the other hand, the drawback of rejecting u coordinates on the quadratic twist is that + * using the current X25519/448 primitive in other contexts than RFC7748 Diffie-Hellman could be + * limited and non interoperable with other implementations of this primive. Another issue is that + * this specific divergence exposes our implementation to be distinguishable from other standard ones + * in a "black box" analysis context, which is generally not very desirable even if no real security + * issue is induced. + */ + + /* Get the affine point in Montgomery */ + ret = aff_pt_montgomery_init_from_coords(&_Tmp, &montgomery_curve, u_coord, v_coord); EG(ret, err); + /* Transfer from Montgomery to short Weierstrass using the isogeny */ + ret = aff_pt_montgomery_to_prj_pt_shortw(&_Tmp, shortw_curve, &Q); EG(ret, err); + + /* + * Reject small order public keys: while this is not a strict requirement of RFC7748, there is no + * good reason to accept these weak values! + */ + ret = check_prj_pt_order(&Q, cofactor, PUBLIC_PT, &cmp); EG(ret, err); + MUST_HAVE((!cmp), ret, err); + + /* Import the scalar as big number NN value */ + ret = nn_init_from_buf(&scalar, k_, len); EG(ret, err); + /* Now proceed with the scalar multiplication */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(&Q, &scalar, &Q); EG(ret, err); +#else + ret = prj_pt_mul(&Q, &scalar, &Q); EG(ret, err); +#endif + + /* Transfer back from short Weierstrass to Montgomery using the isogeny */ + ret = prj_pt_shortw_to_aff_pt_montgomery(&Q, &montgomery_curve, &_Tmp); EG(ret, err); + + /* Reject the all zero output */ + ret = fp_iszero(&(_Tmp.u), &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Now export the resulting u coordinate ... */ + ret = fp_export_to_buf(u_, len, &(_Tmp.u)); EG(ret, err); + /* ... and encode it in the output */ + ret = encode_u_coordinate(res, u_, len); + +err: + IGNORE_RET_VAL(local_memset(u_, 0, sizeof(u_))); + IGNORE_RET_VAL(local_memset(k_, 0, sizeof(k_))); + IGNORE_RET_VAL(local_memset(&shortw_curve_params, 0, sizeof(shortw_curve_params))); + + nn_uninit(&scalar); + aff_pt_montgomery_uninit(&_Tmp); + prj_pt_uninit(&Q); + ec_montgomery_crv_uninit(&montgomery_curve); + + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(u_coord); + PTR_NULLIFY(v_coord); + PTR_NULLIFY(v_coord_nn); + PTR_NULLIFY(cofactor); + + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int x25519_448_gen_priv_key(u8 *priv_key, u8 len) +{ + int ret; + + MUST_HAVE((priv_key != NULL), ret, err); + MUST_HAVE(((len == X25519_SIZE) || (len == X448_SIZE)), ret, err); + + /* Generating a private key consists in generating a random byte string */ + ret = get_random(priv_key, len); + +err: + return ret; +} + + +ATTRIBUTE_WARN_UNUSED_RET static int x25519_448_init_pub_key(const u8 *priv_key, u8 *pub_key, u8 len) +{ + int ret; + + MUST_HAVE((priv_key != NULL) && (pub_key != NULL), ret, err); + MUST_HAVE(((len == X25519_SIZE) || (len == X448_SIZE)), ret, err); + + /* Computing the public key is x25519(priv_key, 9) or x448(priv_key, 5) + * + * NOTE: although we could optimize and accelerate the computation of the public + * key by skipping the Montgomery to Weierstrass mapping (as the base point on the two + * isomorphic curves are known), we rather use the regular x25519_448_core primitive + * as it has the advantages of keeping the code clean and simple (and the performance + * cost is not so expensive as the core scalar multiplication will take most of the + * cycles ...). + * + */ + if(len == X25519_SIZE){ + u8 u[X25519_SIZE]; + + ret = local_memset(u, 0, sizeof(u)); EG(ret, err); + /* X25519 uses the base point with x-coordinate = 0x09 */ + u[0] = 0x09; + ret = x25519_448_core(priv_key, u, pub_key, len); + } + else if(len == X448_SIZE){ + u8 u[X448_SIZE]; + + ret = local_memset(u, 0, sizeof(u)); EG(ret, err); + /* X448 uses the base point with x-coordinate = 0x05 */ + u[0] = 0x05; + ret = x25519_448_core(priv_key, u, pub_key, len); + } + else{ + ret = -1; + } +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int x25519_448_derive_secret(const u8 *priv_key, const u8 *peer_pub_key, u8 *shared_secret, u8 len) +{ + int ret; + + MUST_HAVE((priv_key != NULL) && (peer_pub_key != NULL) && (shared_secret != NULL), ret, err); + MUST_HAVE(((len == X25519_SIZE) || (len == X448_SIZE)), ret, err); + + /* Computing the shared secret is x25519(priv_key, peer_pub_key) or x448(priv_key, peer_pub_key) */ + ret = x25519_448_core(priv_key, peer_pub_key, shared_secret, len); + +err: + return ret; +} + + +#if defined(WITH_X25519) +/* The X25519 function as specified in RFC7748. + * + * NOTE: we use isogenies between Montgomery Curve25519 and short Weierstrass + * WEI25519 to perform the Elliptic Curves computations. + */ +int x25519(const u8 k[X25519_SIZE], const u8 u[X25519_SIZE], u8 res[X25519_SIZE]) +{ + return x25519_448_core(k, u, res, X25519_SIZE); +} + +int x25519_gen_priv_key(u8 priv_key[X25519_SIZE]) +{ + return x25519_448_gen_priv_key(priv_key, X25519_SIZE); +} + +int x25519_init_pub_key(const u8 priv_key[X25519_SIZE], u8 pub_key[X25519_SIZE]) +{ + return x25519_448_init_pub_key(priv_key, pub_key, X25519_SIZE); +} + +int x25519_derive_secret(const u8 priv_key[X25519_SIZE], const u8 peer_pub_key[X25519_SIZE], u8 shared_secret[X25519_SIZE]) +{ + return x25519_448_derive_secret(priv_key, peer_pub_key, shared_secret, X25519_SIZE); +} +#endif + +#if defined(WITH_X448) +/* The X448 function as specified in RFC7748. + * + * NOTE: we use isogenies between Montgomery Curve448 and short Weierstrass + * WEI448 to perform the Elliptic Curves computations. + */ +int x448(const u8 k[X448_SIZE], const u8 u[X448_SIZE], u8 res[X448_SIZE]) +{ + return x25519_448_core(k, u, res, X448_SIZE); +} + +int x448_gen_priv_key(u8 priv_key[X448_SIZE]) +{ + return x25519_448_gen_priv_key(priv_key, X448_SIZE); +} + +int x448_init_pub_key(const u8 priv_key[X448_SIZE], u8 pub_key[X448_SIZE]) +{ + return x25519_448_init_pub_key(priv_key, pub_key, X448_SIZE); +} + +int x448_derive_secret(const u8 priv_key[X448_SIZE], const u8 peer_pub_key[X448_SIZE], u8 shared_secret[X448_SIZE]) +{ + return x25519_448_derive_secret(priv_key, peer_pub_key, shared_secret, X448_SIZE); +} +#endif + +#else /* !(defined(WITH_X25519) || defined(WITH_X448)) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; + +#endif /* defined(WITH_X25519) || defined(WITH_X448) */ diff --git a/crypto/libecc/src/examples/Makefile b/crypto/libecc/src/examples/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/Makefile @@ -0,0 +1,50 @@ +ROOT_DIR=../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Basic examples directory +BASIC_DIR=basic/ +# Hash functions directory +HASH_DIR=hash/ +# Signature functions directory +SIG_DIR=sig/ +# Shamir Secret Sharing directory +SSS_DIR=sss/ + +CFLAGS += -I$(ROOT_DIR)/include/ + +all: _basic _hash _sig _sss +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: _basic_dync _hash_dyn _sig_dyn _sss_dyn +endif + +_basic: + $(VERBOSE_MAKE)cd $(BASIC_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_hash: + $(VERBOSE_MAKE)cd $(HASH_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_sig: + $(VERBOSE_MAKE)cd $(SIG_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_sss: + $(VERBOSE_MAKE)cd $(SSS_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +_basic_dync: + $(VERBOSE_MAKE)cd $(BASIC_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_hash_dyn: + $(VERBOSE_MAKE)cd $(HASH_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_sig_dyn: + $(VERBOSE_MAKE)cd $(SIG_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_sss_dyn: + $(VERBOSE_MAKE)cd $(SSS_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +endif + + +clean: + $(VERBOSE_MAKE)cd $(BASIC_DIR) && make clean + $(VERBOSE_MAKE)cd $(HASH_DIR) && make clean + $(VERBOSE_MAKE)cd $(SIG_DIR) && make clean + $(VERBOSE_MAKE)cd $(SSS_DIR) && make clean + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/basic/Makefile b/crypto/libecc/src/examples/basic/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/basic/Makefile @@ -0,0 +1,43 @@ +ROOT_DIR=../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +CFLAGS += -I$(ROOT_DIR)/include/ + +all: nn_example fp_example curve_basic_examples curve_ecdh +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: nn_example_dyn fp_example_dyn curve_basic_examples_dyn curve_ecdh_dyn +endif + +nn_example: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DNN_EXAMPLE nn_miller_rabin.c nn_pollard_rho.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(LIBARITH) $(BIN_LDFLAGS) -o nn_pollard_rho + +fp_example: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DFP_EXAMPLE nn_miller_rabin.c fp_square_residue.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(LIBARITH) $(BIN_LDFLAGS) -o fp_square_residue + +curve_basic_examples: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DCURVE_BASIC_EXAMPLES fp_square_residue.c curve_basic_examples.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(ROOT_DIR)/src/external_deps/time.c $(LIBEC) $(BIN_LDFLAGS) -o curve_basic_examples +curve_ecdh: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DCURVE_ECDH curve_ecdh.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBEC) -o curve_ecdh + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +nn_example_dyn: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DNN_EXAMPLE nn_miller_rabin.c nn_pollard_rho.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) -L$(BUILD_DIR) -larith -o nn_pollard_rho_dyn + +fp_example_dyn: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DFP_EXAMPLE nn_miller_rabin.c fp_square_residue.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) -L$(BUILD_DIR) -larith -o fp_square_residue_dyn + +curve_basic_examples_dyn: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DCURVE_BASIC_EXAMPLES fp_square_residue.c curve_basic_examples.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(ROOT_DIR)/src/external_deps/time.c $(BIN_LDFLAGS) -L$(BUILD_DIR) -lec -o curve_basic_examples_dyn +curve_ecdh_dyn: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DCURVE_ECDH curve_ecdh.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) -L$(BUILD_DIR) -lec -o curve_ecdh_dyn +endif + + +clean: + @rm -f nn_pollard_rho fp_square_residue curve_basic_examples curve_ecdh + @rm -f nn_pollard_rho_dyn fp_square_residue_dyn curve_basic_examples_dyn curve_ecdh_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/basic/curve_basic_examples.c b/crypto/libecc/src/examples/basic/curve_basic_examples.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/basic/curve_basic_examples.c @@ -0,0 +1,401 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +/* We include the printf external dependency for printf output */ +#include +/* We include the time external dependency for performance measurement */ +#include + +/* The followin function picks a random Fp element x, where Fp is the + * curve underlying prime field, and computes y in Fp such that: + * y^2 = x^3 + ax + b, where a and b are the input elliptic + * curve parameters. + * + * This means that (x, y) are the affine coordinates of a "random" + * point on our curve. The function then outputs the projective + * coordinates of (x, y), i.e. the triplet (x, y, 1). + * PS: all our operations on points are done with projective coordinates. + * + * Computing y means computing a quadratic residue in Fp, for which we + * use the Tonelli-Shanks algorithm implemented in the Fp source example + * (fp_square_residue.c). + */ +ATTRIBUTE_WARN_UNUSED_RET int get_random_point_on_curve(ec_params *curve_params, prj_pt *out_point); +int get_random_point_on_curve(ec_params *curve_params, prj_pt *out_point) +{ + nn nn_tmp; + int ret, is_oncurve; + + /* Inside our internal representation, curve_params->ec_curve + * contains the curve coefficients a and b. + * curve_params->ec_fp is the Fp context of the curve. + */ + fp x, y, fp_tmp1, fp_tmp2; + fp_ctx_src_t ctx; + + MUST_HAVE((curve_params != NULL), ret, err); + + nn_tmp.magic = WORD(0); + x.magic = y.magic = fp_tmp1.magic = fp_tmp2.magic = WORD(0); + + /* Initialize our x value with the curve Fp context */ + ctx = &(curve_params->ec_fp); + + ret = fp_init(&x, ctx); EG(ret, err); + ret = fp_init(&y, ctx); EG(ret, err); + ret = fp_init(&fp_tmp1, ctx); EG(ret, err); + ret = fp_init(&fp_tmp2, ctx); EG(ret, err); + + ret = nn_init(&nn_tmp, 0); EG(ret, err); + ret = nn_set_word_value(&nn_tmp, WORD(3)); EG(ret, err); + while (1) { + /* Get a random Fp */ + ret = fp_get_random(&x, ctx); EG(ret, err); + ret = fp_copy(&fp_tmp1, &x); EG(ret, err); + ret = fp_copy(&fp_tmp2, &x); EG(ret, err); + /* Compute x^3 + ax + b */ + ret = fp_pow(&fp_tmp1, &fp_tmp1, &nn_tmp); EG(ret, err); + ret = fp_mul(&fp_tmp2, &fp_tmp2, &(curve_params->ec_curve.a)); EG(ret, err); + ret = fp_add(&fp_tmp1, &fp_tmp1, &fp_tmp2); EG(ret, err); + ret = fp_add(&fp_tmp1, &fp_tmp1, &(curve_params->ec_curve.b)); EG(ret, err); + /* + * Get any of the two square roots, corresponding to (x, y) + * and (x, -y) both on the curve. If no square root exist, + * go to next random Fp. + */ + if (fp_sqrt(&y, &fp_tmp2, &fp_tmp1) == 0) { + /* Check that we indeed satisfy the curve equation */ + ret = is_on_shortw_curve(&x, &y, &(curve_params->ec_curve), &is_oncurve); EG(ret, err); + if (!is_oncurve) { + /* This should not happen ... */ + ext_printf("Error: Tonelli-Shanks found a bad " + "solution to curve equation ...\n"); + continue; + } + break; + } + } + /* Now initialize our point with the coordinates (x, y, 1) */ + ret = fp_one(&fp_tmp1); EG(ret, err); + ret = prj_pt_init_from_coords(out_point, &(curve_params->ec_curve), &x, &y, + &fp_tmp1); EG(ret, err); + +err: + fp_uninit(&x); + fp_uninit(&y); + fp_uninit(&fp_tmp1); + fp_uninit(&fp_tmp2); + nn_uninit(&nn_tmp); + + return ret; +} + +#define PERF_SCALAR_MUL 40 +ATTRIBUTE_WARN_UNUSED_RET int check_curve(const u8 *curve_name); +int check_curve(const u8 *curve_name) +{ + unsigned int i; + u64 t1, t2; + int ret, is_oncurve, isone, iszero; + + nn nn_k; + /* libecc internal structure holding the curve parameters */ + ec_params curve_params; + /* libecc internal structure holding projective points on curves */ + prj_pt A, B, C, D; + prj_pt TMP; + aff_pt T; + u32 len; + + /* Importing a specific curve parameters from the constant static + * buffers describing it: + * It is possible to import a curves parameters by its name. + */ + const ec_str_params *the_curve_const_parameters; + + nn_k.magic = WORD(0); + A.magic = B.magic = C.magic = D.magic = WORD(0); + TMP.magic = T.magic = WORD(0); + + MUST_HAVE((curve_name != NULL), ret, err); + + ret = local_strnlen((const char *)curve_name, MAX_CURVE_NAME_LEN, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + ret = ec_get_curve_params_by_name(curve_name, + (u8)len, &the_curve_const_parameters); EG(ret, err); + + + /* Get out if getting the parameters went wrong */ + if (the_curve_const_parameters == NULL) { + ext_printf("Error: error when importing curve %s " + "parameters ...\n", curve_name); + ret = -1; + goto err; + } + /* Now map the curve parameters to our libecc internal representation */ + ret = import_params(&curve_params, the_curve_const_parameters); EG(ret, err); + /* Get two random points on the curve */ + ret = get_random_point_on_curve(&curve_params, &A); EG(ret, err); + ret = get_random_point_on_curve(&curve_params, &B); EG(ret, err); + + /* + * Let's add the two points + * C = A + B with regular point addition + */ + ret = prj_pt_add(&C, &A, &B); EG(ret, err); + + /* + * Check that the resulting additive point C = A+B is indeed on the + * curve. + */ + ret = prj_pt_to_aff(&T, &C); EG(ret, err); + ret = prj_pt_is_on_curve(&C, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: C = A+B is not on the %s curve!\n", + curve_params.curve_name); + ret = -1; + goto err; + } + ret = aff_pt_is_on_curve(&T, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: C = A+B is not on the %s curve!\n", + curve_params.curve_name); + ret = -1; + goto err; + } + /* Same check with doubling + * C = 2A = A+A + */ + ret = prj_pt_dbl(&C, &A); EG(ret, err); + + /* Check that the resulting point C = 2A is indeed on the curve. + * + */ + ret = prj_pt_to_aff(&T, &C); EG(ret, err); + ret = prj_pt_is_on_curve(&C, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: C = A+B is not on the %s curve!\n", + curve_params.curve_name); + ret = -1; + goto err; + } + ret = aff_pt_is_on_curve(&T, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: C = A+B is not on the %s curve!\n", + curve_params.curve_name); + ret = -1; + goto err; + } + /* + * If the cofactor of the curve is 1, this means that the order of the + * generator is the cardinal of the curve (and hence the order of the + * curve points group). This means that for any point P on the curve, + * we should have qP = 0 (the inifinity point, i.e. the zero neutral + * element of the curve additive group). + */ + ret = prj_pt_add(&C, &A, &B); EG(ret, err); + ret = prj_pt_dbl(&D, &A); EG(ret, err); + ret = nn_isone(&(curve_params.ec_gen_cofactor), &isone); EG(ret, err); + if (isone) { + ret = prj_pt_mul(&TMP, &(curve_params.ec_gen_order), &A); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qA is not 0! (regular mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul_blind(&TMP, &(curve_params.ec_gen_order), &A); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qA is not 0! (regular blind mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul(&TMP, &(curve_params.ec_gen_order), &B); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qB is not 0! (regular mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul_blind(&TMP, &(curve_params.ec_gen_order), &B); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qB is not 0! (regular blind mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul(&TMP, &(curve_params.ec_gen_order), &C); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qC is not 0! (regular mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul_blind(&TMP, &(curve_params.ec_gen_order), &C); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qC is not 0! (regular bind mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul(&TMP, &(curve_params.ec_gen_order), &D); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qD is not 0! (regular mul)\n"); + ret = -1; + goto err; + } + /**/ + ret = prj_pt_mul_blind(&TMP, &(curve_params.ec_gen_order), &D); EG(ret, err); + ret = prj_pt_iszero(&TMP, &iszero); EG(ret, err); + if (!iszero) { + ext_printf("Error: qD is not 0! (regular blind mul)\n"); + ret = -1; + goto err; + } + } + /* Let's do some performance tests for point addition and doubling! + * We compute kA many times to have a decent performance measurement, + * where k is chose random at each iteration. We also check that kA + * is indeed on the curve. + */ + ret = nn_init(&nn_k, 0); EG(ret, err); + /**/ + if (get_ms_time(&t1)) { + ext_printf("Error: cannot get time with get_ms_time\n"); + ret = -1; + goto err; + } + for (i = 0; i < PERF_SCALAR_MUL; i++) { + /* k = random mod (q) */ + ret = nn_get_random_mod(&nn_k, &(curve_params.ec_gen_order)); EG(ret, err); + /* Compute kA with montgomery implementation w/o blinding */ + ret = prj_pt_mul(&TMP, &nn_k, &A); EG(ret, err); + ret = prj_pt_to_aff(&T, &TMP); EG(ret, err); + ret = prj_pt_is_on_curve(&TMP, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: kA is not on the %s curve!\n", + curve_params.curve_name); + nn_print("k=", &nn_k); + ret = -1; + goto err; + } + ret = aff_pt_is_on_curve(&T, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: kA is not on the %s curve!\n", + curve_params.curve_name); + nn_print("k=", &nn_k); + ret = -1; + goto err; + } + } + if (get_ms_time(&t2)) { + ext_printf("Error: cannot get time with get_ms_time\n"); + ret = -1; + goto err; + } + ext_printf(" [*] Regular EC scalar multiplication took %f seconds " + "on average\n", + (double)(t2 - t1) / (double)(PERF_SCALAR_MUL * 1000ULL)); + /**/ + if (get_ms_time(&t1)) { + ext_printf("Error: cannot get time with get_ms_time\n"); + ret = -1; + goto err; + } + for (i = 0; i < PERF_SCALAR_MUL; i++) { + /* k = random mod (q) */ + ret = nn_get_random_mod(&nn_k, &(curve_params.ec_gen_order)); EG(ret, err); + /* Compute kA using montgomery implementation w/ blinding */ + ret = prj_pt_mul_blind(&TMP, &nn_k, &A); EG(ret, err); + ret = prj_pt_to_aff(&T, &TMP); EG(ret, err); + ret = prj_pt_is_on_curve(&TMP, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: kA is not on the %s curve!\n", + curve_params.curve_name); + nn_print("k=", &nn_k); + ret = -1; + goto err; + } + ret = aff_pt_is_on_curve(&T, &is_oncurve); EG(ret, err); + if (!is_oncurve) { + ext_printf("Error: kA is not on the %s curve!\n", + curve_params.curve_name); + nn_print("k=", &nn_k); + ret = -1; + goto err; + } + } + if (get_ms_time(&t2)) { + ext_printf("Error: cannot get time with get_ms_time\n"); + ret = -1; + goto err; + } + ext_printf(" [*] Regular blind EC scalar multiplication took %f seconds " + "on average\n", + (double)(t2 - t1) / (double)(PERF_SCALAR_MUL * 1000ULL)); + +err: + prj_pt_uninit(&A); + prj_pt_uninit(&B); + prj_pt_uninit(&C); + prj_pt_uninit(&D); + prj_pt_uninit(&TMP); + aff_pt_uninit(&T); + nn_uninit(&nn_k); + + return ret; +} + +#ifdef CURVE_BASIC_EXAMPLES +int main(int argc, char *argv[]) +{ + unsigned int i; + u8 curve_name[MAX_CURVE_NAME_LEN] = { 0 }; + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Traverse all the possible curves we have at our disposal (known curves and + * user defined curves). + */ + for (i = 0; i < EC_CURVES_NUM; i++) { + /* All our possible curves are in ../curves/curves_list.h + * We can get the curve name from its internal type. + */ + if(ec_get_curve_name_by_type(ec_maps[i].type, curve_name, + sizeof(curve_name))){ + ext_printf("Error when treating %s\n", curve_name); + return -1; + } + /* Check our curve! */ + ext_printf("[+] Checking curve %s\n", curve_name); + if (check_curve(curve_name)) { + ext_printf("Error: error performing check on " + "curve %s\n", curve_name); + return -1; + } + } + return 0; +} +#endif diff --git a/crypto/libecc/src/examples/basic/curve_ecdh.c b/crypto/libecc/src/examples/basic/curve_ecdh.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/basic/curve_ecdh.c @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* We include the printf external dependency for printf output */ +#include + +/* + * The purpose of this example is to implement a 'toy' + * ECDH (Elliptic curve Diffie-Hellman) protocol. Alice + * and Bob want to derive a secret 'x' without sharing the + * same secret key (using asymmetric cryptography). In order + * to do this, they agree upon a public Elliptic Curve with + * a generator G. Alice (resp. Bob) generates a private value + * d_Alice (resp. d_Bob) < q, where q is the order of G. + * Alice (resp. Bob) computes and shares Q_Alice = d_Alice x G + * (resp. Q_Bob = d_Bob x G) over a public channel. Alice + * and Bob now both can compute the same point Q such that + * Q = d_Alice x Q_Bob = d_Bob x Q_Alice, and the shared + * secret 'x' is the first coordinate of the curve point Q. + * External passive observers cannot compute 'x'. + * + * NOTE: We don't seek for communication bandwidth + * optimization here, this is why we use arrays to + * exchange affine coordinates points (and not + * the compressed x coordinate since the + * curve equation can be used). + * + * XXX NOTE: for a robust implementation of the ECDH + * primitives, please use the APIs provided in src/ecdh + * of libecc as they are suitable for "production". The + * purpose of the current toy example is only to show how + * one can manipulate the curve level APIs. + * + */ + +/* Zero buffer to detect empty buffers */ +static u8 zero[2 * NN_MAX_BYTE_LEN] = { 0 }; + +/* + * The following global variables simulate our shared "data bus" + * where Alice and Bob exchange data. + */ + +/* Global array holding Alice to Bob public value + * Q_Alice = d_Alice x G. + * This is a serialized affine EC point, holding + * 2 coordinates, meaning that its maximum size is + * 2 * NN_MAX_BYTE_LEN (i.e. this will work for + * all our curves). + */ +static u8 Alice_to_Bob[2 * NN_MAX_BYTE_LEN] = { 0 }; + +/* Global array holding Bob to Alice public value + * Q_Bob = d_Bob x G. + * This is a serialized affine EC point, holding + * 2 coordinates, meaning that its maximum size is + * 2 * NN_MAX_BYTE_LEN. (i.e. this will work for + * all our curves). + */ +static u8 Bob_to_Alice[2 * NN_MAX_BYTE_LEN] = { 0 }; + +static const u8 Alice[] = "Alice"; +static const u8 Bob[] = "Bob"; +#define CHECK_SIZE LOCAL_MIN(sizeof(Alice), sizeof(Bob)) + +ATTRIBUTE_WARN_UNUSED_RET int ECDH_helper(const u8 *curve_name, const u8 *role); +int ECDH_helper(const u8 *curve_name, const u8 *role) +{ + int ret, check1, check2; + /* The projective point we will use */ + prj_pt Q; + /* The private scalar value for Alice and Bob, as well as their + * respective shared secrets. + * These are 'static' in order to keep them across multiple calls + * of the function. + */ + static nn d_Alice, d_Bob; + nn_t d = NULL; + static fp x_Alice, x_Bob; + fp_t x = NULL; + const char *x_str; + /* Pointers to the communication buffers */ + u8 *our_public_buffer, *other_public_buffer; + u32 len; + + const ec_str_params *the_curve_const_parameters; + /* libecc internal structure holding the curve parameters */ + ec_params curve_params; + + Q.magic = WORD(0); + + MUST_HAVE((curve_name != NULL) && (role != NULL), ret, err); + + /****** Alice => Bob *********************************************************/ + ret = are_equal(role, Alice, CHECK_SIZE, &check1); EG(ret, err); + ret = are_equal(role, Bob, CHECK_SIZE, &check2); EG(ret, err); + if (check1) { + our_public_buffer = Alice_to_Bob; + other_public_buffer = Bob_to_Alice; + d = &d_Alice; + x = &x_Alice; + x_str = " x_Alice"; + } + /****** Bob => Alice *********************************************************/ + else if (check2) { + our_public_buffer = Bob_to_Alice; + other_public_buffer = Alice_to_Bob; + d = &d_Bob; + x = &x_Bob; + x_str = " x_Bob "; + } + else { + /* Unknown role, get out */ + ext_printf(" Error: unknown role %s for ECDH\n", role); + ret = -1; + goto err; + } + + /* Importing specific curve parameters from the constant static + * buffers describing it: + * It is possible to import a curve set of parameters by its name. + */ + ret = local_strnlen((const char *)curve_name, MAX_CURVE_NAME_LEN, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + ret = ec_get_curve_params_by_name(curve_name, + (u8)len, &the_curve_const_parameters); EG(ret, err); + /* Get out if getting the parameters went wrong */ + if (the_curve_const_parameters == NULL) { + ext_printf(" Error: error when importing curve %s " + "parameters ...\n", curve_name); + ret = -1; + goto err; + } + /* Now map the curve parameters to our libecc internal representation */ + ret = import_params(&curve_params, the_curve_const_parameters); EG(ret, err); + + /* Initialize our projective point with the curve parameters */ + ret = prj_pt_init(&Q, &(curve_params.ec_curve)); EG(ret, err); + ret = are_equal(our_public_buffer, zero, sizeof(zero), &check1); EG(ret, err); + if (!check1) { + /* We have already generated and sent our parameters, skip to + * the state where we wait for the other party to generate and + * send us data. + */ + goto generate_shared_secret; + } + + /* Generate our ECDH parameters: a private scalar d and a public value Q = dG where G is the + * curve generator. + * d = random mod (q) where q is the order of the generator G. + */ + ret = nn_init(d, 0); EG(ret, err); + ret = nn_get_random_mod(d, &(curve_params.ec_gen_order)); EG(ret, err); + + /* Q = dG */ + ret = prj_pt_mul(&Q, d, &(curve_params.ec_gen)); EG(ret, err); + + /* Now send the public value Q to the other party, get the other party + * public value and compute the shared secret. + * Our export size is exactly 2 coordinates in Fp (affine point representation), + * so this should be 2 times the size of an element in Fp. + */ + ret = prj_pt_export_to_aff_buf(&Q, our_public_buffer, + (u32)(2 * BYTECEIL(curve_params.ec_fp.p_bitlen))); EG(ret, err); + + generate_shared_secret: + /* Now (non blocking) wait for the other party to send us its public value */ + ret = are_equal(other_public_buffer, zero, sizeof(zero), &check1); EG(ret, err); + if (check1) { + /* Other party has not sent its public value yet! */ + ret = 0; + goto err; + } + /* If our private value d is not initialized, this means that we have already + * done the job of computing the shared secret! + */ + if (nn_check_initialized(d)) { + ret = 1; + goto err; + } + /* Import the shared value as a projective point from an affine point buffer + */ + ret = prj_pt_import_from_aff_buf(&Q, other_public_buffer, + (u16)(2 * BYTECEIL(curve_params.ec_fp.p_bitlen)), + &(curve_params.ec_curve)); EG(ret, err); + /* Compute the shared value = first coordinate of dQ */ + ret = prj_pt_mul(&Q, d, &Q); EG(ret, err); + /* Move to the unique representation */ + /* Compute the affine coordinates to get the unique (x, y) representation + * (projective points are equivalent by a z scalar) + */ + ret = prj_pt_unique(&Q, &Q); EG(ret, err); + ext_printf(" ECDH shared secret computed by %s:\n", role); + /* The shared secret 'x' is the first coordinate of Q */ + ret = fp_init(x, &(curve_params.ec_fp)); EG(ret, err); + ret = fp_copy(x, &(Q.X)); EG(ret, err); + fp_print(x_str, x); + + ret = 1; + + /* Uninit local variables */ + prj_pt_uninit(&Q); + if(x != NULL){ + fp_uninit(x); + } + if(d != NULL){ + nn_uninit(d); + } + +err: + return ret; +} + +#ifdef CURVE_ECDH +int main(int argc, char *argv[]) +{ + unsigned int i; + u8 curve_name[MAX_CURVE_NAME_LEN] = { 0 }; + int ret; + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Traverse all the possible curves we have at our disposal (known curves and + * user defined curves). + */ + for (i = 0; i < EC_CURVES_NUM; i++) { + ret = local_memset(Alice_to_Bob, 0, sizeof(Alice_to_Bob)); EG(ret, err); + ret = local_memset(Bob_to_Alice, 0, sizeof(Bob_to_Alice)); EG(ret, err); + /* All our possible curves are in ../curves/curves_list.h + * We can get the curve name from its internal type. + */ + if(ec_get_curve_name_by_type(ec_maps[i].type, curve_name, + sizeof(curve_name))){ + ret = -1; + ext_printf("Error: error when treating %s\n", curve_name); + goto err; + } + /* Perform ECDH between Alice and Bob! */ + ext_printf("[+] ECDH on curve %s\n", curve_name); + if(ECDH_helper(curve_name, Alice) != 0){ + ret = -1; + ext_printf("Error: error in ECDH_helper\n"); + goto err; + } + if(ECDH_helper(curve_name, Bob) != 1){ + ret = -1; + ext_printf("Error: error in ECDH_helper\n"); + goto err; + } + /* We have to call our ECDH helper again for Alice + * since she was waiting for Bob to send his public data. + * This is our loose way of dealing with 'concurrency' + * without threads ... + */ + if(ECDH_helper(curve_name, Alice) != 1){ + ret = -1; + ext_printf("Error: error in ECDH_helper\n"); + goto err; + } + ext_printf("==================================\n"); + } + + ret = 0; + +err: + return ret; +} +#endif /* CURVE_ECDH */ diff --git a/crypto/libecc/src/examples/basic/fp_square_residue.c b/crypto/libecc/src/examples/basic/fp_square_residue.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/basic/fp_square_residue.c @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* Declare our Miller-Rabin test implemented + * in another module. + */ +ATTRIBUTE_WARN_UNUSED_RET int miller_rabin(nn_src_t n, const unsigned int t, int *check); + +#ifdef FP_EXAMPLE +int main(int argc, char *argv[]) +{ + nn p; + fp x, x_sqrt1, x_sqrt2; + fp_ctx ctx; + int ret, ret_sqr, isone, check, cmp; + x.magic = x_sqrt1.magic = x_sqrt2.magic = WORD(0); + ctx.magic = WORD(0); + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + while (1) { + /* Get a random prime p of maximum 521 bits */ + ret = nn_init(&p, 0); EG(ret, err); + while (1) { + /* x = random with max size ~= (NN_MAX_BIT_LEN / 3) bytes. + * This size limit is infered from the NN arithmetic primitives + * maximum working size. See nn.h for more information about this. + */ + ret = nn_get_random_maxlen + (&p, (u16)((NN_MAX_BIT_LEN / 3) / 8)); EG(ret, err); + + /* p = 1 is a marginal prime we don't want to deal with */ + ret = nn_isone(&p, &isone); EG(ret, err); + if(isone){ + continue; + } + + /* Check primality of p, and choose it if it is prime */ + ret = miller_rabin(&p, 100, &check); EG(ret, err); + if(check == 1){ + break; + } + } + nn_print("Prime p", &p); + /* Initialize our Fp context from p */ + ret = fp_ctx_init_from_p(&ctx, &p); EG(ret, err); + /* Initialize x and its square roots */ + ret = fp_init(&x, &ctx); EG(ret, err); + ret = fp_init(&x_sqrt1, &ctx); EG(ret, err); + ret = fp_init(&x_sqrt2, &ctx); EG(ret, err); + + /* Get a random value in Fp */ + ret = fp_get_random(&x, &ctx); EG(ret, err); + /* Compute its square in Fp */ + ext_printf("Random before squaring:\n"); + fp_print("x", &x); + ext_printf("Random after squaring:\n"); + ret = fp_sqr(&x, &x); EG(ret, err); + nn_print("x^2", &(x.fp_val)); + + ret_sqr = fp_sqrt(&x_sqrt1, &x_sqrt2, &x); + + if (ret_sqr == 0) { + /* Square roots found!, check them! */ + fp_print("sqrt1", &x_sqrt1); + ret = fp_sqr(&x_sqrt1, &x_sqrt1); EG(ret, err); + ret = fp_cmp(&x, &x_sqrt1, &cmp); EG(ret, err); + if (cmp == 0) { + ext_printf("First found square OK!\n"); + } else { + ext_printf("First found square NOK: square " + "is not the expected value ...\n"); + } + fp_print("sqrt2", &x_sqrt2); + ret = fp_sqr(&x_sqrt2, &x_sqrt2); EG(ret, err); + ret = fp_cmp(&x, &x_sqrt2, &cmp); EG(ret, err); + if (cmp == 0) { + ext_printf("Second found square OK!\n"); + } else { + ext_printf("Second found square NOK: square " + "is not the expected value ...\n"); + } + + } else { + if (ret_sqr == -1) { + /* This should not happen since we have forged our square */ + ext_printf("Value n has no square over Fp\n"); + ext_printf("(Note: this error can be due to " + "Miller-Rabin providing a false " + "positive prime ...)\n"); + ext_printf("(though this should happen with " + "negligible probability))\n"); + nn_print("Check primality of p =", &p); + /* Get out of the main loop */ + break; + } else { + /* This should not happen since we have forged our square */ + ext_printf("Tonelli-Shanks algorithm unkown " + "error ...\n"); + ext_printf("(Note: this error can be due to " + "Miller-Rabin providing a false " + "positive prime ...)\n"); + ext_printf("(though this should happen with " + "negligible probability))\n"); + nn_print("Check primality of p =", &p); + /* Get out of the main loop */ + break; + } + } + } + + return 0; +err: + ext_printf("Error: unkown error ...\n"); + return -1; +} +#endif diff --git a/crypto/libecc/src/examples/basic/nn_miller_rabin.c b/crypto/libecc/src/examples/basic/nn_miller_rabin.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/basic/nn_miller_rabin.c @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +/* We include the NN layer API header */ +#include + +ATTRIBUTE_WARN_UNUSED_RET int miller_rabin(nn_src_t n, const unsigned int t, int *res); + +/* Miller-Rabin primality test. + * See "Handbook of Applied Cryptography", alorithm 4.24: + * + * Algorithm: Miller-Rabin probabilistic primality test + * MILLER-RABIN(n,t) + * INPUT: an odd integer n ≥ 3 and security parameter t ≥ 1. + * OUTPUT: an answer “prime” or “composite” to the question: “Is n prime?” + * 1. Write n − 1 = 2**s x r such that r is odd. + * 2. For i from 1 to t do the following: + * 2.1 Choose a random integer a, 2 ≤ a ≤ n − 2. + * 2.2 Compute y = a**r mod n using Algorithm 2.143. + * 2.3 If y != 1 and y != n − 1 then do the following: + * j←1. + * While j ≤ s − 1 and y != n − 1 do the following: + * Compute y←y2 mod n. + * If y = 1 then return(“composite”). + * j←j + 1. + * If y != n − 1 then return (“composite”). + * 3. Return(“maybe prime”). + * + * The Miller-Rabin test can give false positives when + * answering "maybe prime", but is always right when answering + * "composite". + */ +int miller_rabin(nn_src_t n, const unsigned int t, int *res) +{ + int ret, iszero, cmp, isodd, cmp1, cmp2; + unsigned int i; + bitcnt_t k; + /* Temporary NN variables */ + nn s, q, r, d, a, y, j, one, two, tmp; + s.magic = q.magic = r.magic = d.magic = a.magic = y.magic = j.magic = WORD(0); + one.magic = two.magic = tmp.magic = WORD(0); + + ret = nn_check_initialized(n); EG(ret, err); + MUST_HAVE((res != NULL), ret, err); + (*res) = 0; + + /* Initialize our local NN variables */ + ret = nn_init(&s, 0); EG(ret, err); + ret = nn_init(&q, 0); EG(ret, err); + ret = nn_init(&r, 0); EG(ret, err); + ret = nn_init(&d, 0); EG(ret, err); + ret = nn_init(&a, 0); EG(ret, err); + ret = nn_init(&y, 0); EG(ret, err); + ret = nn_init(&j, 0); EG(ret, err); + ret = nn_init(&one, 0); EG(ret, err); + ret = nn_init(&two, 0); EG(ret, err); + ret = nn_init(&tmp, 0); EG(ret, err); + + /* Security parameter t must be >= 1 */ + MUST_HAVE((t >= 1), ret, err); + + /* one = 1 */ + ret = nn_one(&one); EG(ret, err); + /* two = 2 */ + ret = nn_set_word_value(&two, WORD(2)); EG(ret, err); + + /* If n = 0, this is not a prime */ + ret = nn_iszero(n, &iszero); EG(ret, err); + if (iszero) { + ret = 0; + (*res) = 0; + goto err; + } + /* If n = 1, this is not a prime */ + ret = nn_cmp(n, &one, &cmp); EG(ret, err); + if (cmp == 0) { + ret = 0; + (*res) = 0; + goto err; + } + /* If n = 2, this is a prime number */ + ret = nn_cmp(n, &two, &cmp); EG(ret, err); + if (cmp == 0) { + ret = 0; + (*res) = 1; + goto err; + } + /* If n = 3, this is a prime number */ + ret = nn_copy(&tmp, n); EG(ret, err); + ret = nn_dec(&tmp, &tmp); EG(ret, err); + ret = nn_cmp(&tmp, &two, &cmp); EG(ret, err); + if (cmp == 0) { + ret = 0; + (*res) = 1; + goto err; + } + + /* If n >= 4 is even, this is not a prime */ + ret = nn_isodd(n, &isodd); EG(ret, err); + if (!isodd) { + ret = 0; + (*res) = 0; + goto err; + } + + /* n − 1 = 2^s x r, repeatedly try to divide n-1 by 2 */ + /* s = 0 and r = n-1 */ + ret = nn_zero(&s); EG(ret, err); + ret = nn_copy(&r, n); EG(ret, err); + ret = nn_dec(&r, &r); EG(ret, err); + while (1) { + ret = nn_divrem(&q, &d, &r, &two); EG(ret, err); + ret = nn_inc(&s, &s); EG(ret, err); + ret = nn_copy(&r, &q); EG(ret, err); + /* If r is odd, we have finished our division */ + ret = nn_isodd(&r, &isodd); EG(ret, err); + if (isodd) { + break; + } + } + /* 2. For i from 1 to t do the following: */ + for (i = 1; i <= t; i++) { + bitcnt_t blen; + /* 2.1 Choose a random integer a, 2 ≤ a ≤ n − 2 */ + ret = nn_copy(&tmp, n); EG(ret, err); + ret = nn_dec(&tmp, &tmp); EG(ret, err); + ret = nn_zero(&a); EG(ret, err); + ret = nn_cmp(&a, &two, &cmp); EG(ret, err); + while (cmp < 0) { + ret = nn_get_random_mod(&a, &tmp); EG(ret, err); + ret = nn_cmp(&a, &two, &cmp); EG(ret, err); + } + /* A very loose (and NOT robust) implementation of + * modular exponentiation with square and multiply + * to compute y = a**r (n) + * WARNING: NOT to be used in production code! + */ + ret = nn_one(&y); EG(ret, err); + ret = nn_bitlen(&r, &blen); EG(ret, err); + for (k = 0; k < blen; k++) { + u8 bit; + ret = nn_getbit(&r, k, &bit); EG(ret, err); + if (bit) { + /* Warning: the multiplication is not modular, we + * have to take care of our size here! + */ + MUST_HAVE((NN_MAX_BIT_LEN >= + (WORD_BITS * (y.wlen + a.wlen))), ret, err); + ret = nn_mul(&y, &y, &a); EG(ret, err); + ret = nn_mod(&y, &y, n); EG(ret, err); + } + MUST_HAVE((NN_MAX_BIT_LEN >= (2 * WORD_BITS * a.wlen)), ret, err); + ret = nn_sqr(&a, &a); EG(ret, err); + ret = nn_mod(&a, &a, n); EG(ret, err); + } + /* 2.3 If y != 1 and y != n − 1 then do the following + * Note: tmp still contains n - 1 here. + */ + ret = nn_cmp(&y, &one, &cmp1); EG(ret, err); + ret = nn_cmp(&y, &tmp, &cmp2); EG(ret, err); + if ((cmp1 != 0) && (cmp2 != 0)) { + /* j←1. */ + ret = nn_one(&j); EG(ret, err); + /* While j ≤ s − 1 and y != n − 1 do the following: */ + ret = nn_cmp(&j, &s, &cmp1); EG(ret, err); + ret = nn_cmp(&y, &tmp, &cmp2); EG(ret, err); + while ((cmp1 < 0) && (cmp2 != 0)) { + /* Compute y←y2 mod n. */ + MUST_HAVE((NN_MAX_BIT_LEN >= + (2 * WORD_BITS * y.wlen)), ret, err); + ret = nn_sqr(&y, &y); EG(ret, err); + ret = nn_mod(&y, &y, n); EG(ret, err); + /* If y = 1 then return(“composite”). */ + ret = nn_cmp(&y, &one, &cmp); EG(ret, err); + if (cmp == 0) { + ret = 0; + (*res) = 0; + goto err; + } + /* j←j + 1. */ + ret = nn_inc(&j, &j); EG(ret, err); + ret = nn_cmp(&j, &s, &cmp1); EG(ret, err); + ret = nn_cmp(&y, &tmp, &cmp2); EG(ret, err); + } + /* If y != n − 1 then return (“composite”). */ + ret = nn_cmp(&y, &tmp, &cmp); EG(ret, err); + if (cmp != 0) { + ret = 0; + (*res) = 0; + goto err; + } + } + /* 3. Return(“maybe prime”). */ + ret = 0; + (*res) = 1; + } + + err: + nn_uninit(&s); + nn_uninit(&q); + nn_uninit(&r); + nn_uninit(&d); + nn_uninit(&a); + nn_uninit(&y); + nn_uninit(&j); + nn_uninit(&one); + nn_uninit(&two); + nn_uninit(&tmp); + + return ret; +} diff --git a/crypto/libecc/src/examples/basic/nn_pollard_rho.c b/crypto/libecc/src/examples/basic/nn_pollard_rho.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/basic/nn_pollard_rho.c @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +/* + * The purpose of this example is to implement Pollard's rho + * algorithm to find non-trivial factors of a composite natural + * number. + * The prime numbers decomposition of the natural number is + * recovered through repeated Pollard's rho. Primality checking + * is performed using a Miller-Rabin test. + * + * WARNING: the code in this example is only here to illustrate + * how to use the NN layer API. This code has not been designed + * for production purposes (e.g. no effort has been made to make + * it constant time). + * + * + */ + +/* We include the NN layer API header */ +#include + +/* Declare our Miller-Rabin test implemented + * in another module. + */ +ATTRIBUTE_WARN_UNUSED_RET int miller_rabin(nn_src_t n, const unsigned int t, int *check); + +ATTRIBUTE_WARN_UNUSED_RET int pollard_rho(nn_t d, nn_src_t n, const word_t c); +/* Pollard's rho main function, as described in + * "Handbook of Applied Cryptography". + * + * Pollard's rho: + * ============== + * See "Handbook of Applied Cryptography", alorithm 3.9: + * + * Algorithm Pollard’s rho algorithm for factoring integers + * INPUT: a composite integer n that is not a prime power. + * OUTPUT: a non-trivial factor d of n. + * 1. Set a←2, b←2. + * 2. For i = 1, 2, ... do the following: + * 2.1 Compute a←a^2 + 1 mod n, b←b^2 + 1 mod n, b←b^2 + 1 mod n. + * 2.2 Compute d = gcd(a − b, n). + * 2.3 If 1 < d < n then return(d) and terminate with success. + * 2.4 If d = n then terminate the algorithm with failure (see Note 3.12). + */ +int pollard_rho(nn_t d, nn_src_t n, const word_t c) +{ + int ret, cmp, cmp1, cmp2; + /* Temporary a and b variables */ + nn a, b, tmp, one, c_bignum; + a.magic = b.magic = tmp.magic = one.magic = c_bignum.magic = WORD(0); + + /* Initialize variables */ + ret = nn_init(&a, 0); EG(ret, err); + ret = nn_init(&b, 0); EG(ret, err); + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_init(&one, 0); EG(ret, err); + ret = nn_init(&c_bignum, 0); EG(ret, err); + ret = nn_init(d, 0); EG(ret, err); + + MUST_HAVE((c > 0), ret, err); + + /* Zeroize the output */ + ret = nn_zero(d); EG(ret, err); + ret = nn_one(&one); EG(ret, err); + /* 1. Set a←2, b←2. */ + ret = nn_set_word_value(&a, WORD(2)); EG(ret, err); + ret = nn_set_word_value(&b, WORD(2)); EG(ret, err); + ret = nn_set_word_value(&c_bignum, c); EG(ret, err); + + /* For i = 1, 2, . . . do the following: */ + while (1) { + int sign; + /* 2.1 Compute a←a^2 + c mod n */ + ret = nn_sqr(&a, &a); EG(ret, err); + ret = nn_add(&a, &a, &c_bignum); EG(ret, err); + ret = nn_mod(&a, &a, n); EG(ret, err); + /* 2.1 Compute b←b^2 + c mod n twice in a row */ + ret = nn_sqr(&b, &b); EG(ret, err); + ret = nn_add(&b, &b, &c_bignum); EG(ret, err); + ret = nn_mod(&b, &b, n); EG(ret, err); + ret = nn_sqr(&b, &b); EG(ret, err); + ret = nn_add(&b, &b, &c_bignum); EG(ret, err); + ret = nn_mod(&b, &b, n); EG(ret, err); + /* 2.2 Compute d = gcd(a − b, n) */ + ret = nn_cmp(&a, &b, &cmp); EG(ret, err); + if (cmp >= 0) { + ret = nn_sub(&tmp, &a, &b); EG(ret, err); + } else { + ret = nn_sub(&tmp, &b, &a); EG(ret, err); + } + ret = nn_gcd(d, &tmp, n, &sign); EG(ret, err); + ret = nn_cmp(d, n, &cmp1); EG(ret, err); + ret = nn_cmp(d, &one, &cmp2); EG(ret, err); + if ((cmp1 < 0) && (cmp2 > 0)) { + ret = 0; + goto err; + } + ret = nn_cmp(d, n, &cmp); EG(ret, err); + if (cmp == 0) { + ret = -1; + goto err; + } + } + err: + /* Uninitialize local variables */ + nn_uninit(&a); + nn_uninit(&b); + nn_uninit(&tmp); + nn_uninit(&one); + nn_uninit(&c_bignum); + + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int find_divisors(nn_src_t in); +/* Maximum number of divisors we support */ +#define MAX_DIVISORS 10 +/* Function to find prime divisors of the NN input */ +int find_divisors(nn_src_t in) +{ + int n_divisors_found, i, found, ret, check, cmp; + nn n; + nn divisors[MAX_DIVISORS]; + word_t c; + + n.magic = WORD(0); + for(i = 0; i < MAX_DIVISORS; i++){ + divisors[i].magic = WORD(0); + } + + ret = nn_check_initialized(in); EG(ret, err); + + ext_printf("=================\n"); + nn_print("Finding factors of:", in); + + /* First, check primality of the input */ + ret = miller_rabin(in, 10, &check); EG(ret, err); + if (check) { + ext_printf("The number is probably prime, leaving ...\n"); + ret = -1; + goto err; + } + ext_printf("The number is composite, performing Pollard's rho\n"); + + ret = nn_init(&n, 0); EG(ret, err); + ret = nn_copy(&n, in); EG(ret, err); + for (i = 0; i < MAX_DIVISORS; i++) { + ret = nn_init(&(divisors[i]), 0); EG(ret, err); + } + + n_divisors_found = 0; + c = 0; + while (1) { + c++; + ret = pollard_rho(&(divisors[n_divisors_found]), &n, c); + if (ret) { + continue; + } + found = 0; + for (i = 0; i < n_divisors_found; i++) { + ret = nn_cmp(&(divisors[n_divisors_found]), &(divisors[i]), &cmp); EG(ret, err); + if (cmp == 0) { + found = 1; + } + } + if (found == 0) { + nn q, r; + ret = nn_init(&q, 0); EG(ret, err); + ret = nn_init(&r, 0); EG(ret, err); + ext_printf("Pollard's rho succeded\n"); + nn_print("d:", &(divisors[n_divisors_found])); + /* + * Now we can launch the algorithm again on n / d + * to find new divisors. If n / d is prime, we are done! + */ + ret = nn_divrem(&q, &r, &n, &(divisors[n_divisors_found])); EG(ret, err); + /* + * Check n / d primality with Miller-Rabin (security + * parameter of 10) + */ + ret = miller_rabin(&q, 10, &check); EG(ret, err); + if (check == 1) { + nn_print("Last divisor is prime:", &q); + nn_uninit(&q); + nn_uninit(&r); + break; + } + nn_print("Now performing Pollard's rho on:", &q); + ret = nn_copy(&n, &q); EG(ret, err); + nn_uninit(&q); + nn_uninit(&r); + c = 0; + n_divisors_found++; + if (n_divisors_found == MAX_DIVISORS) { + ext_printf + ("Max divisors reached, leaving ...\n"); + break; + } + } + } + ret = 0; + +err: + ext_printf("=================\n"); + nn_uninit(&n); + for (i = 0; i < MAX_DIVISORS; i++) { + nn_uninit(&(divisors[i])); + } + return ret; +} + +#ifdef NN_EXAMPLE +int main(int argc, char *argv[]) +{ + int ret; + + /* Fermat F5 = 2^32 + 1 = 641 x 6700417 */ + const unsigned char fermat_F5[] = { 0x01, 0x00, 0x00, 0x00, 0x01 }; + /* Fermat F6 = 2^64 + 1 = 274177 x 67280421310721 */ + const unsigned char fermat_F6[] = + { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }; + nn n; + n.magic = WORD(0); + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + ret = nn_init(&n, 0); EG(ret, err); + /* Execute factorization on F5 */ + ret = nn_init_from_buf(&n, fermat_F5, sizeof(fermat_F5)); EG(ret, err); + ret = find_divisors(&n); EG(ret, err); + /* Execute factorization on F6 */ + ret = nn_init_from_buf(&n, fermat_F6, sizeof(fermat_F6)); EG(ret, err); + ret = find_divisors(&n); EG(ret, err); + /* Execute factorization on a random 80 bits number */ + ret = nn_one(&n); EG(ret, err); + /* Compute 2**80 = 0x1 << 80 */ + ret = nn_lshift(&n, &n, 80); EG(ret, err); + ret = nn_get_random_mod(&n, &n); EG(ret, err); + ret = find_divisors(&n); EG(ret, err); + + return 0; +err: + return -1; +} +#endif diff --git a/crypto/libecc/src/examples/hash/Makefile b/crypto/libecc/src/examples/hash/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/Makefile @@ -0,0 +1,37 @@ +ROOT_DIR=../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +HASHES = gostr34_11_94.c md2.c md4.c md5.c mdc2.c sha0.c sha1.c tdes.c + +all: libhash.a _hash +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: libhash.a _hash_dyn +endif + +libhash.a: $(HASHES) hash.c + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(LIB_CFLAGS) $(HASHES) hash.c -c + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(AR) $(AR_FLAGS) libhash.a *.o + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(RANLIB) $(RANLIB_FLAGS) libhash.a + +_hash: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DHASH $(HASHES) hash.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBSIGN) -o hash + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +_hash_dyn: _libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DHASH $(HASHES) hash.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBEC) -L$(BUILD_DIR) -lsign -o hash_dyn +endif + + +clean: + @rm -f *.o libhash.a hash + @rm -f *.o libhash.a hash_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/hash/gostr34_11_94.h b/crypto/libecc/src/examples/hash/gostr34_11_94.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/gostr34_11_94.h @@ -0,0 +1,193 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __GOSTR34_11_94_H__ +#define __GOSTR34_11_94_H__ + +/* Include libec for useful types and macros */ +#include + +/****************************************************/ +/* + * 32-bit integer manipulation macros + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros + */ +#ifndef GET_UINT64_BE +#define GET_UINT64_BE(n,b,i) \ +do { \ + (n) = ( ((u64) (b)[(i) ]) << 56 ) \ + | ( ((u64) (b)[(i) + 1]) << 48 ) \ + | ( ((u64) (b)[(i) + 2]) << 40 ) \ + | ( ((u64) (b)[(i) + 3]) << 32 ) \ + | ( ((u64) (b)[(i) + 4]) << 24 ) \ + | ( ((u64) (b)[(i) + 5]) << 16 ) \ + | ( ((u64) (b)[(i) + 6]) << 8 ) \ + | ( ((u64) (b)[(i) + 7]) ); \ +} while( 0 ) +#endif /* GET_UINT64_BE */ + +#ifndef GET_UINT64_LE +#define GET_UINT64_LE(n,b,i) \ +do { \ + (n) = ( ((u64) (b)[(i) + 7]) << 56 ) \ + | ( ((u64) (b)[(i) + 6]) << 48 ) \ + | ( ((u64) (b)[(i) + 5]) << 40 ) \ + | ( ((u64) (b)[(i) + 4]) << 32 ) \ + | ( ((u64) (b)[(i) + 3]) << 24 ) \ + | ( ((u64) (b)[(i) + 2]) << 16 ) \ + | ( ((u64) (b)[(i) + 1]) << 8 ) \ + | ( ((u64) (b)[(i) ]) ); \ +} while( 0 ) +#endif /* GET_UINT64_LE */ + +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +#define GOSTR34_11_94_STATE_SIZE 4 +#define GOSTR34_11_94_BLOCK_SIZE 32 +#define GOSTR34_11_94_DIGEST_SIZE 32 +#define GOSTR34_11_94_DIGEST_SIZE_BITS 256 + +#define GOSTR34_11_94_HASH_MAGIC ((word_t)(0x1262734139734143ULL)) +#define GOSTR34_11_94_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == GOSTR34_11_94_HASH_MAGIC), ret, err) + +#define ROTL_GOSTR34_11_94(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +/* All the inner operations */ + +typedef enum { + GOST34_11_94_NORM = 0, + GOST34_11_94_RFC4357 = 1, +} gostr34_11_94_type; + +typedef struct { + /* "Type" of GOST, changing the SBOX to use */ + gostr34_11_94_type gostr34_11_94_t; + /* Number of bytes processed */ + u64 gostr34_11_94_total; + /* Internal state: 4 64-bit values */ + u64 gostr34_11_94_state[GOSTR34_11_94_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 gostr34_11_94_buffer[GOSTR34_11_94_BLOCK_SIZE]; + /* The sum */ + u64 gostr34_11_94_sum[GOSTR34_11_94_STATE_SIZE]; + /* Initialization magic value */ + word_t magic; +} gostr34_11_94_context; + + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_init(gostr34_11_94_context *ctx); + +/* Function to modify the initial IV as it is not imposed by the RFCs */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_set_iv(gostr34_11_94_context *ctx, const u64 iv[GOSTR34_11_94_STATE_SIZE]); + +/* Function to modify the GOST type (that will dictate the underlying SBOX to use for block encryption) */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_set_type(gostr34_11_94_context *ctx, gostr34_11_94_type type); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_update(gostr34_11_94_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_final(gostr34_11_94_context *ctx, u8 output[GOSTR34_11_94_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_scattered(const u8 **inputs, const u32 *ilens, + u8 output[GOSTR34_11_94_DIGEST_SIZE], gostr34_11_94_type type); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_scattered_norm(const u8 **inputs, const u32 *ilens, + u8 output[GOSTR34_11_94_DIGEST_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_scattered_rfc4357(const u8 **inputs, const u32 *ilens, + u8 output[GOSTR34_11_94_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94(const u8 *input, u32 ilen, u8 output[GOSTR34_11_94_DIGEST_SIZE], gostr34_11_94_type type); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_norm(const u8 *input, u32 ilen, u8 output[GOSTR34_11_94_DIGEST_SIZE]); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_rfc4357(const u8 *input, u32 ilen, u8 output[GOSTR34_11_94_DIGEST_SIZE]); + +#endif /* __GOSTR34_11_94_H__ */ diff --git a/crypto/libecc/src/examples/hash/gostr34_11_94.c b/crypto/libecc/src/examples/hash/gostr34_11_94.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/gostr34_11_94.c @@ -0,0 +1,631 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "gostr34_11_94.h" + +/* The 8 4-bit GOST block cipher encryption SBOX */ +static const u8 gostr34_11_94_sbox_norm[8][16] = +{ + { 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3 }, + { 14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9 }, + { 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11 }, + { 7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3 }, + { 6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2 }, + { 4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14 }, + { 13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12 }, + { 1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12 } +}; + +static const u8 gostr34_11_94_sbox_rfc4357[8][16] = +{ + { 10, 4, 5, 6, 8, 1, 3, 7, 13, 12, 14, 0, 9, 2, 11, 15}, + { 5, 15, 4, 0, 2, 13, 11, 9, 1, 7, 6, 3, 12, 14, 10, 8}, + { 7, 15, 12, 14, 9, 4, 1, 0, 3, 11, 5, 2, 6, 10, 8, 13}, + { 4, 10, 7, 12, 0, 15, 2, 8, 14, 1, 6, 5, 13, 11, 9, 3}, + { 7, 6, 4, 11, 9, 12, 2, 10, 1, 8, 0, 14, 15, 13, 3, 5}, + { 7, 6, 2, 4, 13, 9, 15, 0, 10, 1, 5, 11, 8, 14, 12, 3}, + { 13, 14, 4, 1, 7, 0, 5, 10, 3, 12, 8, 15, 6, 2, 9, 11}, + { 1, 3, 10, 9, 5, 11, 4, 15, 8, 6, 7, 14, 13, 0, 2, 12} +}; + + +/* Endianness handling */ +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_arch_is_big_endian(void) +{ + const u16 val = 0x0102; + const u8 *buf = (const u8 *)(&val); + + return (buf[0] == 0x01); +} + +/* A and P linear transformations */ +static inline void gostr34_11_94_A(const u64 Y[GOSTR34_11_94_STATE_SIZE], u64 Y_[GOSTR34_11_94_STATE_SIZE]) +{ + u64 y1, y2, y3, y4; + + y1 = Y[3]; + y2 = Y[2]; + y3 = Y[1]; + y4 = Y[0]; + + Y_[0] = (y1 ^ y2); + Y_[1] = y4; + Y_[2] = y3; + Y_[3] = y2; + + return; +} + +static inline void gostr34_11_94_P(const u64 Y[GOSTR34_11_94_STATE_SIZE], u64 Y_[GOSTR34_11_94_STATE_SIZE]) +{ + unsigned int i, k; + + const u8 *y = (const u8*)Y; + u8 *y_ = (u8*)Y_; + + for(i = 0; i < 4; i++){ + for(k = 1; k < 9; k++){ + unsigned int phi_idx = (8 * GOSTR34_11_94_STATE_SIZE) - (i + (4 * (k - 1))); + unsigned int phi = ((8 * i) + k); + y_[phi_idx - 1] = y[phi - 1]; + } + } + return; +} + +/* GOSTR34_11_94 key generation constants */ +static const u64 gostr34_11_94_C[3][GOSTR34_11_94_STATE_SIZE] = { + { 0, 0, 0, 0 }, + { 0xff000000ffff00ffULL, 0x00ffff00ff0000ffULL, 0xff00ff00ff00ff00ULL, 0x00ff00ff00ff00ffULL }, + { 0, 0, 0, 0 }, +}; + +/* GOSTR34_11_94 key generation */ +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_key_generation(const u64 H[GOSTR34_11_94_STATE_SIZE], const u64 M[GOSTR34_11_94_STATE_SIZE], u64 K[4][GOSTR34_11_94_STATE_SIZE]) +{ + /* U, V, W */ + u64 U[GOSTR34_11_94_STATE_SIZE], V[GOSTR34_11_94_STATE_SIZE], W[GOSTR34_11_94_STATE_SIZE]; + unsigned int i, j; + int ret; + + /* U = H */ + ret = local_memcpy(U, H, sizeof(U)); EG(ret, err); + /* V = M */ + ret = local_memcpy(V, M, sizeof(V)); EG(ret, err); + /* W = U ^ V */ + for(j = 0; j < GOSTR34_11_94_STATE_SIZE; j++){ + W[j] = (U[j] ^ V[j]); + } + /* K1 = P(W) */ + gostr34_11_94_P(W, K[0]); + + for(i = 1; i < 4; i++){ + /* U = A(U) ^ C */ + gostr34_11_94_A(U, U); + for(j = 0; j < GOSTR34_11_94_STATE_SIZE; j++){ + u64 C; + GET_UINT64_LE(C, (const u8*)&gostr34_11_94_C[i - 1][j], 0); + U[j] = (u64)(U[j] ^ C); + } + /* V = A(A(V)) */ + gostr34_11_94_A(V, V); + gostr34_11_94_A(V, V); + /* W = U ^ V */ + for(j = 0; j < GOSTR34_11_94_STATE_SIZE; j++){ + W[j] = (u64)(U[j] ^ V[j]); + } + /* Ki = P(W) */ + gostr34_11_94_P(W, K[i]); + } + + ret = 0; + +err: + return ret; +} + +/* GOSTR34_11_94 state encryption */ +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_block_encryption(const u64 K[GOSTR34_11_94_STATE_SIZE], const u64 P, u64 *E, const u8 sbox[8][16]) +{ + int ret; + unsigned int round, i; + u32 R_i, L_i, R_i1 = 0, L_i1 = 0; + const u8 *p = (const u8*)&P; + u8 *e = (u8*)E; + + MUST_HAVE((K != NULL) && (sbox != NULL) && (E != NULL), ret, err); + + /* The encryption is a Feistel network */ + GET_UINT32_BE(L_i, p, 0); + GET_UINT32_BE(R_i, p, 4); + for(round = 0; round < 32; round++){ + u32 sk; + const u8 *k = (const u8*)K; + u8 *r_i1 = (u8 *)&R_i1; + + /* Key schedule */ + if(round < 24){ + GET_UINT32_LE(sk, k, (4 * (round % 8))); + } + else{ + GET_UINT32_LE(sk, k, (4 * (7 - (round % 8)))); + } + /*** Feistel round ***/ + R_i1 = (u32)(R_i + sk); /* add round key */ + /* SBox layer */ + for(i = 0; i < 4; i++){ + unsigned int sb_idx; + if(gostr34_11_94_arch_is_big_endian()){ + sb_idx = (2 * (3 - i)); + } + else{ + sb_idx = (2 * i); + } + r_i1[i] = (u8)((sbox[sb_idx + 1][(r_i1[i] & 0xf0) >> 4] << 4) | (sbox[sb_idx][(r_i1[i] & 0x0f)])); + } + /* Rotation by 11 and XOR with L */ + R_i1 = (u32)(ROTL_GOSTR34_11_94(R_i1, 11) ^ L_i); + /* Feistel */ + L_i1 = R_i; + /* Next round */ + R_i = R_i1; + L_i = L_i1; + } + /* Output */ + PUT_UINT32_LE(L_i1, e, 0); + PUT_UINT32_LE(R_i1, e, 4); + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_state_encryption(const u64 K[4][GOSTR34_11_94_STATE_SIZE], const u64 H[GOSTR34_11_94_STATE_SIZE], u64 S[GOSTR34_11_94_STATE_SIZE], const u8 sbox[8][16]) +{ + int ret; + + + MUST_HAVE((GOSTR34_11_94_STATE_SIZE == 4), ret, err); + /* Return S = s4 s3 s2 s1 */ + /* s1 = E(h1, K1) */ + ret = gostr34_11_94_block_encryption(K[0], H[3], &S[0], sbox); EG(ret, err); + /* s2 = E(h2, K2) */ + ret = gostr34_11_94_block_encryption(K[1], H[2], &S[1], sbox); EG(ret, err); + /* s3 = E(h3, K3) */ + ret = gostr34_11_94_block_encryption(K[2], H[1], &S[2], sbox); EG(ret, err); + /* s4 = E(h4, K4) */ + ret = gostr34_11_94_block_encryption(K[3], H[0], &S[3], sbox); EG(ret, err); + + ret = 0; + +err: + return ret; +} + +/* + * NOTE: we use a somehow "artificial" union here in order to deal with + * possible alignment issues in the gostr34_11_94_state_psi function + * (as we have to interpret an array of 4 u64 into an array of 16 u16 + * in order to apply our Psi function). + */ +typedef union { + u64 A[GOSTR34_11_94_STATE_SIZE]; + u16 B[16]; +} gostr34_11_94_union; + +/* GOSTR34_11_94 output transformation */ +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_state_psi(const u64 G[GOSTR34_11_94_STATE_SIZE], u64 G_[GOSTR34_11_94_STATE_SIZE]) +{ + int ret; + unsigned int i; + /* Use our unions in order to deal with alignment issues + * (see the rationale above). + */ + gostr34_11_94_union G_copy; + gostr34_11_94_union *g = &G_copy; + gostr34_11_94_union *g_ = (gostr34_11_94_union*)G_; + + /* Better safe than sorry ... */ + MUST_HAVE((sizeof(gostr34_11_94_union) == (sizeof(u64) * GOSTR34_11_94_STATE_SIZE)), ret, err); + + /* Copy input */ + ret = local_memcpy(g, G, sizeof(gostr34_11_94_union)); EG(ret, err); + + /* ψ(Γ) = (γ0 ⊕ γ1 ⊕ γ2 ⊕ γ3 ⊕ γ12 ⊕ γ15) γ15 γ14 · · · γ1 + * where Γ is split into sixteen 16-bit words, i.e. Γ = γ15 γ14 · · · γ0. + */ + for(i = 0; i < 15; i++){ + g_->B[i] = g->B[i + 1]; + } + g_->B[15] = (u16)((g->B[0]) ^ (g->B[1]) ^ (g->B[2]) ^ (g->B[3]) ^ (g->B[12]) ^ (g->B[15])); + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_state_output_transform(const u64 H[GOSTR34_11_94_STATE_SIZE], const u64 S[GOSTR34_11_94_STATE_SIZE], const u64 M[GOSTR34_11_94_STATE_SIZE], u64 H_[GOSTR34_11_94_STATE_SIZE]) +{ + unsigned int i; + int ret; + + /* Compute psi^12 of S */ + ret = local_memcpy(H_, S, GOSTR34_11_94_STATE_SIZE * sizeof(u64)); EG(ret, err); + for(i = 0; i < 12; i++){ + ret = gostr34_11_94_state_psi(H_, H_); EG(ret, err); + } + /* Compute M xor psi^12 */ + for(i = 0; i < GOSTR34_11_94_STATE_SIZE; i++){ + u64 m; + if(gostr34_11_94_arch_is_big_endian()){ + GET_UINT64_LE(m, (const u8*)&M[GOSTR34_11_94_STATE_SIZE - i - 1], 0); + } + else{ + GET_UINT64_BE(m, (const u8*)&M[GOSTR34_11_94_STATE_SIZE - i - 1], 0); + } + H_[i] = (u64)(H_[i] ^ m); + } + ret = gostr34_11_94_state_psi(H_, H_); EG(ret, err); + /* Xor it with H */ + for(i = 0; i < GOSTR34_11_94_STATE_SIZE; i++){ + u64 h; + if(gostr34_11_94_arch_is_big_endian()){ + GET_UINT64_LE(h, (const u8*)&H[GOSTR34_11_94_STATE_SIZE - i - 1], 0); + } + else{ + GET_UINT64_BE(h, (const u8*)&H[GOSTR34_11_94_STATE_SIZE - i - 1], 0); + } + H_[i] = (u64)(H_[i] ^ h); + } + /* Now compute psi^61 */ + for(i = 0; i < 61; i++){ + ret = gostr34_11_94_state_psi(H_, H_); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* GOSTR34_11_94 256-bit words summing (a simple adder with carry in constant time) */ +static inline void gostr34_11_94_256bit_sum(const u64 A[GOSTR34_11_94_STATE_SIZE], const u64 B[GOSTR34_11_94_STATE_SIZE], u64 C[GOSTR34_11_94_STATE_SIZE]) +{ + unsigned int i; + u64 tmp, carry1, carry2, _carry; + + _carry = 0; + for(i = 0; i < GOSTR34_11_94_STATE_SIZE; i++){ + u64 a, b, c; + unsigned int idx = (GOSTR34_11_94_STATE_SIZE - i - 1); + GET_UINT64_BE(a, (const u8*)(&A[idx]), 0); + GET_UINT64_BE(b, (const u8*)(&B[idx]), 0); + tmp = (u64)(a + b); + carry1 = (u64)(tmp < a); + c = (u64)(tmp + _carry); + carry2 = (u64)(c < tmp); + _carry = (u64)(carry1 | carry2); + PUT_UINT64_BE(c, (u8*)(&C[idx]), 0); + } + + return; +} + +/* GOSTR34_11_94 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int gostr34_11_94_process(gostr34_11_94_context *ctx, + const u8 data[GOSTR34_11_94_BLOCK_SIZE]) +{ + int ret; + unsigned int i; + u64 K[4][GOSTR34_11_94_STATE_SIZE]; + u64 H[GOSTR34_11_94_STATE_SIZE], S[GOSTR34_11_94_STATE_SIZE], M[GOSTR34_11_94_STATE_SIZE]; + + MUST_HAVE((data != NULL), ret, err); + GOSTR34_11_94_HASH_CHECK_INITIALIZED(ctx, ret, err); + /* Get our local data in little endian format */ + for(i = 0; i < GOSTR34_11_94_BLOCK_SIZE; i++){ + ((u8*)M)[i] = data[GOSTR34_11_94_BLOCK_SIZE - i - 1]; + } + /* Get the saved state */ + for(i = 0; i < GOSTR34_11_94_BLOCK_SIZE; i++){ + ((u8*)H)[i] = ((u8*)ctx->gostr34_11_94_state)[GOSTR34_11_94_BLOCK_SIZE - i - 1]; + } + + /* Key generation */ + ret = gostr34_11_94_key_generation(H, M, K); EG(ret, err); + /* State encryption */ + switch(ctx->gostr34_11_94_t){ + case GOST34_11_94_NORM:{ + ret = gostr34_11_94_state_encryption((const u64 (*)[4])K, H, S, gostr34_11_94_sbox_norm); EG(ret, err); + break; + } + case GOST34_11_94_RFC4357:{ + ret = gostr34_11_94_state_encryption((const u64 (*)[4])K, H, S, gostr34_11_94_sbox_rfc4357); EG(ret, err); + break; + } + default:{ + ret = -1; + goto err; + } + } + /* Output transformation */ + ret = gostr34_11_94_state_output_transform(H, S, M, ctx->gostr34_11_94_state); EG(ret, err); + /* Update the internal sum */ + gostr34_11_94_256bit_sum(ctx->gostr34_11_94_sum, M, ctx->gostr34_11_94_sum); + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_init(gostr34_11_94_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((GOSTR34_11_94_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->gostr34_11_94_total = 0; + ctx->gostr34_11_94_state[0] = 0; + ctx->gostr34_11_94_state[1] = 0; + ctx->gostr34_11_94_state[2] = 0; + ctx->gostr34_11_94_state[3] = 0; + + ret = local_memset(ctx->gostr34_11_94_sum, 0, sizeof(ctx->gostr34_11_94_sum)); EG(ret, err); + + /* Our default GOST34_11_94 type is GOST34_11_94_NORM */ + ctx->gostr34_11_94_t = GOST34_11_94_NORM; + + /* Tell that we are initialized */ + ctx->magic = GOSTR34_11_94_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Function to modify the initial IV as it is not imposed by the RFCs */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_set_iv(gostr34_11_94_context *ctx, const u64 iv[GOSTR34_11_94_STATE_SIZE]) +{ + int ret; + + MUST_HAVE((iv != NULL), ret, err); + GOSTR34_11_94_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* We cannot change the IV after the first update */ + MUST_HAVE((ctx->gostr34_11_94_total == 0), ret, err); + + ctx->gostr34_11_94_state[0] = iv[0]; + ctx->gostr34_11_94_state[1] = iv[1]; + ctx->gostr34_11_94_state[2] = iv[2]; + ctx->gostr34_11_94_state[3] = iv[3]; + + ret = 0; + +err: + return ret; +} + +/* Function to modify the GOST type (that will dictate the underlying SBOX to use for block encryption) */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_set_type(gostr34_11_94_context *ctx, gostr34_11_94_type type) +{ + int ret; + + GOSTR34_11_94_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* We cannot change the algorithm type after the first update */ + MUST_HAVE((ctx->gostr34_11_94_total == 0), ret, err); + + if((type != GOST34_11_94_NORM) && (type != GOST34_11_94_RFC4357)){ + ret = -1; + goto err; + } + + ctx->gostr34_11_94_t = type; + + ret = 0; + +err: + return ret; +} + + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_update(gostr34_11_94_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + GOSTR34_11_94_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->gostr34_11_94_total & 0x3F); + fill = (u16)(GOSTR34_11_94_BLOCK_SIZE - left); + + ctx->gostr34_11_94_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->gostr34_11_94_buffer + left, data_ptr, fill); EG(ret, err); + ret = gostr34_11_94_process(ctx, ctx->gostr34_11_94_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= GOSTR34_11_94_BLOCK_SIZE) { + ret = gostr34_11_94_process(ctx, data_ptr); EG(ret, err); + data_ptr += GOSTR34_11_94_BLOCK_SIZE; + remain_ilen -= GOSTR34_11_94_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->gostr34_11_94_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_final(gostr34_11_94_context *ctx, u8 output[GOSTR34_11_94_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * GOSTR34_11_94_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + GOSTR34_11_94_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* This is our final step, so we proceed with the padding if necessary */ + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + block_present = ctx->gostr34_11_94_total % GOSTR34_11_94_BLOCK_SIZE; + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->gostr34_11_94_buffer, + block_present); EG(ret, err); + + /* Put in the second block the size in bits of the message in bits in little endian */ + PUT_UINT64_LE(8 * ctx->gostr34_11_94_total, last_padded_block, GOSTR34_11_94_BLOCK_SIZE); + + if(block_present != 0){ + /* Process padding block if necessary */ + ret = gostr34_11_94_process(ctx, last_padded_block); EG(ret, err); + } + /* Copy our sum in the beginning of the block */ + if(gostr34_11_94_arch_is_big_endian()){ + PUT_UINT64_LE(ctx->gostr34_11_94_sum[3], last_padded_block, 0); + PUT_UINT64_LE(ctx->gostr34_11_94_sum[2], last_padded_block, 8); + PUT_UINT64_LE(ctx->gostr34_11_94_sum[1], last_padded_block, 16); + PUT_UINT64_LE(ctx->gostr34_11_94_sum[0], last_padded_block, 24); + } + else{ + PUT_UINT64_BE(ctx->gostr34_11_94_sum[3], last_padded_block, 0); + PUT_UINT64_BE(ctx->gostr34_11_94_sum[2], last_padded_block, 8); + PUT_UINT64_BE(ctx->gostr34_11_94_sum[1], last_padded_block, 16); + PUT_UINT64_BE(ctx->gostr34_11_94_sum[0], last_padded_block, 24); + } + + /* Process the "size" in bits block */ + ret = gostr34_11_94_process(ctx, last_padded_block + GOSTR34_11_94_BLOCK_SIZE); EG(ret, err); + /* Process the message blocks sum */ + ret = gostr34_11_94_process(ctx, last_padded_block); EG(ret, err); + + /* Output the hash result */ + if(gostr34_11_94_arch_is_big_endian()){ + PUT_UINT64_BE(ctx->gostr34_11_94_state[0], output, 0); + PUT_UINT64_BE(ctx->gostr34_11_94_state[1], output, 8); + PUT_UINT64_BE(ctx->gostr34_11_94_state[2], output, 16); + PUT_UINT64_BE(ctx->gostr34_11_94_state[3], output, 24); + } + else{ + PUT_UINT64_LE(ctx->gostr34_11_94_state[0], output, 0); + PUT_UINT64_LE(ctx->gostr34_11_94_state[1], output, 8); + PUT_UINT64_LE(ctx->gostr34_11_94_state[2], output, 16); + PUT_UINT64_LE(ctx->gostr34_11_94_state[3], output, 24); + } + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_scattered(const u8 **inputs, const u32 *ilens, + u8 output[GOSTR34_11_94_DIGEST_SIZE], gostr34_11_94_type type) +{ + gostr34_11_94_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = gostr34_11_94_init(&ctx); EG(ret, err); + ret = gostr34_11_94_set_type(&ctx, type); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = gostr34_11_94_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = gostr34_11_94_final(&ctx, output); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_scattered_norm(const u8 **inputs, const u32 *ilens, + u8 output[GOSTR34_11_94_DIGEST_SIZE]) +{ + return gostr34_11_94_scattered(inputs, ilens, output, GOST34_11_94_NORM); +} + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_scattered_rfc4357(const u8 **inputs, const u32 *ilens, + u8 output[GOSTR34_11_94_DIGEST_SIZE]) +{ + return gostr34_11_94_scattered(inputs, ilens, output, GOST34_11_94_RFC4357); +} + + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94(const u8 *input, u32 ilen, u8 output[GOSTR34_11_94_DIGEST_SIZE], gostr34_11_94_type type) +{ + gostr34_11_94_context ctx; + int ret; + + ret = gostr34_11_94_init(&ctx); EG(ret, err); + ret = gostr34_11_94_set_type(&ctx, type); EG(ret, err); + ret = gostr34_11_94_update(&ctx, input, ilen); EG(ret, err); + ret = gostr34_11_94_final(&ctx, output); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_norm(const u8 *input, u32 ilen, u8 output[GOSTR34_11_94_DIGEST_SIZE]) +{ + return gostr34_11_94(input, ilen, output, GOST34_11_94_NORM); +} + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_11_94_rfc4357(const u8 *input, u32 ilen, u8 output[GOSTR34_11_94_DIGEST_SIZE]) +{ + return gostr34_11_94(input, ilen, output, GOST34_11_94_RFC4357); +} diff --git a/crypto/libecc/src/examples/hash/hash.h b/crypto/libecc/src/examples/hash/hash.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/hash.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __HASH_HASH_H__ +#define __HASH_HASH_H__ + + +/* + * NOTE: we include libsig for the libecc + * hash algorithms. + */ +#include + +/* MD-2 */ +#include "md2.h" +/* MD-4 */ +#include "md4.h" +/* MD-5 */ +#include "md5.h" +/* SHA-0 */ +#include "sha0.h" +/* SHA-1 */ +#include "sha1.h" +/* MDC-2 */ +#include "mdc2.h" +/* GOSTR34-11-94 source code */ +#include "gostr34_11_94.h" + +/****************************************************/ +/****************************************************/ +/****************************************************/ +typedef enum { + /* libecc native hashes: we map our enum on them */ + HASH_UNKNOWN_HASH_ALG = UNKNOWN_HASH_ALG, + HASH_SHA224 = SHA224, + HASH_SHA256 = SHA256, + HASH_SHA384 = SHA384, + HASH_SHA512 = SHA512, + HASH_SHA512_224 = SHA512_224, + HASH_SHA512_256 = SHA512_256, + HASH_SHA3_224 = SHA3_224, + HASH_SHA3_256 = SHA3_256, + HASH_SHA3_384 = SHA3_384, + HASH_SHA3_512 = SHA3_512, + HASH_SM3 = SM3, + HASH_STREEBOG256 = STREEBOG256, + HASH_STREEBOG512 = STREEBOG512, + HASH_SHAKE256 = SHAKE256, + HASH_RIPEMD160 = RIPEMD160, + HASH_BELT_HASH = BELT_HASH, + HASH_BASH224 = BASH224, + HASH_BASH256 = BASH256, + HASH_BASH384 = BASH384, + HASH_BASH512 = BASH512, + /* Deprecated hash algorithms not supported by libecc + * (for security reasons). + * XXX: NOTE: These algorithms are here as a playground e.g. + * to test some backward compatibility of cryptographic cipher suites, + * please DO NOT use them in production code! + */ + HASH_MD2, + HASH_MD4, + HASH_MD5, + HASH_SHA0, + HASH_SHA1, + HASH_MDC2_PADDING1, + HASH_MDC2_PADDING2, + HASH_GOST34_11_94_NORM, + HASH_GOST34_11_94_RFC4357, +} gen_hash_alg_type; + +/* Our generic hash context */ +typedef union { + /* libecc native hashes */ + hash_context hctx; + /* MD2 */ + md2_context md2ctx; + /* MD4 */ + md4_context md4ctx; + /* MD5 */ + md5_context md5ctx; + /* SHA-0 */ + sha0_context sha0ctx; + /* SHA-1 */ + sha1_context sha1ctx; + /* MDC2 */ + mdc2_context mdc2ctx; + /* GOSTR34-11-94 */ + gostr34_11_94_context gostr34_11_94ctx; +} gen_hash_context; + +ATTRIBUTE_WARN_UNUSED_RET int gen_hash_get_hash_sizes(gen_hash_alg_type gen_hash_type, u8 *hlen, u8 *block_size); +ATTRIBUTE_WARN_UNUSED_RET int gen_hash_init(gen_hash_context *ctx, gen_hash_alg_type gen_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int gen_hash_update(gen_hash_context *ctx, const u8 *chunk, u32 chunklen, gen_hash_alg_type gen_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int gen_hash_final(gen_hash_context *ctx, u8 *output, gen_hash_alg_type gen_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int gen_hash_hfunc(const u8 *input, u32 ilen, u8 *digest, gen_hash_alg_type gen_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int gen_hash_hfunc_scattered(const u8 **input, const u32 *ilen, u8 *digest, gen_hash_alg_type gen_hash_type); + +#endif /* __HASH_HASH_H__ */ diff --git a/crypto/libecc/src/examples/hash/hash.c b/crypto/libecc/src/examples/hash/hash.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/hash.c @@ -0,0 +1,510 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "hash.h" + +/* Get a libecc hash type and mapping from a generic hash type */ +ATTRIBUTE_WARN_UNUSED_RET static int get_libecc_hash(gen_hash_alg_type gen_hash_type, hash_alg_type *hash_type, const hash_mapping **hm, u8 *hlen, u8 *block_size) +{ + int ret; + hash_alg_type htype = UNKNOWN_HASH_ALG; + + MUST_HAVE((hash_type != NULL) && (hm != NULL), ret, err); + + switch(gen_hash_type){ + case HASH_SHA224:{ +#ifdef WITH_HASH_SHA224 + htype = SHA224; +#endif + break; + } + case HASH_SHA256:{ +#ifdef WITH_HASH_SHA256 + htype = SHA256; +#endif + break; + } + case HASH_SHA384:{ +#ifdef WITH_HASH_SHA384 + htype = SHA384; +#endif + break; + } + case HASH_SHA512:{ +#ifdef WITH_HASH_SHA512 + htype = SHA512; +#endif + break; + } + case HASH_SHA512_224:{ +#ifdef WITH_HASH_SHA512_224 + htype = SHA512_224; +#endif + break; + } + case HASH_SHA512_256:{ +#ifdef WITH_HASH_SHA512_256 + htype = SHA512_256; +#endif + break; + } + case HASH_SHA3_224:{ +#ifdef WITH_HASH_SHA3_224 + htype = SHA3_224; +#endif + break; + } + case HASH_SHA3_256:{ +#ifdef WITH_HASH_SHA3_256 + htype = SHA3_256; +#endif + break; + } + case HASH_SHA3_384:{ +#ifdef WITH_HASH_SHA3_384 + htype = SHA3_384; +#endif + break; + } + case HASH_SHA3_512:{ +#ifdef WITH_HASH_SHA3_512 + htype = SHA3_512; +#endif + break; + } + case HASH_SM3:{ +#ifdef WITH_HASH_SM3 + htype = SM3; +#endif + break; + } + case HASH_STREEBOG256:{ +#ifdef WITH_HASH_STREEBOG256 + htype = STREEBOG256; +#endif + break; + } + case HASH_STREEBOG512:{ +#ifdef WITH_HASH_STREEBOG512 + htype = STREEBOG512; +#endif + break; + } + case HASH_SHAKE256:{ +#ifdef WITH_HASH_SHAKE256 + htype = SHAKE256; +#endif + break; + } + case HASH_RIPEMD160:{ +#ifdef WITH_HASH_RIPEMD160 + htype = RIPEMD160; +#endif + break; + } + case HASH_BELT_HASH:{ +#ifdef WITH_HASH_BELT_HASH + htype = BELT_HASH; +#endif + break; + } + case HASH_BASH224:{ +#ifdef WITH_HASH_BASH224 + htype = BASH224; +#endif + break; + } + case HASH_BASH256:{ +#ifdef WITH_HASH_BASH256 + htype = BASH256; +#endif + break; + } + case HASH_BASH384:{ +#ifdef WITH_HASH_BASH384 + htype = BASH384; +#endif + break; + } + case HASH_BASH512:{ +#ifdef WITH_HASH_BASH512 + htype = BASH512; +#endif + break; + } + + default:{ + htype = UNKNOWN_HASH_ALG; + break; + } + } + if(htype != UNKNOWN_HASH_ALG){ + (*hash_type) = htype; + ret = get_hash_by_type(htype, hm); EG(ret, err); + ret = get_hash_sizes(htype, hlen, block_size); EG(ret, err); + MUST_HAVE(((*hlen) <= MAX_DIGEST_SIZE), ret, err); + ret = 0; + } + else{ + ret = -1; + } + +err: + if(ret && (hm != NULL)){ + (*hm) = NULL; + } + if(ret && (hash_type != NULL)){ + (*hash_type) = UNKNOWN_HASH_ALG; + } + return ret; +} + +int gen_hash_get_hash_sizes(gen_hash_alg_type gen_hash_type, u8 *hlen, u8 *block_size) +{ + int ret; + + MUST_HAVE((hlen != NULL) && (block_size != NULL), ret, err); + + switch(gen_hash_type){ + case HASH_MD2:{ + (*hlen) = MD2_DIGEST_SIZE; + (*block_size) = MD2_BLOCK_SIZE; + ret = 0; + break; + } + case HASH_MD4:{ + (*hlen) = MD4_DIGEST_SIZE; + (*block_size) = MD4_BLOCK_SIZE; + ret = 0; + break; + } + case HASH_MD5:{ + (*hlen) = MD5_DIGEST_SIZE; + (*block_size) = MD5_BLOCK_SIZE; + ret = 0; + break; + } + case HASH_SHA0:{ + (*hlen) = SHA0_DIGEST_SIZE; + (*block_size) = SHA0_BLOCK_SIZE; + ret = 0; + break; + } + case HASH_SHA1:{ + (*hlen) = SHA1_DIGEST_SIZE; + (*block_size) = SHA1_BLOCK_SIZE; + ret = 0; + break; + } + case HASH_MDC2_PADDING1: + case HASH_MDC2_PADDING2:{ + (*hlen) = MDC2_DIGEST_SIZE; + (*block_size) = MDC2_BLOCK_SIZE; + ret = 0; + break; + } + case HASH_GOST34_11_94_NORM: + case HASH_GOST34_11_94_RFC4357:{ + (*hlen) = GOSTR34_11_94_DIGEST_SIZE; + (*block_size) = GOSTR34_11_94_BLOCK_SIZE; + ret = 0; + break; + } + /* The default case falls back to a genuine libecc hash function */ + default:{ + const hash_mapping *hm; + hash_alg_type hash_type; + ret = get_libecc_hash(gen_hash_type, &hash_type, &hm, hlen, block_size); EG(ret, err); + break; + } + } + +err: + return ret; +} + +int gen_hash_hfunc_scattered(const u8 **input, const u32 *ilen, u8 *digest, gen_hash_alg_type gen_hash_type) +{ + int ret; + + switch(gen_hash_type){ + case HASH_MD2:{ + ret = md2_scattered(input, ilen, digest); EG(ret, err); + break; + } + case HASH_MD4:{ + ret = md4_scattered(input, ilen, digest); EG(ret, err); + break; + } + case HASH_MD5:{ + ret = md5_scattered(input, ilen, digest); EG(ret, err); + break; + } + case HASH_SHA0:{ + ret = sha0_scattered(input, ilen, digest); EG(ret, err); + break; + } + case HASH_SHA1:{ + ret = sha1_scattered(input, ilen, digest); EG(ret, err); + break; + } + case HASH_MDC2_PADDING1:{ + ret = mdc2_scattered_padding1(input, ilen, digest); EG(ret, err); + break; + } + case HASH_MDC2_PADDING2:{ + ret = mdc2_scattered_padding2(input, ilen, digest); EG(ret, err); + break; + } + case HASH_GOST34_11_94_NORM:{ + ret = gostr34_11_94_scattered_norm(input, ilen, digest); EG(ret, err); + break; + } + case HASH_GOST34_11_94_RFC4357:{ + ret = gostr34_11_94_scattered_rfc4357(input, ilen, digest); EG(ret, err); + break; + } + /* The fallback should be libecc type */ + default:{ + const hash_mapping *hm; + hash_alg_type hash_type; + u8 hlen, block_size; + ret = get_libecc_hash(gen_hash_type, &hash_type, &hm, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + ret = hm->hfunc_scattered(input, ilen, digest); EG(ret, err); + break; + } + } + +err: + return ret; +} + +int gen_hash_hfunc(const u8 *input, u32 ilen, u8 *digest, gen_hash_alg_type gen_hash_type) +{ + const u8 *inputs[2] = { input, NULL }; + u32 ilens[2] = { ilen, 0 }; + + return gen_hash_hfunc_scattered(inputs, ilens, digest, gen_hash_type); +} + +int gen_hash_init(gen_hash_context *ctx, gen_hash_alg_type gen_hash_type) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + switch(gen_hash_type){ + case HASH_MD2:{ + ret = md2_init(&(ctx->md2ctx)); EG(ret, err); + break; + } + case HASH_MD4:{ + ret = md4_init(&(ctx->md4ctx)); EG(ret, err); + break; + } + case HASH_MD5:{ + ret = md5_init(&(ctx->md5ctx)); EG(ret, err); + break; + } + case HASH_SHA0:{ + ret = sha0_init(&(ctx->sha0ctx)); EG(ret, err); + break; + } + case HASH_SHA1:{ + ret = sha1_init(&(ctx->sha1ctx)); EG(ret, err); + break; + } + case HASH_MDC2_PADDING1:{ + ret = mdc2_init(&(ctx->mdc2ctx)); EG(ret, err); + ret = mdc2_set_padding_type(&(ctx->mdc2ctx), ISOIEC10118_TYPE1); EG(ret, err); + break; + } + case HASH_MDC2_PADDING2:{ + ret = mdc2_init(&(ctx->mdc2ctx)); EG(ret, err); + ret = mdc2_set_padding_type(&(ctx->mdc2ctx), ISOIEC10118_TYPE2); EG(ret, err); + break; + } + case HASH_GOST34_11_94_NORM:{ + ret = gostr34_11_94_init(&(ctx->gostr34_11_94ctx)); EG(ret, err); + ret = gostr34_11_94_set_type(&(ctx->gostr34_11_94ctx), GOST34_11_94_NORM); EG(ret, err); + break; + } + case HASH_GOST34_11_94_RFC4357:{ + ret = gostr34_11_94_init(&(ctx->gostr34_11_94ctx)); EG(ret, err); + ret = gostr34_11_94_set_type(&(ctx->gostr34_11_94ctx), GOST34_11_94_RFC4357); EG(ret, err); + break; + } + /* The fallback should be libecc type */ + default:{ + const hash_mapping *hm; + hash_alg_type hash_type; + u8 hlen, block_size; + ret = get_libecc_hash(gen_hash_type, &hash_type, &hm, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + ret = hm->hfunc_init(&(ctx->hctx)); EG(ret, err); + break; + } + } + +err: + return ret; +} + +int gen_hash_update(gen_hash_context *ctx, const u8 *chunk, u32 chunklen, gen_hash_alg_type gen_hash_type) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + switch(gen_hash_type){ + case HASH_MD2:{ + ret = md2_update(&(ctx->md2ctx), chunk, chunklen); EG(ret, err); + break; + } + case HASH_MD4:{ + ret = md4_update(&(ctx->md4ctx), chunk, chunklen); EG(ret, err); + break; + } + case HASH_MD5:{ + ret = md5_update(&(ctx->md5ctx), chunk, chunklen); EG(ret, err); + break; + } + case HASH_SHA0:{ + ret = sha0_update(&(ctx->sha0ctx), chunk, chunklen); EG(ret, err); + break; + } + case HASH_SHA1:{ + ret = sha1_update(&(ctx->sha1ctx), chunk, chunklen); EG(ret, err); + break; + } + case HASH_MDC2_PADDING1: + case HASH_MDC2_PADDING2:{ + ret = mdc2_update(&(ctx->mdc2ctx), chunk, chunklen); EG(ret, err); + break; + } + case HASH_GOST34_11_94_NORM: + case HASH_GOST34_11_94_RFC4357:{ + ret = gostr34_11_94_update(&(ctx->gostr34_11_94ctx), chunk, chunklen); EG(ret, err); + break; + } + /* The fallback should be libecc type */ + default:{ + const hash_mapping *hm; + hash_alg_type hash_type; + u8 hlen, block_size; + ret = get_libecc_hash(gen_hash_type, &hash_type, &hm, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + ret = hm->hfunc_update(&(ctx->hctx), chunk, chunklen); EG(ret, err); + break; + } + } + +err: + return ret; +} + +int gen_hash_final(gen_hash_context *ctx, u8 *output, gen_hash_alg_type gen_hash_type) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + switch(gen_hash_type){ + case HASH_MD2:{ + ret = md2_final(&(ctx->md2ctx), output); EG(ret, err); + break; + } + case HASH_MD4:{ + ret = md4_final(&(ctx->md4ctx), output); EG(ret, err); + break; + } + case HASH_MD5:{ + ret = md5_final(&(ctx->md5ctx), output); EG(ret, err); + break; + } + case HASH_SHA0:{ + ret = sha0_final(&(ctx->sha0ctx), output); EG(ret, err); + break; + } + case HASH_SHA1:{ + ret = sha1_final(&(ctx->sha1ctx), output); EG(ret, err); + break; + } + case HASH_MDC2_PADDING1: + case HASH_MDC2_PADDING2:{ + ret = mdc2_final(&(ctx->mdc2ctx), output); EG(ret, err); + break; + } + case HASH_GOST34_11_94_NORM: + case HASH_GOST34_11_94_RFC4357:{ + ret = gostr34_11_94_final(&(ctx->gostr34_11_94ctx), output); EG(ret, err); + break; + } + /* The fallback should be libecc type */ + default:{ + const hash_mapping *hm; + hash_alg_type hash_type; + u8 hlen, block_size; + ret = get_libecc_hash(gen_hash_type, &hash_type, &hm, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + ret = hm->hfunc_finalize(&(ctx->hctx), output); EG(ret, err); + break; + } + } + +err: + return ret; +} + +#ifdef HASH +#include +int main(int argc, char *argv[]) +{ + int ret = 0; + unsigned int i; + + const u8 input[] = "Now is the time for all "; + const u8 input2[] = "\x54\x68\x69\x73\x20\x69\x73\x20\x6D\x65\x73\x73\x61\x67\x65\x2C\x20\x6C\x65\x6E\x67\x74\x68\x3D\x33\x32\x20\x62\x79\x74\x65\x73"; + const u8 input3[] = ""; + const u8 input4[] = "Suppose the original message has length = 50 bytes"; + u8 input5[128]; + u8 output[32]; + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + ret = local_memset(input5, 0, sizeof(input5)); EG(ret, err); + + ret = gen_hash_hfunc(input, sizeof(input)-1, output, HASH_MDC2_PADDING1); EG(ret, err); + buf_print("mdc2 padding1", output, 16); + + ret = gen_hash_hfunc(input, sizeof(input)-1, output, HASH_MDC2_PADDING2); EG(ret, err); + buf_print("mdc2 padding2", output, 16); + + ret = gen_hash_hfunc(input2, sizeof(input2)-1, output, HASH_GOST34_11_94_NORM); EG(ret, err); + buf_print("gostr34_11_94 NORM", output, 32); + + ret = gen_hash_hfunc(input3, sizeof(input3)-1, output, HASH_GOST34_11_94_NORM); EG(ret, err); + buf_print("gostr34_11_94 NORM", output, 32); + + ret = gen_hash_hfunc(input4, sizeof(input4)-1, output, HASH_GOST34_11_94_NORM); EG(ret, err); + buf_print("gostr34_11_94 NORM", output, 32); + + for(i = 0; i < sizeof(input5); i++){ + input5[i] = 'U'; + } + ret = gen_hash_hfunc(input5, sizeof(input5), output, HASH_GOST34_11_94_NORM); EG(ret, err); + buf_print("gostr34_11_94 NORM", output, 32); + +err: + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/hash/md2.h b/crypto/libecc/src/examples/hash/md2.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/md2.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __MD2_H__ +#define __MD2_H__ + +/* Include libec for useful types and macros */ +#include + +#define MD2_STATE_SIZE 16 +#define MD2_BLOCK_SIZE 16 +#define MD2_DIGEST_SIZE 16 +#define MD2_DIGEST_SIZE_BITS 128 + +#define MD2_HASH_MAGIC ((word_t)(0x8432927137264770ULL)) +#define MD2_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == MD2_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 md2_total; + /* Internal state */ + u8 md2_state[MD2_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 md2_buffer[MD2_BLOCK_SIZE]; + /* Internal buffer to hold the checksum */ + u8 md2_checksum[MD2_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} md2_context; + + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int md2_init(md2_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int md2_update(md2_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int md2_final(md2_context *ctx, u8 output[MD2_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md2_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MD2_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md2(const u8 *input, u32 ilen, u8 output[MD2_DIGEST_SIZE]); + +#endif /* __MD2_H__ */ diff --git a/crypto/libecc/src/examples/hash/md2.c b/crypto/libecc/src/examples/hash/md2.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/md2.c @@ -0,0 +1,228 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "md2.h" + +/* All the inner MD-2 operations */ +static const u8 PI_SUBST[256] = { + 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, + 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, + 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, + 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, + 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, + 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, + 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, + 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, + 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, + 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, + 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, + 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, + 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, + 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, + 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, + 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, + 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, + 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 +}; + +/* MD-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int md2_process(md2_context *ctx, + const u8 data[MD2_BLOCK_SIZE]) +{ + int ret; + unsigned int i, j, t; + u8 x[3 * MD2_BLOCK_SIZE]; + + MUST_HAVE((data != NULL), ret, err); + MD2_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Form state, block, state ^ block */ + ret = local_memcpy(&x[0], ctx->md2_state, MD2_BLOCK_SIZE); EG(ret, err); + ret = local_memcpy(&x[MD2_BLOCK_SIZE], data, MD2_BLOCK_SIZE); EG(ret, err); + for(i = 0; i < MD2_BLOCK_SIZE; i++){ + x[(2 * MD2_BLOCK_SIZE) + i] = (ctx->md2_state[i] ^ data[i]); + } + /* Encrypt the block during 18 rounds */ + t = 0; + for(i = 0; i < 18; i++){ + for (j = 0; j < (3 * MD2_BLOCK_SIZE); j++){ + x[j] ^= PI_SUBST[t]; + t = x[j]; + } + t = (t + i) & 0xff; + } + /* Save the new state */ + ret = local_memcpy(ctx->md2_state, &x[0], MD2_BLOCK_SIZE); EG(ret, err); + /* Update the checksum */ + t = ctx->md2_checksum[MD2_BLOCK_SIZE - 1]; + for(i = 0; i < MD2_BLOCK_SIZE; i++){ + ctx->md2_checksum[i] ^= PI_SUBST[data[i] ^ t]; + t = ctx->md2_checksum[i]; + } + + /* Zeroize x as not needed anymore */ + ret = local_memset(x, 0, sizeof(x)); EG(ret, err); + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int md2_init(md2_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((MD2_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->md2_total = 0; + /* Zeroize the state */ + ret = local_memset(ctx->md2_state, 0, sizeof(ctx->md2_state)); EG(ret, err); + /* Zeroize the checksum */ + ret = local_memset(ctx->md2_checksum, 0, sizeof(ctx->md2_checksum)); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = MD2_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int md2_update(md2_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + MD2_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->md2_total & 0xF); + fill = (u16)(MD2_BLOCK_SIZE - left); + + ctx->md2_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->md2_buffer + left, data_ptr, fill); EG(ret, err); + ret = md2_process(ctx, ctx->md2_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= MD2_BLOCK_SIZE) { + ret = md2_process(ctx, data_ptr); EG(ret, err); + data_ptr += MD2_BLOCK_SIZE; + remain_ilen -= MD2_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->md2_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int md2_final(md2_context *ctx, u8 output[MD2_DIGEST_SIZE]) +{ + int ret; + unsigned int i; + u8 pad_byte; + + MUST_HAVE((output != NULL), ret, err); + MD2_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* This is our final step, so we proceed with the padding */ + pad_byte = (u8)(MD2_BLOCK_SIZE - (ctx->md2_total % MD2_BLOCK_SIZE)); + for(i = (ctx->md2_total % MD2_BLOCK_SIZE); i < MD2_BLOCK_SIZE; i++){ + ctx->md2_buffer[i] = pad_byte; + } + /* And process the block */ + ret = md2_process(ctx, ctx->md2_buffer); EG(ret, err); + + /* Also process the checksum */ + ret = md2_process(ctx, ctx->md2_checksum); EG(ret, err); + + /* Output the hash result */ + ret = local_memcpy(output, ctx->md2_state, MD2_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md2_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MD2_DIGEST_SIZE]) +{ + md2_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = md2_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = md2_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = md2_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md2(const u8 *input, u32 ilen, u8 output[MD2_DIGEST_SIZE]) +{ + md2_context ctx; + int ret; + + ret = md2_init(&ctx); EG(ret, err); + ret = md2_update(&ctx, input, ilen); EG(ret, err); + ret = md2_final(&ctx, output); + +err: + return ret; +} diff --git a/crypto/libecc/src/examples/hash/md4.h b/crypto/libecc/src/examples/hash/md4.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/md4.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __MD4_H__ + +/* Include libec for useful types and macros */ +#include + +/****************************************************/ +/* + * 32-bit integer manipulation macros + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros + */ +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +#define MD4_STATE_SIZE 4 +#define MD4_BLOCK_SIZE 64 +#define MD4_DIGEST_SIZE 16 +#define MD4_DIGEST_SIZE_BITS 128 + +#define MD4_HASH_MAGIC ((word_t)(0x4423955132399122ULL)) +#define MD4_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == MD4_HASH_MAGIC), ret, err) + +#define ROTL_MD4(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +typedef struct { + /* Number of bytes processed */ + u64 md4_total; + /* Internal state */ + u32 md4_state[MD4_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 md4_buffer[MD4_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} md4_context; + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int md4_init(md4_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int md4_update(md4_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int md4_final(md4_context *ctx, u8 output[MD4_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md4_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MD4_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md4(const u8 *input, u32 ilen, u8 output[MD4_DIGEST_SIZE]); + +#endif /* __MD4_H__ */ diff --git a/crypto/libecc/src/examples/hash/md4.c b/crypto/libecc/src/examples/hash/md4.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/md4.c @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "md4.h" + +/* All the inner MD-4 operations */ +static const u32 C1_MD4[13] = { + 0, 4, 8, 12, 0, 1, 2, 3, 3, 7, 11, 19, 0 +}; +static const u32 C2_MD4[13] = { + 0, 1, 2, 3, 0, 4, 8, 12, 3, 5, 9, 13, 0x5a827999 +}; +static const u32 C3_MD4[13] = { + 0, 2, 1, 3, 0, 8, 4, 12, 3, 9, 11, 15, 0x6ed9eba1 +}; + +#define F_MD4(x, y, z) (((x) & (y)) | ((~(x)) & (z))) +#define G_MD4(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) +#define H_MD4(x, y, z) ((x) ^ (y) ^ (z)) + +/* SHA-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int md4_process(md4_context *ctx, + const u8 data[MD4_BLOCK_SIZE]) +{ + u32 A, B, C, D; + u32 W[16]; + u32 idx; + int ret; + unsigned int i; + + MUST_HAVE((data != NULL), ret, err); + MD4_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + A = ctx->md4_state[0]; + B = ctx->md4_state[1]; + C = ctx->md4_state[2]; + D = ctx->md4_state[3]; + + /* Load data */ + for (i = 0; i < 16; i++) { + GET_UINT32_LE(W[i], data, (4 * i)); + } + /* Proceed with the compression */ + for (i = 0; i < 4; i++) { + idx = (C1_MD4[i] + C1_MD4[4]); + A = ROTL_MD4((A + F_MD4(B, C, D) + W[idx] + C1_MD4[12]), C1_MD4[8]); + idx = (C1_MD4[i] + C1_MD4[5]); + D = ROTL_MD4((D + F_MD4(A, B, C) + W[idx] + C1_MD4[12]), C1_MD4[9]); + idx = (C1_MD4[i] + C1_MD4[6]); + C = ROTL_MD4((C + F_MD4(D, A, B) + W[idx] + C1_MD4[12]), C1_MD4[10]); + idx = (C1_MD4[i] + C1_MD4[7]); + B = ROTL_MD4((B + F_MD4(C, D, A) + W[idx] + C1_MD4[12]), C1_MD4[11]); + } + for (i = 0; i < 4; i++) { + idx = (C2_MD4[i] + C2_MD4[4]); + A = ROTL_MD4((A + G_MD4(B, C, D) + W[idx] + C2_MD4[12]), C2_MD4[8]); + idx = (C2_MD4[i] + C2_MD4[5]); + D = ROTL_MD4((D + G_MD4(A, B, C) + W[idx] + C2_MD4[12]), C2_MD4[9]); + idx = (C2_MD4[i] + C2_MD4[6]); + C = ROTL_MD4((C + G_MD4(D, A, B) + W[idx] + C2_MD4[12]), C2_MD4[10]); + idx = (C2_MD4[i] + C2_MD4[7]); + B = ROTL_MD4((B + G_MD4(C, D, A) + W[idx] + C2_MD4[12]), C2_MD4[11]); + } + for (i = 0; i < 4; i++) { + idx = (C3_MD4[i] + C3_MD4[4]); + A = ROTL_MD4((A + H_MD4(B, C, D) + W[idx] + C3_MD4[12]), C3_MD4[8]); + idx = (C3_MD4[i] + C3_MD4[5]); + D = ROTL_MD4((D + H_MD4(A, B, C) + W[idx] + C3_MD4[12]), C3_MD4[9]); + idx = (C3_MD4[i] + C3_MD4[6]); + C = ROTL_MD4((C + H_MD4(D, A, B) + W[idx] + C3_MD4[12]), C3_MD4[10]); + idx = (C3_MD4[i] + C3_MD4[7]); + B = ROTL_MD4((B + H_MD4(C, D, A) + W[idx] + C3_MD4[12]), C3_MD4[11]); + } + + /* Update state */ + ctx->md4_state[0] += A; + ctx->md4_state[1] += B; + ctx->md4_state[2] += C; + ctx->md4_state[3] += D; + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int md4_init(md4_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((MD4_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->md4_total = 0; + ctx->md4_state[0] = 0x67452301; + ctx->md4_state[1] = 0xEFCDAB89; + ctx->md4_state[2] = 0x98BADCFE; + ctx->md4_state[3] = 0x10325476; + + /* Tell that we are initialized */ + ctx->magic = MD4_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int md4_update(md4_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + MD4_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->md4_total & 0x3F); + fill = (u16)(MD4_BLOCK_SIZE - left); + + ctx->md4_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->md4_buffer + left, data_ptr, fill); EG(ret, err); + ret = md4_process(ctx, ctx->md4_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= MD4_BLOCK_SIZE) { + ret = md4_process(ctx, data_ptr); EG(ret, err); + data_ptr += MD4_BLOCK_SIZE; + remain_ilen -= MD4_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->md4_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int md4_final(md4_context *ctx, u8 output[MD4_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * MD4_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + MD4_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = ctx->md4_total % MD4_BLOCK_SIZE; + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->md4_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (MD4_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_LE(8 * ctx->md4_total, last_padded_block, + (2 * MD4_BLOCK_SIZE) - sizeof(u64)); + ret = md4_process(ctx, last_padded_block); EG(ret, err); + ret = md4_process(ctx, last_padded_block + MD4_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_LE(8 * ctx->md4_total, last_padded_block, + MD4_BLOCK_SIZE - sizeof(u64)); + ret = md4_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_LE(ctx->md4_state[0], output, 0); + PUT_UINT32_LE(ctx->md4_state[1], output, 4); + PUT_UINT32_LE(ctx->md4_state[2], output, 8); + PUT_UINT32_LE(ctx->md4_state[3], output, 12); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md4_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MD4_DIGEST_SIZE]) +{ + md4_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = md4_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = md4_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = md4_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md4(const u8 *input, u32 ilen, u8 output[MD4_DIGEST_SIZE]) +{ + md4_context ctx; + int ret; + + ret = md4_init(&ctx); EG(ret, err); + ret = md4_update(&ctx, input, ilen); EG(ret, err); + ret = md4_final(&ctx, output); + +err: + return ret; +} diff --git a/crypto/libecc/src/examples/hash/md5.h b/crypto/libecc/src/examples/hash/md5.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/md5.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __MD5_H__ +#define __MD5_H__ + +/* Include libec for useful types and macros */ +#include + +/****************************************************/ +/* + * 32-bit integer manipulation macros + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros + */ +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +#define MD5_STATE_SIZE 4 +#define MD5_BLOCK_SIZE 64 +#define MD5_DIGEST_SIZE 16 +#define MD5_DIGEST_SIZE_BITS 128 + +#define MD5_HASH_MAGIC ((word_t)(0x5684922132353193ULL)) +#define MD5_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == MD5_HASH_MAGIC), ret, err) + +#define ROTL_MD5(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +typedef struct { + /* Number of bytes processed */ + u64 md5_total; + /* Internal state */ + u32 md5_state[MD5_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 md5_buffer[MD5_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} md5_context; + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int md5_init(md5_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int md5_update(md5_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int md5_final(md5_context *ctx, u8 output[MD5_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md5_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MD5_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md5(const u8 *input, u32 ilen, u8 output[MD5_DIGEST_SIZE]); + +#endif /* __MD5_H__ */ diff --git a/crypto/libecc/src/examples/hash/md5.c b/crypto/libecc/src/examples/hash/md5.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/md5.c @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "md5.h" + +/* All the inner MD-5 operations */ +static const u32 K_MD5[64] = { + 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, + 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, + 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, + 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, + 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, + 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, + 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, + 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 +}; + +static const u8 R_MD5[64] = { + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 +}; + +#define F_MD5(x, y, z) (((x) & (y)) | ((~(x)) & (z))) +#define G_MD5(x, y, z) (((x) & (z)) | ((y) & (~(z)))) +#define H_MD5(x, y, z) ((x) ^ (y) ^ (z)) +#define I_MD5(x, y, z) ((y) ^ ((x) | ((~z)))) + +/* SHA-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int md5_process(md5_context *ctx, + const u8 data[MD5_BLOCK_SIZE]) +{ + u32 A, B, C, D, tmp; + u32 W[16]; + int ret; + unsigned int i; + + MUST_HAVE((data != NULL), ret, err); + MD5_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + A = ctx->md5_state[0]; + B = ctx->md5_state[1]; + C = ctx->md5_state[2]; + D = ctx->md5_state[3]; + + /* Load data */ + for (i = 0; i < 16; i++) { + GET_UINT32_LE(W[i], data, (4 * i)); + } + for (i = 0; i < 64; i++) { + u32 f, g; + if(i <= 15){ + f = F_MD5(B, C, D); + g = i; + } + else if((i >= 16) && (i <= 31)){ + f = G_MD5(B, C, D); + g = (((5 * i) + 1) % 16); + } + else if((i >= 32) && (i <= 47)){ + f = H_MD5(B, C, D); + g = (((3 * i) + 5) % 16); + } + else{ + f = I_MD5(B, C, D); + g = ((7 * i) % 16); + } + tmp = D; + D = C; + C = B; + B += ROTL_MD5((A + f + K_MD5[i] + W[g]), R_MD5[i]); + A = tmp; + } + + /* Update state */ + ctx->md5_state[0] += A; + ctx->md5_state[1] += B; + ctx->md5_state[2] += C; + ctx->md5_state[3] += D; + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int md5_init(md5_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((MD5_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->md5_total = 0; + ctx->md5_state[0] = 0x67452301; + ctx->md5_state[1] = 0xEFCDAB89; + ctx->md5_state[2] = 0x98BADCFE; + ctx->md5_state[3] = 0x10325476; + + /* Tell that we are initialized */ + ctx->magic = MD5_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int md5_update(md5_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + MD5_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->md5_total & 0x3F); + fill = (u16)(MD5_BLOCK_SIZE - left); + + ctx->md5_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->md5_buffer + left, data_ptr, fill); EG(ret, err); + ret = md5_process(ctx, ctx->md5_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= MD5_BLOCK_SIZE) { + ret = md5_process(ctx, data_ptr); EG(ret, err); + data_ptr += MD5_BLOCK_SIZE; + remain_ilen -= MD5_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->md5_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int md5_final(md5_context *ctx, u8 output[MD5_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * MD5_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + MD5_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = ctx->md5_total % MD5_BLOCK_SIZE; + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->md5_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (MD5_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_LE(8 * ctx->md5_total, last_padded_block, + (2 * MD5_BLOCK_SIZE) - sizeof(u64)); + ret = md5_process(ctx, last_padded_block); EG(ret, err); + ret = md5_process(ctx, last_padded_block + MD5_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_LE(8 * ctx->md5_total, last_padded_block, + MD5_BLOCK_SIZE - sizeof(u64)); + ret = md5_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_LE(ctx->md5_state[0], output, 0); + PUT_UINT32_LE(ctx->md5_state[1], output, 4); + PUT_UINT32_LE(ctx->md5_state[2], output, 8); + PUT_UINT32_LE(ctx->md5_state[3], output, 12); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md5_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MD5_DIGEST_SIZE]) +{ + md5_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = md5_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = md5_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = md5_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int md5(const u8 *input, u32 ilen, u8 output[MD5_DIGEST_SIZE]) +{ + md5_context ctx; + int ret; + + ret = md5_init(&ctx); EG(ret, err); + ret = md5_update(&ctx, input, ilen); EG(ret, err); + ret = md5_final(&ctx, output); + +err: + return ret; +} diff --git a/crypto/libecc/src/examples/hash/mdc2.h b/crypto/libecc/src/examples/hash/mdc2.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/mdc2.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __MDC2_H__ +#define __MDC2_H__ + +/* Include libec for useful types and macros */ +#include + +#define MDC2_STATE_SIZE 16 +#define MDC2_BLOCK_SIZE 8 +#define MDC2_DIGEST_SIZE 16 +#define MDC2_DIGEST_SIZE_BITS 128 + +#define MDC2_HASH_MAGIC ((word_t)(0x8296527183648310ULL)) +#define MDC2_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == MDC2_HASH_MAGIC), ret, err) + +/* Padding types as described in the informative appendix of + * ISO-IEC-10118-2-1994 + */ +typedef enum { + ISOIEC10118_TYPE1 = 0, + ISOIEC10118_TYPE2 = 1, +} padding_type; + +typedef struct { + /* Number of bytes processed */ + u64 mdc2_total; + /* Internal state */ + u8 mdc2_state[MDC2_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 mdc2_buffer[MDC2_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; + /* Padding type, as per ISO-IEC-10118-2-1994 */ + padding_type padding; +} mdc2_context; + +ATTRIBUTE_WARN_UNUSED_RET int mdc2_set_padding_type(mdc2_context *ctx, + padding_type p); + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_init(mdc2_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int mdc2_update(mdc2_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_final(mdc2_context *ctx, u8 output[MDC2_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MDC2_DIGEST_SIZE], padding_type p); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_scattered_padding1(const u8 **inputs, const u32 *ilens, + u8 output[MDC2_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_scattered_padding2(const u8 **inputs, const u32 *ilens, + u8 output[MDC2_DIGEST_SIZE]); +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2(const u8 *input, u32 ilen, u8 output[MDC2_DIGEST_SIZE], padding_type p); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_padding1(const u8 *input, u32 ilen, u8 output[MDC2_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_padding2(const u8 *input, u32 ilen, u8 output[MDC2_DIGEST_SIZE]); + +#endif /* __MDC2_H__ */ diff --git a/crypto/libecc/src/examples/hash/mdc2.c b/crypto/libecc/src/examples/hash/mdc2.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/mdc2.c @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "mdc2.h" + +/* Include DES helpers */ +#include "tdes.h" + +ATTRIBUTE_WARN_UNUSED_RET int mdc2_set_padding_type(mdc2_context *ctx, + padding_type p) +{ + int ret; + + MDC2_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* We cannot change the padding type after the first update */ + MUST_HAVE((ctx->mdc2_total == 0), ret, err); + + if((p != ISOIEC10118_TYPE1) && (p != ISOIEC10118_TYPE2)){ + ret = -1; + goto err; + } + + ctx->padding = p; + + ret = 0; + +err: + return ret; +} + +/* MDC-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int mdc2_process(mdc2_context *ctx, + const u8 data[MDC2_BLOCK_SIZE]) +{ + int ret; + unsigned int j; + u8 V[8], W[8]; + u8 *A, *B; + des_context des_ctx; + + /* Get the current internal state in A and B */ + A = (u8*)&(ctx->mdc2_state[0]); + B = (u8*)&(ctx->mdc2_state[8]); + + A[0] = (u8)((A[0] & 0x9f) | 0x40); + B[0] = (u8)((B[0] & 0x9f) | 0x20); + /* Set odd parity */ + for(j = 0; j < 8; j++){ + A[j] = odd_parity[A[j]]; + B[j] = odd_parity[B[j]]; + } + /* Compute V_i = M_i + E(M_i, A_i) */ + ret = local_memset(&des_ctx, 0, sizeof(des_context)); EG(ret, err); + ret = des_set_key(&des_ctx, A, DES_ENCRYPTION); EG(ret, err); + ret = des(&des_ctx, &data[0], V); EG(ret, err); + for(j = 0; j < 8; j++){ + V[j] = (V[j] ^ data[j]); + } + /* Compute W_i = M_i + E(M_i, B_i) */ + ret = local_memset(&des_ctx, 0, sizeof(des_context)); EG(ret, err); + ret = des_set_key(&des_ctx, B, DES_ENCRYPTION); EG(ret, err); + ret = des(&des_ctx, &data[0], W); EG(ret, err); + for(j = 0; j < 8; j++){ + W[j] = (W[j] ^ data[j]); + } + /* Cross the results */ + /* In A */ + ret = local_memcpy(&A[0], &V[0], 4); EG(ret, err); + ret = local_memcpy(&A[4], &W[4], 4); EG(ret, err); + /* In B */ + ret = local_memcpy(&B[0], &W[0], 4); EG(ret, err); + ret = local_memcpy(&B[4], &V[4], 4); EG(ret, err); + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_init(mdc2_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((MDC2_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->mdc2_total = 0; + /* Initialize A1 */ + ret = local_memset(&(ctx->mdc2_state[0]), 0x52, 8); EG(ret, err); + /* Initialize B1 */ + ret = local_memset(&(ctx->mdc2_state[8]), 0x25, 8); EG(ret, err); + /* Initialize default padding type */ + ctx->padding = ISOIEC10118_TYPE1; + + /* Tell that we are initialized */ + ctx->magic = MDC2_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int mdc2_update(mdc2_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + MDC2_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->mdc2_total & 0xF); + fill = (u16)(MDC2_BLOCK_SIZE - left); + + ctx->mdc2_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->mdc2_buffer + left, data_ptr, fill); EG(ret, err); + ret = mdc2_process(ctx, ctx->mdc2_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= MDC2_BLOCK_SIZE) { + ret = mdc2_process(ctx, data_ptr); EG(ret, err); + data_ptr += MDC2_BLOCK_SIZE; + remain_ilen -= MDC2_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->mdc2_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_final(mdc2_context *ctx, u8 output[MDC2_DIGEST_SIZE]) +{ + int ret; + unsigned int i; + u8 pad_byte; + + MUST_HAVE((output != NULL), ret, err); + MDC2_HASH_CHECK_INITIALIZED(ctx, ret, err); + + if(ctx->padding == ISOIEC10118_TYPE1){ + /* "Padding method 1" in ISO-IEC-10118 */ + /* This is our final step, so we proceed with the padding: the last block + * is padded with zeroes. + */ + pad_byte = 0x00; + if((ctx->mdc2_total % MDC2_BLOCK_SIZE) != 0){ + for(i = (ctx->mdc2_total % MDC2_BLOCK_SIZE); i < MDC2_BLOCK_SIZE; i++){ + ctx->mdc2_buffer[i] = pad_byte; + } + /* And process the block */ + ret = mdc2_process(ctx, ctx->mdc2_buffer); EG(ret, err); + } + } + else if(ctx->padding == ISOIEC10118_TYPE2){ + /* "Padding method 2" in ISO-IEC-10118 */ + /* This is our final step, so we proceed with the padding: the last block + * is appended 0x80 and then padded with zeroes. + */ + ctx->mdc2_buffer[(ctx->mdc2_total % MDC2_BLOCK_SIZE)] = 0x80; + pad_byte = 0x00; + for(i = ((unsigned int)(ctx->mdc2_total % MDC2_BLOCK_SIZE) + 1); i < MDC2_BLOCK_SIZE; i++){ + ctx->mdc2_buffer[i] = pad_byte; + } + /* And process the block */ + ret = mdc2_process(ctx, ctx->mdc2_buffer); EG(ret, err); + } + else{ + /* Unkown padding */ + ret = -1; + goto err; + } + + /* Output the hash result */ + ret = local_memcpy(output, ctx->mdc2_state, MDC2_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_scattered(const u8 **inputs, const u32 *ilens, + u8 output[MDC2_DIGEST_SIZE], padding_type p) +{ + mdc2_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = mdc2_init(&ctx); EG(ret, err); + + ret = mdc2_set_padding_type(&ctx, p); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = mdc2_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = mdc2_final(&ctx, output); + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_scattered_padding1(const u8 **inputs, const u32 *ilens, + u8 output[MDC2_DIGEST_SIZE]) +{ + return mdc2_scattered(inputs, ilens, output, ISOIEC10118_TYPE1); +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_scattered_padding2(const u8 **inputs, const u32 *ilens, + u8 output[MDC2_DIGEST_SIZE]) +{ + return mdc2_scattered(inputs, ilens, output, ISOIEC10118_TYPE2); +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2(const u8 *input, u32 ilen, u8 output[MDC2_DIGEST_SIZE], padding_type p) +{ + mdc2_context ctx; + int ret; + + ret = mdc2_init(&ctx); EG(ret, err); + ret = mdc2_set_padding_type(&ctx, p); EG(ret, err); + ret = mdc2_update(&ctx, input, ilen); EG(ret, err); + ret = mdc2_final(&ctx, output); + +err: + return ret; +} + + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_padding1(const u8 *input, u32 ilen, u8 output[MDC2_DIGEST_SIZE]) +{ + return mdc2(input, ilen, output, ISOIEC10118_TYPE1); +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int mdc2_padding2(const u8 *input, u32 ilen, u8 output[MDC2_DIGEST_SIZE]) +{ + return mdc2(input, ilen, output, ISOIEC10118_TYPE2); +} diff --git a/crypto/libecc/src/examples/hash/sha0.h b/crypto/libecc/src/examples/hash/sha0.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/sha0.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SHA0_H__ +#define __SHA0_H__ + +/* Include libec for useful types and macros */ +#include + +/****************************************************/ +/* + * 32-bit integer manipulation macros + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros + */ +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +#define SHA0_STATE_SIZE 5 +#define SHA0_BLOCK_SIZE 64 +#define SHA0_DIGEST_SIZE 20 +#define SHA0_DIGEST_SIZE_BITS 160 + +#define SHA0_HASH_MAGIC ((word_t)(0x6611302537891263ULL)) +#define SHA0_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA0_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 sha0_total; + /* Internal state */ + u32 sha0_state[SHA0_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sha0_buffer[SHA0_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sha0_context; + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int sha0_init(sha0_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int sha0_update(sha0_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int sha0_final(sha0_context *ctx, u8 output[SHA0_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha0_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA0_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha0(const u8 *input, u32 ilen, u8 output[SHA0_DIGEST_SIZE]); + +#endif /* __SHA0_H__ */ diff --git a/crypto/libecc/src/examples/hash/sha0.c b/crypto/libecc/src/examples/hash/sha0.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/sha0.c @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "sha0.h" + +#define ROTL_SHA0(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +/* All the inner SHA-0 operations */ +#define K1_SHA0 0x5a827999 +#define K2_SHA0 0x6ed9eba1 +#define K3_SHA0 0x8f1bbcdc +#define K4_SHA0 0xca62c1d6 + +#define F1_SHA0(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define F2_SHA0(x, y, z) ((x) ^ (y) ^ (z)) +#define F3_SHA0(x, y, z) (((x) & (y)) | ((z) & ((x) | (y)))) +#define F4_SHA0(x, y, z) ((x) ^ (y) ^ (z)) + +#define SHA0_EXPAND(W, i) (W[i & 15] = (W[i & 15] ^ W[(i - 14) & 15] ^ W[(i - 8) & 15] ^ W[(i - 3) & 15])) + +#define SHA0_SUBROUND(a, b, c, d, e, F, K, data) do { \ + u32 A_, B_, C_, D_, E_; \ + A_ = (e + ROTL_SHA0(a, 5) + F(b, c, d) + K + data); \ + B_ = a; \ + C_ = ROTL_SHA0(b, 30); \ + D_ = c; \ + E_ = d; \ + /**/ \ + a = A_; b = B_; c = C_; d = D_; e = E_; \ +} while(0) + +/* SHA-0 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int sha0_process(sha0_context *ctx, + const u8 data[SHA0_BLOCK_SIZE]) +{ + u32 A, B, C, D, E; + u32 W[16]; + int ret; + unsigned int i; + + MUST_HAVE((data != NULL), ret, err); + SHA0_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + A = ctx->sha0_state[0]; + B = ctx->sha0_state[1]; + C = ctx->sha0_state[2]; + D = ctx->sha0_state[3]; + E = ctx->sha0_state[4]; + + /* Load data */ + for (i = 0; i < 16; i++) { + GET_UINT32_BE(W[i], data, (4 * i)); + } + for (i = 0; i < 80; i++) { + if(i <= 15){ + SHA0_SUBROUND(A, B, C, D, E, F1_SHA0, K1_SHA0, W[i]); + } + else if((i >= 16) && (i <= 19)){ + SHA0_SUBROUND(A, B, C, D, E, F1_SHA0, K1_SHA0, SHA0_EXPAND(W, i)); + } + else if((i >= 20) && (i <= 39)){ + SHA0_SUBROUND(A, B, C, D, E, F2_SHA0, K2_SHA0, SHA0_EXPAND(W, i)); + } + else if((i >= 40) && (i <= 59)){ + SHA0_SUBROUND(A, B, C, D, E, F3_SHA0, K3_SHA0, SHA0_EXPAND(W, i)); + } + else{ + SHA0_SUBROUND(A, B, C, D, E, F4_SHA0, K4_SHA0, SHA0_EXPAND(W, i)); + } + } + + /* Update state */ + ctx->sha0_state[0] += A; + ctx->sha0_state[1] += B; + ctx->sha0_state[2] += C; + ctx->sha0_state[3] += D; + ctx->sha0_state[4] += E; + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int sha0_init(sha0_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((SHA0_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->sha0_total = 0; + ctx->sha0_state[0] = 0x67452301; + ctx->sha0_state[1] = 0xefcdab89; + ctx->sha0_state[2] = 0x98badcfe; + ctx->sha0_state[3] = 0x10325476; + ctx->sha0_state[4] = 0xc3d2e1f0; + + /* Tell that we are initialized */ + ctx->magic = SHA0_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int sha0_update(sha0_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + SHA0_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->sha0_total & 0x3F); + fill = (u16)(SHA0_BLOCK_SIZE - left); + + ctx->sha0_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sha0_buffer + left, data_ptr, fill); EG(ret, err); + ret = sha0_process(ctx, ctx->sha0_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SHA0_BLOCK_SIZE) { + ret = sha0_process(ctx, data_ptr); EG(ret, err); + data_ptr += SHA0_BLOCK_SIZE; + remain_ilen -= SHA0_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sha0_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int sha0_final(sha0_context *ctx, u8 output[SHA0_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SHA0_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + SHA0_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = ctx->sha0_total % SHA0_BLOCK_SIZE; + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sha0_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SHA0_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_BE(8 * ctx->sha0_total, last_padded_block, + (2 * SHA0_BLOCK_SIZE) - sizeof(u64)); + ret = sha0_process(ctx, last_padded_block); EG(ret, err); + ret = sha0_process(ctx, last_padded_block + SHA0_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_BE(8 * ctx->sha0_total, last_padded_block, + SHA0_BLOCK_SIZE - sizeof(u64)); + ret = sha0_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_BE(ctx->sha0_state[0], output, 0); + PUT_UINT32_BE(ctx->sha0_state[1], output, 4); + PUT_UINT32_BE(ctx->sha0_state[2], output, 8); + PUT_UINT32_BE(ctx->sha0_state[3], output, 12); + PUT_UINT32_BE(ctx->sha0_state[4], output, 16); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha0_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA0_DIGEST_SIZE]) +{ + sha0_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha0_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha0_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha0_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha0(const u8 *input, u32 ilen, u8 output[SHA0_DIGEST_SIZE]) +{ + sha0_context ctx; + int ret; + + ret = sha0_init(&ctx); EG(ret, err); + ret = sha0_update(&ctx, input, ilen); EG(ret, err); + ret = sha0_final(&ctx, output); + +err: + return ret; +} diff --git a/crypto/libecc/src/examples/hash/sha1.h b/crypto/libecc/src/examples/hash/sha1.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/sha1.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SHA1_H__ +#define __SHA1_H__ + +/* Include libec for useful types and macros */ +#include + +/****************************************************/ +/* + * 32-bit integer manipulation macros + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros + */ +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +#define SHA1_STATE_SIZE 5 +#define SHA1_BLOCK_SIZE 64 +#define SHA1_DIGEST_SIZE 20 +#define SHA1_DIGEST_SIZE_BITS 160 + +#define SHA1_HASH_MAGIC ((word_t)(0x1120387132308110ULL)) +#define SHA1_HASH_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SHA1_HASH_MAGIC), ret, err) + +typedef struct { + /* Number of bytes processed */ + u64 sha1_total; + /* Internal state */ + u32 sha1_state[SHA1_STATE_SIZE]; + /* Internal buffer to handle updates in a block */ + u8 sha1_buffer[SHA1_BLOCK_SIZE]; + /* Initialization magic value */ + word_t magic; +} sha1_context; + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int sha1_init(sha1_context *ctx); + +ATTRIBUTE_WARN_UNUSED_RET int sha1_update(sha1_context *ctx, const u8 *input, u32 ilen); + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int sha1_final(sha1_context *ctx, u8 output[SHA1_DIGEST_SIZE]); + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha1_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA1_DIGEST_SIZE]); + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha1(const u8 *input, u32 ilen, u8 output[SHA1_DIGEST_SIZE]); + +#endif /* __SHA1_H__ */ diff --git a/crypto/libecc/src/examples/hash/sha1.c b/crypto/libecc/src/examples/hash/sha1.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/sha1.c @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "sha1.h" + +#define ROTL_SHA1(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +/* All the inner SHA-1 operations */ +#define K1_SHA1 0x5a827999 +#define K2_SHA1 0x6ed9eba1 +#define K3_SHA1 0x8f1bbcdc +#define K4_SHA1 0xca62c1d6 + +#define F1_SHA1(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define F2_SHA1(x, y, z) ((x) ^ (y) ^ (z)) +#define F3_SHA1(x, y, z) (((x) & (y)) | ((z) & ((x) | (y)))) +#define F4_SHA1(x, y, z) ((x) ^ (y) ^ (z)) + +#define SHA1_EXPAND(W, i) (W[i & 15] = ROTL_SHA1((W[i & 15] ^ W[(i - 14) & 15] ^ W[(i - 8) & 15] ^ W[(i - 3) & 15]), 1)) + +#define SHA1_SUBROUND(a, b, c, d, e, F, K, data) do { \ + u32 A_, B_, C_, D_, E_; \ + A_ = (e + ROTL_SHA1(a, 5) + F(b, c, d) + K + data); \ + B_ = a; \ + C_ = ROTL_SHA1(b, 30); \ + D_ = c; \ + E_ = d; \ + /**/ \ + a = A_; b = B_; c = C_; d = D_; e = E_; \ +} while(0) + +/* SHA-1 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int sha1_process(sha1_context *ctx, + const u8 data[SHA1_BLOCK_SIZE]) +{ + u32 A, B, C, D, E; + u32 W[16]; + int ret; + unsigned int i; + + MUST_HAVE((data != NULL), ret, err); + SHA1_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + A = ctx->sha1_state[0]; + B = ctx->sha1_state[1]; + C = ctx->sha1_state[2]; + D = ctx->sha1_state[3]; + E = ctx->sha1_state[4]; + + /* Load data */ + for (i = 0; i < 16; i++) { + GET_UINT32_BE(W[i], data, (4 * i)); + } + for (i = 0; i < 80; i++) { + if(i <= 15){ + SHA1_SUBROUND(A, B, C, D, E, F1_SHA1, K1_SHA1, W[i]); + } + else if((i >= 16) && (i <= 19)){ + SHA1_SUBROUND(A, B, C, D, E, F1_SHA1, K1_SHA1, SHA1_EXPAND(W, i)); + } + else if((i >= 20) && (i <= 39)){ + SHA1_SUBROUND(A, B, C, D, E, F2_SHA1, K2_SHA1, SHA1_EXPAND(W, i)); + } + else if((i >= 40) && (i <= 59)){ + SHA1_SUBROUND(A, B, C, D, E, F3_SHA1, K3_SHA1, SHA1_EXPAND(W, i)); + } + else{ + SHA1_SUBROUND(A, B, C, D, E, F4_SHA1, K4_SHA1, SHA1_EXPAND(W, i)); + } + } + + /* Update state */ + ctx->sha1_state[0] += A; + ctx->sha1_state[1] += B; + ctx->sha1_state[2] += C; + ctx->sha1_state[3] += D; + ctx->sha1_state[4] += E; + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET int sha1_init(sha1_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Sanity check on size */ + MUST_HAVE((SHA1_DIGEST_SIZE <= MAX_DIGEST_SIZE), ret, err); + + ctx->sha1_total = 0; + ctx->sha1_state[0] = 0x67452301; + ctx->sha1_state[1] = 0xefcdab89; + ctx->sha1_state[2] = 0x98badcfe; + ctx->sha1_state[3] = 0x10325476; + ctx->sha1_state[4] = 0xc3d2e1f0; + + /* Tell that we are initialized */ + ctx->magic = SHA1_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int sha1_update(sha1_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + SHA1_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->sha1_total & 0x3F); + fill = (u16)(SHA1_BLOCK_SIZE - left); + + ctx->sha1_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sha1_buffer + left, data_ptr, fill); EG(ret, err); + ret = sha1_process(ctx, ctx->sha1_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SHA1_BLOCK_SIZE) { + ret = sha1_process(ctx, data_ptr); EG(ret, err); + data_ptr += SHA1_BLOCK_SIZE; + remain_ilen -= SHA1_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sha1_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +ATTRIBUTE_WARN_UNUSED_RET int sha1_final(sha1_context *ctx, u8 output[SHA1_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SHA1_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + SHA1_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = ctx->sha1_total % SHA1_BLOCK_SIZE; + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sha1_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SHA1_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_BE(8 * ctx->sha1_total, last_padded_block, + (2 * SHA1_BLOCK_SIZE) - sizeof(u64)); + ret = sha1_process(ctx, last_padded_block); EG(ret, err); + ret = sha1_process(ctx, last_padded_block + SHA1_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_BE(8 * ctx->sha1_total, last_padded_block, + SHA1_BLOCK_SIZE - sizeof(u64)); + ret = sha1_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_BE(ctx->sha1_state[0], output, 0); + PUT_UINT32_BE(ctx->sha1_state[1], output, 4); + PUT_UINT32_BE(ctx->sha1_state[2], output, 8); + PUT_UINT32_BE(ctx->sha1_state[3], output, 12); + PUT_UINT32_BE(ctx->sha1_state[4], output, 16); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha1_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA1_DIGEST_SIZE]) +{ + sha1_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha1_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha1_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha1_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int sha1(const u8 *input, u32 ilen, u8 output[SHA1_DIGEST_SIZE]) +{ + sha1_context ctx; + int ret; + + ret = sha1_init(&ctx); EG(ret, err); + ret = sha1_update(&ctx, input, ilen); EG(ret, err); + ret = sha1_final(&ctx, output); + +err: + return ret; +} diff --git a/crypto/libecc/src/examples/hash/tdes.h b/crypto/libecc/src/examples/hash/tdes.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/tdes.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#ifndef __TDES_H__ +#define __TDES_H__ + +/* Include libec for useful types and macros */ +#include + +typedef enum { + DES_ENCRYPTION = 0, + DES_DECRYPTION = 1, +} des_direction; + +/* DES context */ +typedef struct { + des_direction dir; + u64 sk[16]; /* encryption/decryption subkeys */ +} des_context; + +/* Triple DES context */ +typedef struct { + des_direction dir; + des_context des[3]; +} des3_context; + +/* Odd parity table */ +static const u8 odd_parity[256] = { + 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, + 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, + 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, + 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, + 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, + 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, + 97, 97, 98, 98, 100, 100, 103, 103, 104, 104, 107, 107, 109, 109, 110, + 110, + 112, 112, 115, 115, 117, 117, 118, 118, 121, 121, 122, 122, 124, 124, 127, + 127, + 128, 128, 131, 131, 133, 133, 134, 134, 137, 137, 138, 138, 140, 140, 143, + 143, + 145, 145, 146, 146, 148, 148, 151, 151, 152, 152, 155, 155, 157, 157, 158, + 158, + 161, 161, 162, 162, 164, 164, 167, 167, 168, 168, 171, 171, 173, 173, 174, + 174, + 176, 176, 179, 179, 181, 181, 182, 182, 185, 185, 186, 186, 188, 188, 191, + 191, + 193, 193, 194, 194, 196, 196, 199, 199, 200, 200, 203, 203, 205, 205, 206, + 206, + 208, 208, 211, 211, 213, 213, 214, 214, 217, 217, 218, 218, 220, 220, 223, + 223, + 224, 224, 227, 227, 229, 229, 230, 230, 233, 233, 234, 234, 236, 236, 239, + 239, + 241, 241, 242, 242, 244, 244, 247, 247, 248, 248, 251, 251, 253, 253, 254, + 254 +}; + +/* DES key schedule */ +ATTRIBUTE_WARN_UNUSED_RET int des_set_key(des_context *ctx, const u8 k[8], des_direction dir); + +/* DES encryption/decryption */ +ATTRIBUTE_WARN_UNUSED_RET int des(const des_context *ctx, const u8 input[8], u8 output[8]); + +/* TDES key schedules */ +ATTRIBUTE_WARN_UNUSED_RET int des3_set_keys(des3_context *ctx, const u8 k1[8], const u8 k2[8], const u8 k3[8], des_direction dir); + +/* TDES encryption/decryption */ +ATTRIBUTE_WARN_UNUSED_RET int des3(const des3_context *ctx, const u8 input[8], u8 output[8]); + +#endif /* __TDES_H__ */ diff --git a/crypto/libecc/src/examples/hash/tdes.c b/crypto/libecc/src/examples/hash/tdes.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/hash/tdes.c @@ -0,0 +1,492 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#include "tdes.h" + +/* This is a very straightforward and basic implementation of DES and T-DES */ + +/* platform-independant 32-bit integer manipulation macros */ +#ifndef GET_UINT32 +#define GET_UINT32(n,b,i) \ +do { \ + (n) = ( (u32) (b)[(i) ] << 24 ) \ + | ( (u32) (b)[(i) + 1] << 16 ) \ + | ( (u32) (b)[(i) + 2] << 8 ) \ + | ( (u32) (b)[(i) + 3] ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32 +#define PUT_UINT32(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* DES 8 S-Boxes */ +static const u32 SB[8][64] = { + { + 0x01010400, 0x00000000, 0x00010000, 0x01010404, + 0x01010004, 0x00010404, 0x00000004, 0x00010000, + 0x00000400, 0x01010400, 0x01010404, 0x00000400, + 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, + 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, + 0x00000000, 0x00000404, 0x00010404, 0x01000000, + 0x00010000, 0x01010404, 0x00000004, 0x01010000, + 0x01010400, 0x01000000, 0x01000000, 0x00000400, + 0x01010004, 0x00010000, 0x00010400, 0x01000004, + 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, + 0x01000004, 0x00000404, 0x00010404, 0x01010400, + 0x00000404, 0x01000400, 0x01000400, 0x00000000, + 0x00010004, 0x00010400, 0x00000000, 0x01010004 + }, + { + 0x80108020, 0x80008000, 0x00008000, 0x00108020, + 0x00100000, 0x00000020, 0x80100020, 0x80008020, + 0x80000020, 0x80108020, 0x80108000, 0x80000000, + 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, + 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, + 0x00008020, 0x80108000, 0x80100000, 0x00008020, + 0x00000000, 0x00108020, 0x80100020, 0x00100000, + 0x80008020, 0x80100000, 0x80108000, 0x00008000, + 0x80100000, 0x80008000, 0x00000020, 0x80108020, + 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, + 0x00100020, 0x80008020, 0x80000020, 0x00100020, + 0x00108000, 0x00000000, 0x80008000, 0x00008020, + 0x80000000, 0x80100020, 0x80108020, 0x00108000 + }, + { + 0x00000208, 0x08020200, 0x00000000, 0x08020008, + 0x08000200, 0x00000000, 0x00020208, 0x08000200, + 0x00020008, 0x08000008, 0x08000008, 0x00020000, + 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, + 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, + 0x00000008, 0x08020208, 0x00000200, 0x08000000, + 0x08020200, 0x08000000, 0x00020008, 0x00000208, + 0x00020000, 0x08020200, 0x08000200, 0x00000000, + 0x00000200, 0x00020008, 0x08020208, 0x08000200, + 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, + 0x00000008, 0x00020208, 0x00020200, 0x08000008, + 0x08020000, 0x08000208, 0x00000208, 0x08020000, + 0x00020208, 0x00000008, 0x08020008, 0x00020200 + }, + { + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802080, 0x00800081, 0x00800001, 0x00002001, + 0x00000000, 0x00802000, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, + 0x00002000, 0x00802080, 0x00802081, 0x00000081, + 0x00800080, 0x00800001, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00000000, 0x00802000, + 0x00002080, 0x00800080, 0x00800081, 0x00000001, + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, + 0x00800001, 0x00002001, 0x00802080, 0x00800081, + 0x00002001, 0x00002080, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002000, 0x00802080 + }, + { + 0x00000100, 0x02080100, 0x02080000, 0x42000100, + 0x00080000, 0x00000100, 0x40000000, 0x02080000, + 0x40080100, 0x00080000, 0x02000100, 0x40080100, + 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, + 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, + 0x02080100, 0x02000000, 0x42000000, 0x00080100, + 0x00080000, 0x42000100, 0x00000100, 0x02000000, + 0x40000000, 0x02080000, 0x42000100, 0x40080100, + 0x02000100, 0x40000000, 0x42080000, 0x02080100, + 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, + 0x02080000, 0x00000000, 0x40080000, 0x42000000, + 0x00080100, 0x02000100, 0x40000100, 0x00080000, + 0x00000000, 0x40080000, 0x02080100, 0x40000100 + }, + { + 0x20000010, 0x20400000, 0x00004000, 0x20404010, + 0x20400000, 0x00000010, 0x20404010, 0x00400000, + 0x20004000, 0x00404010, 0x00400000, 0x20000010, + 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, + 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, + 0x00004010, 0x00404000, 0x20404000, 0x20000000, + 0x20004000, 0x00000010, 0x20400010, 0x00404000, + 0x20404010, 0x00400000, 0x00004010, 0x20000010, + 0x00400000, 0x20004000, 0x20000000, 0x00004010, + 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, + 0x00000010, 0x00004000, 0x20400000, 0x00404010, + 0x00004000, 0x00400010, 0x20004010, 0x00000000, + 0x20404000, 0x20000000, 0x00400010, 0x20004010 + }, + { + 0x00200000, 0x04200002, 0x04000802, 0x00000000, + 0x00000800, 0x04000802, 0x00200802, 0x04200800, + 0x04200802, 0x00200000, 0x00000000, 0x04000002, + 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, + 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, + 0x00200800, 0x00000002, 0x04000000, 0x00200800, + 0x04000000, 0x00200800, 0x00200000, 0x04000802, + 0x04000802, 0x04200002, 0x04200002, 0x00000002, + 0x00200002, 0x04000000, 0x04000800, 0x00200000, + 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, + 0x00200800, 0x00000000, 0x00000002, 0x04200802, + 0x00000000, 0x00200802, 0x04200000, 0x00000800, + 0x04000002, 0x04000800, 0x00000800, 0x00200002 + }, + { + 0x10001040, 0x00001000, 0x00040000, 0x10041040, + 0x10000000, 0x10001040, 0x00000040, 0x10000000, + 0x00040040, 0x10040000, 0x10041040, 0x00041000, + 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, + 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, + 0x10000040, 0x10001000, 0x00041040, 0x00040000, + 0x00041040, 0x00040000, 0x10041000, 0x00001000, + 0x00000040, 0x10040040, 0x00001000, 0x00041040, + 0x10001000, 0x00000040, 0x10000040, 0x10040000, + 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, + 0x10040000, 0x10001000, 0x10001040, 0x00000000, + 0x10041040, 0x00041000, 0x00041000, 0x00001040, + 0x00001040, 0x00040040, 0x10000000, 0x10041000 + } +}; + +/* PC1: left and right halves bit-swap */ + +static const u32 LH[16] = +{ + 0x00000000, 0x00000001, 0x00000100, 0x00000101, + 0x00010000, 0x00010001, 0x00010100, 0x00010101, + 0x01000000, 0x01000001, 0x01000100, 0x01000101, + 0x01010000, 0x01010001, 0x01010100, 0x01010101 +}; + +static const u32 RH[16] = +{ + 0x00000000, 0x01000000, 0x00010000, 0x01010000, + 0x00000100, 0x01000100, 0x00010100, 0x01010100, + 0x00000001, 0x01000001, 0x00010001, 0x01010001, + 0x00000101, 0x01000101, 0x00010101, 0x01010101, +}; + +/* DES Initial Permutation (IP) */ +static inline void des_ip(u32 L[1], u32 R[1]) +{ + u32 T; + + T = ((L[0] >> 4) ^ R[0]) & 0x0F0F0F0F; R[0] ^= T; L[0] ^= (T << 4); + T = ((L[0] >> 16) ^ R[0]) & 0x0000FFFF; R[0] ^= T; L[0] ^= (T << 16); + T = ((R[0] >> 2) ^ L[0]) & 0x33333333; L[0] ^= T; R[0] ^= (T << 2); + T = ((R[0] >> 8) ^ L[0]) & 0x00FF00FF; L[0] ^= T; R[0] ^= (T << 8); + R[0] = ((R[0] << 1) | (R[0] >> 31)) & 0xFFFFFFFF; + T = (L[0] ^ R[0]) & 0xAAAAAAAA; R[0] ^= T; L[0] ^= T; + L[0] = ((L[0] << 1) | (L[0] >> 31)) & 0xFFFFFFFF; + + return; +} + +/* DES Final Permutation (FP) */ +static inline void des_fp(u32 L[1], u32 R[1]) +{ + u32 T; + + L[0] = ((L[0] << 31) | (L[0] >> 1)) & 0xFFFFFFFF; + T = (L[0] ^ R[0]) & 0xAAAAAAAA; L[0] ^= T; R[0] ^= T; + R[0] = ((R[0] << 31) | (R[0] >> 1)) & 0xFFFFFFFF; + T = ((R[0] >> 8) ^ L[0]) & 0x00FF00FF; L[0] ^= T; R[0] ^= (T << 8); + T = ((R[0] >> 2) ^ L[0]) & 0x33333333; L[0] ^= T; R[0] ^= (T << 2); + T = ((L[0] >> 16) ^ R[0]) & 0x0000FFFF; R[0] ^= T; L[0] ^= (T << 16); + T = ((L[0] >> 4) ^ R[0]) & 0x0F0F0F0F; R[0] ^= T; L[0] ^= (T << 4); + + return; +} + +/* DES function: F(R, K) + L with inversion */ +static inline void des_round(u32 L[1], u32 R[1], u64 K) +{ + u32 T; + u32 k1, k2; + + k1 = (u32)K; + k2 = (u32)(K >> 32); + + T = k1 ^ L[0]; + R[0] ^= SB[7][ (T) & 0x3f] ^ SB[5][ (T >> 8) & 0x3f] ^ SB[3][ (T >> 16) & 0x3f] ^ SB[1][ (T >> 24) & 0x3f]; + T = k2 ^ ((L[0] << 28) | (L[0] >> 4)); + R[0] ^= SB[6][ (T) & 0x3f] ^ SB[4][ (T >> 8) & 0x3f] ^ SB[2][ (T >> 16) & 0x3f] ^ SB[0][ (T >> 24) & 0x3f]; + + return; +} + +/* DES key schedule */ +ATTRIBUTE_WARN_UNUSED_RET int des_set_key(des_context *ctx, const u8 k[8], des_direction dir) +{ + u32 i; + u32 C, D, T; + int ret; + + if((ctx == NULL) || (k == NULL)){ + ret = -1; + goto err; + } + + ctx->dir = dir; + + GET_UINT32(C, k, 0); + GET_UINT32(D, k, 4); + + /* Permuted choice 1 */ + T = ((D >> 4) ^ C) & 0x0F0F0F0F; C ^= T; D ^= (T << 4); + T = ((D ) ^ C) & 0x10101010; C ^= T; D ^= (T ); + + C = (LH[ (C ) & 0xF] << 3) | (LH[ (C >> 8) & 0xF ] << 2) + | (LH[ (C >> 16) & 0xF] << 1) | (LH[ (C >> 24) & 0xF ] ) + | (LH[ (C >> 5) & 0xF] << 7) | (LH[ (C >> 13) & 0xF ] << 6) + | (LH[ (C >> 21) & 0xF] << 5) | (LH[ (C >> 29) & 0xF ] << 4); + + D = (RH[ (D >> 1) & 0xF] << 3) | (RH[ (D >> 9) & 0xF ] << 2) + | (RH[ (D >> 17) & 0xF] << 1) | (RH[ (D >> 25) & 0xF ] ) + | (RH[ (D >> 4) & 0xF] << 7) | (RH[ (D >> 12) & 0xF ] << 6) + | (RH[ (D >> 20) & 0xF] << 5) | (RH[ (D >> 28) & 0xF ] << 4); + + C &= 0x0FFFFFFF; + D &= 0x0FFFFFFF; + + /* Compute the subkeys */ + for( i = 0; i < 16; i++ ){ + u32 k1, k2; + if((i < 2) || (i == 8) || (i == 15)){ + C = ((C << 1) | (C >> 27)) & 0x0FFFFFFF; + D = ((D << 1) | (D >> 27)) & 0x0FFFFFFF; + } + else{ + C = ((C << 2) | (C >> 26)) & 0x0FFFFFFF; + D = ((D << 2) | (D >> 26)) & 0x0FFFFFFF; + } + + k1 = ((C << 4) & 0x24000000) | ((C << 28) & 0x10000000) + | ((C << 14) & 0x08000000) | ((C << 18) & 0x02080000) + | ((C << 6) & 0x01000000) | ((C << 9) & 0x00200000) + | ((C >> 1) & 0x00100000) | ((C << 10) & 0x00040000) + | ((C << 2) & 0x00020000) | ((C >> 10) & 0x00010000) + | ((D >> 13) & 0x00002000) | ((D >> 4) & 0x00001000) + | ((D << 6) & 0x00000800) | ((D >> 1) & 0x00000400) + | ((D >> 14) & 0x00000200) | ((D ) & 0x00000100) + | ((D >> 5) & 0x00000020) | ((D >> 10) & 0x00000010) + | ((D >> 3) & 0x00000008) | ((D >> 18) & 0x00000004) + | ((D >> 26) & 0x00000002) | ((D >> 24) & 0x00000001); + + k2 = ((C << 15) & 0x20000000) | ((C << 17) & 0x10000000) + | ((C << 10) & 0x08000000) | ((C << 22) & 0x04000000) + | ((C >> 2) & 0x02000000) | ((C << 1) & 0x01000000) + | ((C << 16) & 0x00200000) | ((C << 11) & 0x00100000) + | ((C << 3) & 0x00080000) | ((C >> 6) & 0x00040000) + | ((C << 15) & 0x00020000) | ((C >> 4) & 0x00010000) + | ((D >> 2) & 0x00002000) | ((D << 8) & 0x00001000) + | ((D >> 14) & 0x00000808) | ((D >> 9) & 0x00000400) + | ((D ) & 0x00000200) | ((D << 7) & 0x00000100) + | ((D >> 7) & 0x00000020) | ((D >> 3) & 0x00000011) + | ((D << 2) & 0x00000004) | ((D >> 21) & 0x00000002); + + if(dir == DES_ENCRYPTION){ + ctx->sk[i] = (((u64)k2) << 32) | (u64)k1; + } + else if(dir == DES_DECRYPTION){ + ctx->sk[15-i] = (((u64)k2) << 32) | (u64)k1; + } + else{ + ret = -1; + goto err; + } + } + + ret = 0; + +err: + return ret; +} + +/* DES encryption core */ +ATTRIBUTE_WARN_UNUSED_RET static inline int des_core(const des_context *ctx, const u8 input[8], u8 output[8]) +{ + u32 L, R; + u32 i; + int ret; + + if((ctx == NULL) || (input == NULL) || (output == NULL)){ + ret = -1; + goto err; + } + + GET_UINT32(L, input, 0); + GET_UINT32(R, input, 4); + + des_ip(&L, &R); + + for(i = 0; i < 16; i++){ + if((i % 2) == 0){ + des_round(&R, &L, ctx->sk[i]); + } + else{ + des_round(&L, &R, ctx->sk[i]); + } + } + + des_fp(&R, &L); + + PUT_UINT32(R, output, 0); + PUT_UINT32(L, output, 4); + + ret = 0; +err: + return ret; +} + +/* DES encryption/decryption */ +ATTRIBUTE_WARN_UNUSED_RET int des(const des_context *ctx, const u8 input[8], u8 output[8]) +{ + return des_core(ctx, input, output); +} + +/* TDES key schedules */ +ATTRIBUTE_WARN_UNUSED_RET int des3_set_keys(des3_context *ctx, const u8 k1[8], const u8 k2[8], const u8 k3[8], des_direction dir) +{ + int ret; + + if((ctx == NULL) || (k1 == NULL) || (k2 == NULL)){ + ret = -1; + goto err; + } + ctx->dir = dir; + if(dir == DES_ENCRYPTION){ + if(des_set_key(&(ctx->des[0]), k1, DES_ENCRYPTION)){ + ret = -1; + goto err; + } + if(des_set_key(&(ctx->des[1]), k2, DES_DECRYPTION)){ + ret = -1; + goto err; + } + if(k3 == NULL){ + if(des_set_key(&(ctx->des[2]), k1, DES_ENCRYPTION)){ + ret = -1; + goto err; + } + } + else{ + if(des_set_key(&(ctx->des[2]), k3, DES_ENCRYPTION)){ + ret = -1; + goto err; + } + } + } + else if(dir == DES_DECRYPTION){ + if(des_set_key(&(ctx->des[0]), k1, DES_DECRYPTION)){ + ret = -1; + goto err; + } + if(des_set_key(&(ctx->des[1]), k2, DES_ENCRYPTION)){ + ret = -1; + goto err; + } + if(k3 == NULL){ + if(des_set_key(&(ctx->des[2]), k1, DES_DECRYPTION)){ + ret = -1; + goto err; + } + } + else{ + if(des_set_key(&(ctx->des[2]), k3, DES_DECRYPTION)){ + ret = -1; + goto err; + } + } + } + else{ + ret = -1; + goto err; + } + + ret = 0; +err: + return ret; +} + +/* TDES encryption/decryption */ +ATTRIBUTE_WARN_UNUSED_RET int des3(const des3_context *ctx, const u8 input[8], u8 output[8]) +{ + int ret; + u8 tmp[8]; + + if(ctx == NULL){ + ret = -1; + goto err; + } + if(ctx->dir == DES_ENCRYPTION){ + if(des_core(&(ctx->des[0]), input, output)){ + ret = -1; + goto err; + } + if(des_core(&(ctx->des[1]), output, tmp)){ + ret = -1; + goto err; + } + if(des_core(&(ctx->des[2]), tmp, output)){ + ret = -1; + goto err; + } + } + else if(ctx->dir == DES_DECRYPTION){ + if(des_core(&(ctx->des[2]), input, output)){ + ret = -1; + goto err; + } + if(des_core(&(ctx->des[1]), output, tmp)){ + ret = -1; + goto err; + } + if(des_core(&(ctx->des[0]), tmp, output)){ + ret = -1; + goto err; + } + } + else{ + ret = -1; + goto err; + } + + ret = 0; +err: + return ret; +} diff --git a/crypto/libecc/src/examples/sig/Makefile b/crypto/libecc/src/examples/sig/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/Makefile @@ -0,0 +1,52 @@ +ROOT_DIR=../../../ +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +RSA_DIR=rsa/ +DSA_DIR=dsa/ +SDSA_DIR=sdsa/ +KCDSA_DIR=kcdsa/ +GOST_DIR=gostr34_10_94/ + +CFLAGS += -I$(ROOT_DIR)/include/ + +all: _rsa _dsa _sdsa _kcdsa _gost +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: _rsa_dyn _dsa_dyn _sdsa_dyn _kcdsa_dyn _gost_dyn +endif + +_rsa: + $(VERBOSE_MAKE)cd $(RSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_dsa: + $(VERBOSE_MAKE)cd $(DSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_sdsa: + $(VERBOSE_MAKE)cd $(SDSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_kcdsa: + $(VERBOSE_MAKE)cd $(KCDSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_gost: + $(VERBOSE_MAKE)cd $(GOST_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +_rsa_dyn: + $(VERBOSE_MAKE)cd $(RSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_dsa_dyn: + $(VERBOSE_MAKE)cd $(DSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_sdsa_dyn: + $(VERBOSE_MAKE)cd $(SDSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_kcdsa_dyn: + $(VERBOSE_MAKE)cd $(KCDSA_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +_gost_dyn: + $(VERBOSE_MAKE)cd $(GOST_DIR) && EXTRA_CFLAGS="$(CFLAGS)" make +endif + + +clean: + $(VERBOSE_MAKE)cd $(RSA_DIR) && make clean + $(VERBOSE_MAKE)cd $(DSA_DIR) && make clean + $(VERBOSE_MAKE)cd $(SDSA_DIR) && make clean + $(VERBOSE_MAKE)cd $(KCDSA_DIR) && make clean + $(VERBOSE_MAKE)cd $(GOST_DIR) && make clean + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sig/common/common.h b/crypto/libecc/src/examples/sig/common/common.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/common/common.h @@ -0,0 +1,248 @@ +/* Some common helpers useful for many algorithms */ +#ifndef __COMMON_H__ +#define __COMMON_H__ + +/* Include our arithmetic layer */ +#include + +/* I2OSP and OS2IP internal primitives */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _i2osp(nn_src_t x, u8 *buf, u16 buflen) +{ + int ret; + bitcnt_t blen; + + /* Sanity checks */ + MUST_HAVE((buf != NULL), ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + /* If x >= 256^xLen (the integer does not fit in the buffer), + * return an error. + */ + ret = nn_bitlen(x, &blen); EG(ret, err); + MUST_HAVE(((8 * buflen) >= blen), ret, err); + + /* Export to the buffer */ + ret = nn_export_to_buf(buf, buflen, x); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static inline int _os2ip(nn_t x, const u8 *buf, u16 buflen) +{ + int ret; + + /* We do not want to exceed our computation compatible + * size. + */ + MUST_HAVE((buflen <= NN_USABLE_MAX_BYTE_LEN), ret, err); + + /* Import the NN */ + ret = nn_init_from_buf(x, buf, buflen); + +err: + return ret; +} + +/* Reverses the endiannes of a buffer in place */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _reverse_endianness(u8 *buf, u16 buf_size) +{ + u16 i; + u8 tmp; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + + if(buf_size > 1){ + for(i = 0; i < (buf_size / 2); i++){ + tmp = buf[i]; + buf[i] = buf[buf_size - 1 - i]; + buf[buf_size - 1 - i] = tmp; + } + } + + ret = 0; + +err: + return ret; +} + +/* Helper to fix the MSB of a scalar using the trick in + * https://eprint.iacr.org/2011/232.pdf + * + * We distinguish three situations: + * - The scalar m is < q (the order), in this case we compute: + * - + * | m' = m + (2 * q) if [log(k + q)] == [log(q)], + * | m' = m + q otherwise. + * - + * - The scalar m is >= q and < q**2, in this case we compute: + * - + * | m' = m + (2 * (q**2)) if [log(k + (q**2))] == [log(q**2)], + * | m' = m + (q**2) otherwise. + * - + * - The scalar m is >= (q**2), in this case m == m' + * We only deal with 0 <= m < (q**2) using the countermeasure. When m >= (q**2), + * we stick with m' = m, accepting MSB issues (not much can be done in this case + * anyways). + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _fix_scalar_msb(nn_src_t m, nn_src_t q, nn_t m_msb_fixed) +{ + int ret, cmp; + /* _m_msb_fixed to handle aliasing */ + nn q_square, _m_msb_fixed; + q_square.magic = _m_msb_fixed.magic = WORD(0); + + /* Sanity checks */ + ret = nn_check_initialized(m); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(m_msb_fixed); EG(ret, err); + + ret = nn_init(&q_square, 0); EG(ret, err); + ret = nn_init(&_m_msb_fixed, 0); EG(ret, err); + + /* First compute q**2 */ + ret = nn_sqr(&q_square, q); EG(ret, err); + /* Then compute m' depending on m size */ + ret = nn_cmp(m, q, &cmp); EG(ret, err); + if (cmp < 0){ + bitcnt_t msb_bit_len, q_bitlen; + + /* Case where m < q */ + ret = nn_add(&_m_msb_fixed, m, q); EG(ret, err); + ret = nn_bitlen(&_m_msb_fixed, &msb_bit_len); EG(ret, err); + ret = nn_bitlen(q, &q_bitlen); EG(ret, err); + ret = nn_cnd_add((msb_bit_len == q_bitlen), m_msb_fixed, + &_m_msb_fixed, q); EG(ret, err); + } else { + ret = nn_cmp(m, &q_square, &cmp); EG(ret, err); + if (cmp < 0) { + bitcnt_t msb_bit_len, q_square_bitlen; + + /* Case where m >= q and m < (q**2) */ + ret = nn_add(&_m_msb_fixed, m, &q_square); EG(ret, err); + ret = nn_bitlen(&_m_msb_fixed, &msb_bit_len); EG(ret, err); + ret = nn_bitlen(&q_square, &q_square_bitlen); EG(ret, err); + ret = nn_cnd_add((msb_bit_len == q_square_bitlen), + m_msb_fixed, &_m_msb_fixed, &q_square); EG(ret, err); + } else { + /* Case where m >= (q**2) */ + ret = nn_copy(m_msb_fixed, m); EG(ret, err); + } + } + +err: + nn_uninit(&q_square); + nn_uninit(&_m_msb_fixed); + + return ret; +} + +/* Helper to blind the scalar. + * Compute m_blind = m + (b * q) where b is a random value modulo q. + * Aliasing is supported. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _blind_scalar(nn_src_t m, nn_src_t q, nn_t m_blind) +{ + int ret; + nn tmp; + tmp.magic = WORD(0); + + /* Sanity checks */ + ret = nn_check_initialized(m); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(m_blind); EG(ret, err); + + ret = nn_get_random_mod(&tmp, q); EG(ret, err); + + ret = nn_mul(&tmp, &tmp, q); EG(ret, err); + ret = nn_add(m_blind, &tmp, m); + +err: + nn_uninit(&tmp); + + return ret; +} + +/* + * NOT constant time at all and not secure against side-channels. This is + * an internal function only used for DSA verification on public data. + * + * Compute (base ** exp) mod (mod) using a square and multiply algorithm. + * Internally, this computes Montgomery coefficients and uses the redc + * function. + * + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _nn_mod_pow_insecure(nn_t out, nn_src_t base, + nn_src_t exp, nn_src_t mod) +{ + int ret, isodd, cmp; + bitcnt_t explen; + u8 expbit; + nn r, r_square, _base, one; + word_t mpinv; + r.magic = r_square.magic = _base.magic = one.magic = WORD(0); + + /* Aliasing is not supported for this internal helper */ + MUST_HAVE((out != base) && (out != exp) && (out != mod), ret, err); + + /* Check initializations */ + ret = nn_check_initialized(base); EG(ret, err); + ret = nn_check_initialized(exp); EG(ret, err); + ret = nn_check_initialized(mod); EG(ret, err); + + ret = nn_bitlen(exp, &explen); EG(ret, err); + /* Sanity check */ + MUST_HAVE((explen > 0), ret, err); + + /* Check that the modulo is indeed odd */ + ret = nn_isodd(mod, &isodd); EG(ret, err); + MUST_HAVE(isodd, ret, err); + + /* Compute the Montgomery coefficients */ + ret = nn_compute_redc1_coefs(&r, &r_square, mod, &mpinv); EG(ret, err); + + /* Reduce the base if necessary */ + ret = nn_cmp(base, mod, &cmp); EG(ret, err); + if(cmp >= 0){ + ret = nn_mod(&_base, base, mod); EG(ret, err); + } + else{ + ret = nn_copy(&_base, base); EG(ret, err); + } + + ret = nn_mul_redc1(&_base, &_base, &r_square, mod, mpinv); EG(ret, err); + ret = nn_copy(out, &r); EG(ret, err); + + ret = nn_init(&one, 0); EG(ret, err); + ret = nn_one(&one); EG(ret, err); + + while (explen > 0) { + explen = (bitcnt_t)(explen - 1); + + /* Get the bit */ + ret = nn_getbit(exp, explen, &expbit); EG(ret, err); + + /* Square */ + ret = nn_mul_redc1(out, out, out, mod, mpinv); EG(ret, err); + + if(expbit){ + /* Multiply */ + ret = nn_mul_redc1(out, out, &_base, mod, mpinv); EG(ret, err); + } + } + /* Unredcify the output */ + ret = nn_mul_redc1(out, out, &one, mod, mpinv); + +err: + nn_uninit(&r); + nn_uninit(&r_square); + nn_uninit(&_base); + nn_uninit(&one); + + return ret; +} + + +#endif /* __COMMON_H__ */ diff --git a/crypto/libecc/src/examples/sig/dsa/Makefile b/crypto/libecc/src/examples/sig/dsa/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/dsa/Makefile @@ -0,0 +1,34 @@ +ROOT_DIR=../../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +all: dsa +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: dsa_dyn +endif + +libhash: + # Compile the hashes + $(VERBOSE_MAKE)cd ../../hash && EXTRA_CFLAGS="$(CFLAGS)" make libhash.a + +dsa: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DDSA dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) ../../hash/libhash.a $(LIBSIGN) -o dsa + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +dsa_dyn: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DDSA dsa.c ../../hash/hash.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBEC) -L$(BUILD_DIR) ../../hash/libhash.a -lsign -o dsa_dyn +endif + + +clean: + @rm -f dsa + @rm -f dsa_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sig/dsa/dsa.h b/crypto/libecc/src/examples/sig/dsa/dsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/dsa/dsa.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __DSA_H__ +#define __DSA_H__ + +/* + * NOTE: although we only need libarith for DSA as we + * manipulate a ring of integers, we include libsig for + * the hash algorithms. + */ +#include + +/* The hash algorithms wrapper */ +#include "../../hash/hash.h" + +/* We define hereafter the types and functions for DSA. + * The notations are taken from NIST FIPS 186-4 and should be + * compliant with it. + */ + +/* DSA public key, composed of: + * p the DSA prime modulus + * q the DSA prime order (prime divisor of (p-1)) + * g the DSA generator + * y the public key = g^x (p) + */ +typedef struct { + nn p; + nn q; + nn g; + nn y; +} dsa_pub_key; + +/* DSA private key, composed of: + * p the DSA prime modulus + * q the DSA prime order (prime divisor of (p-1)) + * g the DSA generator + * x the secret key + */ +typedef struct { + nn p; + nn q; + nn g; + nn x; +} dsa_priv_key; + +ATTRIBUTE_WARN_UNUSED_RET int dsa_import_priv_key(dsa_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen); + +ATTRIBUTE_WARN_UNUSED_RET int dsa_import_pub_key(dsa_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen); + +ATTRIBUTE_WARN_UNUSED_RET int dsa_compute_pub_from_priv(dsa_pub_key *pub, + const dsa_priv_key *priv); + +ATTRIBUTE_WARN_UNUSED_RET int dsa_sign(const dsa_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type dsa_hash); + +ATTRIBUTE_WARN_UNUSED_RET int dsa_verify(const dsa_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type dsa_hash); + +#endif /* __DSA_H__ */ diff --git a/crypto/libecc/src/examples/sig/dsa/dsa.c b/crypto/libecc/src/examples/sig/dsa/dsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/dsa/dsa.c @@ -0,0 +1,555 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "dsa.h" + + +/* We include the rand external dependency because we have to generate + * some random data for the nonces. + */ +#include +/* We include the printf external dependency for printf output */ +#include +/* We include our common helpers */ +#include "../common/common.h" + +/* + * The purpose of this example is to implement the DSA + * related algorithms as per FIPS 186-4 based on libecc arithmetic + * primitives. + * + * XXX: Please be aware that libecc has been designed for Elliptic + * Curve cryptography, and as so the arithmetic primitives are + * not optimized for big numbers >= 1024 bits usually used for DSA. + * Additionnaly, a hard limit of our NN values makes it impossible + * to exceed ~5300 bits in the best case (words of size 64 bits). + * + * All in all, please see this as a proof of concept of implementing + * FIPS 186-4 rather than a production code. Use it at your own risk! + * + * !! DISCLAIMER !! + * ================ + * + * Althoug some efforts have been made to secure this implementation + * of DSA (e.g. by protecting the private key and nonces using constant + * time and blinding WHEN activated with BLINDING=1), please consider this + * code as a proof of concept and use it at your own risk. + * + * All-in-all, this piece of code can be useful in some contexts, or risky to + * use in other sensitive ones where advanced side-channels or fault attacks + * have to be considered. Use this DSA code knowingly and at your own risk! + * + */ + + +/* Import a DSA private key from buffers */ +int dsa_import_priv_key(dsa_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen) +{ + int ret, cmp; + + /* Sanity checks */ + MUST_HAVE((priv != NULL), ret, err); + MUST_HAVE((p != NULL) && (q != NULL) && (g != NULL) && (x != NULL), ret, err); + + /* Import our big numbers */ + ret = _os2ip(&(priv->p), p, plen); EG(ret, err); + ret = _os2ip(&(priv->q), q, qlen); EG(ret, err); + ret = _os2ip(&(priv->g), g, glen); EG(ret, err); + ret = _os2ip(&(priv->x), x, xlen); EG(ret, err); + + /* Sanity check that q < p */ + ret = nn_cmp(&(priv->q), &(priv->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Sanity check that g < p */ + ret = nn_cmp(&(priv->g), &(priv->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Sanity check that x < q */ + ret = nn_cmp(&(priv->x), &(priv->q), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + +err: + if(ret && (priv != NULL)){ + IGNORE_RET_VAL(local_memset(priv, 0, sizeof(dsa_priv_key))); + } + + return ret; +} + +/* Import a DSA public key from buffers */ +int dsa_import_pub_key(dsa_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen) +{ + int ret, cmp; + + /* Sanity checks */ + MUST_HAVE((pub != NULL), ret, err); + MUST_HAVE((p != NULL) && (q != NULL) && (g != NULL) && (y != NULL), ret, err); + + /* Import our big numbers */ + ret = _os2ip(&(pub->p), p, plen); EG(ret, err); + ret = _os2ip(&(pub->q), q, qlen); EG(ret, err); + ret = _os2ip(&(pub->g), g, glen); EG(ret, err); + ret = _os2ip(&(pub->y), y, ylen); EG(ret, err); + + /* Sanity check that q < p */ + ret = nn_cmp(&(pub->q), &(pub->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Sanity check that g < p */ + ret = nn_cmp(&(pub->g), &(pub->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Sanity check that y < p */ + ret = nn_cmp(&(pub->y), &(pub->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + +err: + if(ret && (pub != NULL)){ + IGNORE_RET_VAL(local_memset(pub, 0, sizeof(dsa_pub_key))); + } + + return ret; +} + + + +/* Compute a DSA public key from a private key. + * The public key is computed using modular exponentiation of the generator + * with the private key. + */ +int dsa_compute_pub_from_priv(dsa_pub_key *pub, const dsa_priv_key *priv) +{ + int ret, cmp; + nn_src_t p, q, g, x; + nn x_; + x_.magic = WORD(0); + + MUST_HAVE((pub != NULL) && (priv != NULL), ret, err); + + /* Make things more readable */ + p = &(priv->p); + q = &(priv->q); + g = &(priv->g); + x = &(priv->x); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + /* Sanity check that q < p */ + ret = nn_cmp(&(priv->q), &(priv->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Sanity check that g < p */ + ret = nn_cmp(&(priv->g), &(priv->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + /* Sanity check that x < q */ + ret = nn_cmp(&(priv->x), &(priv->q), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + ret = nn_init(&x_, 0); EG(ret, err); + /* Blind the private key in all cases as this is a + * sensitive value. + */ + ret = _blind_scalar(x, q, &x_); EG(ret, err); + ret = _fix_scalar_msb(&x_, q, &x_); EG(ret, err); + + /* Perform the exponentiation y = g**x mod (p) */ + ret = nn_mod_pow(&(pub->y), g, &x_, p); EG(ret, err); + + /* Initialize the public key */ + ret = nn_copy(&(pub->p), p); EG(ret, err); + ret = nn_copy(&(pub->q), q); EG(ret, err); + ret = nn_copy(&(pub->g), g); + +err: + if(ret && (pub != NULL)){ + IGNORE_RET_VAL(local_memset(pub, 0, sizeof(dsa_pub_key))); + } + + nn_uninit(&x_); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(x); + + return ret; +} + +/* Generate a DSA signature + * This implements "DSA Signature Generation" in section 4.6 of FIPS 186-4. + */ +int dsa_sign(const dsa_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type dsa_hash) +{ + int ret, iszero; + /* N is the bit length of q */ + bitcnt_t N, rshift; + /* Length of the hash function */ + u8 hlen, block_size; + nn_src_t p, q, g, x; + /* The nonce, it inverse and its protected version */ + nn k, kinv, k_; + /* r, s and z */ + nn r, s, z; + /* Hash */ + u8 hash[MAX_DIGEST_SIZE]; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b; + b.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + k.magic = kinv.magic = k_.magic = r.magic = s.magic = z.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((priv != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + p = &(priv->p); + q = &(priv->q); + g = &(priv->g); + x = &(priv->x); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + /* Let N be the bit length of q. Let min(N, outlen) denote the minimum + * of the positive integers N and outlen, where outlen is the bit length + * of the hash function output block. + */ + ret = nn_bitlen(q, &N); EG(ret, err); + ret = gen_hash_get_hash_sizes(dsa_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on the signature length */ + MUST_HAVE((siglen == (2 * BYTECEIL(N))), ret, err); + +restart: + /* If the nonce is imposed, use it. Else get a random modulo q */ + if(nonce != NULL){ + ret = _os2ip(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = nn_get_random_mod(&k, q); EG(ret, err); + } + + /* Fix the MSB of our scalar */ + ret = nn_copy(&k_, &k); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind the scalar */ + ret = _blind_scalar(&k_, q, &k_); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = _fix_scalar_msb(&k_, q, &k_); EG(ret, err); + /* r = (g**k mod p) mod q */ + ret = nn_init(&r, 0); EG(ret, err); + /* Exponentiation modulo p */ + ret = nn_mod_pow(&r, g, &k_, p); EG(ret, err); + /* Modulo q */ + ret = nn_mod(&r, &r, q); EG(ret, err); + + /* If r is 0, restart the process */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export r */ + ret = _i2osp(&r, sig, (siglen / 2)); EG(ret, err); + + /* Compute the hash */ + ret = gen_hash_hfunc(msg, msglen, hash, dsa_hash); EG(ret, err); + /* z = the leftmost min(N, outlen) bits of Hash(M) */ + rshift = 0; + if ((hlen * 8) > N) { + rshift = (bitcnt_t)((hlen * 8) - N); + } + ret = _os2ip(&z, hash, hlen); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&z, &z, rshift); EG(ret, err); + } + ret = nn_mod(&z, &z, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, r and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + /* Blind r with b */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + /* Blind the message z */ + ret = nn_mod_mul(&z, &z, &b, q); EG(ret, err); + /* + * In case of blinding, we compute (b*k)^-1, and b^-1 will + * automatically unblind (r*x) in the following. + */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Compute s = k^-1 * (xr + z) mod q */ + /* Compute k^-1 mod q */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&kinv, &k, q); EG(ret, err); + ret = nn_mod_mul(&s, &r, x, q); EG(ret, err); + ret = nn_mod_add(&s, &s, &z, q); EG(ret, err); + ret = nn_mod_mul(&s, &kinv, &s, q); EG(ret, err); + + /* If s is 0, restart the process */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export s */ + ret = _i2osp(&s, sig + (siglen / 2), (siglen / 2)); + +err: + if(ret && (sig != NULL)){ + IGNORE_RET_VAL(local_memset(sig, 0, siglen)); + } + + nn_uninit(&k); + nn_uninit(&kinv); + nn_uninit(&k_); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&z); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(x); + + return ret; +} + + + +/* Verify a DSA signature + * This implements "DSA Signature Verification and Validation" in section 4.7 of FIPS 186-4. + */ +int dsa_verify(const dsa_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type dsa_hash) +{ + int ret, iszero, cmp; + /* N is the bit length of q */ + bitcnt_t N, rshift; + /* Length of the hash function */ + u8 hlen, block_size; + nn_src_t p, q, g, y; + /* r, s */ + nn r, s, z; + /* u1, u2, and v */ + nn u1, u2, v; + /* Hash */ + u8 hash[MAX_DIGEST_SIZE]; + r.magic = s.magic = z.magic = u1.magic = u2.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((pub != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + p = &(pub->p); + q = &(pub->q); + g = &(pub->g); + y = &(pub->y); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(y); EG(ret, err); + + /* Sanity check on the signature length */ + ret = nn_bitlen(q, &N); EG(ret, err); + MUST_HAVE((siglen == (2 * BYTECEIL(N))), ret, err); + + /* Extract r and s */ + ret = _os2ip(&r, sig, (siglen / 2)); EG(ret, err); + ret = _os2ip(&s, sig + (siglen / 2), (siglen / 2)); EG(ret, err); + + /* Return an error if r = 0 or s = 0 */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + /* Check thatt 0 < r′ < q and 0 < s′ < q */ + ret = nn_cmp(&r, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + ret = nn_cmp(&s, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + /* Compute the hash */ + ret = gen_hash_get_hash_sizes(dsa_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + ret = gen_hash_hfunc(msg, msglen, hash, dsa_hash); EG(ret, err); + /* z = the leftmost min(N, outlen) bits of Hash(M) */ + rshift = 0; + if ((hlen * 8) > N) { + rshift = (bitcnt_t)((hlen * 8) - N); + } + ret = _os2ip(&z, hash, hlen); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&z, &z, rshift); EG(ret, err); + } + ret = nn_mod(&z, &z, q); EG(ret, err); + + /* Compute w = s**-1 mod (q) in s */ + ret = nn_modinv(&s, &s, q); EG(ret, err); + + /* u1 = (zw) mod q */ + ret = nn_mod_mul(&u1, &z, &s, q); EG(ret, err); + /* u2 = ((r′)w) mod q */ + ret = nn_mod_mul(&u2, &r, &s, q); EG(ret, err); + /* Now compute v = = ((g**u1 y**u2) mod p) mod q */ + /* NOTE: no need to use a secure exponentiation here as we only + * manipulate public data. + */ + ret = _nn_mod_pow_insecure(&v, g, &u1, p); EG(ret, err); + ret = _nn_mod_pow_insecure(&s, y, &u2, p); EG(ret, err); + ret = nn_mod_mul(&v, &v, &s, p); EG(ret, err); + ret = nn_mod(&v, &v, q); EG(ret, err); + + /* Check that v = r */ + ret = nn_cmp(&v, &r, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + +err: + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&z); + nn_uninit(&u1); + nn_uninit(&u2); + nn_uninit(&v); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(y); + + return ret; +} + +#ifdef DSA +#include +int main(int argc, char *argv[]) +{ + int ret = 0; + + const u8 p[] = { + 0x90, 0x06, 0x64, 0x55, 0xB5, 0xCF, 0xC3, 0x8F, 0x9C, 0xAA, 0x4A, 0x48, 0xB4, 0x28, 0x1F, 0x29, 0x2C, 0x26, 0x0F, 0xEE, 0xF0, 0x1F, 0xD6, 0x10, 0x37, 0xE5, 0x62, 0x58, + 0xA7, 0x79, 0x5A, 0x1C, 0x7A, 0xD4, 0x60, 0x76, 0x98, 0x2C, 0xE6, 0xBB, 0x95, 0x69, 0x36, 0xC6, 0xAB, 0x4D, 0xCF, 0xE0, 0x5E, 0x67, 0x84, 0x58, 0x69, 0x40, 0xCA, 0x54, + 0x4B, 0x9B, 0x21, 0x40, 0xE1, 0xEB, 0x52, 0x3F, 0x00, 0x9D, 0x20, 0xA7, 0xE7, 0x88, 0x0E, 0x4E, 0x5B, 0xFA, 0x69, 0x0F, 0x1B, 0x90, 0x04, 0xA2, 0x78, 0x11, 0xCD, 0x99, + 0x04, 0xAF, 0x70, 0x42, 0x0E, 0xEF, 0xD6, 0xEA, 0x11, 0xEF, 0x7D, 0xA1, 0x29, 0xF5, 0x88, 0x35, 0xFF, 0x56, 0xB8, 0x9F, 0xAA, 0x63, 0x7B, 0xC9, 0xAC, 0x2E, 0xFA, 0xAB, + 0x90, 0x34, 0x02, 0x22, 0x9F, 0x49, 0x1D, 0x8D, 0x34, 0x85, 0x26, 0x1C, 0xD0, 0x68, 0x69, 0x9B, 0x6B, 0xA5, 0x8A, 0x1D, 0xDB, 0xBE, 0xF6, 0xDB, 0x51, 0xE8, 0xFE, 0x34, + 0xE8, 0xA7, 0x8E, 0x54, 0x2D, 0x7B, 0xA3, 0x51, 0xC2, 0x1E, 0xA8, 0xD8, 0xF1, 0xD2, 0x9F, 0x5D, 0x5D, 0x15, 0x93, 0x94, 0x87, 0xE2, 0x7F, 0x44, 0x16, 0xB0, 0xCA, 0x63, + 0x2C, 0x59, 0xEF, 0xD1, 0xB1, 0xEB, 0x66, 0x51, 0x1A, 0x5A, 0x0F, 0xBF, 0x61, 0x5B, 0x76, 0x6C, 0x58, 0x62, 0xD0, 0xBD, 0x8A, 0x3F, 0xE7, 0xA0, 0xE0, 0xDA, 0x0F, 0xB2, + 0xFE, 0x1F, 0xCB, 0x19, 0xE8, 0xF9, 0x99, 0x6A, 0x8E, 0xA0, 0xFC, 0xCD, 0xE5, 0x38, 0x17, 0x52, 0x38, 0xFC, 0x8B, 0x0E, 0xE6, 0xF2, 0x9A, 0xF7, 0xF6, 0x42, 0x77, 0x3E, + 0xBE, 0x8C, 0xD5, 0x40, 0x24, 0x15, 0xA0, 0x14, 0x51, 0xA8, 0x40, 0x47, 0x6B, 0x2F, 0xCE, 0xB0, 0xE3, 0x88, 0xD3, 0x0D, 0x4B, 0x37, 0x6C, 0x37, 0xFE, 0x40, 0x1C, 0x2A, + 0x2C, 0x2F, 0x94, 0x1D, 0xAD, 0x17, 0x9C, 0x54, 0x0C, 0x1C, 0x8C, 0xE0, 0x30, 0xD4, 0x60, 0xC4, 0xD9, 0x83, 0xBE, 0x9A, 0xB0, 0xB2, 0x0F, 0x69, 0x14, 0x4C, 0x1A, 0xE1, + 0x3F, 0x93, 0x83, 0xEA, 0x1C, 0x08, 0x50, 0x4F, 0xB0, 0xBF, 0x32, 0x15, 0x03, 0xEF, 0xE4, 0x34, 0x88, 0x31, 0x0D, 0xD8, 0xDC, 0x77, 0xEC, 0x5B, 0x83, 0x49, 0xB8, 0xBF, + 0xE9, 0x7C, 0x2C, 0x56, 0x0E, 0xA8, 0x78, 0xDE, 0x87, 0xC1, 0x1E, 0x3D, 0x59, 0x7F, 0x1F, 0xEA, 0x74, 0x2D, 0x73, 0xEE, 0xC7, 0xF3, 0x7B, 0xE4, 0x39, 0x49, 0xEF, 0x1A, + 0x0D, 0x15, 0xC3, 0xF3, 0xE3, 0xFC, 0x0A, 0x83, 0x35, 0x61, 0x70, 0x55, 0xAC, 0x91, 0x32, 0x8E, 0xC2, 0x2B, 0x50, 0xFC, 0x15, 0xB9, 0x41, 0xD3, 0xD1, 0x62, 0x4C, 0xD8, + 0x8B, 0xC2, 0x5F, 0x3E, 0x94, 0x1F, 0xDD, 0xC6, 0x20, 0x06, 0x89, 0x58, 0x1B, 0xFE, 0xC4, 0x16, 0xB4, 0xB2, 0xCB, 0x73, + }; + + const u8 q[] = { + 0xCF, 0xA0, 0x47, 0x8A, 0x54, 0x71, 0x7B, 0x08, 0xCE, 0x64, 0x80, 0x5B, 0x76, 0xE5, 0xB1, 0x42, 0x49, 0xA7, 0x7A, 0x48, 0x38, 0x46, 0x9D, 0xF7, 0xF7, 0xDC, 0x98, 0x7E, + 0xFC, 0xCF, 0xB1, 0x1D, + }; + + const u8 g[] = { + 0x5E, 0x5C, 0xBA, 0x99, 0x2E, 0x0A, 0x68, 0x0D, 0x88, 0x5E, 0xB9, 0x03, 0xAE, 0xA7, 0x8E, 0x4A, 0x45, 0xA4, 0x69, 0x10, 0x3D, 0x44, 0x8E, 0xDE, 0x3B, 0x7A, 0xCC, 0xC5, + 0x4D, 0x52, 0x1E, 0x37, 0xF8, 0x4A, 0x4B, 0xDD, 0x5B, 0x06, 0xB0, 0x97, 0x0C, 0xC2, 0xD2, 0xBB, 0xB7, 0x15, 0xF7, 0xB8, 0x28, 0x46, 0xF9, 0xA0, 0xC3, 0x93, 0x91, 0x4C, + 0x79, 0x2E, 0x6A, 0x92, 0x3E, 0x21, 0x17, 0xAB, 0x80, 0x52, 0x76, 0xA9, 0x75, 0xAA, 0xDB, 0x52, 0x61, 0xD9, 0x16, 0x73, 0xEA, 0x9A, 0xAF, 0xFE, 0xEC, 0xBF, 0xA6, 0x18, + 0x3D, 0xFC, 0xB5, 0xD3, 0xB7, 0x33, 0x2A, 0xA1, 0x92, 0x75, 0xAF, 0xA1, 0xF8, 0xEC, 0x0B, 0x60, 0xFB, 0x6F, 0x66, 0xCC, 0x23, 0xAE, 0x48, 0x70, 0x79, 0x1D, 0x59, 0x82, + 0xAA, 0xD1, 0xAA, 0x94, 0x85, 0xFD, 0x8F, 0x4A, 0x60, 0x12, 0x6F, 0xEB, 0x2C, 0xF0, 0x5D, 0xB8, 0xA7, 0xF0, 0xF0, 0x9B, 0x33, 0x97, 0xF3, 0x93, 0x7F, 0x2E, 0x90, 0xB9, + 0xE5, 0xB9, 0xC9, 0xB6, 0xEF, 0xEF, 0x64, 0x2B, 0xC4, 0x83, 0x51, 0xC4, 0x6F, 0xB1, 0x71, 0xB9, 0xBF, 0xA9, 0xEF, 0x17, 0xA9, 0x61, 0xCE, 0x96, 0xC7, 0xE7, 0xA7, 0xCC, + 0x3D, 0x3D, 0x03, 0xDF, 0xAD, 0x10, 0x78, 0xBA, 0x21, 0xDA, 0x42, 0x51, 0x98, 0xF0, 0x7D, 0x24, 0x81, 0x62, 0x2B, 0xCE, 0x45, 0x96, 0x9D, 0x9C, 0x4D, 0x60, 0x63, 0xD7, + 0x2A, 0xB7, 0xA0, 0xF0, 0x8B, 0x2F, 0x49, 0xA7, 0xCC, 0x6A, 0xF3, 0x35, 0xE0, 0x8C, 0x47, 0x20, 0xE3, 0x14, 0x76, 0xB6, 0x72, 0x99, 0xE2, 0x31, 0xF8, 0xBD, 0x90, 0xB3, + 0x9A, 0xC3, 0xAE, 0x3B, 0xE0, 0xC6, 0xB6, 0xCA, 0xCE, 0xF8, 0x28, 0x9A, 0x2E, 0x28, 0x73, 0xD5, 0x8E, 0x51, 0xE0, 0x29, 0xCA, 0xFB, 0xD5, 0x5E, 0x68, 0x41, 0x48, 0x9A, + 0xB6, 0x6B, 0x5B, 0x4B, 0x9B, 0xA6, 0xE2, 0xF7, 0x84, 0x66, 0x08, 0x96, 0xAF, 0xF3, 0x87, 0xD9, 0x28, 0x44, 0xCC, 0xB8, 0xB6, 0x94, 0x75, 0x49, 0x6D, 0xE1, 0x9D, 0xA2, + 0xE5, 0x82, 0x59, 0xB0, 0x90, 0x48, 0x9A, 0xC8, 0xE6, 0x23, 0x63, 0xCD, 0xF8, 0x2C, 0xFD, 0x8E, 0xF2, 0xA4, 0x27, 0xAB, 0xCD, 0x65, 0x75, 0x0B, 0x50, 0x6F, 0x56, 0xDD, + 0xE3, 0xB9, 0x88, 0x56, 0x7A, 0x88, 0x12, 0x6B, 0x91, 0x4D, 0x78, 0x28, 0xE2, 0xB6, 0x3A, 0x6D, 0x7E, 0xD0, 0x74, 0x7E, 0xC5, 0x9E, 0x0E, 0x0A, 0x23, 0xCE, 0x7D, 0x8A, + 0x74, 0xC1, 0xD2, 0xC2, 0xA7, 0xAF, 0xB6, 0xA2, 0x97, 0x99, 0x62, 0x0F, 0x00, 0xE1, 0x1C, 0x33, 0x78, 0x7F, 0x7D, 0xED, 0x3B, 0x30, 0xE1, 0xA2, 0x2D, 0x09, 0xF1, 0xFB, + 0xDA, 0x1A, 0xBB, 0xBF, 0xBF, 0x25, 0xCA, 0xE0, 0x5A, 0x13, 0xF8, 0x12, 0xE3, 0x45, 0x63, 0xF9, 0x94, 0x10, 0xE7, 0x3B, + }; + + const u8 x[] = { + 0x3A, 0xBC, 0x15, 0x87, 0x29, 0x7C, 0xE7, 0xB9, 0xEA, 0x1A, 0xD6, 0x65, 0x1C, 0xF2, 0xBC, 0x4D, 0x7F, 0x92, 0xED, 0x25, 0xCA, 0xBC, 0x85, 0x53, 0xF5, 0x67, 0xD1, 0xB4, + 0x0E, 0xBB, 0x87, 0x64, + }; + + const u8 y[] = { + 0x8b, 0x89, 0x1c, 0x86, 0x92, 0xd3, 0xde, 0x87, 0x58, 0x79, 0x39, 0x0f, 0x26, 0x98, 0xb2, 0x6f, 0xbe, 0xcc, 0xa6, 0xb0, 0x75, 0x53, 0x5d, 0xce, 0x6b, 0x0c, 0x86, 0x25, 0x77, 0xf9, 0xfa, 0x0d, 0xef, 0x60, 0x74, 0xe7, 0xa7, 0x62, 0x41, 0x21, 0x22, 0x4a, 0x59, 0x58, 0x96, 0xab, 0xd4, 0xcd, 0xa5, 0x6b, 0x2c, 0xef, 0xb9, 0x42, 0xe0, 0x25, 0xd2, 0xa4, 0x28, 0x2f, 0xfa, 0xa9, 0x8a, 0x48, 0xcd, 0xb4, 0x7e, 0x1a, 0x6f, 0xcb, 0x5c, 0xfb, 0x39, 0x3e, 0xf3, 0x5a, 0xf9, 0xdf, 0x91, 0x31, 0x02, 0xbb, 0x30, 0x3c, 0x2b, 0x5c, 0x36, 0xc3, 0xf8, 0xfc, 0x04, 0xed, 0x7b, 0x8b, 0x69, 0xfe, 0xfe, 0x0c, 0xf3, 0xe1, 0xfc, 0x05, 0xcf, 0xa7, 0x13, 0xb3, 0x43, 0x5b, 0x26, 0x56, 0xe9, 0x13, 0xba, 0x88, 0x74, 0xae, 0xa9, 0xf9, 0x36, 0x00, 0x6a, 0xeb, 0x44, 0x8b, 0xcd, 0x00, 0x5d, 0x18, 0xec, 0x35, 0x62, 0xa3, 0x3d, 0x04, 0xcf, 0x25, 0xc8, 0xd3, 0xd6, 0x98, 0x44, 0x34, 0x34, 0x42, 0xfa, 0x3d, 0xb7, 0xde, 0x61, 0x8c, 0x5e, 0x2d, 0xa0, 0x64, 0x57, 0x3e, 0x61, 0xe6, 0xd5, 0x58, 0x1b, 0xfb, 0x69, 0x4a, 0x23, 0xac, 0x87, 0xfd, 0x5b, 0x52, 0xd6, 0x2e, 0x95, 0x4e, 0x13, 0x76, 0xdb, 0x8d, 0xdb, 0x52, 0x4f, 0xfc, 0x0d, 0x46, 0x9d, 0xf9, 0x78, 0x79, 0x2e, 0xe4, 0x41, 0x73, 0x8e, 0x5d, 0xb0, 0x5a, 0x7d, 0xc4, 0x3e, 0x94, 0xc1, 0x1a, 0x2e, 0x7a, 0x4f, 0xbe, 0x38, 0x30, 0x71, 0xfa, 0x36, 0xd2, 0xa7, 0xec, 0x8a, 0x93, 0x88, 0xfe, 0x1c, 0x4f, 0x79, 0x88, 0x8a, 0x99, 0xd3, 0xb6, 0x10, 0x56, 0x97, 0xc2, 0x55, 0x6b, 0x79, 0xbb, 0x4d, 0x7e, 0x78, 0x1c, 0xeb, 0xb3, 0xd4, 0x86, 0x6a, 0xd8, 0x25, 0xa5, 0xe8, 0x30, 0x84, 0x60, 0x72, 0x28, 0x9f, 0xdb, 0xc9, 0x41, 0xfa, 0x67, 0x9c, 0xa8, 0x2f, 0x5f, 0x78, 0xb7, 0x46, 0x1b, 0x24, 0x04, 0xdb, 0x88, 0x3d, 0x21, 0x5f, 0x4e, 0x06, 0x76, 0xcf, 0x54, 0x93, 0x95, 0x0a, 0xc5, 0x59, 0x16, 0x97, 0xbf, 0xea, 0x8d, 0x1e, 0xe6, 0xec, 0x01, 0x6b, 0x89, 0xba, 0x51, 0xca, 0xfb, 0x5f, 0x9c, 0x84, 0xc9, 0x89, 0xfa, 0x11, 0x73, 0x75, 0xe9, 0x45, 0x78, 0xf2, 0x8b, 0xe0, 0xb3, 0x4c, 0xe0, 0x54, 0x5d, 0xa4, 0x62, 0x66, 0xfd, 0x77, 0xf6, 0x2d, 0x8f, 0x2c, 0xee, 0x92, 0xab, 0x77, 0x01, 0x2a, 0xfe, 0xbc, 0x11, 0x00, 0x89, 0x85, 0xa8, 0x21, 0xcd, 0x2d, 0x97, 0x8c, 0x7e, 0x6f, 0xe7, 0x49, 0x9d, 0x1a, 0xaf, 0x8d, 0xe6, 0x32, 0xc2, 0x1b, 0xb4, 0x8c, 0xa5, 0xcb, 0xf9, 0xf3, 0x10, 0x98, 0xfd, 0x3f, 0xd3, 0x85, 0x4c, 0x49, 0xa6, 0x5d, 0x92, 0x01, 0x74, 0x4a, 0xac, 0xe5, 0x40, 0x35, 0x49, 0x74, 0xf9, + }; + + const u8 msg[] = "abc"; + + const u8 nonce[] = { + 0xA6, 0x90, 0x2C, 0x1E, 0x6E, 0x39, 0x43, 0xC5, 0x62, 0x80, 0x61, 0x58, 0x8A, 0x8B, 0x00, 0x7B, 0xCC, 0xEA, 0x91, 0xDB, 0xF1, 0x29, 0x15, 0x48, 0x3F, 0x04, 0xB2, 0x4A, + 0xB0, 0x67, 0x8B, 0xEE, + }; + + dsa_priv_key priv; + dsa_pub_key pub; + dsa_pub_key pub2; + u8 sig[32*2] = { 0 }; + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Sanity check on size for DSA. + * NOTE: the double parentheses are here to handle -Wunreachable-code + */ + if((NN_USABLE_MAX_BIT_LEN) < (4096)){ + ext_printf("Error: you seem to have compiled libecc with usable NN size < 4096, not suitable for DSA.\n"); + ext_printf(" => Please recompile libecc with EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\"\n"); + ext_printf(" This will increase usable NN for proper DSA up to 4096 bits.\n"); + ext_printf(" Then recompile the current examples with the same EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\" flag and execute again!\n"); + /* NOTE: ret = 0 here to pass self tests even if the library is not compatible */ + ret = 0; + goto err; + } + + + ret = dsa_import_priv_key(&priv, p, sizeof(p), q, sizeof(q), g, sizeof(g), x, sizeof(x)); EG(ret, err); + ret = dsa_import_pub_key(&pub, p, sizeof(p), q, sizeof(q), g, sizeof(g), y, sizeof(y)); EG(ret, err); + ret = dsa_compute_pub_from_priv(&pub2, &priv); EG(ret, err); + + nn_print("y", &(pub2.y)); + + ret = dsa_sign(&priv, msg, sizeof(msg)-1, nonce, sizeof(nonce), sig, sizeof(sig), HASH_SHA256); EG(ret, err); + + buf_print("sig", sig, sizeof(sig)); + + ret = dsa_verify(&pub, msg, sizeof(msg)-1, sig, sizeof(sig), HASH_SHA256); + ext_printf("Signature result %d\n", ret); + +err: + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/sig/gostr34_10_94/Makefile b/crypto/libecc/src/examples/sig/gostr34_10_94/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/gostr34_10_94/Makefile @@ -0,0 +1,34 @@ +ROOT_DIR=../../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +all: gostr34_10_94 +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: gostr34_10_94_dyn +endif + +libhash: + # Compile the hashes + $(VERBOSE_MAKE)cd ../../hash && EXTRA_CFLAGS="$(CFLAGS)" make libhash.a + +gostr34_10_94: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DGOSTR34_10_94 gostr34_10_94.c ../dsa/dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) ../../hash/libhash.a $(LIBSIGN) -o gostr34_10_94 + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +gostr34_10_94_dyn: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DGOSTR34_10_94 gostr34_10_94.c ../dsa/dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) ../../hash/libhash.a $(LIBEC) -L$(BUILD_DIR) -lsign -o gostr34_10_94_dyn +endif + + +clean: + @rm -f gostr34_10_94 + @rm -f gostr34_10_94_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sig/gostr34_10_94/gostr34_10_94.h b/crypto/libecc/src/examples/sig/gostr34_10_94/gostr34_10_94.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/gostr34_10_94/gostr34_10_94.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __GOSTR34_10_94_H__ +#define __GOSTR34_10_94_H__ + +/* + * NOTE: although we only need libarith for GOSTR34_10_94 as we + * manipulate a ring of integers, we include libsig for + * the hash algorithms. + */ +#include + +/* The hash algorithms wrapper */ +#include "../../hash/hash.h" + +/* The DSA include file as we reuse DSA primitives internally */ +#include "../dsa/dsa.h" + +/* We define hereafter the types and functions for GOSTR34_10_94. + */ + +/* GOSTR34_10_94 public key, composed of: + * p the GOSTR34_10_94 prime modulus + * q the GOSTR34_10_94 prime order (prime divisor of (p-1)) + * g the GOSTR34_10_94 generator + * y the public key = g^x (p) + * + * NOTE: the GOST public key is mapped to a DSA public key + * as the parameters are the same. + */ +typedef dsa_pub_key gostr34_10_94_pub_key; + +/* GOSTR34_10_94 private key, composed of: + * p the GOSTR34_10_94 prime modulus + * q the GOSTR34_10_94 prime order (prime divisor of (p-1)) + * g the GOSTR34_10_94 generator + * x the secret key + * + * NOTE: the GOST private key is mapped to a DSA private key + * as the parameters are the same. + */ +typedef dsa_priv_key gostr34_10_94_priv_key; + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_10_94_import_priv_key(gostr34_10_94_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_10_94_import_pub_key(gostr34_10_94_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_10_94_compute_pub_from_priv(gostr34_10_94_pub_key *pub, + const gostr34_10_94_priv_key *priv); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_10_94_sign(const gostr34_10_94_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type gostr34_10_94_hash); + +ATTRIBUTE_WARN_UNUSED_RET int gostr34_10_94_verify(const gostr34_10_94_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type gostr34_10_94_hash); + +#endif /* __GOSTR34_10_94_H__ */ diff --git a/crypto/libecc/src/examples/sig/gostr34_10_94/gostr34_10_94.c b/crypto/libecc/src/examples/sig/gostr34_10_94/gostr34_10_94.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/gostr34_10_94/gostr34_10_94.c @@ -0,0 +1,521 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "gostr34_10_94.h" + + +/* We include the rand external dependency because we have to generate + * some random data for the nonces. + */ +#include +/* We include the printf external dependency for printf output */ +#include +/* We include our common helpers */ +#include "../common/common.h" + +/* + * The purpose of this example is to implement the GOSTR34-10-94 + * based on libecc arithmetic primitives. + * + * XXX: Please be aware that libecc has been designed for Elliptic + * Curve cryptography, and as so the arithmetic primitives are + * not optimized for big numbers >= 1024 bits usually used for GOSTR. + * Additionnaly, a hard limit of our NN values makes it impossible + * to exceed ~5300 bits in the best case (words of size 64 bits). + * + * All in all, please see this as a proof of concept. + * Use it at your own risk! + * + * !! DISCLAIMER !! + * ================ + * + * Althoug some efforts have been made to secure this implementation + * of GOSTR (e.g. by protecting the private key and nonces using constant + * time and blinding WHEN activated with BLINDING=1), please consider this + * code as a proof of concept and use it at your own risk. + * + * All-in-all, this piece of code can be useful in some contexts, or risky to + * use in other sensitive ones where advanced side-channels or fault attacks + * have to be considered. Use this GOSTR code knowingly and at your own risk! + * + */ + +/* NOTE: since GOSTR34_10_94 is very similar to DSA, we reuse some of our DSA + * primitives to factorize some code. Also, GOSTR34_10_94 private and public keys + * have the exact same type as DSA keys. + */ + +/* Import a GOSTR34_10_94 private key from buffers */ +int gostr34_10_94_import_priv_key(gostr34_10_94_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen) +{ + return dsa_import_priv_key(priv, p, plen, q, qlen, g, glen, x, xlen); +} + +/* Import a GOSTR34_10_94 public key from buffers */ +int gostr34_10_94_import_pub_key(gostr34_10_94_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen) +{ + return dsa_import_pub_key(pub, p, plen, q, qlen, g, glen, y, ylen); +} + + + +/* Compute a GOSTR34_10_94 public key from a private key. + * The public key is computed using modular exponentiation of the generator + * with the private key. + */ +int gostr34_10_94_compute_pub_from_priv(gostr34_10_94_pub_key *pub, const gostr34_10_94_priv_key *priv) +{ + return dsa_compute_pub_from_priv(pub, priv); +} + +/* Generate a GOSTR34_10_94 signature + */ +int gostr34_10_94_sign(const gostr34_10_94_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type gostr34_10_94_hash) +{ + int ret, iszero; + /* N is the bit length of q */ + bitcnt_t N, rshift; + /* Length of the hash function */ + u8 hlen, block_size; + nn_src_t p, q, g, x; + /* The nonce and its protected version */ + nn k, k_; + /* r, s and z */ + nn r, s, z; + /* Hash */ + u8 hash[MAX_DIGEST_SIZE]; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b; + b.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + k.magic = k_.magic = r.magic = s.magic = z.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((priv != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + p = &(priv->p); + q = &(priv->q); + g = &(priv->g); + x = &(priv->x); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + /* Let N be the bit length of q. Let min(N, outlen) denote the minimum + * of the positive integers N and outlen, where outlen is the bit length + * of the hash function output block. + */ + ret = nn_bitlen(q, &N); EG(ret, err); + ret = gen_hash_get_hash_sizes(gostr34_10_94_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on the signature length */ + MUST_HAVE((siglen == (2 * BYTECEIL(N))), ret, err); + +restart: + /* If the nonce is imposed, use it. Else get a random modulo q */ + if(nonce != NULL){ + ret = _os2ip(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = nn_get_random_mod(&k, q); EG(ret, err); + } + + /* Fix the MSB of our scalar */ + ret = nn_copy(&k_, &k); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind the scalar */ + ret = _blind_scalar(&k_, q, &k_); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = _fix_scalar_msb(&k_, q, &k_); EG(ret, err); + /* r = (g**k mod p) mod q */ + ret = nn_init(&r, 0); EG(ret, err); + /* Exponentiation modulo p */ + ret = nn_mod_pow(&r, g, &k_, p); EG(ret, err); + /* Modulo q */ + ret = nn_mod(&r, &r, q); EG(ret, err); + + /* If r is 0, restart the process */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export r */ + ret = _i2osp(&r, sig, (siglen / 2)); EG(ret, err); + + /* Compute the hash */ + ret = gen_hash_hfunc(msg, msglen, hash, gostr34_10_94_hash); EG(ret, err); + /* Reverse the endianness of the hash as little endian is needed here */ + ret = _reverse_endianness(hash, hlen); EG(ret, err); + + /* z = the leftmost min(N, outlen) bits of Hash(M) */ + rshift = 0; + if ((hlen * 8) > N) { + rshift = (bitcnt_t)((hlen * 8) - N); + } + ret = _os2ip(&z, hash, hlen); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&z, &z, rshift); EG(ret, err); + } + ret = nn_mod(&z, &z, q); EG(ret, err); + /* If z = 0, then set it to 1 */ + ret = nn_iszero(&z, &iszero); EG(ret, err); + if(iszero){ + ret = nn_one(&z); EG(ret, err); + } + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, r and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + /* Blind r with b */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + /* Blind the message z */ + ret = nn_mod_mul(&z, &z, &b, q); EG(ret, err); + /* + * In case of blinding, we compute b^-1 with + * little Fermat theorem. This will be used to + * unblind s. + */ + ret = nn_modinv_fermat(&b, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Compute s = (xr + kz) mod q */ + ret = nn_mod_mul(&s, &r, x, q); EG(ret, err); + ret = nn_mod_mul(&r, &k, &z, q); EG(ret, err); + ret = nn_mod_add(&s, &s, &r, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, unblind s */ + ret = nn_mod_mul(&s, &s, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* If s is 0, restart the process */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export s */ + ret = _i2osp(&s, sig + (siglen / 2), (siglen / 2)); + +err: + if(ret && (sig != NULL)){ + IGNORE_RET_VAL(local_memset(sig, 0, siglen)); + } + + nn_uninit(&k); + nn_uninit(&k_); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&z); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(x); + + return ret; +} + + + +/* Verify a GOSTR34_10_94 signature + */ +int gostr34_10_94_verify(const gostr34_10_94_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type gostr34_10_94_hash) +{ + int ret, iszero, cmp; + /* N is the bit length of q */ + bitcnt_t N, rshift; + /* Length of the hash function */ + u8 hlen, block_size; + nn_src_t p, q, g, y; + /* r, s */ + nn r, s, z; + /* u1, u2, and v */ + nn u1, u2, v; + /* Hash */ + u8 hash[MAX_DIGEST_SIZE]; + r.magic = s.magic = z.magic = u1.magic = u2.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((pub != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + p = &(pub->p); + q = &(pub->q); + g = &(pub->g); + y = &(pub->y); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(y); EG(ret, err); + + /* Sanity check on the signature length */ + ret = nn_bitlen(q, &N); EG(ret, err); + MUST_HAVE((siglen == (2 * BYTECEIL(N))), ret, err); + + /* Extract r and s */ + ret = _os2ip(&r, sig, (siglen / 2)); EG(ret, err); + ret = _os2ip(&s, sig + (siglen / 2), (siglen / 2)); EG(ret, err); + + /* Return an error if r = 0 or s = 0 */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + /* Check that 0 < r < q and 0 < s < q */ + ret = nn_cmp(&r, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + ret = nn_cmp(&s, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + /* Compute the hash */ + ret = gen_hash_get_hash_sizes(gostr34_10_94_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + ret = gen_hash_hfunc(msg, msglen, hash, gostr34_10_94_hash); EG(ret, err); + /* Reverse the endianness of the hash as little endian is needed here */ + ret = _reverse_endianness(hash, hlen); EG(ret, err); + + /* z = the leftmost min(N, outlen) bits of Hash(M) */ + rshift = 0; + if ((hlen * 8) > N) { + rshift = (bitcnt_t)((hlen * 8) - N); + } + ret = _os2ip(&z, hash, hlen); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&z, &z, rshift); EG(ret, err); + } + ret = nn_mod(&z, &z, q); EG(ret, err); + /* If z = 0, then set it to 1 */ + ret = nn_iszero(&z, &iszero); EG(ret, err); + if(iszero){ + ret = nn_one(&z); EG(ret, err); + } + + /* Initialize internal variables */ + ret = nn_init(&v, 0); EG(ret, err); + ret = nn_init(&u1, 0); EG(ret, err); + ret = nn_init(&u2, 0); EG(ret, err); + + /* Compute v = z ** (q-2) mod (q) in s */ + ret = nn_dec(&u1, q); EG(ret, err); /* use u1 as temp here */ + ret = nn_dec(&u1, &u1); EG(ret, err); + ret = _nn_mod_pow_insecure(&v, &z, &u1, q); EG(ret, err); + /* u1 = (s * v) mod q */ + ret = nn_mod_mul(&u1, &s, &v, q); EG(ret, err); + /* u2 = ((q-r) * v) mod q */ + ret = nn_sub(&u2, q, &r); EG(ret, err); + ret = nn_mod_mul(&u2, &u2, &v, q); EG(ret, err); + /* Now compute v = ((g**u1 y**u2) mod p) mod q */ + /* NOTE: no need to use a secure exponentiation here as we only + * manipulate public data. + */ + ret = _nn_mod_pow_insecure(&v, g, &u1, p); EG(ret, err); + ret = _nn_mod_pow_insecure(&s, y, &u2, p); EG(ret, err); + ret = nn_mod_mul(&v, &v, &s, p); EG(ret, err); + ret = nn_mod(&v, &v, q); EG(ret, err); + + /* Check that v = r */ + ret = nn_cmp(&v, &r, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + +err: + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&z); + nn_uninit(&u1); + nn_uninit(&u2); + nn_uninit(&v); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(y); + + return ret; +} + +#ifdef GOSTR34_10_94 +#include +int main(int argc, char *argv[]) +{ + int ret = 0; + + /**** Self-signed certificate taken from RFC4491 ****/ + /* NOTE1: we can only perform verification using this self-signed certificate as we do not have the private key! + * NOTE2: id-GostR3410-94-CryptoPro-A-ParamSet (values of p, q, g) are extracted from the same RFC + */ + const u8 p[] = { + 0x00, 0xB4, 0xE2, 0x5E, 0xFB, 0x01, 0x8E, 0x3C, 0x8B, 0x87, 0x50, 0x5E, 0x2A, 0x67, 0x55, 0x3C, + 0x5E, 0xDC, 0x56, 0xC2, 0x91, 0x4B, 0x7E, 0x4F, 0x89, 0xD2, 0x3F, 0x03, 0xF0, 0x33, 0x77, 0xE7, + 0x0A, 0x29, 0x03, 0x48, 0x9D, 0xD6, 0x0E, 0x78, 0x41, 0x8D, 0x3D, 0x85, 0x1E, 0xDB, 0x53, 0x17, + 0xC4, 0x87, 0x1E, 0x40, 0xB0, 0x42, 0x28, 0xC3, 0xB7, 0x90, 0x29, 0x63, 0xC4, 0xB7, 0xD8, 0x5D, + 0x52, 0xB9, 0xAA, 0x88, 0xF2, 0xAF, 0xDB, 0xEB, 0x28, 0xDA, 0x88, 0x69, 0xD6, 0xDF, 0x84, 0x6A, + 0x1D, 0x98, 0x92, 0x4E, 0x92, 0x55, 0x61, 0xBD, 0x69, 0x30, 0x0B, 0x9D, 0xDD, 0x05, 0xD2, 0x47, + 0xB5, 0x92, 0x2D, 0x96, 0x7C, 0xBB, 0x02, 0x67, 0x18, 0x81, 0xC5, 0x7D, 0x10, 0xE5, 0xEF, 0x72, + 0xD3, 0xE6, 0xDA, 0xD4, 0x22, 0x3D, 0xC8, 0x2A, 0xA1, 0xF7, 0xD0, 0x29, 0x46, 0x51, 0xA4, 0x80, + 0xDF, + }; + + const u8 q[] = { + 0x00, 0x97, 0x24, 0x32, 0xA4, 0x37, 0x17, 0x8B, 0x30, 0xBD, 0x96, 0x19, 0x5B, 0x77, 0x37, 0x89, + 0xAB, 0x2F, 0xFF, 0x15, 0x59, 0x4B, 0x17, 0x6D, 0xD1, 0x75, 0xB6, 0x32, 0x56, 0xEE, 0x5A, 0xF2, + 0xCF, + }; + + const u8 g[] = { + 0x00, 0x8F, 0xD3, 0x67, 0x31, 0x23, 0x76, 0x54, 0xBB, 0xE4, 0x1F, 0x5F, 0x1F, 0x84, 0x53, 0xE7, + 0x1C, 0xA4, 0x14, 0xFF, 0xC2, 0x2C, 0x25, 0xD9, 0x15, 0x30, 0x9E, 0x5D, 0x2E, 0x62, 0xA2, 0xA2, + 0x6C, 0x71, 0x11, 0xF3, 0xFC, 0x79, 0x56, 0x8D, 0xAF, 0xA0, 0x28, 0x04, 0x2F, 0xE1, 0xA5, 0x2A, + 0x04, 0x89, 0x80, 0x5C, 0x0D, 0xE9, 0xA1, 0xA4, 0x69, 0xC8, 0x44, 0xC7, 0xCA, 0xBB, 0xEE, 0x62, + 0x5C, 0x30, 0x78, 0x88, 0x8C, 0x1D, 0x85, 0xEE, 0xA8, 0x83, 0xF1, 0xAD, 0x5B, 0xC4, 0xE6, 0x77, + 0x6E, 0x8E, 0x1A, 0x07, 0x50, 0x91, 0x2D, 0xF6, 0x4F, 0x79, 0x95, 0x64, 0x99, 0xF1, 0xE1, 0x82, + 0x47, 0x5B, 0x0B, 0x60, 0xE2, 0x63, 0x2A, 0xDC, 0xD8, 0xCF, 0x94, 0xE9, 0xC5, 0x4F, 0xD1, 0xF3, + 0xB1, 0x09, 0xD8, 0x1F, 0x00, 0xBF, 0x2A, 0xB8, 0xCB, 0x86, 0x2A, 0xDF, 0x7D, 0x40, 0xB9, 0x36, + 0x9A, + }; + + u8 x[sizeof(q)]; + + u8 y_self_signed[] = { + 0xBB, 0x84, 0x66, 0xE1, 0x79, 0x9E, 0x5B, 0x34, 0xD8, 0x2C, 0x80, 0x7F, 0x13, 0xA8, 0x19, 0x66, + 0x71, 0x57, 0xFE, 0x8C, 0x54, 0x25, 0x21, 0x47, 0x6F, 0x30, 0x0B, 0x27, 0x77, 0x46, 0x98, 0xC6, + 0xFB, 0x47, 0x55, 0xBE, 0xB7, 0xB2, 0xF3, 0x93, 0x6C, 0x39, 0xB5, 0x42, 0x37, 0x26, 0x84, 0xE2, + 0x0D, 0x10, 0x8A, 0x24, 0x0E, 0x1F, 0x0C, 0x42, 0x4D, 0x2B, 0x3B, 0x11, 0x2B, 0xA8, 0xBF, 0x66, + 0x39, 0x32, 0x5C, 0x94, 0x8B, 0xC1, 0xA8, 0xFE, 0x1B, 0x63, 0x12, 0xF6, 0x09, 0x25, 0x87, 0xCC, + 0x75, 0x1B, 0xF4, 0xE5, 0x89, 0x8A, 0x09, 0x82, 0x68, 0xD3, 0x5C, 0x77, 0xA6, 0x0F, 0xB6, 0x90, + 0x10, 0x13, 0x8D, 0xE3, 0x3E, 0x7C, 0x9C, 0x91, 0xD6, 0xAC, 0x0D, 0x08, 0x2C, 0x3E, 0x78, 0xC1, + 0xB5, 0xC2, 0xB6, 0xB7, 0x1A, 0xA8, 0x2A, 0x8B, 0x45, 0x81, 0x93, 0x32, 0x32, 0x76, 0xFA, 0x7B, + }; + + const u8 sig[32*2] = { + /* r' */ + 0x22, 0xf7, 0x85, 0xf3, 0x55, 0xbd, 0x94, 0xec, 0x46, 0x91, 0x9c, 0x67, 0xac, 0x58, 0xd7, 0x05, 0x2a, 0xa7, + 0x8c, 0xb7, 0x85, 0x2a, 0x01, 0x75, 0x85, 0xf7, 0xd7, 0x38, 0x03, 0xfb, 0xcd, 0x43, + /* s */ + 0x11, 0xc7, 0x08, 0x7e, 0x12, 0xdc, 0x02, 0xf1, 0x02, 0x23, 0x29, 0x47, 0x76, 0x8f, 0x47, 0x2a, 0x81, 0x83, + 0x50, 0xe3, 0x07, 0xcc, 0xf2, 0xe4, 0x31, 0x23, 0x89, 0x42, 0xc8, 0x73, 0xe1, 0xde, + }; + u8 check_sig[32*2]; + + const u8 msg[] = { + 0x30, 0x82, 0x01, 0xba, 0x02, 0x10, 0x23, 0x0e, 0xe3, 0x60, 0x46, 0x95, + 0x24, 0xce, 0xc7, 0x0b, 0xe4, 0x94, 0x18, 0x2e, 0x7e, 0xeb, 0x30, 0x08, + 0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x04, 0x30, 0x69, 0x31, 0x1d, + 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x14, 0x47, 0x6f, 0x73, + 0x74, 0x52, 0x33, 0x34, 0x31, 0x30, 0x2d, 0x39, 0x34, 0x20, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, + 0x04, 0x0a, 0x0c, 0x09, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x50, 0x72, + 0x6f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x52, 0x55, 0x31, 0x27, 0x30, 0x25, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x18, 0x47, 0x6f, 0x73, 0x74, 0x52, + 0x33, 0x34, 0x31, 0x30, 0x2d, 0x39, 0x34, 0x40, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x30, + 0x35, 0x30, 0x38, 0x31, 0x36, 0x31, 0x32, 0x33, 0x32, 0x35, 0x30, 0x5a, + 0x17, 0x0d, 0x31, 0x35, 0x30, 0x38, 0x31, 0x36, 0x31, 0x32, 0x33, 0x32, + 0x35, 0x30, 0x5a, 0x30, 0x69, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x0c, 0x14, 0x47, 0x6f, 0x73, 0x74, 0x52, 0x33, 0x34, 0x31, + 0x30, 0x2d, 0x39, 0x34, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x43, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x50, 0x72, 0x6f, 0x31, 0x0b, 0x30, 0x09, + 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x55, 0x31, 0x27, 0x30, + 0x25, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, + 0x16, 0x18, 0x47, 0x6f, 0x73, 0x74, 0x52, 0x33, 0x34, 0x31, 0x30, 0x2d, + 0x39, 0x34, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x30, 0x81, 0xa5, 0x30, 0x1c, 0x06, 0x06, 0x2a, 0x85, 0x03, + 0x02, 0x02, 0x14, 0x30, 0x12, 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, + 0x20, 0x02, 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1e, 0x01, 0x03, + 0x81, 0x84, 0x00, 0x04, 0x81, 0x80, 0xbb, 0x84, 0x66, 0xe1, 0x79, 0x9e, + 0x5b, 0x34, 0xd8, 0x2c, 0x80, 0x7f, 0x13, 0xa8, 0x19, 0x66, 0x71, 0x57, + 0xfe, 0x8c, 0x54, 0x25, 0x21, 0x47, 0x6f, 0x30, 0x0b, 0x27, 0x77, 0x46, + 0x98, 0xc6, 0xfb, 0x47, 0x55, 0xbe, 0xb7, 0xb2, 0xf3, 0x93, 0x6c, 0x39, + 0xb5, 0x42, 0x37, 0x26, 0x84, 0xe2, 0x0d, 0x10, 0x8a, 0x24, 0x0e, 0x1f, + 0x0c, 0x42, 0x4d, 0x2b, 0x3b, 0x11, 0x2b, 0xa8, 0xbf, 0x66, 0x39, 0x32, + 0x5c, 0x94, 0x8b, 0xc1, 0xa8, 0xfe, 0x1b, 0x63, 0x12, 0xf6, 0x09, 0x25, + 0x87, 0xcc, 0x75, 0x1b, 0xf4, 0xe5, 0x89, 0x8a, 0x09, 0x82, 0x68, 0xd3, + 0x5c, 0x77, 0xa6, 0x0f, 0xb6, 0x90, 0x10, 0x13, 0x8d, 0xe3, 0x3e, 0x7c, + 0x9c, 0x91, 0xd6, 0xac, 0x0d, 0x08, 0x2c, 0x3e, 0x78, 0xc1, 0xb5, 0xc2, + 0xb6, 0xb7, 0x1a, 0xa8, 0x2a, 0x8b, 0x45, 0x81, 0x93, 0x32, 0x32, 0x76, + 0xfa, 0x7b + }; + + gostr34_10_94_pub_key pub; + gostr34_10_94_priv_key priv; + nn x_; + x_.magic = WORD(0); + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Sanity check on size for GOSTR34_10_94. + * NOTE: the double parentheses are here to handle -Wunreachable-code + */ + if((NN_USABLE_MAX_BIT_LEN) < (4096)){ + ext_printf("Error: you seem to have compiled libecc with usable NN size < 4096, not suitable for GOSTR34_10_94.\n"); + ext_printf(" => Please recompile libecc with EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\"\n"); + ext_printf(" This will increase usable NN for proper GOSTR34_10_94 up to 4096 bits.\n"); + ext_printf(" Then recompile the current examples with the same EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\" flag and execute again!\n"); + /* NOTE: ret = 0 here to pass self tests even if the library is not compatible */ + ret = 0; + goto err; + } + + /* Reverse the endianness of y in place as it is little endian encoded */ + ret = _reverse_endianness(&y_self_signed[0], sizeof(y_self_signed)); EG(ret, err); + + ret = gostr34_10_94_import_pub_key(&pub, p, sizeof(p), q, sizeof(q), g, sizeof(g), y_self_signed, sizeof(y_self_signed)); EG(ret, err); + + /* Verify the signature */ + ret = gostr34_10_94_verify(&pub, msg, sizeof(msg), sig, sizeof(sig), HASH_GOST34_11_94_RFC4357); + ext_printf("RFC4357 self-signed signature result %d\n", ret); + + /****** Now check the signature procedure *********/ + /* Get a random private key 0 < x < q */ + ret = nn_get_random_mod(&x_, &(pub.q)); EG(ret, err); + ret = _i2osp(&x_, &x[0], sizeof(x)); EG(ret, err); + /* Import the private key */ + ret = gostr34_10_94_import_priv_key(&priv, p, sizeof(p), q, sizeof(q), g, sizeof(g), x, sizeof(x)); EG(ret, err); + /* Compute the public key from the private key */ + ret = gostr34_10_94_compute_pub_from_priv(&pub, &priv); EG(ret, err); + /* Sign the message */ + ret = gostr34_10_94_sign(&priv, msg, sizeof(msg), NULL, 0, check_sig, sizeof(check_sig), HASH_GOST34_11_94_RFC4357); EG(ret, err); + /* Verify the message */ + ret = gostr34_10_94_verify(&pub, msg, sizeof(msg), check_sig, sizeof(check_sig), HASH_GOST34_11_94_RFC4357); + ext_printf("Random signature result %d\n", ret); + +err: + nn_uninit(&x_); + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/sig/kcdsa/Makefile b/crypto/libecc/src/examples/sig/kcdsa/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/kcdsa/Makefile @@ -0,0 +1,37 @@ +ROOT_DIR=../../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +all: kcdsa +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: kcdsa_dyn +endif + +# NOTE: avoid a false positive detecting a -Werror=stringop-overflow in kcdsa.c with Wno-error +BIN_CFLAGS += -Wno-error + +libhash: + # Compile the hashes + $(VERBOSE_MAKE)cd ../../hash && EXTRA_CFLAGS="$(CFLAGS)" make libhash.a + +kcdsa: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DKCDSA kcdsa.c ../dsa/dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) ../../hash/libhash.a $(LIBSIGN) -o kcdsa + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +kcdsa_dyn: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DKCDSA kcdsa.c ../dsa/dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBEC) -L$(BUILD_DIR) ../../hash/libhash.a -lsign -o kcdsa_dyn +endif + + +clean: + @rm -f kcdsa + @rm -f kcdsa_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sig/kcdsa/kcdsa.h b/crypto/libecc/src/examples/sig/kcdsa/kcdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/kcdsa/kcdsa.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __KCDSA_H__ +#define __KCDSA_H__ + +/* + * NOTE: although we only need libarith for KCDSA as we + * manipulate a ring of integers, we include libsig for + * the hash algorithms. + */ +#include + +/* The hash algorithms wrapper */ +#include "../../hash/hash.h" + +/* The DSA include file as we reuse DSA primitives internally */ +#include "../dsa/dsa.h" + +/* We define hereafter the types and functions for KCDSA. + */ + +/* KCDSA public key, composed of: + * p the KCDSA prime modulus + * q the KCDSA prime order (prime divisor of (p-1)) + * g the KCDSA generator + * y the public key = g^x (p) + * + * NOTE: the KCDSA (Schnorr DSA) public key is mapped to a DSA public key + * as the parameters are the same. + */ +typedef dsa_pub_key kcdsa_pub_key; + +/* KCDSA private key, composed of: + * p the KCDSA prime modulus + * q the KCDSA prime order (prime divisor of (p-1)) + * g the KCDSA generator + * x the secret key + * + * NOTE: the KCDSA (Schnorr DSA) private key is mapped to a DSA private key + * as the parameters are the same. + */ +typedef dsa_priv_key kcdsa_priv_key; + +ATTRIBUTE_WARN_UNUSED_RET int kcdsa_import_priv_key(kcdsa_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen); + +ATTRIBUTE_WARN_UNUSED_RET int kcdsa_import_pub_key(kcdsa_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen); + +ATTRIBUTE_WARN_UNUSED_RET int kcdsa_compute_pub_from_priv(kcdsa_pub_key *pub, + const kcdsa_priv_key *priv); + +ATTRIBUTE_WARN_UNUSED_RET int kcdsa_sign(const kcdsa_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type kcdsa_hash); + +ATTRIBUTE_WARN_UNUSED_RET int kcdsa_verify(const kcdsa_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type kcdsa_hash); + +#endif /* __KCDSA_H__ */ diff --git a/crypto/libecc/src/examples/sig/kcdsa/kcdsa.c b/crypto/libecc/src/examples/sig/kcdsa/kcdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/kcdsa/kcdsa.c @@ -0,0 +1,759 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "kcdsa.h" + +/* We include the rand external dependency because we have to generate + * some random data for the nonces. + */ +#include +/* We include the printf external dependency for printf output */ +#include +/* We include our common helpers */ +#include "../common/common.h" + +/* + * The purpose of this example is to implement the KCDSA signature scheme + * based on libecc arithmetic primitives, as described in the ISO14888-3 + * standard. + * + * XXX: Please be aware that libecc has been designed for Elliptic + * Curve cryptography, and as so the arithmetic primitives are + * not optimized for big numbers >= 1024 bits usually used for KCDSA. + * Additionnaly, a hard limit of our NN values makes it impossible + * to exceed ~5300 bits in the best case (words of size 64 bits). + * + * All in all, please see this as a proof of concept. + * Use it at your own risk! + * + * !! DISCLAIMER !! + * ================ + * + * Althoug some efforts have been made to secure this implementation + * of KCDSA (e.g. by protecting the private key and nonces using constant + * time and blinding WHEN activated with BLINDING=1), please consider this + * code as a proof of concept and use it at your own risk. + * + * All-in-all, this piece of code can be useful in some contexts, or risky to + * use in other sensitive ones where advanced side-channels or fault attacks + * have to be considered. Use this KCDSA code knowingly and at your own risk! + * + */ + +/* NOTE: since KCDSA is very similar to DSA, we reuse some of our DSA + * primitives to factorize some code. Also, KCDSA private and public keys + * have the exact same type as DSA keys. + */ + +/* Import a KCDSA private key from buffers */ +int kcdsa_import_priv_key(kcdsa_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen) +{ + return dsa_import_priv_key(priv, p, plen, q, qlen, g, glen, x, xlen); +} + +/* Import a KCDSA public key from buffers */ +int kcdsa_import_pub_key(kcdsa_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen) +{ + return dsa_import_pub_key(pub, p, plen, q, qlen, g, glen, y, ylen); +} + + + +/* Compute a KCDSA public key from a private key. + * The public key is computed using modular exponentiation of the generator + * with the private key inverse. + */ +int kcdsa_compute_pub_from_priv(kcdsa_pub_key *pub, const kcdsa_priv_key *priv) +{ + int ret; + kcdsa_priv_key priv_; + + MUST_HAVE((priv != NULL), ret, err); + + ret = local_memcpy(&priv_, priv, sizeof(kcdsa_priv_key)); EG(ret, err); + /* Replace the x of the private key by its inverse */ + ret = nn_modinv_fermat(&(priv_.x), &(priv_.x), &(priv_.q)); EG(ret, err); + + /* Use the DSA computation with the computed inverse x */ + ret = dsa_compute_pub_from_priv(pub, &priv_); + +err: + IGNORE_RET_VAL(local_memset(&priv_, 0, sizeof(kcdsa_priv_key))); + + return ret; +} + + +ATTRIBUTE_WARN_UNUSED_RET static int buf_lshift(u8 *buf, u16 buflen, u16 shift) +{ + u16 i; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + + if (shift > buflen) { + shift = buflen; + } + + /* Start by shifting all trailing bytes to the left ... */ + for (i = shift; i < buflen; i++) { + buf[i - shift] = buf[i]; + } + + /* Let's now zeroize the end of the buffer ... */ + for (i = 1; i <= shift; i++) { + buf[buflen - i] = 0; + } + + ret = 0; + +err: + return ret; +} + +/* Generate a KCDSA signature + */ +int kcdsa_sign(const kcdsa_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type kcdsa_hash) +{ + int ret, iszero; + u16 curr_rlen, curr_siglen; + /* alpha is the bit length of p, beta is the bit length of q */ + bitcnt_t alpha, beta; + /* Length of the hash function (hlen is "gamma") */ + u8 hlen, block_size; + nn_src_t p, q, g, x; + /* The public key for the witness */ + kcdsa_pub_key pub; + nn_src_t y; + /* The nonce and its protected version */ + nn k, k_; + /* r, s, pi */ + nn r, s; + nn_t pi; + /* This is a bit too much for stack space, but we need it for + * the computation of "pi" I2BS representation ... + */ + u8 pi_buf[NN_USABLE_MAX_BYTE_LEN]; + /* hash context */ + gen_hash_context hash_ctx; + u8 hash[MAX_DIGEST_SIZE]; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b; + b.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + k.magic = k_.magic = r.magic = s.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((priv != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(&pub, 0, sizeof(kcdsa_pub_key)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(pi_buf, 0, sizeof(pi_buf)); EG(ret, err); + + /* Make things more readable */ + p = &(priv->p); + q = &(priv->q); + g = &(priv->g); + x = &(priv->x); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + /* Let alpha be the bit length of p */ + ret = nn_bitlen(p, &alpha); EG(ret, err); + /* Let beta be the bit length of q */ + ret = nn_bitlen(q, &beta); EG(ret, err); + /* Get the hash sizes (8*"gamma") */ + ret = gen_hash_get_hash_sizes(kcdsa_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on the signature length: + * If "gamma" <= beta, length of R is "gamma", else length of R + * The signature size is either "gamma" + beta or 2 * beta + */ + if(hlen <= (u16)BYTECEIL(beta)){ + curr_rlen = hlen; + } + else{ + curr_rlen = (u16)BYTECEIL(beta); + } + curr_siglen = (u16)(curr_rlen + BYTECEIL(beta)); + MUST_HAVE((siglen == curr_siglen), ret, err); + + /* Compute our public key for the witness */ + ret = kcdsa_compute_pub_from_priv(&pub, priv); EG(ret, err); + y = &(pub.y); + +restart: + /* If the nonce is imposed, use it. Else get a random modulo q */ + if(nonce != NULL){ + ret = _os2ip(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = nn_get_random_mod(&k, q); EG(ret, err); + } + + /* Fix the MSB of our scalar */ + ret = nn_copy(&k_, &k); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind the scalar */ + ret = _blind_scalar(&k_, q, &k_); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = _fix_scalar_msb(&k_, q, &k_); EG(ret, err); + /* Use r as aliasing for pi to save some space */ + pi = &r; + /* pi = (g**k mod p) */ + ret = nn_init(pi, 0); EG(ret, err); + /* Exponentiation modulo p */ + ret = nn_mod_pow(pi, g, &k_, p); EG(ret, err); + + /* Compute I2BS(alpha, pi) + */ + MUST_HAVE((sizeof(pi_buf) >= (u16)BYTECEIL(alpha)), ret, err); + ret = _i2osp(pi, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + + if(hlen <= (u16)BYTECEIL(beta)){ + unsigned int i; + /* r = h(I2BS(alpha, pi)) */ + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, (u16)BYTECEIL(alpha), kcdsa_hash); EG(ret, err); + /* Export r result of the hash function in sig */ + ret = gen_hash_final(&hash_ctx, sig, kcdsa_hash); EG(ret, err); + /* Compute v */ + MUST_HAVE((block_size <= (u16)BYTECEIL(alpha)), ret, err); + ret = _i2osp(y, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + ret = buf_lshift(pi_buf, (u16)BYTECEIL(alpha), (u16)(BYTECEIL(alpha) - block_size)); EG(ret, err); + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, block_size, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, msg, msglen, kcdsa_hash); EG(ret, err); + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + for(i = 0; i < hlen; i++){ + hash[i] = (hash[i] ^ sig[i]); + } + ret = _os2ip(&s, hash, hlen); EG(ret, err); + } + else{ + unsigned int i; + /* h(I2BS(alpha, pi)) */ + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, (u16)BYTECEIL(alpha), kcdsa_hash); EG(ret, err); + /* Export r result of the hash function in sig ... */ + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + /* ... and proceed with the appropriate tuncation */ + ret = buf_lshift(hash, hlen, (u16)(hlen - BYTECEIL(beta))); EG(ret, err); + ret = local_memcpy(sig, hash, (u16)BYTECEIL(beta)); EG(ret, err); + /* Compute v */ + MUST_HAVE((block_size <= (u16)BYTECEIL(alpha)), ret, err); + ret = _i2osp(y, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + ret = buf_lshift(pi_buf, (u16)BYTECEIL(alpha), (u16)(BYTECEIL(alpha) - block_size)); EG(ret, err); + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, block_size, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, msg, msglen, kcdsa_hash); EG(ret, err); + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + /* ... and proceed with the appropriate tuncation */ + ret = buf_lshift(hash, hlen, (u16)(hlen - BYTECEIL(beta))); EG(ret, err); + for(i = 0; i < (u16)BYTECEIL(beta); i++){ + hash[i] = (hash[i] ^ sig[i]); + } + ret = _os2ip(&s, hash, (u16)BYTECEIL(beta)); EG(ret, err); + } + + /* Reduce v modulo q */ + ret = nn_mod(&s, &s, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, v and k are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + /* Blind r with b */ + ret = nn_mod_mul(&s, &s, &b, q); EG(ret, err); + /* Blind k with b */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); + /* + * In case of blinding, we compute b^-1 with + * little Fermat theorem. This will be used to + * unblind s. + */ + ret = nn_modinv_fermat(&b, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Compute s = x (k - v) mod q */ + ret = nn_mod_sub(&s, &k, &s, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, x, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, unblind s */ + ret = nn_mod_mul(&s, &s, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* If s is 0, restart the process */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export s */ + ret = _i2osp(&s, sig + curr_rlen, (u16)BYTECEIL(beta)); + +err: + if(ret && (sig != NULL)){ + IGNORE_RET_VAL(local_memset(sig, 0, siglen)); + } + + IGNORE_RET_VAL(local_memset(&pub, 0, sizeof(kcdsa_pub_key))); + + nn_uninit(&k); + nn_uninit(&k_); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif + nn_uninit(&r); + nn_uninit(&s); + + PTR_NULLIFY(pi); + PTR_NULLIFY(y); + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(x); + + return ret; +} + + + +/* Verify a KCDSA signature + */ +int kcdsa_verify(const kcdsa_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type kcdsa_hash) +{ + int ret, iszero, cmp; + u16 curr_rlen, curr_siglen; + /* alpha is the bit length of p, beta is the bit length of q */ + bitcnt_t alpha, beta; + /* Length of the hash function */ + u8 hlen, block_size; + nn_src_t p, q, g, y; + /* s */ + nn s; + /* u, v and pi */ + nn u, v, pi; + /* This is a bit too much for stack space, but we need it for + * the computation of "pi" I2BS representation ... + */ + u8 pi_buf[NN_USABLE_MAX_BYTE_LEN]; + /* Hash */ + u8 hash[MAX_DIGEST_SIZE]; + /* hash context */ + gen_hash_context hash_ctx; + s.magic = v.magic = u.magic = pi.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((pub != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(pi_buf, 0, sizeof(pi_buf)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + p = &(pub->p); + q = &(pub->q); + g = &(pub->g); + y = &(pub->y); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(y); EG(ret, err); + + /* Let alpha be the bit length of p */ + ret = nn_bitlen(p, &alpha); EG(ret, err); + /* Let beta be the bit length of q */ + ret = nn_bitlen(q, &beta); EG(ret, err); + /* Get the hash sizes (8*"gamma") */ + ret = gen_hash_get_hash_sizes(kcdsa_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on the signature length: + * If "gamma" <= beta, length of R is "gamma", else length of R + * The signature size is either "gamma" + beta or 2 * beta + */ + if(hlen <= (u16)BYTECEIL(beta)){ + curr_rlen = hlen; + } + else{ + curr_rlen = (u16)BYTECEIL(beta); + } + curr_siglen = (u16)(curr_rlen + BYTECEIL(beta)); + MUST_HAVE((siglen == curr_siglen), ret, err); + + /* Extract s */ + ret = _os2ip(&s, sig + curr_rlen, (u16)(siglen - curr_rlen)); EG(ret, err); + + /* Return an error if s = 0 */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + /* Check that 0 < s < q */ + ret = nn_cmp(&s, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + /* Initialize internal variables */ + ret = nn_init(&u, 0); EG(ret, err); + ret = nn_init(&pi, 0); EG(ret, err); + + /* Compute v */ + if(hlen <= (u16)BYTECEIL(beta)){ + unsigned int i; + /* r is of size hlen */ + MUST_HAVE((block_size <= (u16)BYTECEIL(alpha)), ret, err); + ret = _i2osp(y, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + ret = buf_lshift(pi_buf, (u16)BYTECEIL(alpha), (u16)(BYTECEIL(alpha) - block_size)); EG(ret, err); + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, block_size, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, msg, msglen, kcdsa_hash); EG(ret, err); + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + for(i = 0; i < hlen; i++){ + hash[i] = (hash[i] ^ sig[i]); + } + ret = _os2ip(&v, hash, hlen); EG(ret, err); + } + else{ + unsigned int i; + /* r is of size beta */ + MUST_HAVE((block_size <= (u16)BYTECEIL(alpha)), ret, err); + ret = _i2osp(y, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + ret = buf_lshift(pi_buf, (u16)BYTECEIL(alpha), (u16)(BYTECEIL(alpha) - block_size)); EG(ret, err); + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, block_size, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, msg, msglen, kcdsa_hash); EG(ret, err); + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + /* ... and proceed with the appropriate tuncation */ + ret = buf_lshift(hash, hlen, (u16)(hlen - BYTECEIL(beta))); EG(ret, err); + for(i = 0; i < (u16)BYTECEIL(beta); i++){ + hash[i] = (hash[i] ^ sig[i]); + } + ret = _os2ip(&v, hash, (u16)BYTECEIL(beta)); EG(ret, err); + } + + /* Reduce v modulo q */ + ret = nn_mod(&v, &v, q); EG(ret, err); + + /* NOTE: no need to use a secure exponentiation here as we only + * manipulate public data. + */ + /* Compute (y ** s) mod (p) */ + ret = _nn_mod_pow_insecure(&u, y, &s, p); EG(ret, err); + /* Compute (g ** v) mod (p) */ + ret = _nn_mod_pow_insecure(&pi, g, &v, p); EG(ret, err); + /* Compute (y ** s) (g ** v) mod (p) */ + ret = nn_mod_mul(&pi, &pi, &u, p); EG(ret, err); + + /* Compute I2BS(alpha, pi) + */ + MUST_HAVE((sizeof(pi_buf) >= (u16)BYTECEIL(alpha)), ret, err); + ret = _i2osp(&pi, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + + if(hlen <= (u16)BYTECEIL(beta)){ + /* r = h(I2BS(alpha, pi)) */ + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, (u16)BYTECEIL(alpha), kcdsa_hash); EG(ret, err); + /* Export r result of the hash function in sig */ + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + } + else{ + /* h(I2BS(alpha, pi)) */ + ret = gen_hash_init(&hash_ctx, kcdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, (u16)BYTECEIL(alpha), kcdsa_hash); EG(ret, err); + /* Export r result of the hash function in sig ... */ + ret = gen_hash_final(&hash_ctx, hash, kcdsa_hash); EG(ret, err); + /* ... and proceed with the appropriate tuncation */ + ret = buf_lshift(hash, hlen, (u16)(hlen - BYTECEIL(beta))); EG(ret, err); + } + + /* Now check that r == r' */ + ret = are_equal(sig, hash, curr_rlen, &cmp); EG(ret, err); + ret = (cmp != 1) ? -1 : 0; + +err: + nn_uninit(&s); + nn_uninit(&u); + nn_uninit(&v); + nn_uninit(&pi); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(y); + + return ret; +} + +#ifdef KCDSA +#include +int main(int argc, char *argv[]) +{ + int ret = 0; + +#if 0 + /* This example is taken from ISO14888-3 KCDSA (Appendix F "Numerical examples" */ + const u8 p[] = { +0x8D, 0xA8, 0xC1, 0xB5, 0xC9, 0x5D, 0x11, 0xBE, 0x46, 0x66, 0x1D, 0xF5, 0x8C, 0x9F, 0x80, 0x3E, 0xB7, 0x29, 0xB8, 0x00, 0xDD, 0x92, 0x75, 0x1B, +0x3A, 0x4F, 0x10, 0xC6, 0xA5, 0x44, 0x8E, 0x9F, 0x3B, 0xC0, 0xE9, 0x16, 0xF0, 0x42, 0xE3, 0x99, 0xB3, 0x4A, 0xF9, 0xBE, 0xE5, 0x82, 0xCC, 0xFC, +0x3F, 0xF5, 0x00, 0x0C, 0xFF, 0x23, 0x56, 0x94, 0x94, 0x35, 0x1C, 0xFE, 0xA5, 0x52, 0x9E, 0xA3, 0x47, 0xDC, 0xF4, 0x3F, 0x30, 0x2F, 0x58, 0x94, +0x38, 0x07, 0x09, 0xEA, 0x2E, 0x1C, 0x41, 0x6B, 0x51, 0xA5, 0xCD, 0xFC, 0x75, 0x93, 0xB1, 0x8B, 0x7E, 0x37, 0x88, 0xD5, 0x1B, 0x9C, 0xC9, 0xAE, +0x82, 0x8B, 0x4F, 0x8F, 0xB0, 0x6E, 0x0E, 0x90, 0x57, 0xF7, 0xFA, 0x0F, 0x93, 0xBB, 0x03, 0x97, 0x03, 0x1F, 0xE7, 0xD5, 0x0A, 0x68, 0x28, 0xDA, +0x0C, 0x11, 0x60, 0xA0, 0xE6, 0x6D, 0x4E, 0x5D, 0x2A, 0x18, 0xAD, 0x17, 0xA8, 0x11, 0xE7, 0x0B, 0x14, 0xF4, 0xF4, 0x31, 0x1A, 0x02, 0x82, 0x60, +0x32, 0x33, 0x44, 0x4F, 0x98, 0x76, 0x3C, 0x5A, 0x1E, 0x82, 0x9C, 0x76, 0x4C, 0xF3, 0x6A, 0xDB, 0x56, 0x98, 0x0B, 0xD4, 0xC5, 0x4B, 0xBE, 0x29, +0x7E, 0x79, 0x02, 0x28, 0x42, 0x92, 0xD7, 0x5C, 0xA3, 0x60, 0x0F, 0xF4, 0x59, 0x31, 0x0B, 0x09, 0x29, 0x1C, 0xBE, 0xFB, 0xC7, 0x21, 0x52, 0x8A, +0x13, 0x40, 0x3B, 0x8B, 0x93, 0xB7, 0x11, 0xC3, 0x03, 0xA2, 0x18, 0x2B, 0x6E, 0x63, 0x97, 0xE0, 0x83, 0x38, 0x0B, 0xF2, 0x88, 0x6A, 0xF3, 0xB9, +0xAF, 0xCC, 0x9F, 0x50, 0x55, 0xD8, 0xB7, 0x13, 0x6C, 0x0E, 0xBD, 0x08, 0xC5, 0xCF, 0x0B, 0x38, 0x88, 0x8C, 0xD1, 0x15, 0x72, 0x78, 0x7F, 0x6D, +0xF3, 0x84, 0xC9, 0x7C, 0x91, 0xB5, 0x8C, 0x31, 0xDE, 0xE5, 0x65, 0x5E, 0xCB, 0xF3, 0xFA, 0x53, + }; + + const u8 q[] = { +0x86, 0x4F, 0x18, 0x84, 0x1E, 0xC1, 0x03, 0xCD, 0xFD, 0x1B, 0xE7, 0xFE, 0xE5, 0x46, 0x50, 0xF2, 0x2A, 0x3B, 0xB9, 0x97, 0x53, 0x7F, 0x32, 0xCC, +0x79, 0xA5, 0x1F, 0x53, + }; + + const u8 g[] = { +0x0E, 0x9B, 0xE1, 0xF8, 0x7A, 0x41, 0x4D, 0x16, 0x7A, 0x9A, 0x5A, 0x96, 0x8B, 0x07, 0x9E, 0x4A, 0xD3, 0x85, 0xA3, 0x57, 0x3E, 0xDB, 0x21, 0xAA, +0x67, 0xA6, 0xF6, 0x1C, 0x0D, 0x00, 0xC1, 0x4A, 0x7A, 0x22, 0x50, 0x44, 0xB6, 0xE9, 0xEB, 0x03, 0x68, 0xC1, 0xEB, 0x57, 0xB2, 0x4B, 0x45, 0xCD, +0x85, 0x4F, 0xD9, 0x3C, 0x1B, 0x2D, 0xFB, 0x0A, 0x3E, 0xA3, 0x02, 0xD2, 0x36, 0x7E, 0x4E, 0xC7, 0x2F, 0x6E, 0x7E, 0xE8, 0xEA, 0x7F, 0x80, 0x02, +0xF7, 0x70, 0x4E, 0x99, 0x0B, 0x95, 0x4F, 0x25, 0xBA, 0xDA, 0x8D, 0xA6, 0x2B, 0xAE, 0xB6, 0xF0, 0x69, 0x53, 0xC0, 0xC8, 0x51, 0x04, 0xAD, 0x03, +0xF3, 0x66, 0x18, 0xF7, 0x6C, 0x62, 0xF4, 0xEC, 0xF3, 0x48, 0x01, 0x83, 0x69, 0x85, 0x0A, 0x56, 0x17, 0xC9, 0x99, 0xDB, 0xE6, 0x8B, 0xA1, 0x7D, +0x5B, 0xC7, 0x25, 0x56, 0x74, 0xEF, 0x48, 0x39, 0x22, 0xC6, 0xA3, 0xF9, 0x9D, 0x3C, 0x3C, 0x6F, 0x35, 0x88, 0x96, 0xC4, 0xE6, 0x3C, 0x60, 0x5E, +0xE7, 0xDB, 0x16, 0xFC, 0xBD, 0x9B, 0xE3, 0x54, 0xE2, 0x81, 0xF7, 0xFE, 0x78, 0x13, 0xD0, 0x54, 0x27, 0xED, 0x19, 0x12, 0xB5, 0xC7, 0x65, 0x3A, +0x16, 0x7B, 0x94, 0x34, 0x91, 0x47, 0xEE, 0xAF, 0x85, 0xCC, 0x9C, 0xE2, 0xE8, 0x16, 0x61, 0xF3, 0x21, 0x51, 0x2D, 0x5D, 0x2C, 0x05, 0x80, 0xB0, +0x3D, 0x17, 0x04, 0xEE, 0xF2, 0x31, 0x7F, 0x45, 0x18, 0x5C, 0x82, 0x58, 0x38, 0x7E, 0x7E, 0xC9, 0x79, 0xC0, 0x47, 0x07, 0xEF, 0x54, 0x62, 0x41, +0x27, 0x84, 0xAF, 0xE4, 0x1A, 0x7B, 0x45, 0xC8, 0x3B, 0x9C, 0xBE, 0x48, 0xF9, 0x12, 0x7C, 0xB4, 0x40, 0x0B, 0xE9, 0xE9, 0x6A, 0xC5, 0xDE, 0x17, +0xF2, 0xC9, 0xDE, 0xA3, 0x5E, 0x37, 0x34, 0xE7, 0x9B, 0x64, 0x67, 0x3F, 0x85, 0x68, 0x1C, 0x4E, + }; + + const u8 x[] = { +0x2F, 0x19, 0x91, 0xC1, 0xAF, 0x40, 0x18, 0x72, 0x8A, 0x5A, 0x43, 0x1B, 0x9B, 0x54, 0x59, 0xDF, 0xB1, 0x6F, 0x6D, 0x25, 0x67, 0x97, 0xFE, 0x57, +0x0E, 0xC6, 0xBC, 0x65, + }; + + const u8 y[] = { +0x04, 0xED, 0xE5, 0xC6, 0x7E, 0xA2, 0x92, 0x97, 0xA8, 0xCA, 0xCB, 0x6B, 0xDE, 0x6F, 0x46, 0x66, 0xAE, 0xA2, 0x7D, 0x10, 0x3D, 0xD1, 0xE9, 0xE9, +0x58, 0x2F, 0x76, 0xA2, 0xF2, 0x2B, 0x8B, 0x1B, 0x32, 0x23, 0x0B, 0xC5, 0x8F, 0x06, 0xB7, 0x68, 0xF8, 0x10, 0x2B, 0x49, 0xFA, 0x1C, 0xAE, 0x5E, +0x18, 0x92, 0x14, 0x94, 0x7F, 0x62, 0x39, 0xB6, 0xC6, 0xCE, 0x7C, 0x9B, 0xC2, 0xD2, 0x30, 0xE8, 0x9A, 0x40, 0xBE, 0xE2, 0xC3, 0x3A, 0x88, 0x61, +0xFD, 0x4F, 0x7D, 0x35, 0xB7, 0x88, 0xFE, 0x95, 0xB2, 0xD5, 0x88, 0x5D, 0x8C, 0x8F, 0xAE, 0xA8, 0x1C, 0x90, 0xBE, 0x4C, 0xEE, 0x27, 0x84, 0xE3, +0x35, 0x77, 0xA7, 0x1D, 0x3B, 0x7F, 0x08, 0x5D, 0x71, 0xE9, 0xA1, 0xD4, 0x78, 0x15, 0xC7, 0x3F, 0xA0, 0x87, 0xAC, 0xAA, 0xB9, 0xFC, 0xB5, 0x65, +0x5A, 0xC9, 0x57, 0x0E, 0x68, 0x52, 0xBE, 0x7C, 0x9C, 0x0A, 0xEC, 0xEA, 0x8B, 0xD9, 0xAA, 0x75, 0xA4, 0x4F, 0xC3, 0x14, 0x7F, 0x73, 0x3E, 0x90, +0x6A, 0xDB, 0x0F, 0xD7, 0x6D, 0x61, 0x35, 0x61, 0xB1, 0xDB, 0x36, 0x4B, 0xBD, 0xC9, 0xAF, 0xD3, 0xCE, 0x8F, 0x5F, 0x17, 0xE3, 0xE7, 0x12, 0x03, +0x4A, 0x99, 0x93, 0x50, 0x80, 0x59, 0xFA, 0x52, 0x44, 0x1F, 0xA9, 0x0D, 0xDF, 0xE9, 0xA0, 0xF2, 0xA0, 0xB9, 0x19, 0x2F, 0xE2, 0x22, 0x0C, 0x08, +0x1B, 0xD0, 0xC0, 0xF0, 0xE0, 0x7C, 0xB5, 0xF1, 0xEE, 0x4F, 0xF4, 0x05, 0x23, 0x59, 0x1F, 0x17, 0x8A, 0x4F, 0xC7, 0xCB, 0x50, 0x65, 0xF6, 0xA3, +0x82, 0x16, 0xE9, 0xA0, 0x99, 0xC2, 0x05, 0xB2, 0x9B, 0x87, 0x46, 0xD8, 0x65, 0xE1, 0xAF, 0x6D, 0x90, 0x3E, 0x5A, 0x13, 0x80, 0x04, 0x91, 0x0B, +0x70, 0xEB, 0x5B, 0x84, 0xEE, 0xD9, 0x76, 0x0E, 0xA6, 0x05, 0x78, 0xBF, 0x08, 0x85, 0x28, 0x98, + }; + + const u8 msg[] = "This is a test message for KCDSA usage!"; + + const u8 nonce[] = { +0x49, 0x56, 0x19, 0x94, 0xFD, 0x2B, 0xAD, 0x5E, 0x41, 0x0C, 0xA1, 0xC1, 0x5C, 0x3F, 0xD3, 0xF1, 0x2E, 0x70, 0x26, 0x3F, 0x28, 0x20, 0xAD, 0x5C, +0x56, 0x6D, 0xED, 0x80, + }; + u8 sig[28*2] = { 0 }; + gen_hash_alg_type kcdsa_hash = HASH_SHA224; +#endif + +#if 0 + /* This example is taken from ISO14888-3 KCDSA (Appendix F "Numerical examples" */ + const u8 p[] = { +0x8D, 0xA8, 0xC1, 0xB5, 0xC9, 0x5D, 0x11, 0xBE, 0x46, 0x66, 0x1D, 0xF5, 0x8C, 0x9F, 0x80, 0x3E, 0xB7, 0x29, 0xB8, 0x00, 0xDD, 0x92, 0x75, 0x1B, +0x3A, 0x4F, 0x10, 0xC6, 0xA5, 0x44, 0x8E, 0x9F, 0x3B, 0xC0, 0xE9, 0x16, 0xF0, 0x42, 0xE3, 0x99, 0xB3, 0x4A, 0xF9, 0xBE, 0xE5, 0x82, 0xCC, 0xFC, +0x3F, 0xF5, 0x00, 0x0C, 0xFF, 0x23, 0x56, 0x94, 0x94, 0x35, 0x1C, 0xFE, 0xA5, 0x52, 0x9E, 0xA3, 0x47, 0xDC, 0xF4, 0x3F, 0x30, 0x2F, 0x58, 0x94, +0x38, 0x07, 0x09, 0xEA, 0x2E, 0x1C, 0x41, 0x6B, 0x51, 0xA5, 0xCD, 0xFC, 0x75, 0x93, 0xB1, 0x8B, 0x7E, 0x37, 0x88, 0xD5, 0x1B, 0x9C, 0xC9, 0xAE, +0x82, 0x8B, 0x4F, 0x8F, 0xB0, 0x6E, 0x0E, 0x90, 0x57, 0xF7, 0xFA, 0x0F, 0x93, 0xBB, 0x03, 0x97, 0x03, 0x1F, 0xE7, 0xD5, 0x0A, 0x68, 0x28, 0xDA, +0x0C, 0x11, 0x60, 0xA0, 0xE6, 0x6D, 0x4E, 0x5D, 0x2A, 0x18, 0xAD, 0x17, 0xA8, 0x11, 0xE7, 0x0B, 0x14, 0xF4, 0xF4, 0x31, 0x1A, 0x02, 0x82, 0x60, +0x32, 0x33, 0x44, 0x4F, 0x98, 0x76, 0x3C, 0x5A, 0x1E, 0x82, 0x9C, 0x76, 0x4C, 0xF3, 0x6A, 0xDB, 0x56, 0x98, 0x0B, 0xD4, 0xC5, 0x4B, 0xBE, 0x29, +0x7E, 0x79, 0x02, 0x28, 0x42, 0x92, 0xD7, 0x5C, 0xA3, 0x60, 0x0F, 0xF4, 0x59, 0x31, 0x0B, 0x09, 0x29, 0x1C, 0xBE, 0xFB, 0xC7, 0x21, 0x52, 0x8A, +0x13, 0x40, 0x3B, 0x8B, 0x93, 0xB7, 0x11, 0xC3, 0x03, 0xA2, 0x18, 0x2B, 0x6E, 0x63, 0x97, 0xE0, 0x83, 0x38, 0x0B, 0xF2, 0x88, 0x6A, 0xF3, 0xB9, +0xAF, 0xCC, 0x9F, 0x50, 0x55, 0xD8, 0xB7, 0x13, 0x6C, 0x0E, 0xBD, 0x08, 0xC5, 0xCF, 0x0B, 0x38, 0x88, 0x8C, 0xD1, 0x15, 0x72, 0x78, 0x7F, 0x6D, +0xF3, 0x84, 0xC9, 0x7C, 0x91, 0xB5, 0x8C, 0x31, 0xDE, 0xE5, 0x65, 0x5E, 0xCB, 0xF3, 0xFA, 0x53, + }; + + const u8 q[] = { +0x86, 0x4F, 0x18, 0x84, 0x1E, 0xC1, 0x03, 0xCD, 0xFD, 0x1B, 0xE7, 0xFE, 0xE5, 0x46, 0x50, 0xF2, 0x2A, 0x3B, 0xB9, 0x97, 0x53, 0x7F, 0x32, 0xCC, +0x79, 0xA5, 0x1F, 0x53, + }; + + const u8 g[] = { +0x0E, 0x9B, 0xE1, 0xF8, 0x7A, 0x41, 0x4D, 0x16, 0x7A, 0x9A, 0x5A, 0x96, 0x8B, 0x07, 0x9E, 0x4A, 0xD3, 0x85, 0xA3, 0x57, 0x3E, 0xDB, 0x21, 0xAA, +0x67, 0xA6, 0xF6, 0x1C, 0x0D, 0x00, 0xC1, 0x4A, 0x7A, 0x22, 0x50, 0x44, 0xB6, 0xE9, 0xEB, 0x03, 0x68, 0xC1, 0xEB, 0x57, 0xB2, 0x4B, 0x45, 0xCD, +0x85, 0x4F, 0xD9, 0x3C, 0x1B, 0x2D, 0xFB, 0x0A, 0x3E, 0xA3, 0x02, 0xD2, 0x36, 0x7E, 0x4E, 0xC7, 0x2F, 0x6E, 0x7E, 0xE8, 0xEA, 0x7F, 0x80, 0x02, +0xF7, 0x70, 0x4E, 0x99, 0x0B, 0x95, 0x4F, 0x25, 0xBA, 0xDA, 0x8D, 0xA6, 0x2B, 0xAE, 0xB6, 0xF0, 0x69, 0x53, 0xC0, 0xC8, 0x51, 0x04, 0xAD, 0x03, +0xF3, 0x66, 0x18, 0xF7, 0x6C, 0x62, 0xF4, 0xEC, 0xF3, 0x48, 0x01, 0x83, 0x69, 0x85, 0x0A, 0x56, 0x17, 0xC9, 0x99, 0xDB, 0xE6, 0x8B, 0xA1, 0x7D, +0x5B, 0xC7, 0x25, 0x56, 0x74, 0xEF, 0x48, 0x39, 0x22, 0xC6, 0xA3, 0xF9, 0x9D, 0x3C, 0x3C, 0x6F, 0x35, 0x88, 0x96, 0xC4, 0xE6, 0x3C, 0x60, 0x5E, +0xE7, 0xDB, 0x16, 0xFC, 0xBD, 0x9B, 0xE3, 0x54, 0xE2, 0x81, 0xF7, 0xFE, 0x78, 0x13, 0xD0, 0x54, 0x27, 0xED, 0x19, 0x12, 0xB5, 0xC7, 0x65, 0x3A, +0x16, 0x7B, 0x94, 0x34, 0x91, 0x47, 0xEE, 0xAF, 0x85, 0xCC, 0x9C, 0xE2, 0xE8, 0x16, 0x61, 0xF3, 0x21, 0x51, 0x2D, 0x5D, 0x2C, 0x05, 0x80, 0xB0, +0x3D, 0x17, 0x04, 0xEE, 0xF2, 0x31, 0x7F, 0x45, 0x18, 0x5C, 0x82, 0x58, 0x38, 0x7E, 0x7E, 0xC9, 0x79, 0xC0, 0x47, 0x07, 0xEF, 0x54, 0x62, 0x41, +0x27, 0x84, 0xAF, 0xE4, 0x1A, 0x7B, 0x45, 0xC8, 0x3B, 0x9C, 0xBE, 0x48, 0xF9, 0x12, 0x7C, 0xB4, 0x40, 0x0B, 0xE9, 0xE9, 0x6A, 0xC5, 0xDE, 0x17, +0xF2, 0xC9, 0xDE, 0xA3, 0x5E, 0x37, 0x34, 0xE7, 0x9B, 0x64, 0x67, 0x3F, 0x85, 0x68, 0x1C, 0x4E, + }; + + const u8 x[] = { +0x2F, 0x19, 0x91, 0xC1, 0xAF, 0x40, 0x18, 0x72, 0x8A, 0x5A, 0x43, 0x1B, 0x9B, 0x54, 0x59, 0xDF, 0xB1, 0x6F, 0x6D, 0x25, 0x67, 0x97, 0xFE, 0x57, +0x0E, 0xC6, 0xBC, 0x65, + }; + + const u8 y[] = { +0x04, 0xED, 0xE5, 0xC6, 0x7E, 0xA2, 0x92, 0x97, 0xA8, 0xCA, 0xCB, 0x6B, 0xDE, 0x6F, 0x46, 0x66, 0xAE, 0xA2, 0x7D, 0x10, 0x3D, 0xD1, 0xE9, 0xE9, +0x58, 0x2F, 0x76, 0xA2, 0xF2, 0x2B, 0x8B, 0x1B, 0x32, 0x23, 0x0B, 0xC5, 0x8F, 0x06, 0xB7, 0x68, 0xF8, 0x10, 0x2B, 0x49, 0xFA, 0x1C, 0xAE, 0x5E, +0x18, 0x92, 0x14, 0x94, 0x7F, 0x62, 0x39, 0xB6, 0xC6, 0xCE, 0x7C, 0x9B, 0xC2, 0xD2, 0x30, 0xE8, 0x9A, 0x40, 0xBE, 0xE2, 0xC3, 0x3A, 0x88, 0x61, +0xFD, 0x4F, 0x7D, 0x35, 0xB7, 0x88, 0xFE, 0x95, 0xB2, 0xD5, 0x88, 0x5D, 0x8C, 0x8F, 0xAE, 0xA8, 0x1C, 0x90, 0xBE, 0x4C, 0xEE, 0x27, 0x84, 0xE3, +0x35, 0x77, 0xA7, 0x1D, 0x3B, 0x7F, 0x08, 0x5D, 0x71, 0xE9, 0xA1, 0xD4, 0x78, 0x15, 0xC7, 0x3F, 0xA0, 0x87, 0xAC, 0xAA, 0xB9, 0xFC, 0xB5, 0x65, +0x5A, 0xC9, 0x57, 0x0E, 0x68, 0x52, 0xBE, 0x7C, 0x9C, 0x0A, 0xEC, 0xEA, 0x8B, 0xD9, 0xAA, 0x75, 0xA4, 0x4F, 0xC3, 0x14, 0x7F, 0x73, 0x3E, 0x90, +0x6A, 0xDB, 0x0F, 0xD7, 0x6D, 0x61, 0x35, 0x61, 0xB1, 0xDB, 0x36, 0x4B, 0xBD, 0xC9, 0xAF, 0xD3, 0xCE, 0x8F, 0x5F, 0x17, 0xE3, 0xE7, 0x12, 0x03, +0x4A, 0x99, 0x93, 0x50, 0x80, 0x59, 0xFA, 0x52, 0x44, 0x1F, 0xA9, 0x0D, 0xDF, 0xE9, 0xA0, 0xF2, 0xA0, 0xB9, 0x19, 0x2F, 0xE2, 0x22, 0x0C, 0x08, +0x1B, 0xD0, 0xC0, 0xF0, 0xE0, 0x7C, 0xB5, 0xF1, 0xEE, 0x4F, 0xF4, 0x05, 0x23, 0x59, 0x1F, 0x17, 0x8A, 0x4F, 0xC7, 0xCB, 0x50, 0x65, 0xF6, 0xA3, +0x82, 0x16, 0xE9, 0xA0, 0x99, 0xC2, 0x05, 0xB2, 0x9B, 0x87, 0x46, 0xD8, 0x65, 0xE1, 0xAF, 0x6D, 0x90, 0x3E, 0x5A, 0x13, 0x80, 0x04, 0x91, 0x0B, +0x70, 0xEB, 0x5B, 0x84, 0xEE, 0xD9, 0x76, 0x0E, 0xA6, 0x05, 0x78, 0xBF, 0x08, 0x85, 0x28, 0x98, + }; + + const u8 msg[] = "This is a test message for KCDSA usage!"; + + const u8 nonce[] = { +0x49, 0x56, 0x19, 0x94, 0xFD, 0x2B, 0xAD, 0x5E, 0x41, 0x0C, 0xA1, 0xC1, 0x5C, 0x3F, 0xD3, 0xF1, 0x2E, 0x70, 0x26, 0x3F, 0x28, 0x20, 0xAD, 0x5C, +0x56, 0x6D, 0xED, 0x80, + }; + u8 sig[28*2] = { 0 }; + gen_hash_alg_type kcdsa_hash = HASH_SHA256; +#endif + +#if 1 + /* This example is taken from ISO14888-3 KCDSA (Appendix F "Numerical examples" */ + const u8 p[] = { +0xCB, 0xAE, 0xAC, 0xE3, 0x67, 0x7E, 0x98, 0xAD, 0xB2, 0xE4, 0x9C, 0x00, 0x2B, 0x8B, 0x0F, 0x43, 0x41, 0x43, 0xB4, 0x66, 0x51, 0x58, 0x39, 0xBF, +0x81, 0x3B, 0x09, 0x7D, 0x2D, 0x1E, 0xE6, 0x81, 0x50, 0x08, 0xC2, 0x7A, 0x34, 0x15, 0xBC, 0x22, 0x31, 0x60, 0x98, 0x74, 0x5E, 0x58, 0x44, 0xF3, +0x3E, 0xCC, 0x88, 0x87, 0xC1, 0x6D, 0xFB, 0x1C, 0xFB, 0x77, 0xDC, 0x4C, 0x3F, 0x35, 0x71, 0xCC, 0xEE, 0xFD, 0x42, 0x91, 0x8F, 0x6C, 0x48, 0xC3, +0x70, 0x2A, 0xB6, 0xEF, 0x09, 0x19, 0xB7, 0xE8, 0x40, 0x2F, 0xC8, 0x9B, 0x35, 0xD0, 0x9A, 0x0E, 0x50, 0x40, 0xE3, 0x09, 0x1E, 0xE4, 0x67, 0x4B, +0xE8, 0x91, 0x93, 0x3C, 0x10, 0x07, 0xE0, 0x17, 0xED, 0xD4, 0x08, 0x18, 0x7E, 0x41, 0x14, 0xB6, 0xBE, 0x55, 0x48, 0xD7, 0x8D, 0xB5, 0x8B, 0x84, +0x84, 0x75, 0xA4, 0x22, 0x62, 0xD7, 0xEB, 0x79, 0x5F, 0x08, 0xD1, 0x61, 0x10, 0x55, 0xEF, 0xEA, 0x8A, 0x6A, 0xEB, 0x20, 0xEB, 0x0F, 0x1C, 0x22, +0xF0, 0x02, 0xA2, 0xE8, 0x19, 0x5B, 0xCB, 0xBA, 0x83, 0x0B, 0x84, 0x61, 0x35, 0x31, 0xBD, 0xD9, 0xEC, 0x71, 0xE5, 0xA9, 0x7A, 0x9D, 0xCC, 0xC6, +0x5D, 0x61, 0x17, 0xB8, 0x5D, 0x0C, 0xA6, 0x6C, 0x3F, 0xDA, 0xA3, 0x47, 0x6E, 0x97, 0xAD, 0xCD, 0x05, 0xA1, 0xF4, 0x90, 0x2B, 0xD0, 0x4B, 0x92, +0xF4, 0x00, 0xC4, 0x2B, 0xA0, 0xC9, 0x94, 0x0A, 0x32, 0x60, 0x04, 0x43, 0x3B, 0x6D, 0x30, 0x01, 0x28, 0xBF, 0x93, 0x0F, 0x48, 0x4E, 0xAA, 0x63, +0x02, 0xCD, 0x7A, 0x31, 0x9E, 0xE5, 0xE5, 0x61, 0xA1, 0x2A, 0x36, 0x25, 0x59, 0x40, 0x20, 0xC2, 0x40, 0xDB, 0xA3, 0xBE, 0xBD, 0x8A, 0x47, 0x51, +0x58, 0x41, 0xF1, 0x98, 0xEB, 0xE4, 0x32, 0x18, 0x26, 0x39, 0x61, 0x6F, 0x6A, 0x7F, 0x9B, 0xD7, 0x43, 0x4F, 0x05, 0x34, 0x8F, 0x7F, 0x1D, 0xB3, +0x11, 0x5A, 0x9F, 0xEE, 0xBA, 0x98, 0x4A, 0x2B, 0x73, 0x78, 0x43, 0x34, 0xDE, 0x77, 0x37, 0xEE, 0x37, 0x04, 0x53, 0x5F, 0xCA, 0x2F, 0x49, 0x04, +0xCB, 0x4A, 0xD5, 0x8F, 0x17, 0x2F, 0x26, 0x48, 0xE1, 0xD6, 0x2D, 0x05, 0x85, 0x39, 0xAC, 0x78, 0x3D, 0x03, 0x2D, 0x18, 0x33, 0xD2, 0xB9, 0xAA, +0xD9, 0x69, 0x82, 0xC9, 0x69, 0x2E, 0x0D, 0xDB, 0xB6, 0x61, 0x55, 0x08, 0x83, 0xED, 0x66, 0xF7, 0xAA, 0x8B, 0xCE, 0x8F, 0xF0, 0x66, 0x3A, 0x0A, +0xDD, 0xA2, 0x26, 0xC7, 0xBD, 0x0E, 0x06, 0xDF, 0xC7, 0x25, 0x94, 0xA3, 0x87, 0xC6, 0x76, 0xA3, 0xCA, 0x06, 0xA3, 0x00, 0x62, 0xBE, 0x1D, 0x85, +0xF2, 0x3E, 0x3E, 0x02, 0xC4, 0xD6, 0x5E, 0x06, 0x1B, 0x61, 0x9B, 0x04, 0xE8, 0x3A, 0x31, 0x8E, 0xC5, 0x5E, 0xCA, 0x06, 0x9E, 0xB8, 0x56, 0x03, + }; + + const u8 q[] = { +0xC2, 0xA8, 0xCA, 0xF4, 0x87, 0x18, 0x00, 0x79, 0x66, 0xF2, 0xEC, 0x13, 0x4E, 0xAB, 0xA3, 0xCB, 0xB0, 0x7F, 0x31, 0xA8, 0xF2, 0x66, 0x7A, 0xCB, +0x5D, 0x9B, 0x87, 0x2F, 0xA7, 0x60, 0xA4, 0x01, + }; + + const u8 g[] = { +0x17, 0xA1, 0xC1, 0x67, 0xAF, 0x83, 0x6C, 0xC8, 0x51, 0x49, 0xBE, 0x43, 0x63, 0xF1, 0xBB, 0x4F, 0x00, 0x10, 0x84, 0x8F, 0xC9, 0xB6, 0x78, 0xB4, +0xE0, 0x26, 0xF1, 0xF3, 0x87, 0x13, 0x37, 0x49, 0xA4, 0xB1, 0xBB, 0xA4, 0xC2, 0x32, 0x52, 0xA4, 0xC8, 0x6F, 0x31, 0xE2, 0x1E, 0x8A, 0xCA, 0xCB, +0x4E, 0x33, 0xAD, 0x89, 0xB7, 0xC3, 0xD7, 0x9A, 0x54, 0x09, 0x26, 0x8B, 0xFB, 0xA8, 0x2B, 0x45, 0x81, 0x4E, 0x43, 0x52, 0x0C, 0x09, 0xD6, 0x31, +0x61, 0x3F, 0xA3, 0x5D, 0xB9, 0xCA, 0xF1, 0x8F, 0x79, 0x1C, 0x27, 0x29, 0xA4, 0xB0, 0x14, 0xBC, 0x79, 0xA8, 0x5A, 0x90, 0xCD, 0x54, 0x10, 0x37, +0x11, 0x9E, 0xCC, 0xDE, 0x07, 0x78, 0x86, 0x3F, 0xFC, 0xB9, 0xC2, 0x59, 0x31, 0xFC, 0xD3, 0x3A, 0x67, 0x06, 0xE5, 0xFE, 0x1F, 0x49, 0x5B, 0xB8, +0xBC, 0xB3, 0xD0, 0xEE, 0xC9, 0xB6, 0xD5, 0xA9, 0x37, 0x31, 0x27, 0xA2, 0x12, 0x1E, 0x37, 0xD9, 0x8A, 0x84, 0x03, 0x30, 0x25, 0x8D, 0xBF, 0xCE, +0xE7, 0xE0, 0x6F, 0x81, 0x5B, 0x69, 0xC1, 0x6C, 0x5D, 0x17, 0x28, 0x9C, 0x4C, 0xC3, 0x7E, 0x71, 0x9B, 0x85, 0x62, 0x98, 0xD4, 0xE1, 0x57, 0x4E, +0x4F, 0x4F, 0x85, 0x15, 0xBA, 0xF9, 0xA8, 0x50, 0xD1, 0x1D, 0xDA, 0x09, 0x55, 0xBC, 0x30, 0xFA, 0x5B, 0x16, 0x79, 0x2D, 0x67, 0x3A, 0x3B, 0x1F, +0x41, 0x51, 0x2F, 0xC3, 0xEB, 0x89, 0x45, 0x2D, 0x51, 0x50, 0x9F, 0x97, 0x4D, 0x87, 0x8B, 0x48, 0x2D, 0x2A, 0xD2, 0xED, 0x32, 0xBE, 0x19, 0x05, +0x6F, 0x57, 0x45, 0x04, 0x2B, 0xFF, 0x80, 0x4F, 0xB7, 0x48, 0x27, 0x96, 0x61, 0x2B, 0x74, 0x6F, 0xE8, 0xD7, 0x0A, 0x83, 0x8C, 0xC6, 0xF4, 0x96, +0xDD, 0x0F, 0xFC, 0x3D, 0x95, 0xC1, 0xE0, 0xB1, 0x98, 0x18, 0x4D, 0x73, 0x52, 0x36, 0x56, 0xA0, 0x64, 0x31, 0xBC, 0x52, 0x5C, 0x2B, 0xC1, 0x61, +0x97, 0x29, 0xE8, 0xC0, 0x88, 0xF6, 0xDF, 0x91, 0x56, 0x45, 0xE0, 0x60, 0x92, 0x2A, 0x4A, 0xF3, 0xED, 0xD6, 0x30, 0x47, 0xC7, 0xB6, 0x07, 0x7C, +0x66, 0x7C, 0x07, 0xD8, 0x8E, 0xB0, 0x0F, 0x4C, 0xFE, 0x59, 0xD3, 0x2E, 0x5F, 0x54, 0x50, 0x12, 0xC5, 0x66, 0x51, 0x6B, 0x78, 0x74, 0xFB, 0x3D, +0xAE, 0xD5, 0x14, 0x03, 0x31, 0xF2, 0x95, 0x28, 0xB3, 0x0F, 0xC8, 0xB8, 0xA9, 0x37, 0x1C, 0x28, 0x18, 0x01, 0x7B, 0x09, 0x53, 0xA8, 0x4F, 0xFC, +0x9F, 0xBF, 0xF8, 0x4B, 0x64, 0xBF, 0x02, 0x38, 0xAA, 0x7E, 0x2A, 0xF2, 0xEC, 0xAD, 0xC1, 0x5A, 0x1C, 0x06, 0xDA, 0xDC, 0xF1, 0xF2, 0xE7, 0xB1, +0x24, 0x0A, 0x5E, 0x64, 0x5A, 0x64, 0x69, 0xC9, 0xB0, 0x02, 0x21, 0x5D, 0x9A, 0x91, 0xC2, 0xA4, 0xED, 0x2F, 0xB5, 0x47, 0xA9, 0x42, 0xD7, 0x77, + }; + + const u8 x[] = { +0x7C, 0x28, 0x56, 0x9A, 0x94, 0xB4, 0x6F, 0xA7, 0x45, 0xC8, 0xD3, 0x06, 0xAD, 0x7D, 0xC1, 0x89, 0x96, 0xCE, 0x04, 0x6E, 0xEB, 0xE0, 0x43, 0x83, +0x83, 0x91, 0xC2, 0x32, 0x07, 0x8D, 0xB0, 0x5A, + }; + + const u8 y[] = { +0x25, 0x74, 0xE1, 0x0E, 0x80, 0x6F, 0x1C, 0x42, 0x58, 0xF7, 0xCF, 0x8F, 0xA4, 0xA6, 0xCF, 0x2B, 0xEB, 0x17, 0x7D, 0xBE, 0x60, 0xE4, 0xEC, 0x17, +0xDF, 0x21, 0xDC, 0xDB, 0xA7, 0x20, 0x73, 0xF6, 0x55, 0x65, 0x50, 0x6D, 0xA3, 0xDF, 0x98, 0xD5, 0xA6, 0xC8, 0xEE, 0xE6, 0x1B, 0x6B, 0x5D, 0x88, +0xB9, 0x8C, 0x47, 0xC2, 0xB2, 0xF6, 0xFC, 0x6F, 0x50, 0x4F, 0xA4, 0xFB, 0xC7, 0xF4, 0x11, 0xE2, 0x3E, 0xAA, 0x3B, 0x18, 0x7A, 0x35, 0x3D, 0xAE, +0xD4, 0x15, 0x33, 0xA9, 0x55, 0x8A, 0xB9, 0x32, 0x0A, 0x15, 0x4C, 0xAE, 0xCC, 0x54, 0x4E, 0x43, 0x00, 0x08, 0x88, 0x9A, 0x2C, 0x89, 0x93, 0x73, +0xEC, 0x75, 0xA2, 0x4C, 0xFF, 0x26, 0x24, 0x7C, 0xF2, 0x97, 0xD2, 0x93, 0x74, 0x7E, 0xCC, 0x05, 0xB3, 0x48, 0x36, 0x47, 0xA8, 0x7B, 0xCB, 0xB8, +0xD4, 0x50, 0x00, 0x92, 0x09, 0xF5, 0xE4, 0x49, 0xA0, 0x0A, 0x65, 0x9B, 0x63, 0x7C, 0xE1, 0x39, 0xCF, 0x64, 0x87, 0xAC, 0xA7, 0x0F, 0x9C, 0x00, +0xCB, 0x67, 0x0C, 0x7F, 0x3B, 0x95, 0xBF, 0xD7, 0xCF, 0x23, 0x6A, 0x0A, 0x6F, 0x3C, 0x93, 0xBE, 0x8D, 0x9C, 0xF5, 0x91, 0xC9, 0xD3, 0x06, 0x86, +0x94, 0x15, 0xB1, 0xAA, 0x97, 0x26, 0x4B, 0x90, 0x41, 0x67, 0x85, 0x0A, 0x47, 0x94, 0xC7, 0x80, 0xBE, 0x45, 0x27, 0xDF, 0xFE, 0xB6, 0x7B, 0xE6, +0xE6, 0x67, 0x86, 0xC5, 0xCC, 0xE0, 0x37, 0x8C, 0xCB, 0x49, 0x92, 0x0D, 0x85, 0x55, 0x58, 0xF4, 0xDA, 0xC4, 0xC4, 0x2F, 0x92, 0xDD, 0x22, 0x9B, +0x48, 0x3B, 0x22, 0x57, 0xDB, 0x0C, 0xE3, 0x5D, 0xC7, 0x37, 0xF9, 0x80, 0x1A, 0x26, 0x1A, 0x02, 0xBD, 0xF7, 0x18, 0xC2, 0xFD, 0x4D, 0x69, 0xC5, +0x2E, 0x0D, 0x97, 0x12, 0xB4, 0x2C, 0x48, 0x97, 0xBA, 0xE7, 0xC6, 0x84, 0xD3, 0xD3, 0x5B, 0xC5, 0x72, 0x6C, 0xE8, 0x99, 0x26, 0x96, 0xB0, 0x44, +0xD7, 0x22, 0xAF, 0xBA, 0x78, 0xEF, 0xA8, 0x58, 0xC4, 0xD1, 0x0F, 0x19, 0x72, 0x11, 0x2C, 0xE8, 0xFF, 0xD3, 0x97, 0x92, 0x49, 0xBF, 0x14, 0xE4, +0x9D, 0x8E, 0x0D, 0x9A, 0xCB, 0x1B, 0x0A, 0x9C, 0xA9, 0x0D, 0x05, 0x51, 0x18, 0x03, 0x84, 0x5D, 0x7C, 0x67, 0x0B, 0xCF, 0x1B, 0x06, 0x64, 0x97, +0xA7, 0x74, 0x3B, 0x08, 0xA2, 0x19, 0xE7, 0x64, 0xEA, 0x0A, 0x3A, 0x2A, 0x61, 0x76, 0x61, 0xC1, 0x6A, 0x37, 0x2F, 0xE0, 0x58, 0xB5, 0x47, 0xA2, +0x8B, 0x62, 0x6E, 0xCF, 0x44, 0x22, 0x22, 0xE1, 0x8E, 0xEF, 0x48, 0x7C, 0xC1, 0x01, 0xDB, 0xFB, 0x71, 0x5B, 0xC3, 0x3A, 0xB8, 0x59, 0x28, 0xEC, +0xF0, 0xBD, 0x4D, 0xEA, 0x30, 0xF2, 0x50, 0xA6, 0xA5, 0xC8, 0x61, 0x78, 0x83, 0xEA, 0x0F, 0x87, 0x3E, 0x7A, 0x46, 0x51, 0x98, 0xC4, 0x64, 0x4B, + }; + + const u8 msg[] = "This is a test message for KCDSA usage!"; + + const u8 nonce[] = { +0x83, 0xF3, 0x00, 0x8F, 0xCE, 0xBA, 0xE5, 0x7E, 0xC7, 0xA6, 0x4A, 0x3A, 0xF7, 0xEE, 0x6E, 0xE1, 0x9C, 0xC1, 0x97, 0xA6, 0xD5, 0xEB, 0xA3, 0xA5, +0xB3, 0xEF, 0x79, 0xB2, 0xF8, 0xF3, 0xDD, 0x53, + }; + u8 sig[32*2] = { 0 }; + gen_hash_alg_type kcdsa_hash = HASH_SHA256; +#endif + + kcdsa_priv_key priv; + kcdsa_pub_key pub; + kcdsa_pub_key pub2; + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Sanity check on size for DSA. + * NOTE: the double parentheses are here to handle -Wunreachable-code + */ + if((NN_USABLE_MAX_BIT_LEN) < (4096)){ + ext_printf("Error: you seem to have compiled libecc with usable NN size < 4096, not suitable for DSA.\n"); + ext_printf(" => Please recompile libecc with EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\"\n"); + ext_printf(" This will increase usable NN for proper DSA up to 4096 bits.\n"); + ext_printf(" Then recompile the current examples with the same EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\" flag and execute again!\n"); + /* NOTE: ret = 0 here to pass self tests even if the library is not compatible */ + ret = 0; + goto err; + } + + + ret = kcdsa_import_priv_key(&priv, p, sizeof(p), q, sizeof(q), g, sizeof(g), x, sizeof(x)); EG(ret, err); + ret = kcdsa_import_pub_key(&pub, p, sizeof(p), q, sizeof(q), g, sizeof(g), y, sizeof(y)); EG(ret, err); + ret = kcdsa_compute_pub_from_priv(&pub2, &priv); EG(ret, err); + + nn_print("y", &(pub2.y)); + + ret = kcdsa_sign(&priv, msg, sizeof(msg)-1, nonce, sizeof(nonce), sig, sizeof(sig), kcdsa_hash); EG(ret, err); + + buf_print("sig", sig, sizeof(sig)); + + ret = kcdsa_verify(&pub, msg, sizeof(msg)-1, sig, sizeof(sig), kcdsa_hash); + ext_printf("Signature result %d\n", ret); + +err: + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/sig/rsa/Makefile b/crypto/libecc/src/examples/sig/rsa/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/rsa/Makefile @@ -0,0 +1,36 @@ +ROOT_DIR=../../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +all: rsa +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: rsa_dyn +endif + +libhash: + # Compile the hashes + $(VERBOSE_MAKE)cd ../../hash && EXTRA_CFLAGS="$(CFLAGS)" make libhash.a + +rsa: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DRSA rsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) ../../hash/libhash.a $(LIBSIGN) -o rsa + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +rsa_dyn: libhash + # Compile the hashes + $(VERBOSE_MAKE)cd ../../hash && EXTRA_CFLAGS="$(CFLAGS)" make _li + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DRSA rsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBEC) -L$(BUILD_DIR) ../../hash/libhash.a -lsign -o rsa_dyn +endif + + +clean: + @rm -f rsa + @rm -f rsa_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sig/rsa/rsa.h b/crypto/libecc/src/examples/sig/rsa/rsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/rsa/rsa.h @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __RSA_H__ +#define __RSA_H__ + +/* + * NOTE: although we only need libarith for RSA as we + * manipulate a ring of integers, we include libsig for + * the hash algorithms. + */ +#include + +/* The hash algorithms wrapper */ +#include "../../hash/hash.h" + +/* We define hereafter the types and functions for RSA. + * The notations are taken from RFC 8017 and should be compliant + * with it. + */ + +/* RSA public key, composed of: + * n the RSA modulus, a positive integer + * e the RSA public exponent, a positive integer + */ +typedef struct { + nn n; + nn e; +} rsa_pub_key; + +/* RSA private key, composed of: + * n the RSA modulus, a positive integer + * d the RSA private exponent, a positive integer + * p (OPTIONAL) the first factor, a positive integer + * q (OPTIONAL) the secod factor, a positive integer + * + * OR when using CRT: + * p the first factor, a positive integer + * q the second factor, a positive integer + * dP the first factor's CRT exponent, a positive integer + * dQ the second factor's CRT exponent, a positive integer + * qInv the (first) CRT coefficient, a positive integer + * r_i the i-th factor, a positive integer + * d_i the i-th factor's CRT exponent, a positive integer + * t_i the i-th factor's CRT coefficient, a positive integer + * u is the number of (r_i, d_i, t_i) triplets. + */ +typedef enum { + RSA_SIMPLE = 0, + RSA_SIMPLE_PQ = 1, + RSA_CRT = 2, +} rsa_priv_key_type; + +/*** RSA "simple" private key ***/ +typedef struct { + nn n; + nn d; +} rsa_priv_key_simple; + +/*** RSA "simple" private key with optional p and q ***/ +typedef struct { + nn n; + nn d; + nn p; + nn q; +} rsa_priv_key_simple_pq; + +/*** RSA CRT private key *******/ +typedef struct { + nn r; + nn d; + nn t; +} rsa_priv_key_crt_coeffs; + +/* A maximum of 5 triplets are allowed in our implementation */ +#define MAX_CRT_COEFFS 5 +typedef struct { + nn p; + nn q; + nn dP; + nn dQ; + nn qInv; + /* u is the number of additional CRT (r, d, t) triplets */ + u8 u; + rsa_priv_key_crt_coeffs coeffs[MAX_CRT_COEFFS]; +} rsa_priv_key_crt; + +typedef struct { + rsa_priv_key_type type; + union { + rsa_priv_key_simple s; + rsa_priv_key_simple_pq s_pq; + rsa_priv_key_crt crt; + } key; +} rsa_priv_key; + +ATTRIBUTE_WARN_UNUSED_RET int rsa_i2osp(nn_src_t x, u8 *buf, u32 buflen); +ATTRIBUTE_WARN_UNUSED_RET int rsa_os2ip(nn_t x, const u8 *buf, u32 buflen); + +ATTRIBUTE_WARN_UNUSED_RET int rsa_import_pub_key(rsa_pub_key *pub, const u8 *n, + u16 nlen, const u8 *e, u16 elen); +ATTRIBUTE_WARN_UNUSED_RET int rsa_import_simple_priv_key(rsa_priv_key *priv, + const u8 *n, u16 nlen, const u8 *d, + u16 dlen, const u8 *p, u16 plen, const u8 *q, u16 qlen); +ATTRIBUTE_WARN_UNUSED_RET int rsa_import_crt_priv_key(rsa_priv_key *priv, + const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *dP, u16 dPlen, + const u8 *dQ, u16 dQlen, + const u8 *qInv, u16 qInvlen, + const u8 **coeffs, u16 *coeffslens, u8 u); + +ATTRIBUTE_WARN_UNUSED_RET int rsaep(const rsa_pub_key *pub, nn_src_t m, nn_t c); +ATTRIBUTE_WARN_UNUSED_RET int rsadp(const rsa_priv_key *priv, nn_src_t c, nn_t m); +ATTRIBUTE_WARN_UNUSED_RET int rsadp_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, nn_src_t c, nn_t m); + +ATTRIBUTE_WARN_UNUSED_RET int rsasp1(const rsa_priv_key *priv, nn_src_t m, nn_t s); +ATTRIBUTE_WARN_UNUSED_RET int rsasp1_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, nn_src_t m, nn_t s); +ATTRIBUTE_WARN_UNUSED_RET int rsavp1(const rsa_pub_key *pub, nn_src_t s, nn_t m); + +ATTRIBUTE_WARN_UNUSED_RET int emsa_pkcs1_v1_5_encode(const u8 *m, u32 mlen, u8 *em, u16 emlen, + gen_hash_alg_type rsa_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int emsa_pss_encode(const u8 *m, u32 mlen, u8 *em, u32 embits, + u16 *eminlen, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt); +ATTRIBUTE_WARN_UNUSED_RET int emsa_pss_verify(const u8 *m, u32 mlen, const u8 *em, + u32 embits, u16 emlen, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type, + u32 slen); + +ATTRIBUTE_WARN_UNUSED_RET int rsaes_pkcs1_v1_5_encrypt(const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *c, u32 *clen, u32 modbits, + const u8 *forced_seed, u32 seedlen); +ATTRIBUTE_WARN_UNUSED_RET int rsaes_pkcs1_v1_5_decrypt(const rsa_priv_key *priv, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits); +ATTRIBUTE_WARN_UNUSED_RET int rsaes_pkcs1_v1_5_decrypt_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits); + +ATTRIBUTE_WARN_UNUSED_RET int rsaes_oaep_encrypt(const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *c, u32 *clen, u32 modbits, const u8 *label, u32 label_len, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type, + const u8 *forced_seed, u32 seedlen); +ATTRIBUTE_WARN_UNUSED_RET int rsaes_oaep_decrypt(const rsa_priv_key *priv, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits, const u8 *label, u32 label_len, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int rsaes_oaep_decrypt_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits, const u8 *label, u32 label_len, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type); + +ATTRIBUTE_WARN_UNUSED_RET int rsassa_pkcs1_v1_5_sign(const rsa_priv_key *priv, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, gen_hash_alg_type rsa_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int rsassa_pkcs1_v1_5_sign_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, gen_hash_alg_type rsa_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int rsassa_pkcs1_v1_5_verify(const rsa_pub_key *pub, const u8 *m, u32 mlen, + const u8 *s, u16 slen, u32 modbits, gen_hash_alg_type rsa_hash_type); + +ATTRIBUTE_WARN_UNUSED_RET int rsassa_pss_sign(const rsa_priv_key *priv, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt); +ATTRIBUTE_WARN_UNUSED_RET int rsassa_pss_sign_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt); +ATTRIBUTE_WARN_UNUSED_RET int rsassa_pss_verify(const rsa_pub_key *pub, const u8 *m, u32 mlen, + const u8 *s, u16 slen, u32 modbits, + gen_hash_alg_type rsa_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen); + +ATTRIBUTE_WARN_UNUSED_RET int rsa_iso9796_2_sign_recover(const rsa_priv_key *priv, const u8 *m, u32 mlen, u32 *m1len, + u32 *m2len, u8 *s, u16 *slen, + u32 modbits, gen_hash_alg_type gen_hash_type); + +ATTRIBUTE_WARN_UNUSED_RET int rsa_iso9796_2_sign_recover_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, + const u8 *m, u32 mlen, u32 *m1len, u32 *m2len, u8 *s, u16 *slen, + u32 modbits, gen_hash_alg_type gen_hash_type); +ATTRIBUTE_WARN_UNUSED_RET int rsa_iso9796_2_verify_recover(const rsa_pub_key *pub, const u8 *m2, u32 m2len, u8 *m1, u32 *m1len, + const u8 *s, u16 slen, u32 modbits, gen_hash_alg_type gen_hash_type); +#endif /* __RSA_H__ */ diff --git a/crypto/libecc/src/examples/sig/rsa/rsa.c b/crypto/libecc/src/examples/sig/rsa/rsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/rsa/rsa.c @@ -0,0 +1,2057 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "rsa.h" +#include "rsa_tests.h" + + +/* We include the rand external dependency because we have to generate + * some random data for the padding. + */ +#include +/* We include the printf external dependency for printf output */ +#include +/* We include our common helpers */ +#include "../common/common.h" + + +/* + * The purpose of this example is to implement the RSA + * related algorithms as per RFC 8017 and ISO/IEC 9796-2 based + * on libecc arithmetic primitives. + * + * XXX: Please be aware that libecc has been designed for Elliptic + * Curve cryptography, and as so the arithmetic primitives are + * not optimized for big numbers >= 1024 bits usually used for RSA. + * Additionnaly, a hard limit of our NN values makes it impossible + * to exceed ~5300 bits in the best case (words of size 64 bits). + * + * All in all, please see this as a proof of concept of implementing + * RFC 8017 rather than a production code. Use it at your own risk! + * + * !! DISCLAIMER !! + * ================ + * Although some efforts have been put on providing a clean code and although many of + * the underlying arithmetic primitives are constant time, only basic efforts have + * been deployed to prevent advanced side channels (e.g. to protect the private values + * against elaborate microarchitectural side-channels and so on). The modular exponentation + * uses a Montgomery Ladder, and message blinding is performed to mitigate basic SCA. + * Please note that the modular exponentation is NOT constant time wrt the MSB of + * the private exponent, which should be OK in the general case as this leak is less + * critical than for DSA and ECDSA nonces in scalar multiplication (raising HNP issues + * in these last cases). + * Optionally, when BLINDING=1 is activated, exponent blinding is used by adding a + * "small" (128 bits) multiple of the "order" (this is left as optional because of + * the big impacts on performance), somehow limiting the modular exponentiation MSB + * issue at the expense of performance. + * + * Padding oracles (Bleichenbacher, Manger) in RSA PKCS#1 v1.5 and RSA-OAEP decryption + * primitives are taken into account, although no absolute guarantee can be made on this + * (and mostly: these oracles also heavily depend on what the upper layer callers do). + * + * Fault injection attacks "a la Bellcore" are protected using a sanity check that + * the exponentiation to the public exponent provides the same input as the operation + * using the private exponent. + * + * !!NOTE: only the *_hardened* suffixed APIs are protected, the non suffixed ones are + * *NOT* protected. This is mainly due to the fact that the protections use the public + * key while the RFC APIs handling private operations only take the private key as + * input. Hence, please *USE* the *_hardened* APIs if unsure about your usage context! + * + * Also, as for all other libecc primitives, beware of randomness sources. By default, + * the library uses the OS random sources (e.g. "/dev/urandom"), but the user + * is encouraged to adapt the ../external_deps/rand.c source file to combine + * multiple sources and add entropy there depending on the context where this + * code is integrated. The security level of all the cryptographic primitives + * heavily relies on random sources quality. + * + * All-in-all, this piece of code can be useful in some contexts, or risky to + * use in other sensitive ones where advanced side-channels or fault attacks + * have to be considered. Use this RSA code knowingly and at your own risk! + * + */ + +int rsa_import_pub_key(rsa_pub_key *pub, const u8 *n, + u16 nlen, const u8 *e, u16 elen) +{ + int ret; + + MUST_HAVE((pub != NULL), ret, err); + + /* Import our big numbers */ + ret = nn_init_from_buf(&(pub->n), n, nlen); EG(ret, err); + ret = nn_init_from_buf(&(pub->e), e, elen); + +err: + if(ret && (pub != NULL)){ + IGNORE_RET_VAL(local_memset(pub, 0, sizeof(rsa_pub_key))); + } + + return ret; +} + +int rsa_import_simple_priv_key(rsa_priv_key *priv, + const u8 *n, u16 nlen, const u8 *d, u16 dlen, + const u8 *p, u16 plen, const u8 *q, u16 qlen) +{ + int ret; + + MUST_HAVE((priv != NULL), ret, err); + + MUST_HAVE(((p != NULL) && (q != NULL)) || ((p == NULL) && (q == NULL)), ret, err); + + /* Import our big numbers */ + if((p == NULL) || (q == NULL)){ + priv->type = RSA_SIMPLE; + ret = nn_init_from_buf(&(priv->key.s.n), n, nlen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.s.d), d, dlen); EG(ret, err); + } + else{ + priv->type = RSA_SIMPLE_PQ; + ret = nn_init_from_buf(&(priv->key.s_pq.n), n, nlen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.s_pq.d), d, dlen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.s_pq.p), p, plen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.s_pq.q), q, qlen); EG(ret, err); + } + +err: + if(ret && (priv != NULL)){ + IGNORE_RET_VAL(local_memset(priv, 0, sizeof(rsa_priv_key))); + } + + return ret; +} + +int rsa_import_crt_priv_key(rsa_priv_key *priv, + const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *dP, u16 dPlen, + const u8 *dQ, u16 dQlen, + const u8 *qInv, u16 qInvlen, + const u8 **coeffs, u16 *coeffslens, u8 u) +{ + int ret; + + MUST_HAVE((priv != NULL), ret, err); + + priv->type = RSA_CRT; + /* Import our big numbers */ + ret = nn_init_from_buf(&(priv->key.crt.p), p, plen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.crt.q), q, qlen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.crt.dP), dP, dPlen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.crt.dQ), dQ, dQlen); EG(ret, err); + ret = nn_init_from_buf(&(priv->key.crt.qInv), qInv, qInvlen); EG(ret, err); + + priv->key.crt.u = 0; + + /* Import the optional coefficients if necessary */ + if(coeffs != NULL){ + unsigned int i; + + MUST_HAVE((coeffslens != NULL), ret, err); + MUST_HAVE((u > 0) && (u < MAX_CRT_COEFFS), ret, err); + + priv->key.crt.u = u; + + for(i = 0; i < (3*u); i += 3){ + rsa_priv_key_crt_coeffs *cur = &(priv->key.crt.coeffs[(i / 3)]); + + ret = nn_init_from_buf(&(cur->r), coeffs[i], coeffslens[i]); EG(ret, err); + ret = nn_init_from_buf(&(cur->d), coeffs[i + 1], coeffslens[i + 1]); EG(ret, err); + ret = nn_init_from_buf(&(cur->t), coeffs[i + 2], coeffslens[i + 2]); EG(ret, err); + } + } + +err: + if(ret && (priv != NULL)){ + IGNORE_RET_VAL(local_memset(priv, 0, sizeof(rsa_priv_key))); + } + return ret; +} + +/* I2OSP - Integer-to-Octet-String primitive + * (as decribed in section 4.1 of RFC 8017) + */ +int rsa_i2osp(nn_src_t x, u8 *buf, u32 buflen) +{ + int ret; + + /* Size check */ + MUST_HAVE((buflen <= 0xffff), ret, err); + ret = _i2osp(x, buf, (u16)buflen); + +err: + return ret; +} + +/* OS2IP - Octet-String-to-Integer primitive + * (as decribed in section 4.2 of RFC 8017) + */ +int rsa_os2ip(nn_t x, const u8 *buf, u32 buflen) +{ + int ret; + + /* Size check */ + MUST_HAVE((buflen <= 0xffff), ret, err); + ret = _os2ip(x, buf, (u16)buflen); + +err: + return ret; +} + +/* The raw RSAEP function as defined in RFC 8017 section 5.1.1 + * Input: an RSA public key and a big int message + * Output: a big int ciphertext + * Assumption: RSA public key K is valid + */ +int rsaep(const rsa_pub_key *pub, nn_src_t m, nn_t c) +{ + int ret, cmp; + nn_src_t n, e; + + /* Sanity checks */ + MUST_HAVE((pub != NULL), ret, err); + + /* Make things more readable */ + n = &(pub->n); + e = &(pub->e); + + /* Sanity checks */ + ret = nn_check_initialized(n); EG(ret, err); + ret = nn_check_initialized(e); EG(ret, err); + + /* Check that m is indeed in [0, n-1], trigger an error if not */ + MUST_HAVE((!nn_cmp(m, n, &cmp)) && (cmp < 0), ret, err); + + /* Compute c = m^e mod n + * NOTE: we use our internal *insecure* modular exponentation as we + * are handling public key and data. + */ + ret = _nn_mod_pow_insecure(c, m, e, n); + +err: + PTR_NULLIFY(n); + PTR_NULLIFY(e); + + return ret; +} + +#ifdef USE_SIG_BLINDING +#define RSA_EXPONENT_BLINDING_SIZE 128 +/* + * Blind an exponent with a "small" multiple (of size "bits") of the input mod or (mod-1). + * We use a relatively small multiple mainly because of potential big performance impacts on + * modular exponentiation. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _rsa_blind_exponent(nn_src_t e, nn_src_t mod, nn_t out, bitcnt_t bits, u8 dec) +{ + int ret, check; + nn b; + b.magic = WORD(0); + + ret = nn_init(&b, 0); EG(ret, err); + ret = nn_init(out, 0); EG(ret, err); + + ret = nn_one(out); EG(ret, err); + ret = nn_lshift(out, out, bits); EG(ret, err); + ret = nn_iszero(out, &check); EG(ret, err); + /* Check for overflow */ + MUST_HAVE(!check, ret, err); + + /* Get a random value of "bits" count */ + ret = nn_get_random_mod(&b, out); EG(ret, err); + + if(dec){ + ret = nn_copy(out, mod); EG(ret, err); + ret = nn_dec(out, out); EG(ret, err); + ret = nn_mul(&b, &b, out); EG(ret, err); + } + else{ + ret = nn_mul(&b, &b, mod); EG(ret, err); + } + + ret = nn_add(out, e, &b); + +err: + nn_uninit(&b); + + return ret; +} +#endif + +/* The raw RSADP function as defined in RFC 8017 section 5.1.2 + * Input: an RSA private key 'priv' and a big int ciphertext 'c' + * Output: a big int clear message 'm' + * Assumption: RSA private key 'priv' is valid + */ +ATTRIBUTE_WARN_UNUSED_RET static int rsadp_crt_coeffs(const rsa_priv_key *priv, nn_src_t c, nn_t m, u8 u) +{ + int ret; + unsigned int i; + nn_src_t r_i, d_i, t_i, r_i_1; + nn m_i, h, R; + m_i.magic = h.magic = R.magic = WORD(0); + + /* Sanity check on u */ + MUST_HAVE((u < MAX_CRT_COEFFS), ret, err); + + ret = nn_init(&m_i, 0); EG(ret, err); + ret = nn_init(&h, 0); EG(ret, err); + ret = nn_init(&R, 0); EG(ret, err); + /* NOTE: this is an internal function, sanity checks on priv and u have + * been performed by the callers. + */ + /* R = r_1 */ + ret = nn_copy(&R, &(priv->key.crt.coeffs[0].r)); EG(ret, err); + /* Loop */ + for(i = 1; i < u; i++){ + r_i_1 = &(priv->key.crt.coeffs[i-1].r); + r_i = &(priv->key.crt.coeffs[i].r); + d_i = &(priv->key.crt.coeffs[i].d); + t_i = &(priv->key.crt.coeffs[i].t); + + /* Sanity checks */ + ret = nn_check_initialized(r_i_1); EG(ret, err); + ret = nn_check_initialized(r_i); EG(ret, err); + ret = nn_check_initialized(d_i); EG(ret, err); + ret = nn_check_initialized(t_i); EG(ret, err); + + /* m_i = c^(d_i) mod r_i */ +#ifdef USE_SIG_BLINDING + ret = _rsa_blind_exponent(d_i, r_i, &h, (bitcnt_t)RSA_EXPONENT_BLINDING_SIZE, 1); EG(ret, err); + ret = nn_mod_pow(&m_i, c, &h, r_i); EG(ret, err); +#else + ret = nn_mod_pow(&m_i, c, d_i, r_i); EG(ret, err); +#endif + /* R = R * r_(i-1) */ + ret = nn_mul(&R, &R, r_i_1); EG(ret, err); + /* h = (m_i - m) * t_i mod r_i */ + ret = nn_mod(&h, m, r_i); EG(ret, err); + ret = nn_mod_sub(&h, &m_i, &h, r_i); EG(ret, err); + ret = nn_mod_mul(&h, &h, t_i, r_i); EG(ret, err); + /* m = m + R * h */ + ret = nn_mul(&h, &R, &h); EG(ret, err); + ret = nn_add(m, m, &h); EG(ret, err); + } + +err: + nn_uninit(&m_i); + nn_uninit(&h); + nn_uninit(&R); + + PTR_NULLIFY(r_i); + PTR_NULLIFY(d_i); + PTR_NULLIFY(t_i); + PTR_NULLIFY(r_i_1); + + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int rsadp_crt(const rsa_priv_key *priv, nn_src_t c, nn_t m) +{ + int ret; + nn_src_t p, q, dP, dQ, qInv; + nn m_1, m_2, h, msb_fixed; + u8 u; + m_1.magic = m_2.magic = h.magic = WORD(0); + + ret = nn_init(&m_1, 0); EG(ret, err); + ret = nn_init(&m_2, 0); EG(ret, err); + ret = nn_init(&h, 0); EG(ret, err); + ret = nn_init(&msb_fixed, 0); EG(ret, err); + + /* Make things more readable */ + p = &(priv->key.crt.p); + q = &(priv->key.crt.q); + dP = &(priv->key.crt.dP); + dQ = &(priv->key.crt.dQ); + qInv = &(priv->key.crt.qInv); + u = priv->key.crt.u; + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(dP); EG(ret, err); + ret = nn_check_initialized(dQ); EG(ret, err); + ret = nn_check_initialized(qInv); EG(ret, err); + + /* m_1 = c^dP mod p */ +#ifdef USE_SIG_BLINDING + ret = _rsa_blind_exponent(dP, p, &h, (bitcnt_t)RSA_EXPONENT_BLINDING_SIZE, 1); EG(ret, err); + ret = nn_mod_pow(&m_1, c, &h, p); EG(ret, err); +#else + ret = nn_mod_pow(&m_1, c, dP, p); EG(ret, err); +#endif + /* m_2 = c^dQ mod q */ +#ifdef USE_SIG_BLINDING + ret = _rsa_blind_exponent(dQ, q, &h, (bitcnt_t)RSA_EXPONENT_BLINDING_SIZE, 1); EG(ret, err); + ret = nn_mod_pow(&m_2, c, &h, q); EG(ret, err); +#else + ret = nn_mod_pow(&m_2, c, dQ, q); EG(ret, err); +#endif + /* h = (m_1 - m_2) * qInv mod p */ + ret = nn_mod(&h, &m_2, p); EG(ret, err); + ret = nn_mod_sub(&h, &m_1, &h, p); EG(ret, err); + ret = nn_mod_mul(&h, &h, qInv, p); EG(ret, err); + /* m = m_2 + q * h */ + ret = nn_mul(m, &h, q); EG(ret, err); + ret = nn_add(m, &m_2, m); EG(ret, err); + + if(u > 1){ + ret = rsadp_crt_coeffs(priv, c, m, u); + } + +err: + nn_uninit(&m_1); + nn_uninit(&m_2); + nn_uninit(&h); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(dP); + PTR_NULLIFY(dQ); + PTR_NULLIFY(qInv); + + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int rsadp_nocrt(const rsa_priv_key *priv, nn_src_t c, nn_t m) +{ + int ret, cmp; + nn_src_t n, d, p, q; +#ifdef USE_SIG_BLINDING + nn b1, b2; + b1.magic = b2.magic = WORD(0); +#endif + /* Make things more readable */ + if(priv->type == RSA_SIMPLE){ + n = &(priv->key.s.n); + d = &(priv->key.s.d); + } + else if(priv->type == RSA_SIMPLE_PQ){ + n = &(priv->key.s_pq.n); + d = &(priv->key.s_pq.d); + } + else{ + ret = -1; + goto err; + } + /* Sanity checks */ + ret = nn_check_initialized(n); EG(ret, err); + ret = nn_check_initialized(d); EG(ret, err); + /* Check that c is indeed in [0, n-1], trigger an error if not */ + MUST_HAVE((!nn_cmp(c, n, &cmp)) && (cmp < 0), ret, err); + + /* Compute m = c^d mod n */ +#ifdef USE_SIG_BLINDING + /* When we are asked to use exponent blinding, we MUST have a RSA_SIMPLE_PQ + * type key in order to be able to compute our Phi(n) = (p-1)(q-1) and perform + * the blinding. + */ + if(priv->type == RSA_SIMPLE_PQ){ + p = &(priv->key.s_pq.p); + q = &(priv->key.s_pq.q); + ret = nn_init(&b1, 0); EG(ret, err); + ret = nn_init(&b2, 0); EG(ret, err); + ret = nn_dec(&b1, p); EG(ret, err); + ret = nn_dec(&b2, q); EG(ret, err); + ret = nn_mul(&b1, &b1, &b2); EG(ret, err); + ret = _rsa_blind_exponent(d, &b1, &b2, (bitcnt_t)RSA_EXPONENT_BLINDING_SIZE, 0); EG(ret, err); + ret = nn_mod_pow(m, c, &b2, n); EG(ret, err); + } + else{ + ret = -1; + goto err; + } +#else + FORCE_USED_VAR(p); + FORCE_USED_VAR(q); + ret = nn_mod_pow(m, c, d, n); +#endif + +err: +#ifdef USE_SIG_BLINDING + nn_uninit(&b1); + nn_uninit(&b2); +#endif + PTR_NULLIFY(n); + PTR_NULLIFY(d); + PTR_NULLIFY(p); + PTR_NULLIFY(q); + + return ret; +} + +int rsadp(const rsa_priv_key *priv, nn_src_t c, nn_t m) +{ + int ret; + + /* Sanity checks */ + MUST_HAVE((priv != NULL), ret, err); + + /* Do we have a simple or a CRT key? */ + if((priv->type == RSA_SIMPLE) || (priv->type == RSA_SIMPLE_PQ)){ + ret = rsadp_nocrt(priv, c, m); EG(ret, err); + } + else if(priv->type == RSA_CRT){ + ret = rsadp_crt(priv, c, m); EG(ret, err); + } + else{ + ret = -1; + goto err; + } + +err: + return ret; +} + +/* + * The "hardened" version of rsadp that uses message blinding as well + * as output check for Bellcore style fault attacks. + * + */ +int rsadp_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, nn_src_t c, nn_t m) +{ + int ret, check; + nn_src_t n, e; + nn b, binv; + b.magic = binv.magic = WORD(0); + + /* Make things more readable */ + n = &(pub->n); + e = &(pub->e); + + /* Sanity checks */ + MUST_HAVE((priv != NULL) && (pub != NULL), ret, err); + + /* Blind the message: get a random value for b prime with n + * and compute its modular inverse. + */ + ret = nn_init(&b, 0); EG(ret, err); + ret = nn_init(&binv, 0); EG(ret, err); + ret = -1; + while(ret){ + ret = nn_get_random_mod(&b, n); EG(ret, err); + ret = nn_modinv(&binv, &b, n); + } + /* Exponentiate the blinder to the public value */ + ret = _nn_mod_pow_insecure(m, &b, e, n); EG(ret, err); + /* Perform message blinding */ + ret = nn_mod_mul(&b, m, c, n); EG(ret, err); + + /* Perform rsadp on the blinded message */ + ret = rsadp(priv, &b, m); EG(ret, err); + + /* Unblind the result */ + ret = nn_mod_mul(m, m, &binv, n); EG(ret, err); + + /* Now perform the public operation to check the result. + * This is useful against some fault attacks (Bellcore style). + */ + ret = rsaep(pub, m, &b); EG(ret, err); + ret = nn_cmp(c, &b, &check); EG(ret, err); + MUST_HAVE((check == 0), ret, err); + +err: + nn_uninit(&b); + nn_uninit(&binv); + + PTR_NULLIFY(n); + PTR_NULLIFY(e); + + return ret; +} + +/* The raw RSASP1 function as defined in RFC 8017 section 5.2.1 + * Input: an RSA private key 'priv' and a big int message 'm' + * Output: a big int signature 's' + * Assumption: RSA private key 'priv' is valid + */ +int rsasp1(const rsa_priv_key *priv, nn_src_t m, nn_t s) +{ + return rsadp(priv, m, s); +} + +/* + * The "hardened" version of rsasp1 that uses message blinding as well + * as optional exponent blinding. + * + */ +int rsasp1_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, nn_src_t m, nn_t s) +{ + return rsadp_hardened(priv, pub, m, s); +} + + +/* The raw RSAVP1 function as defined in RFC 8017 section 5.2.2 + * Input: an RSA public key 'pub' and a big int signature 's' + * Output: a big int ciphertext 'm' + * Assumption: RSA public key 'pub' is valid + */ +int rsavp1(const rsa_pub_key *pub, nn_src_t s, nn_t m) +{ + return rsaep(pub, s, m); +} + +ATTRIBUTE_WARN_UNUSED_RET static int rsa_digestinfo_from_hash(gen_hash_alg_type gen_hash_type, u8 *digestinfo, u32 *digestinfo_len) +{ + int ret; + + /* Sanity check */ + MUST_HAVE((digestinfo_len != NULL), ret, err); + + switch(gen_hash_type){ + case HASH_MD2:{ + const u8 _digestinfo[] = { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x02, + 0x05, 0x00, 0x04, 0x10 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_MD4:{ + const u8 _digestinfo[] = { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x04, + 0x05, 0x00, 0x04, 0x10 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_MD5:{ + const u8 _digestinfo[] = { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05, + 0x05, 0x00, 0x04, 0x10 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA0:{ + const u8 _digestinfo[] = { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, + 0x0e, 0x03, 0x02, 0x12, 0x05, 0x00, 0x04, + 0x14 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA1:{ + const u8 _digestinfo[] = { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, + 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, + 0x14 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA224:{ + const u8 _digestinfo[] = { 0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x04, 0x05, 0x00, 0x04, 0x1c }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA256:{ + const u8 _digestinfo[] = { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x01, 0x05, 0x00, 0x04, 0x20 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA384:{ + const u8 _digestinfo[] = { 0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x02, 0x05, 0x00, 0x04, 0x30 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA512:{ + const u8 _digestinfo[] = { 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x03, 0x05, 0x00, 0x04, 0x40 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA512_224:{ + const u8 _digestinfo[] = { 0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x05, 0x05, 0x00, 0x04, 0x1c }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA512_256:{ + const u8 _digestinfo[] = { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x06, 0x05, 0x00, 0x04, 0x20 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_RIPEMD160:{ + const u8 _digestinfo[] = { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, + 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, + 0x14 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + /* The following SHA-3 oids have been taken from + * https://www.ietf.org/archive/id/draft-jivsov-openpgp-sha3-01.txt + * + * The specific case of SHA3-224 is infered from the OID of SHA3-224 although + * not standardized. + */ + case HASH_SHA3_224:{ + const u8 _digestinfo[] = { 0x30, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x07, 0x05, 0x00, 0x04, 0x1c }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA3_256:{ + const u8 _digestinfo[] = { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x08, 0x05, 0x00, 0x04, 0x20 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA3_384:{ + const u8 _digestinfo[] = { 0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x09, 0x05, 0x00, 0x04, 0x30 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + case HASH_SHA3_512:{ + const u8 _digestinfo[] = { 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, + 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, + 0x0a ,0x05, 0x00, 0x04, 0x40 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + /* For SM3, the "RSA Signing with SM3" OID is taken from: + * http://gmssl.org/docs/oid.html + */ + case HASH_SM3:{ + const u8 _digestinfo[] = { 0x30, 0x30, 0x30, 0x0d, 0x06, 0x08, 0x2A, + 0x81, 0x1c, 0xcf, 0x55, 0x01, 0x83, 0x78, + 0x05, 0x00, 0x04, 0x20 }; + MUST_HAVE(((*digestinfo_len) >= sizeof(_digestinfo)), ret, err); + ret = local_memcpy(digestinfo, _digestinfo, sizeof(_digestinfo)); EG(ret, err); + (*digestinfo_len) = sizeof(_digestinfo); + break; + } + default:{ + ret = -1; + goto err; + } + } + +err: + return ret; +} + +/* GF1 as a mask generation function as described in RFC 8017 Appendix B.2.1 + * z is the 'seed', and zlen its length + */ +ATTRIBUTE_WARN_UNUSED_RET static int _mgf1(const u8 *z, u16 zlen, + u8 *mask, u64 masklen, + gen_hash_alg_type mgf_hash_type) +{ + int ret; + u8 hlen, block_size; + u32 c, ceil; + u8 C[4]; + const u8 *input[3] = { z, C, NULL }; + u32 ilens[3] = { zlen, 4, 0 }; + u8 digest[MAX_DIGEST_SIZE]; + + /* Zeroize local variables */ + ret = local_memset(C, 0, sizeof(C)); EG(ret, err); + ret = local_memset(digest, 0, sizeof(digest)); EG(ret, err); + + /* Sanity checks */ + MUST_HAVE((z != NULL) && (mask != NULL), ret, err); + + ret = gen_hash_get_hash_sizes(mgf_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* masklen must be < 2**32 * hlen */ + MUST_HAVE((masklen < ((u64)hlen * ((u64)0x1 << 32))), ret, err); + ceil = (u32)(masklen / hlen) + !!(masklen % hlen); + + for(c = 0; c < ceil; c++){ + /* 3.A: C = I2OSP (counter, 4) */ + C[0] = (u8)((c >> 24) & 0xff); + C[1] = (u8)((c >> 16) & 0xff); + C[2] = (u8)((c >> 8) & 0xff); + C[3] = (u8)((c >> 0) & 0xff); + + /* 3.B + 4. */ + if ((masklen % hlen) && (c == (ceil - 1))) { /* need last chunk smaller than hlen */ + ret = gen_hash_hfunc_scattered(input, ilens, digest, mgf_hash_type); EG(ret, err); + ret = local_memcpy(&mask[c * hlen], digest, (u32)(masklen % hlen)); EG(ret, err); + } else { /* common case, i.e. complete chunk */ + ret = gen_hash_hfunc_scattered(input, ilens, &mask[c * hlen], mgf_hash_type); EG(ret, err); + } + } +err: + return ret; +} + +/* EMSA-PSS-ENCODE encoding as described in RFC 8017 section 9.1.1 + * NOTE: we enforce MGF1 as a mask generation function + */ +int emsa_pss_encode(const u8 *m, u32 mlen, u8 *em, u32 embits, + u16 *eminlen, gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt) +{ + int ret; + u8 hlen, block_size; + u8 mhash[MAX_DIGEST_SIZE]; + u8 h[MAX_DIGEST_SIZE]; + u8 zeroes[8]; + /* Reasonable sizes: + * NOTE: for the cases where the salt exceeds this size, we return an error + * alhough this should not happen if our underlying libecc supports the current + * modulus size. + */ + u8 salt[NN_USABLE_MAX_BYTE_LEN]; + u8 *dbmask = em; + const u8 *input[2] = { m, NULL }; + u32 ilens[2] = { mlen, 0 }; + u32 emlen, dblen, pslen; + unsigned int i; + u8 mask; + const u8 *input_[4] = { zeroes, mhash, salt, NULL }; + u32 ilens_[4]; + + /* Zeroize local variables */ + ret = local_memset(mhash, 0, sizeof(mhash)); EG(ret, err); + ret = local_memset(h, 0, sizeof(h)); EG(ret, err); + ret = local_memset(salt, 0, sizeof(salt)); EG(ret, err); + ret = local_memset(zeroes, 0, sizeof(zeroes)); EG(ret, err); + ret = local_memset(ilens_, 0, sizeof(ilens_)); EG(ret, err); + + /* Sanity checks */ + MUST_HAVE((m != NULL) && (em != NULL) && (eminlen != NULL), ret, err); + + /* We only allow salt up to a certain size */ + MUST_HAVE((saltlen <= sizeof(salt)), ret, err); + emlen = BYTECEIL(embits); + MUST_HAVE((emlen < (u32)((u32)0x1 << 16)), ret, err); + + /* Check that we have enough room for the output */ + MUST_HAVE(((*eminlen) >= emlen), ret, err); + + /* Get the used hash information */ + ret = gen_hash_get_hash_sizes(gen_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* emBits at least 8hLen + 8sLen + 9 */ + MUST_HAVE((embits >= ((8*(u32)hlen) + (8*(u32)saltlen) + 9)), ret, err); + + /* If emLen < hLen + sLen + 2, output "encoding error" and stop. */ + MUST_HAVE((emlen >= ((u32)hlen + (u32)saltlen + 2)), ret, err); + + /* mHash = Hash(M) */ + ret = gen_hash_hfunc_scattered(input, ilens, mhash, gen_hash_type); EG(ret, err); + + /* Generate a random octet string salt of length sLen; if sLen = 0 + * then salt is the empty string. + * M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; + * H = Hash(M'), + */ + if(forced_salt != NULL){ + /* We are given a forced salt, use it */ + ret = local_memcpy(salt, forced_salt, saltlen); EG(ret, err); + } + else{ + /* We only support generating salts of size <= 2**16 */ + MUST_HAVE((saltlen <= 0xffff), ret, err); + /* Get random salt */ + ret = get_random(salt, (u16)saltlen); EG(ret, err); + } + ilens_[0] = sizeof(zeroes); + ilens_[1] = hlen; + ilens_[2] = saltlen; + ilens_[3] = 0; + ret = gen_hash_hfunc_scattered(input_, ilens_, h, gen_hash_type); EG(ret, err); + + /* dbMask = MGF(H, emLen - hLen - 1) + * NOTE: dbmask points to &em[0] + */ + dblen = (emlen - hlen - 1); + pslen = (dblen - saltlen - 1); /* padding string PS len */ + ret = _mgf1(h, hlen, dbmask, dblen, mgf_hash_type); EG(ret, err); + + /* + * maskedb = (PS || 0x01 || salt) xor dbmask. We compute maskeddb directly + * in dbmask. + */ + + /* 1) PS is made of 0 so xoring it with first pslen bytes of dbmask is a NOP */ + + /* + * 2) the byte after padding string is 0x01. Do the xor with the associated + * byte in dbmask + */ + dbmask[pslen] ^= 0x01; + + /* 3) xor the salt with the end of dbmask */ + for (i = 0; i < saltlen; i++){ + dbmask[dblen - saltlen + i] ^= salt[i]; + } + + /* Set the leftmost 8emLen - emBits bits of the leftmost octet + * in maskedDB to zero. + */ + mask = 0; + for(i = 0; i < (8 - ((8*emlen) - embits)); i++){ + mask = (u8)(mask | (0x1 << i)); + } + dbmask[0] &= mask; + /* EM = maskedDB || H || 0xbc */ + ret = local_memcpy(&em[dblen], h, hlen); EG(ret, err); + em[emlen - 1] = 0xbc; + (*eminlen) = (u16)emlen; + +err: + return ret; +} + +/* EMSA-PSS-VERIFY verification as described in RFC 8017 section 9.1.2 + * NOTE: we enforce MGF1 as a mask generation function + */ +int emsa_pss_verify(const u8 *m, u32 mlen, const u8 *em, + u32 embits, u16 emlen, + gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen) +{ + int ret, cmp; + u8 hlen, block_size; + u8 mhash[MAX_DIGEST_SIZE]; + u8 h_[MAX_DIGEST_SIZE]; + u8 zeroes[8]; + const u8 *input[2] = { m, NULL }; + u32 ilens[2] = { mlen, 0 }; + unsigned int i; + u8 mask; + u16 _emlen; + /* + * NOTE: the NN_USABLE_MAX_BYTE_LEN should be a reasonable size here. + */ + u8 dbmask[NN_USABLE_MAX_BYTE_LEN]; + u8 *db; + const u8 *h, *salt, *maskeddb = em; + u32 dblen; + const u8 *input_[4]; + u32 ilens_[4]; + + /* Zeroize local variables */ + ret = local_memset(mhash, 0, sizeof(mhash)); EG(ret, err); + ret = local_memset(h_, 0, sizeof(h_)); EG(ret, err); + ret = local_memset(dbmask, 0, sizeof(dbmask)); EG(ret, err); + ret = local_memset(zeroes, 0, sizeof(zeroes)); EG(ret, err); + ret = local_memset(input_, 0, sizeof(input_)); EG(ret, err); + ret = local_memset(ilens_, 0, sizeof(ilens_)); EG(ret, err); + + /* Sanity checks */ + MUST_HAVE((m != NULL) && (em != NULL), ret, err); + + /* Get the used hash information */ + ret = gen_hash_get_hash_sizes(gen_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Let mHash = Hash(M), an octet string of length hLen */ + ret = gen_hash_hfunc_scattered(input, ilens, mhash, gen_hash_type); EG(ret, err); + + /* emBits at least 8hLen + 8sLen + 9 */ + MUST_HAVE((embits >= ((8*(u32)hlen) + (8*(u32)saltlen) + 9)), ret, err); + + /* Check that emLen == \ceil(emBits/8) */ + MUST_HAVE((((embits / 8) + 1) < (u32)((u32)0x1 << 16)), ret, err); + _emlen = ((embits % 8) == 0) ? (u16)(embits / 8) : (u16)((embits / 8) + 1); + MUST_HAVE((_emlen == emlen), ret, err); + + /* If emLen < hLen + sLen + 2, output "inconsistent" and stop */ + MUST_HAVE((emlen >= ((u32)hlen + (u32)saltlen + 2)), ret, err); + + /* If the rightmost octet of EM does not have hexadecimal value 0xbc, output "inconsistent" and stop */ + MUST_HAVE((em[emlen - 1] == 0xbc), ret, err); + + /* If the leftmost 8emLen - emBits bits of the leftmost octet in maskedDB are not all equal to zero, + * output "inconsistent" and stop + * NOTE: maskeddb points to &em[0] + */ + mask = 0; + for(i = 0; i < (8 - ((unsigned int)(8*emlen) - embits)); i++){ + mask = (u8)(mask | (0x1 << i)); + } + MUST_HAVE(((maskeddb[0] & (~mask)) == 0), ret, err); + + /* dbMask = MGF(H, emLen - hLen - 1) */ + dblen = (u32)(emlen - hlen - 1); + h = &em[dblen]; + MUST_HAVE(((u16)dblen <= sizeof(dbmask)), ret, err); /* sanity check for overflow */ + ret = _mgf1(h, hlen, dbmask, dblen, mgf_hash_type); EG(ret, err); + /* DB = maskedDB \xor dbMask */ + db = &dbmask[0]; + for(i = 0; i < (u16)dblen; i++){ + db[i] = (dbmask[i] ^ maskeddb[i]); + } + /* Set the leftmost 8emLen - emBits bits of the leftmost octet in DB to zero */ + db[0] &= mask; + + /* + * If the emLen - hLen - sLen - 2 leftmost octets of DB are not + * zero or if the octet at position emLen - hLen - sLen - 1 (the + * leftmost position is "position 1") does not have hexadecimal + * value 0x01, output "inconsistent" and stop. + */ + for(i = 0; i < (u16)(dblen - saltlen - 1); i++){ + MUST_HAVE((db[i] == 0x00), ret, err); + } + MUST_HAVE((db[dblen - saltlen - 1] == 0x01), ret, err); + + /* Let salt be the last sLen octets of DB */ + salt = &db[dblen - saltlen]; + /* + * Let H' = Hash(M'), an octet string of length hLen with + * M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt + */ + /* Fill input_ */ + input_[0] = zeroes; + input_[1] = mhash; + input_[2] = salt; + input_[3] = NULL; + /* Fill ilens_ */ + ilens_[0] = sizeof(zeroes); + ilens_[1] = hlen; + ilens_[2] = saltlen; + ilens_[3] = 0; + /* Hash */ + ret = gen_hash_hfunc_scattered(input_, ilens_, h_, gen_hash_type); EG(ret, err); + + /* If H = H', output "consistent". Otherwise, output "inconsistent" */ + ret = are_equal(h, h_, hlen, &cmp); EG(ret, err); + if(!cmp){ + ret = -1; + } + +err: + return ret; +} + +/* EMSA-PKCS1-v1_5 encoding as described in RFC 8017 section 9.2 + */ +int emsa_pkcs1_v1_5_encode(const u8 *m, u32 mlen, u8 *em, u16 emlen, + gen_hash_alg_type gen_hash_type) +{ + int ret; + const u8 *input[2] = { m, NULL }; + u32 ilens[2] = { mlen, 0 }; + u8 digest_size, block_size; + u8 digest[MAX_DIGEST_SIZE]; + u32 digestinfo_len = 0; + u32 tlen = 0; + + /* Zeroize local variables */ + ret = local_memset(digest, 0, sizeof(digest)); EG(ret, err); + + /* Compute H = Hash(M) */ + ret = gen_hash_get_hash_sizes(gen_hash_type, &digest_size, &block_size); EG(ret, err); + MUST_HAVE((digest_size <= MAX_DIGEST_SIZE), ret, err); + ret = gen_hash_hfunc_scattered(input, ilens, digest, gen_hash_type); EG(ret, err); + + /* Now encode: + * + * DigestInfo ::= SEQUENCE { + * digestAlgorithm AlgorithmIdentifier, + * digest OCTET STRING + * } + */ + digestinfo_len = emlen; + /* NOTE: the rsa_digestinfo_from_hash returns the size of DigestInfo *WITHOUT* the + * appended raw hash, tlen is the real size of the complete encoded DigestInfo. + */ + ret = rsa_digestinfo_from_hash(gen_hash_type, em, &digestinfo_len); EG(ret, err); + tlen = (digestinfo_len + digest_size); + + /* If emLen < tLen + 11, output "intended encoded message length too short" and stop */ + MUST_HAVE((emlen >= (tlen + 11)), ret, err); + + /* Copy T at the end of em */ + digestinfo_len = emlen; + ret = rsa_digestinfo_from_hash(gen_hash_type, &em[emlen - tlen], &digestinfo_len); EG(ret, err); + ret = local_memcpy(&em[emlen - tlen + digestinfo_len], digest, digest_size); EG(ret, err); + + /* + * Format 0x00 || 0x01 || PS || 0x00 before + */ + em[0] = 0x00; + em[1] = 0x01; + em[emlen - tlen - 1] = 0x00; + ret = local_memset(&em[2], 0xff, emlen - tlen - 3); + +err: + return ret; +} + +/****************************************************************/ +/******** Encryption schemes *************************************/ +/* The RSAES-PKCS1-V1_5-ENCRYPT algorithm as described in RFC 8017 section 7.2.1 + * + */ +int rsaes_pkcs1_v1_5_encrypt(const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *c, u32 *clen, u32 modbits, + const u8 *forced_seed, u32 seedlen) +{ + int ret; + u32 k; + u8 *em = c; + unsigned int i; + nn m_, c_; + m_.magic = c_.magic = WORD(0); + + MUST_HAVE((clen != NULL) && (c != NULL) && (m != NULL), ret, err); + + k = BYTECEIL(modbits); + + /* Check on lengths */ + MUST_HAVE((k >= 11), ret, err); + MUST_HAVE((mlen <= (k - 11)), ret, err); + MUST_HAVE(((*clen) >= k), ret, err); + + /* EME-PKCS1-v1_5 encoding EM = 0x00 || 0x02 || PS || 0x00 || M */ + em[0] = 0x00; + em[1] = 0x02; + if(forced_seed == NULL){ + for(i = 0; i < (k - mlen - 3); i++){ + u8 rand_byte = 0; + while (!rand_byte) { + ret = get_random(&rand_byte, 1); EG(ret, err); + } + em[2 + i] = rand_byte; + } + } + else{ + MUST_HAVE((seedlen == (k - mlen - 3)), ret, err); + /* Check that the forced seed does not contain 0x00 */ + for(i = 0; i < seedlen; i++){ + MUST_HAVE((forced_seed[i] != 0), ret, err); + } + ret = local_memcpy(&em[2], forced_seed, seedlen); EG(ret, err); + } + em[k - mlen - 1] = 0x00; + ret = local_memcpy(&em[k - mlen], m, mlen); EG(ret, err); + + /* RSA encryption */ + /* m = OS2IP (EM) */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + ret = rsa_os2ip(&m_, em, (u16)k); EG(ret, err); + /* c = RSAEP ((n, e), m) */ + ret = rsaep(pub, &m_, &c_); EG(ret, err); + /* C = I2OSP (c, k) */ + ret = rsa_i2osp(&c_, c, (u16)k); EG(ret, err); + (*clen) = (u16)k; + +err: + nn_uninit(&m_); + nn_uninit(&c_); + /* Zeroify in case of error */ + if(ret && (clen != NULL)){ + IGNORE_RET_VAL(local_memset(c, 0, (*clen))); + } + + return ret; +} + +/* The RSAES-PKCS1-V1_5-DECRYPT algorithm as described in RFC 8017 section 7.2.2 + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _rsaes_pkcs1_v1_5_decrypt(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits) +{ + int ret; + unsigned int i, pos; + u32 k; + u8 r; + u8 *em = m; + nn m_, c_; + m_.magic = c_.magic = WORD(0); + + MUST_HAVE((mlen != NULL) && (c != NULL) && (m != NULL), ret, err); + + k = BYTECEIL(modbits); + + /* Check on lengths */ + MUST_HAVE((clen == k) && (k >= 11), ret, err); + MUST_HAVE(((*mlen) >= k), ret, err); + + /* RSA decryption */ + /* c = OS2IP (C) */ + ret = rsa_os2ip(&c_, c, clen); EG(ret, err); + /* m = RSADP ((n, d), c) */ + if(pub != NULL){ + ret = rsadp_hardened(priv, pub, &c_, &m_); EG(ret, err); + } + else{ + ret = rsadp(priv, &c_, &m_); EG(ret, err); + } + /* EM = I2OSP (m, k) */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + ret = rsa_i2osp(&m_, em, (u16)k); EG(ret, err); + + /* EME-PKCS1-v1_5 decoding: EM = 0x00 || 0x02 || PS || 0x00 || M */ + /* NOTE: we try our best to do the following in constant time to + * limit padding oracles here (see Bleichenbacher attacks). + */ + ret = (1 - (!!(em[0] == 0x00) & !!(em[1] == 0x02))); + pos = 0; + /* Handle the first zero octet after PS in constant time */ + for(i = 2; i < k; i++){ + unsigned int mask = !!(em[i] == 0x00) & !!(pos == 0); + pos = (mask * i) + ((1 - mask) * pos); + } + ret |= !(pos >= (2 + 8)); /* PS length is at least 8 (also implying we found a 0x00) */ + pos = (pos == 0) ? pos : (pos + 1); + /* We get a random value between 2 and k if we have an error so that + * we put a random value in pos. + */ + ret |= get_random((u8*)&i, 4); + /* Get a random value r for later loop dummy operations */ + ret |= get_random(&r, 1); + /* Update pos with random value in case of error to progress + * nominally with the algorithm + */ + pos = (ret) ? ((i % (k - 2)) + 2) : pos; + for(i = 2; i < k; i++){ + u8 r_; + unsigned int idx; + /* Replace m by a random value in case of error */ + idx = ((i < pos) ? 0x00 : (i - pos)); + r ^= (u8)i; + r_ = (u8)((u8)(!!ret) * r); + m[idx] = (em[i] ^ r_); + } + (*mlen) = (u16)(k - pos); + /* Hide return value details to avoid information leak */ + ret = -(!!ret); + +err: + nn_uninit(&m_); + nn_uninit(&c_); + + return ret; +} + +/* + * Basic version without much SCA/faults protections. + */ +int rsaes_pkcs1_v1_5_decrypt(const rsa_priv_key *priv, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits) +{ + return _rsaes_pkcs1_v1_5_decrypt(priv, NULL, c, clen, m, mlen, modbits); +} + +/* + * Hardened version with some SCA/faults protections. + */ +int rsaes_pkcs1_v1_5_decrypt_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits) +{ + return _rsaes_pkcs1_v1_5_decrypt(priv, pub, c, clen, m, mlen, modbits); +} + +/* The RSAES-OAEP-ENCRYPT algorithm as described in RFC 8017 section 7.1.1 + * + */ +int rsaes_oaep_encrypt(const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *c, u32 *clen, u32 modbits, const u8 *label, u32 label_len, + gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + const u8 *forced_seed, u32 seedlen) +{ + int ret; + u32 k, pslen, khlen; + unsigned int i; + u8 hlen, block_size; + u8 *em = c; + /* Reasonable sizes */ + u8 seed[MAX_DIGEST_SIZE]; + /* + * NOTE: the NN_USABLE_MAX_BYTE_LEN should be a reasonable size here. + */ + u8 dbmask[NN_USABLE_MAX_BYTE_LEN]; + u8 db[NN_USABLE_MAX_BYTE_LEN]; + u8 *seedmask = dbmask, *maskedseed = NULL, *maskeddb = NULL; + const u8 *input[2] = { c, NULL }; + u32 ilens[2] = { 0, 0 }; + nn m_, c_; + m_.magic = c_.magic = WORD(0); + + /* Zeroize local variables */ + ret = local_memset(seed, 0, sizeof(seed)); EG(ret, err); + ret = local_memset(db, 0, sizeof(db)); EG(ret, err); + ret = local_memset(dbmask, 0, sizeof(dbmask)); EG(ret, err); + + MUST_HAVE((clen != NULL) && (c != NULL) && (m != NULL), ret, err); + + k = BYTECEIL(modbits); + + ret = gen_hash_get_hash_sizes(gen_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Check on lengths */ + MUST_HAVE(((u32)k >= ((2 * (u32)hlen) + 2)), ret, err); + MUST_HAVE(((mlen ) <= ((u32)k - (2 * (u32)hlen) - 2)), ret, err); + MUST_HAVE(((*clen) >= k), ret, err); + + /* EME-OAEP encoding: DB = lHash || PS || 0x01 || M */ + /* and then EM = 0x00 || maskedSeed || maskedDB */ + maskedseed = &em[1]; + maskeddb = &em[hlen + 1]; + MUST_HAVE(((k - hlen - 1) <= sizeof(db)), ret, err); + if(label == NULL){ + MUST_HAVE((label_len == 0), ret, err); + } + else{ + input[0] = label; + ilens[0] = label_len; + } + ret = gen_hash_hfunc_scattered(input, ilens, &db[0], gen_hash_type); EG(ret, err); + /* + * 2.b. Generate a padding string PS consisting of k - mLen - 2hLen - + * 2 zero octets. The length of PS may be zero. + * + * DB = lHash || PS || 0x01 || M. Hence, PS starts at octet hlen in DB + */ + pslen = (k - mlen - (u32)(2 * hlen) - 2); + for(i = 0; i < pslen; i++){ + db[hlen + i] = 0x00; + } + /* 0x01 || M */ + db[hlen + pslen] = 0x01; + for(i = 0 ; i < mlen; i++){ + db[hlen + pslen + 1 + i] = m[i]; + } + /* Generate a random octet string seed of length hLen */ + MUST_HAVE((hlen <= sizeof(seed)), ret, err); + if(forced_seed != NULL){ + MUST_HAVE((seedlen == hlen), ret, err); + ret = local_memcpy(seed, forced_seed, seedlen); EG(ret, err); + } + else{ + ret = get_random(seed, hlen); EG(ret, err); + } + /* Let dbMask = MGF(seed, k - hLen - 1)*/ + khlen = (k - hlen - 1); + MUST_HAVE((khlen <= sizeof(dbmask)), ret, err); + ret = _mgf1(seed, hlen, dbmask, khlen, mgf_hash_type); EG(ret, err); + /* Let maskedDB = DB \xor dbMask */ + for(i = 0; i < khlen; i++){ + maskeddb[i] = (db[i] ^ dbmask[i]); + } + /* Let seedMask = MGF(maskedDB, hLen) */ + MUST_HAVE((khlen < (u32)((u32)0x1 << 16)), ret, err); + ret = _mgf1(maskeddb, (u16)khlen, seedmask, hlen, mgf_hash_type); EG(ret, err); + /* Let maskedSeed = seed \xor seedMask */ + for(i = 0; i < hlen; i++){ + maskedseed[i] = (seed[i] ^ seedmask[i]); + } + /* EM = 0x00 || maskedSeed || maskedDB should be filled */ + em[0] = 0x00; + + /* RSA encryption */ + /* m = OS2IP (EM) */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + ret = rsa_os2ip(&m_, em, (u16)k); EG(ret, err); + /* c = RSAEP ((n, e), m) */ + ret = rsaep(pub, &m_, &c_); EG(ret, err); + /* C = I2OSP (c, k) */ + ret = rsa_i2osp(&c_, c, (u16)k); EG(ret, err); + (*clen) = (u16)k; + +err: + nn_uninit(&m_); + nn_uninit(&c_); + /* Zeroify in case of error */ + if(ret && (clen != NULL)){ + IGNORE_RET_VAL(local_memset(c, 0, (*clen))); + } + + return ret; +} + +/* The RSAES-OAEP-DECRYPT algorithm as described in RFC 8017 section 7.1.2 + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _rsaes_oaep_decrypt(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits, + const u8 *label, u32 label_len, gen_hash_alg_type gen_hash_type, + gen_hash_alg_type mgf_hash_type) +{ + int ret, cmp; + u32 k, khlen; + unsigned int i, pos; + u8 hlen, block_size; + u8 *em = m; + u8 r; + /* Reasonable sizes */ + u8 lhash[MAX_DIGEST_SIZE]; + u8 seedmask[MAX_DIGEST_SIZE]; + /* + * NOTE: the NN_USABLE_MAX_BYTE_LEN should be a reasonable size here. + */ + u8 dbmask[NN_USABLE_MAX_BYTE_LEN]; + u8 *seed = seedmask, *maskedseed = NULL, *maskeddb = NULL, *db = NULL; + const u8 *input[2] = { c, NULL }; + u32 ilens[2] = { 0, 0 }; + nn m_, c_; + m_.magic = c_.magic = WORD(0); + + /* Zeroize local variables */ + ret = local_memset(lhash, 0, sizeof(lhash)); EG(ret, err); + ret = local_memset(seedmask, 0, sizeof(seedmask)); EG(ret, err); + ret = local_memset(dbmask, 0, sizeof(dbmask)); EG(ret, err); + + MUST_HAVE((c != NULL) && (m != NULL), ret, err); + + k = BYTECEIL(modbits); + + ret = gen_hash_get_hash_sizes(gen_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Check on lengths */ + MUST_HAVE((clen == k), ret, err); + MUST_HAVE(((u32)k >= ((2 * (u32)hlen) + 2)), ret, err); + + /* RSA decryption */ + /* c = OS2IP (C) */ + ret = rsa_os2ip(&c_, c, clen); EG(ret, err); + /* m = RSADP ((n, d), c) */ + if(pub != NULL){ + ret = rsadp_hardened(priv, pub, &c_, &m_); EG(ret, err); + } + else{ + ret = rsadp(priv, &c_, &m_); EG(ret, err); + } + /* EM = I2OSP (m, k) */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + ret = rsa_i2osp(&m_, em, (u16)k); EG(ret, err); + + /* EME-OAEP decoding */ + /* lHash = Hash(L) */ + if(label == NULL){ + MUST_HAVE((label_len == 0), ret, err); + } + else{ + input[0] = label; + ilens[0] = label_len; + } + ret = gen_hash_hfunc_scattered(input, ilens, lhash, gen_hash_type); EG(ret, err); + /* EM = Y || maskedSeed || maskedDB */ + maskedseed = &em[1]; + maskeddb = &em[hlen + 1]; + /* seedMask = MGF(maskedDB, hLen) */ + khlen = (k - hlen - 1); + MUST_HAVE((khlen < (u32)((u32)0x1 << 16)), ret, err); + ret = _mgf1(maskeddb, (u16)khlen, seedmask, hlen, mgf_hash_type); EG(ret, err); + /* Let maskedSeed = seed \xor seedMask */ + for(i = 0; i < hlen; i++){ + seed[i] = (maskedseed[i] ^ seedmask[i]); + } + /* dbMask = MGF(seed, k - hLen - 1) */ + MUST_HAVE((khlen <= sizeof(dbmask)), ret, err); + ret = _mgf1(seed, hlen, dbmask, khlen, mgf_hash_type); EG(ret, err); + /* Let DB = maskedDB \xor dbMask */ + db = dbmask; + for(i = 0; i < khlen; i++){ + db[i] = (maskeddb[i] ^ dbmask[i]); + } + /* DB = lHash' || PS || 0x01 || M */ + /* NOTE: we try our best to do the following in constant time to + * limit padding oracles here (see Manger attacks). + */ + /* Y must be != 0 */ + ret = em[0]; + /* Isolate and compare lHash' to lHash */ + ret |= are_equal(&db[0], lhash, hlen, &cmp); + ret |= ((~cmp) & 0x1); + /* Find 0x01 separator in constant time */ + pos = 0; + for(i = hlen; i < khlen; i++){ + u8 r_; + pos = ((db[i] == 0x01) && (pos == 0)) ? i : pos; + r_ = (pos == 0) ? db[i] : 0; + ret |= r_; /* Capture non zero PS */ + } + pos = (pos == 0) ? pos : (pos + 1); + /* We get a random value between 2 and k if we have an error so that + * we put a random value in pos. + */ + ret |= get_random((u8*)&i, 4); + /* Get a random value r for later loop dummy operations */ + ret |= get_random(&r, 1); + /* Update pos with random value in case of error to progress + * nominally with the algorithm + */ + pos = (ret) ? ((i % (khlen - hlen)) + hlen) : pos; + /* Copy the result */ + for(i = hlen; i < khlen; i++){ + u8 r_; + unsigned int idx; + /* Replace m by a random value in case of error */ + idx = (i < pos) ? 0x00 : (i - pos); + r ^= (u8)i; + r_ = (u8)((u8)(!!ret) * r); + m[idx] = (db[i] ^ r_); + } + (*mlen) = (u16)(k - hlen - 1 - pos); + /* Hide return value details to avoid information leak */ + ret = -(!!ret); + +err: + nn_uninit(&m_); + nn_uninit(&c_); + + return ret; +} + +/* + * Basic version without much SCA/faults protections. + */ +int rsaes_oaep_decrypt(const rsa_priv_key *priv, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits, + const u8 *label, u32 label_len, gen_hash_alg_type gen_hash_type, + gen_hash_alg_type mgf_hash_type) +{ + return _rsaes_oaep_decrypt(priv, NULL, c, clen, m, mlen, modbits, label, label_len, gen_hash_type, mgf_hash_type); +} + +/* + * Hardened version with some SCA/faults protections. + */ +int rsaes_oaep_decrypt_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *c, u32 clen, + u8 *m, u32 *mlen, u32 modbits, + const u8 *label, u32 label_len, gen_hash_alg_type gen_hash_type, + gen_hash_alg_type mgf_hash_type) +{ + return _rsaes_oaep_decrypt(priv, pub, c, clen, m, mlen, modbits, label, label_len, gen_hash_type, mgf_hash_type); +} + +/****************************************************************/ +/******** Signature schemes *************************************/ +/* The RSASSA-PKCS1-V1_5-SIGN signature algorithm as described in RFC 8017 section 8.2.1 + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _rsassa_pkcs1_v1_5_sign(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, gen_hash_alg_type gen_hash_type) +{ + int ret; + u8 *em = s; + u32 k; + nn m_, s_; + m_.magic = s_.magic = WORD(0); + + /* Checks on sizes */ + MUST_HAVE((slen != NULL), ret, err); + + k = BYTECEIL(modbits); + + /* Only accept reasonable sizes */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + /* Sanity check on size */ + MUST_HAVE(((*slen) >= k), ret, err); + + /* EM = EMSA-PKCS1-V1_5-ENCODE (M, k) */ + ret = emsa_pkcs1_v1_5_encode(m, mlen, em, (u16)k, gen_hash_type); EG(ret, err); + + /* m = OS2IP (EM) */ + ret = rsa_os2ip(&m_, em, (u16)k); EG(ret, err); + /* s = RSASP1 (K, m) */ + if(pub != NULL){ + ret = rsasp1_hardened(priv, pub, &m_, &s_); EG(ret, err); + } + else{ + ret = rsasp1(priv, &m_, &s_); EG(ret, err); + } + /* S = I2OSP (s, k) */ + ret = rsa_i2osp(&s_, s, (u16)k); + (*slen) = (u16)k; + +err: + nn_uninit(&m_); + nn_uninit(&s_); + /* Zeroify in case of error */ + if(ret && (slen != NULL)){ + IGNORE_RET_VAL(local_memset(s, 0, (*slen))); + } + + return ret; +} + +/* + * Basic version without much SCA/faults protections. + */ +int rsassa_pkcs1_v1_5_sign(const rsa_priv_key *priv, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, gen_hash_alg_type gen_hash_type) +{ + return _rsassa_pkcs1_v1_5_sign(priv, NULL, m, mlen, s, slen, modbits, gen_hash_type); +} + +/* + * Hardened version with some SCA/faults protections. + */ +int rsassa_pkcs1_v1_5_sign_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, gen_hash_alg_type gen_hash_type) +{ + return _rsassa_pkcs1_v1_5_sign(priv, pub, m, mlen, s, slen, modbits, gen_hash_type); +} + +/* The RSASSA-PKCS1-V1_5-VERIFY verification algorithm as described in RFC 8017 section 8.2.2 + * + */ +int rsassa_pkcs1_v1_5_verify(const rsa_pub_key *pub, const u8 *m, u32 mlen, + const u8 *s, u16 slen, u32 modbits, gen_hash_alg_type gen_hash_type) +{ + int ret, cmp; + /* Get a large enough buffer to hold the result */ + /* + * NOTE: the NN_USABLE_MAX_BYTE_LEN should be a reasonable size here. + */ + u8 em[NN_USABLE_MAX_BYTE_LEN]; + u8 em_[NN_USABLE_MAX_BYTE_LEN]; + u32 k; + nn m_, s_; + m_.magic = s_.magic = WORD(0); + + /* Zeroize local variables */ + ret = local_memset(em, 0, sizeof(em)); EG(ret, err); + ret = local_memset(em_, 0, sizeof(em_)); EG(ret, err); + + k = BYTECEIL(modbits); + /* Only accept reasonable sizes */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + + /* Length checking: If the length of the signature S is not k + * octets, output "invalid signature" and stop. + */ + MUST_HAVE(((u16)k == slen), ret, err); + + /* s = OS2IP (S) */ + ret = rsa_os2ip(&s_, s, slen); EG(ret, err); + /* m = RSAVP1 ((n, e), s) */ + ret = rsavp1(pub, &s_, &m_); EG(ret, err); + /* EM = I2OSP (m, k) */ + MUST_HAVE((slen <= sizeof(em)), ret, err); + ret = rsa_i2osp(&m_, em, slen); EG(ret, err); + /* EM' = EMSA-PKCS1-V1_5-ENCODE (M, k) */ + MUST_HAVE((k <= sizeof(em_)), ret, err); + ret = emsa_pkcs1_v1_5_encode(m, mlen, em_, (u16)k, gen_hash_type); EG(ret, err); + + /* Compare */ + ret = are_equal(em, em_, (u16)k, &cmp); EG(ret, err); + if(!cmp){ + ret = -1; + } +err: + nn_uninit(&m_); + nn_uninit(&s_); + + return ret; +} + +/* The RSASSA-PSS-SIGN signature algorithm as described in RFC 8017 section 8.1.1 + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _rsassa_pss_sign(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, + gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt) +{ + int ret; + u8 *em = s; + u16 emsize; + u32 k; + nn m_, s_; + m_.magic = s_.magic = WORD(0); + + MUST_HAVE((slen != NULL), ret, err); + + MUST_HAVE((modbits > 1), ret, err); + + k = BYTECEIL(modbits); + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + + /* Sanity check on size */ + MUST_HAVE(((*slen) >= k), ret, err); + + /* EM = EMSA-PSS-ENCODE (M, modBits - 1) */ + emsize = (*slen); + ret = emsa_pss_encode(m, mlen, em, (modbits - 1), &emsize, gen_hash_type, mgf_hash_type, saltlen, forced_salt); EG(ret, err); + + /* Note that the octet length of EM will be one less than k if modBits - 1 is divisible by 8 and equal to k otherwise */ + MUST_HAVE(emsize == BYTECEIL(modbits - 1), ret, err); + + /* m = OS2IP (EM) */ + ret = rsa_os2ip(&m_, em, (u16)emsize); EG(ret, err); + /* s = RSASP1 (K, m) */ + if(pub != NULL){ + ret = rsasp1_hardened(priv, pub, &m_, &s_); EG(ret, err); + } + else{ + ret = rsasp1(priv, &m_, &s_); EG(ret, err); + } + /* S = I2OSP (s, k) */ + MUST_HAVE((k < ((u32)0x1 << 16)), ret, err); + ret = rsa_i2osp(&s_, s, (u16)k); + (*slen) = (u16)k; + +err: + nn_uninit(&m_); + nn_uninit(&s_); + /* Zeroify in case of error */ + if(ret && (slen != NULL)){ + IGNORE_RET_VAL(local_memset(s, 0, (*slen))); + } + + return ret; +} + +/* + * Basic version without much SCA/faults protections. + */ +int rsassa_pss_sign(const rsa_priv_key *priv, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, + gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt) +{ + return _rsassa_pss_sign(priv, NULL, m, mlen, s, slen, modbits, gen_hash_type, mgf_hash_type, saltlen, forced_salt); +} + +/* + * Hardened version with some SCA/faults protections. + */ +int rsassa_pss_sign_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, const u8 *m, u32 mlen, + u8 *s, u16 *slen, u32 modbits, + gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen, const u8 *forced_salt) +{ + return _rsassa_pss_sign(priv, pub, m, mlen, s, slen, modbits, gen_hash_type, mgf_hash_type, saltlen, forced_salt); +} + + +/* The RSASSA-PSS-VERIFY verification algorithm as described in RFC 8017 section 8.1.2 + * + */ +int rsassa_pss_verify(const rsa_pub_key *pub, const u8 *m, u32 mlen, + const u8 *s, u16 slen, u32 modbits, + gen_hash_alg_type gen_hash_type, gen_hash_alg_type mgf_hash_type, + u32 saltlen) +{ + int ret; + /* Get a large enough buffer to hold the result */ + /* + * NOTE: the NN_USABLE_MAX_BYTE_LEN should be a reasonable size here. + */ + u8 em[NN_USABLE_MAX_BYTE_LEN]; + u16 emlen; + u32 k; + nn m_, s_; + m_.magic = s_.magic = WORD(0); + + /* Zeroize local variables */ + ret = local_memset(em, 0, sizeof(em)); EG(ret, err); + + MUST_HAVE((modbits > 1), ret, err); + k = BYTECEIL(modbits); + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + + /* s = OS2IP (S) */ + ret = rsa_os2ip(&s_, s, slen); EG(ret, err); + /* m = RSAVP1 ((n, e), s) */ + ret = rsavp1(pub, &s_, &m_); EG(ret, err); + /* emLen = \ceil ((modBits - 1)/8) */ + MUST_HAVE((((modbits - 1) / 8) + 1) < (u32)((u32)0x1 << 16), ret, err); + emlen = (((modbits - 1) % 8) == 0) ? (u16)((modbits - 1) / 8) : (u16)(((modbits - 1) / 8) + 1); + + /* Note that emLen will be one less than k if modBits - 1 is divisible by 8 and equal to k otherwise */ + MUST_HAVE(emlen == BYTECEIL(modbits - 1), ret, err); + + /* EM = I2OSP (m, emLen) */ + MUST_HAVE((emlen <= sizeof(em)), ret, err); + ret = rsa_i2osp(&m_, em, (u16)emlen); EG(ret, err); + /* Result = EMSA-PSS-VERIFY (M, EM, modBits - 1) */ + ret = emsa_pss_verify(m, mlen, em, (modbits - 1), emlen, gen_hash_type, mgf_hash_type, saltlen); + +err: + nn_uninit(&m_); + nn_uninit(&s_); + + return ret; +} + +/* The RSA signature algorithm using ISO/IEC 9796-2 padding scheme 1. + * This is a signature with recovery. + * + * XXX: beware that this scheme is here for completeness, but is considered fragile + * since practical attacks exist when the hash function is of relatively "small" size + * (see http://www.crypto-uni.lu/jscoron/publications/iso97962joc.pdf). + * + * The ISO/IEC 9796-2 is also described in EMV Book 2 in the A.2.1 section: + * "Digital Signature Scheme Giving Message Recovery". + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _rsa_iso9796_2_sign_recover(const rsa_priv_key *priv, const rsa_pub_key *pub, + const u8 *m, u32 mlen, u32 *m1len, u32 *m2len, u8 *s, u16 *slen, + u32 modbits, gen_hash_alg_type gen_hash_type) +{ + int ret; + u32 k, m1len_, m2len_; + u8 hlen, block_size; + gen_hash_context hctx; + nn m_, s_; + m_.magic = s_.magic = WORD(0); + + MUST_HAVE((priv != NULL) && (m != NULL), ret, err); + + MUST_HAVE((slen != NULL), ret, err); + + MUST_HAVE((modbits > 1), ret, err); + + k = BYTECEIL(modbits); + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + + /* Get hash parameters */ + ret = gen_hash_get_hash_sizes(gen_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on sizes */ + MUST_HAVE(((*slen) >= k), ret, err); + MUST_HAVE(k >= (u32)(2 + hlen), ret, err); + + /* Compute our recoverable and non-recoverable parts */ + m1len_ = (mlen >= (k - 2 - hlen)) ? (k - 2 - hlen) : mlen; + m2len_ = (mlen - m1len_); + + /* Now hash the message */ + ret = gen_hash_init(&hctx, gen_hash_type); EG(ret, err); + ret = gen_hash_update(&hctx, m, mlen, gen_hash_type); EG(ret, err); + ret = gen_hash_final(&hctx, &s[k - 1 - hlen], gen_hash_type); EG(ret, err); + + /* Put M1 */ + ret = local_memcpy(&s[1], m, m1len_); EG(ret, err); + if(m1len != NULL){ + (*m1len) = m1len_; + } + if(m2len != NULL){ + (*m2len) = m2len_; + } + + /* Put the constants */ + s[0] = 0x6a; + s[k - 1] = 0xbc; + + /* m = OS2IP (X) */ + ret = rsa_os2ip(&m_, s, k); EG(ret, err); + /* s = RSASP1 (K, m) */ + if(pub != NULL){ + ret = rsasp1_hardened(priv, pub, &m_, &s_); EG(ret, err); + } + else{ + ret = rsasp1(priv, &m_, &s_); EG(ret, err); + } + /* S = I2OSP (s, k) */ + MUST_HAVE((k < ((u32)0x1 << 16)), ret, err); + ret = rsa_i2osp(&s_, s, (u16)k); + (*slen) = (u16)k; + +err: + nn_uninit(&m_); + nn_uninit(&s_); + + if(ret && (m1len != 0)){ + (*m1len) = 0; + } + if(ret && (m2len != 0)){ + (*m2len) = 0; + } + + return ret; +} + +/* + * Basic version without much SCA/faults protections. + */ +int rsa_iso9796_2_sign_recover(const rsa_priv_key *priv, const u8 *m, u32 mlen, u32 *m1len, + u32 *m2len, u8 *s, u16 *slen, + u32 modbits, gen_hash_alg_type gen_hash_type) +{ + return _rsa_iso9796_2_sign_recover(priv, NULL, m, mlen, m1len, m2len, s, slen, modbits, gen_hash_type); +} + +/* + * Hardened version with some SCA/faults protections. + */ +int rsa_iso9796_2_sign_recover_hardened(const rsa_priv_key *priv, const rsa_pub_key *pub, + const u8 *m, u32 mlen, u32 *m1len, u32 *m2len, u8 *s, u16 *slen, + u32 modbits, gen_hash_alg_type gen_hash_type) +{ + return _rsa_iso9796_2_sign_recover(priv, pub, m, mlen, m1len, m2len, s, slen, modbits, gen_hash_type); +} + +/* The RSA verification algorithm using ISO/IEC 9796-2 padding scheme 1. + * This is a verification with recovery. + * + * XXX: beware that this scheme is here for completeness, but is considered fragile + * since practical attacks exist when the hash function is of relatively "small" size + * (see http://www.crypto-uni.lu/jscoron/publications/iso97962joc.pdf). + * + * The ISO/IEC 9796-2 is also described in EMV Book 2 in the A.2.1 section: + * "Digital Signature Scheme Giving Message Recovery". + * + */ +int rsa_iso9796_2_verify_recover(const rsa_pub_key *pub, const u8 *m2, u32 m2len, u8 *m1, u32 *m1len, + const u8 *s, u16 slen, u32 modbits, gen_hash_alg_type gen_hash_type) +{ + int ret, cmp; + /* Get a large enough buffer to hold the result */ + /* + * NOTE: the NN_USABLE_MAX_BYTE_LEN should be a reasonable size here. + */ + u8 X[NN_USABLE_MAX_BYTE_LEN]; + u8 H[MAX_DIGEST_SIZE]; + u32 k, m1len_; + u8 hlen, block_size; + gen_hash_context hctx; + nn m_, s_; + m_.magic = s_.magic = WORD(0); + + MUST_HAVE((pub != NULL) && (m2 != NULL), ret, err); + + /* Zeroize local variables */ + ret = local_memset(X, 0, sizeof(X)); EG(ret, err); + ret = local_memset(H, 0, sizeof(H)); EG(ret, err); + + k = BYTECEIL(modbits); + /* Only accept reasonable sizes */ + MUST_HAVE((k < (u32)((u32)0x1 << 16)), ret, err); + + ret = gen_hash_get_hash_sizes(gen_hash_type, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Length checking: If the length of the signature S is not k + * octets, output "invalid signature" and stop. + */ + MUST_HAVE(((u16)k == slen), ret, err); + MUST_HAVE((slen >= (hlen + 2)), ret, err); + m1len_ = (u32)(slen - (hlen + 2)); + + /* s = OS2IP (S) */ + ret = rsa_os2ip(&s_, s, slen); EG(ret, err); + /* m = RSAVP1 ((n, e), s) */ + ret = rsavp1(pub, &s_, &m_); EG(ret, err); + /* EM = I2OSP (m, k) */ + MUST_HAVE((slen <= sizeof(X)), ret, err); + ret = rsa_i2osp(&m_, X, slen); EG(ret, err); + + /* Split the message in B || m1 || H || E with + * B = '6A', E = 'BC', and H the hash value */ + if(m1len != NULL){ + MUST_HAVE((*m1len) >= m1len_, ret, err); + (*m1len) = m1len_; + } + if((X[0] != 0x6a) || (X[slen - 1] != 0xbc)){ + ret = -1; + goto err; + } + + /* Compute the hash of m1 || m2 */ + ret = gen_hash_init(&hctx, gen_hash_type); EG(ret, err); + ret = gen_hash_update(&hctx, &X[1], m1len_, gen_hash_type); EG(ret, err); + ret = gen_hash_update(&hctx, m2, m2len, gen_hash_type); EG(ret, err); + ret = gen_hash_final(&hctx, H, gen_hash_type); EG(ret, err); + + /* Compare */ + ret = are_equal(H, &X[1 + m1len_], (u16)hlen, &cmp); EG(ret, err); + if(!cmp){ + ret = -1; + } + /* If comparison is OK, copy data */ + if(m1 != NULL){ + MUST_HAVE((m1len != NULL), ret, err); + ret = local_memcpy(m1, &X[1], (*m1len)); EG(ret, err); + } + +err: + nn_uninit(&m_); + nn_uninit(&s_); + + if(ret && (m1len != 0)){ + (*m1len) = 0; + } + + return ret; +} + +#ifdef RSA +/* RSA PKCS#1 test vectors taken from: + * https://github.com/bdauvergne/python-pkcs1/tree/master/tests/data + */ +#include "rsa_pkcs1_tests.h" + +int main(int argc, char *argv[]) +{ + int ret = 0; + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Sanity check on size for RSA. + * NOTE: the double parentheses are here to handle -Wunreachable-code + */ + if((NN_USABLE_MAX_BIT_LEN) < (4096)){ + ext_printf("Error: you seem to have compiled libecc with usable NN size < 4096, not suitable for RSA.\n"); + ext_printf(" => Please recompile libecc with EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\"\n"); + ext_printf(" This will increase usable NN for proper RSA up to 4096 bits.\n"); + ext_printf(" Then recompile the current examples with the same EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\" flag and execute again!\n"); + /* NOTE: ret = 0 here to pass self tests even if the library is not compatible */ + ret = 0; + goto err; + } + + ret = perform_rsa_tests(all_rsa_tests, sizeof(all_rsa_tests) / sizeof(rsa_test*)); + +err: + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/sig/rsa/rsa_pkcs1_tests.h b/crypto/libecc/src/examples/sig/rsa/rsa_pkcs1_tests.h new file mode 100644 index 0000000000000000000000000000000000000000..7acbf57629e70e74faca925e75c172f324a4cc70 GIT binary patch literal 16193526 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 d)Uf zYa`3Z+_QXkmL}PYOn#GR3y~4D8k(MABte^ei>>0RSK<{gtc$ub_}O@x5z7sG$`lnq zR$G7{lgYTp-m`!;CfBeC`eLp}5g(5tU;#Xdx>2MB)0fVE{-abm&Tx@uQ`w4`7CQUP z5=F=PRe&_Mz@zbF;Am`yMq>mRjm@xVjDVuC84`{AGU<-Zykd;8iZR3~#xSE8gM4C) zvWY28x?Al^K9PJP#3!aS>3$`nNJjAzqnO@h(w)AUbVICS`e}+yUXi>ac||0Bl366P z_}4OvK%S&Y*9UP&CfzAby4!&6&ZIk~N%wJW`!wlJY0`a+;@(WUQ<`*tk4blGHR(8@S8)ug)~A28{zt)|ta zyB;4h>3UskH|hFk+D*Ds$fP^PO}ZO5YZkw@PlN<82Mp~Zn13c9gv}{}r3jWHSX=~~ zQvgc=ECsN*05-ov{F;BfLUNS7IiqI};-JJ0J|oN;9GsS9oEIw7d$cp2>`mBfTqNcp zSf(DtO2?D%Rz3MB5AaBPq6{_c;0Z)fGhJMQr3lrR-gWe3wdAJLR{v=m$JvvWjhelv zjp3ov_kL!oDM7JFnc-cQg!xG}nlN2L{vz8u$`wgQS0}|O0~}8WxJg&%_)b!vsW=JX zv0^j$@r)P~-U}zTm(HC%y$o3iFt^w1-TWR|m9Wy`4D^3{uFS>n$ew<3_Io+Xn6O2@ ziO5%ER0ol%hzcMk#qT6!+U}Zpm*6!Nr-hky$H^0d(sC5=N*4u;m|)cT?>Po|N-_G!uJKBju1aCb4%6rOuP+c9q<*r;UI{ibv@|*07*w#@2vn^?R|#d+|?k zg_M(C)-1pVM#`HqC0CEi=QeuYoWh?aR z*S5(0cJi|dVzw8Xo;^zW$(o3jyFow3ga|A?V*JLCu(W!{5K*bJ|nLIq`3ti%^w3t zb2BuWBfw~GhDCD(6wS?$Xx^7ecW&ktbBtBYAx<%e8O0pr6LXYJENRmHNal0L~Sl39F&Sp;GHZ#*?$T<~T|R2kT|y?^C2G=L zLMGiMYSLXoCfy}!(p^F(-6d+$T|y?^C2Z1NyLhWfcRfB}(p_6kt4Vh~K4jAMy4Y^g z_0P1MbeE7xcZr*HH)ho=er=x!31GgtZx_M*GtENSbU364mLgb+U{Mk5o;WFh`7ovc zmI7FF;{0Rr>wXd!zSuEViC!Ya9)Q8)Vn}vc8!d@l$>MQq?=Kr=gxNQegGY}~Yb6vk zxG)UqF~UX_bmv8`o&07esQ|<+`&FXF-jBF=oS2#f-}u3kPO=9aq!x`rtN)cR5M{`PPU?Z5Os@3CT%hBz=r#jJxP61eXUneHUt+jU53VPa{0wCfz$yk7_tDx z!)Q5k^)y9TqO9`jOq5Fo&(Igs#a5NFAt(r*dXvOGh~P&uk>a*Jm2ECb!-|6vHOL51 zTq!?;V5Fn0DeT3LR}XVz)szj!jZy>#={(SS*-~@Y!=~Ds zKx_iSUZjw)t?%WTHHbT`m>3_{ToiJHJgf*v4qyi3{J0leGjfll@91YXiIhm-c+d;i zfAw@Rlp^c0McRcGP8F({FAC@65ycGBf&ijKj)_V~j{%NhHG0<^0;%&P^Vt)B1Vi=$ zKPXpx<4M+NG)zhqt5mYakV)}zGbKbmTLdqm;qc5ITMwQ+9t`l%A~bprK9bB7(Q7IP z8N}>^qQS8u=-L`tBrua>SvXYxUgDNKwN}g`g7qNZNOK@ZM$Z~VIvO3<{3<~DGj0EG zc=YF>4}qh{)~^W~J&tSzMvsMY6D)ch*$Rpt%Z4UM^f+=qCf&zUrioWPj%;TY)^Hm+ zg&iGW6l+y##MI?QaS$v#X1ZFEux{v>@GO3+^`(J9(T_-P1x{u$;5@H7?-EEJSCS8xp z-I#Q@*-Mk|24)6O}hIx>Dpwr=q%j_O}ZP(Zq!@4m`QglMUA>k7c=Q@IHXa3 z>0&0`Z2{V3(%p`3HR*2o-el6H6`_CS7keZ6;kmK48+-y4Y&c)z7q= zbT=l}D0+2KldjO4X7OwLL`VShZEm{==AQ`&VSS2VDT1X478k+#6u?pdO93n{fc5VX zzj_hAXhsx#uG~gL5E*#^Y2|-u6IRM@9%*Fm7`qsib0B~A%oqZ8^1Gxz*d|v7n}jnY zE5MfUwC8THi6%7Qh4NUPgKUZH1!#k(sXc~=N$dT1Le3EbVRugnuL?cRw02{)AGXvBZNeVD* z)i$6 zLN2meVN5!a=te2P;7;O%v}Uv^Z;OD}qrgx@E(ia&#S-fgg$=|N{gaWW@T0Kyq11Vj za+nvk@?2XL>Tgfe0-V6-Slz9sj;a7VudjpXOsIk(rhC>?A73K|m36WLN(9_eIgOsQwob zx%3G>liV+J%Ic4$3M0c(;v~?I?4WJhvzkQqvnM>sI+qoqz50^at`d8kfA)JM-pcH= zz*_huGu6qFWFJ+C`Y_AdpBSe96xk~f1Jnvu+4rXU8bIn>;8FiEaMU+Lqdo$R`es>6Va5w}ef)YZq@d>8{5IOuB2UX*KDt$A?V1UKiUj0E-J?!#l*UL4>a=%(N3m#Y0HQ z2ucwDYdCK5d$c=ZXTeO7kF$@q=`BRd&CkF{GTO8fBNCm@GHr!9nl=!(k$u6Brg*SR zKl$}r(I&Q4$q^byaW2xH?7ec4XUGgs0-kO5ML;64z%YCX>0&RwyGZy8762C&=?`bw zu%AS{Azj$mfr5%8kadsIlLiDue*?~QW?L_iOoLyiz5WtNPI_HE2}m-#BUuYD@I?xt zNlgMYNM93EdY@`0xk&NgNT%JMtRtP4@@DER*MIS=C6JNC_&rC$&iP-;8|}!@hkUAv za78gN`S9kWM_w{|lfZzZj03Y{Pd1@MQC4XJtou3-XH;jnwSk)6Q-^su%D?H%AP3^g zq};{t7i@qmViCws${|gXWTKt+KF*9Sb79bqF%bw`VyW{a-r4$s)e2>a#v;wf#2RL^ z^AWJslU$+UJ|HElw!tH96vcyBB^R!;8UmoRN}2_WvASdh+KcpSS+BAbBXjoI)aFCX zRFVA7vc3akv+iTYHFE4ZMq~lGETs#su5tAmKpI-$(eN>FG&Dn_Ap(qsW>_>tK+(_)iH3cdbcbeMF~nHK5aJX= zm{ANtJ~2euL`{?KR*jQSB%cWJiJB(euVfU-C|+U|^<5_2`pu-9tm2KVqW&-(C$C6e zk-Q?5KFKV8F|!E7L7H?uaCcqkwxHDuDQQIl>BnRIK^q+3HK-5NFN){sfJMoqdkWYVo+lkVEZTTQy_@d1Fldjjrc9X7urro4lLnhrCH|cI%s9F5lJ`obYd;{Gsg863xLfDuhSc+gN zg2hF!F$J&`z)}E<3t;0r#II3=FDQf(1ACmqW0p;0;b-wtH9l|%ed*H+5COsvJ5rWv z3Qm$RG&CYXLEU9TZIdA3Mv4>WZ14?iFz|FdIs=<3(rEFp1xLdmxoHFs$^(g51?L$? z;Evc%39YnuN(yAQ0hW6qG>ZJRO`A|#d&?(1vwE0QguruD@hZ%c>l}sM+NhrWnoS0~ z`Q6c1!QHwsEdnJEQjl1KF!E=eDH)%Oe5#WILzlDX!H}SX&nb6A`KNp`hC~SCbCFQB z6%d7_^J{>PQ#?4Ei4m-iCci4m!%bE|hNgrf#Ae(6ni)b|kYi_#KgDRS<>_3=OtBr%lFfEZavLU6LoQ-7^*GATmkFsB}wkayp`kvf4KpI=%(fBcN zG&Vz{F#?RnW>_>vK+)I?iN<}IbjN01F~(TM7~<m{E*DJ~2kw#FQr8ujCWSCtl(c zQ<`+Yl2Ih1c!^O=?=tC5-%PsyHC8eGFt8@CNM4b=B9uPKERtF5npp&5Jx#ig|CKhf z3zP1YCf#j7cW2U_(xm&iwtbp(r!?t4MsaT@-6>7FzsICIwVHINkD7F+kV$unnsld- zNq35xbf=I>cZ!;Hr;tf^ikft%kV$t6n{?MM-fGfaj}Mr1*H+VN(p`@anRLA_wwrYQ zGwmkbDP+=};wIgVeKm_;+b2Q-m_veg5zIdm5W?mZ!BPZE5iBl(%_)GT0G0w+TmYNj zA%4vwe31+6xa~n7LNls7Y``7@!HAJxO1(w9m}Pfkk1>HKTzsypv>sz7WD4^u+QNZ& zV7JMflABwJ3*7kAt11uc3D#R@`%F(@^J_haEwJ=MLe=^(K}t1U{3Zw}6VEyc^Uec- z0$@*n01>gZ=Xm-p-IZ=|^WWRXRGv7}$)Hl*Ev2{~0uypfic=0LV}swRrPskfOH#5; z1nn?6wq*op&=UlDa5jEpFy!J1F^Y_2@&O~sxJQ|OKrs@G?%VU5rP@pW|~=$ zR=`zJCb@SC@JZ0BF=>$)*nCqGY)%jU`%%|WTnTe=^w}}#j&;q=|IJ8}G`5N%PDp~s zzis8HB@l^$XuSAuxHhhe2SlCa*(mm0nZp{ffz){t-3(qyQCDr@EKrMrdXdLmk@~z? zlh4vBi8>G_QD>u#R=|1$+{~Da9y2sLR=5h#?PZu(k1LuX5sOMt1pLsluF^EPBY+qy z+^gVNa(ouB#+b7fJIOduENK@kOlambE?x1F7hGX4Ert9wTR`!DA9b}TVgPZ@!U}lC z$g?7*YF*?!z2qt7oF$UItP=c8Mt6RUq3*{|UNOo(#$aamDnOcB;L-dsa5OhVqd5YM z=4MzlM?lfs42kA_nRMr7UNOg5#T?=kbC^-gK|V1@*~F42-LK>m$tPao6HA(OzmicT zqj-r?EblVuF5gVL|0-6o{4fe9uSi~zydso7$t;ptyv!^Dah4`s4~rd{beA;gZUeeI zlkSox-N&`<)1vgf+r0bt)H|Z`RlkO5X z>2BPqS^U~Q5fZ?BgWfKJ`DfaNuF)zgT; z86+eLL%xx~p)>PY)&lgXgCHLSEqjiRKm%3;qrgPYe~|Tpy{hiuNl9ecJqk`|LKvT` z^pjauB~_A`(#6wa=z)}8`jv@lA`o0e-~l_*!w=F4xi%BqNZi?H0R(jxD8;-CB4=9n zV}(LVJ9~I8Kmt}+j0`I&f|Mc+Z@&5%vJs!9&=TNW8>HNxw?bo~d-Ls#8|x0fg>l~4 z^LoEl@UA{<_C%%8W1DpW?d$%%fz)|^0*-Wh?i!djYI~&U3YeY+Z8KtwKk=i2;vlOz zqPmEPXks4Uc=G77*_{0wCy`^gT2_U8dle8n$ZC{$vnTs7w#bu`eUvWXt~~*Vs2F`l z>`k>tkD^)H4&Op#qHJ6w(-(n(y~we)Haz;3oaCykoeFGbRY*Cfy)zp8?^$r{QDRA7 z20BTR)>>z)U>X`31Rmyk$e_{BVDBSl{KppoQg>*8N8RC5;OM^fYlBAjBb$NIePP@N zi|$7@gQEMgp$!tA;}!QK1FV82L@TG@=m?{*I@`=A?Dzni=+dP7m3$)k z#7lglOOx(bGKyprFENVlO(tDC(JyBe-48Qv@`~gY$tyzXlguKS#oL)hApX*%`}kj0 ztGJFj|MtJtq-&FxCf&zx2({gqbk{vvnshxX_hZssXD>~qsSfl9Gg-yE7qngF9?GqsZ%s1}s zBA9r((r0W1ZuxB%9_L;ULX=`=JZVu0xC{Vw=liWNCRaW2AR zEc=L%-shd&ggsk^Xc6@T=2YePj0`)^`@95h=jnMf)u)1#V&IulLYwYtFV-u5IS1MN z(tqr6ID@B};SGYl_mDIOdGerO!^iPO(^1l$0@Dd}1Fo?-BL(d_D1#3?9nXX-dOL`K zfTCQT{T}UE7@ZHlJriW~Nnipw+aNg4y2s>cWK%@?&K?w6u1IK}c0oFxg%C3WqW}l6 zjCJgrCkM~_;XJemngG{83Gaj`7wMUkluQ$1I0LW>Nr{awvt0aJXaxppnd`?fyg<)N z8mS;_6BF1(@*HFnZ^v{p4zlhzh~&X~jn#*V9ivAb-#AK>q!baKOW=7ke^Tf9Su?aI zRxZ`YjkZ8cqCyzRq}UgqFPbSId?xF5{_PZF0Av*~%?J!qgf0Ts z5AquzCEv(u)Sf=WjL5o@tG$XIVp0*m89id{Jgi$qNS@>#Em|b|Xja56t-u6qW}m7u zc_bqw&C-@_UCh<8py)iFc@EA=R)s}iI^Ttp;3k!jNb5x^ruYJfa9|1;vGc4*Opr~(#ME$-@x_vXR=wqy+4{?e< z%qaRGpXj4(qNGXpEBQq7iI@09Nt5nZGKyprFENVpE|YHg{v_S~vx@Tb`MAj|l2;_J zh@?+4i)0r61!fV5$TaDCknPB%ThgSv4e0Jnx+P7zk89hfNw=g)_c4llGwGHz>HZ#* zZfP~?mXDfrOUR^Kq9)xEGU=A6Nwq+uoS^k z1dEGcLkeIifTaKy7r=&hh+l&UUo;nDrV~@ydX-?MPoDg>6ez0DpE zlf)`xLSr%}&b(ZG?%28TmLzEV6yP$>mqM#VT+fK!(U< zrBTnIQlAt^28?1%LURU7JG!Vmfo2f8Y#Z*;hs|ErclLp&e2&rst)EM(vC=_;vT+zZ zKxipU2&)o`H=ixC-eF2F(p}l61M^rH&>Sdll!u#0Xsi+JnIp6a3K&q3&PnNIEhA76 zv}*Ih3{r*#aoQ7-u09u6fe?ft$;y}jwNL}BU^Bv$Kv{(`ViW+H0MEIhW$^?V#1zUo z-F^@>XfIm5`SG+wzLD7Iv^-z^N&qULKH3_1!(vI$6L7*;qk+_UlJh{4M=49p9jn5F zXerjlxx(UeXHf?Rq+m=QKg8Q2LTM4XknBLsAe-#TOf(bb^hb;tHe|uVx?Y|^W7>$! zk-dl(p_eg4+!d9EGc#YbuPWFR*_(e~WbSSv#3Gp!+h9PuFQSX6W@b;X0;Hh@9t|G@ zM?*6-8X~}GXof{Y1QZR;kZ9PKNq1=G6+?_w3?WW2gc-#UqkwxHDuDQQIl>BnRIK^ zq+3HK-5NFN){sfJMoqdkWYVo+lkVEZTTQy_@d1Fldjjrc9X7urro4l zLnhrCH|cH+r&;{kJ`obYe6!mwg863xLfDuhSc+gNg2hF!F$J&`z)}E<3t;0r#II3> zFACJb@7+Wvc74#^(eD=~z(}(1FnvH~@II%3i+Ot0BR!$_L1LQ)*0HVILB5tA$R$56 zp-5$d0+Ld^5Rghw*8(R|*Q;!e*>bU68{|{eU8*MamEob+Swc)6ARv&FlnTlf)N_&W zH&DR62*hTK&9_go3NWmF^kcx+01fM$bY{6Km8M8s5*?|7bJFeUS|+6wzfOuDS27A@ zvJxw}%U%Q6`}rx27fDS(5o-;)+*OoOl8=IY6p5h|+3X}*=|PS}a-;JzU*Jm;juECP z&LSW70u$|pm5h=UQAUYiCjvonrgz>vEm$Q{{?Ed;i3*wz(2JgLTlPyRb)Ezras&++ zgusj(WtBHc_XZZ)lV1d=&{FJ?QIxvH=LOk?yEq8Ut((BH6%xjrJY@`78}=SEGzapC zd923qMJCp8| zCf&!i?bDMAoJB3WTQ`Dq8 zg-p6r)TBFwOuAFpq`P+UR+H{}e88l;wwhLx?s|O4r0aFD-K6WEX*cOkA(QSDH|cJS zt6BWoJ`obY90s(DVE&na5H_a>mLgb+U~v&_P5~?huoS@J0@(Zx@oN_0>n4$=aL-1b zT|@QQCemmVC;&@@)6dTmm$0`g)z@CpMz9M?IZG0s1n?RrBPr=2)MJVY8%Khu_u!%c zFbQ-#Zj>@pq$72*&9aw23hFYB$l!s)C}2WTj{^8?cx+IN53;JdM`j>(p5(2oKm`hnt-^>LBAjuc6;zKm0~8w#BP$qJnU}>!l1Sqii=V;g)Sf~#dbH3^IkP>php3=&F_JX-tLF&qdK5f8$d%Kw zO#CAEA9qnC9*E&lp6d8!kmWQdIO zKRyMJBtlLiqy zF^3t&9OM&oluayY()~(4k$mDMKCz@p_bVAiGK!ZN#qutb?()r~`(I`i%TG&g@`~gY z$txo1lguKS#ZH+;Aj;FE>yx)5lkSox-EBa3XVP8Lr2DwGeVTNaH0eG@ac?HwB~7}& z$E3Tonsk?snsk?tNq32wbeE7xcZr&Gmyk(!iJEkmkV$umnsk?tNp}gGbk{E4YSLYg z514e+?~ z^xi;eMzo%@&~_NNz4VCv;8m{e=I61$Rj>ZPRU{*p;UEuqH%nhe!z4S{y)<0(2E$h; zzXtBezIXKNv<63erGbiE!$^*TOGg2m*6!sx!7lc2hS5KTbZOgoTCE5~v`$70JfVNn z%tnOP%sv-L#DVnbxlWsCek;(Qmt*pk~0m>cgr7;eJvSW_{i20di`X6r5{^y(qR z%8GS4YqnW-((H6it7H|&1PLc%7h&(*>O4f5Af}8-gw3(4WVgD=9>>UT@nEw@0uWT} z(McbUk#*WADzr_O+#P#s(x3ljBuN=cjU_LmD!d#%I7;xF;wt-G?yHEJ+R5$+JjFe- z4`uzyn%o|>G5Bnn&dltS{<3T5Y|N&Kf9$de-A z-%*i$AfIAJC_9t_8+lQ)As-M3h$=}p$hw{4z-V)ZDw0^_VHAH7=bwvTe@^1U7d!5= zsQ0tTd(7ay=mk#x^t!{r2cBmfbOPHiGI(sKsHRo7y#jr%0;GM246HI%)0D6tv0#{ z3=#UC-UTI)&PFllL^9N8e;`BJb7;U9XSwo&AJYl>z6j(o;X}xD70Jz>k@FZa$_A(m zF>esC1LCMc#O;5H6TzCSS?*C6NS!B1i?T|5Vu#`iF9L8EX@kU@!2m&(2N5ZWe`b&( z)XN&vva<8>w1-iFDvOT*2;n3S0Wb!?H-UzX79q^wFRKO-P3+k#peiZ(XUXeHnvZH7 zCYjy*?(7wd%&)9-k20GSJR7mzW6uB#qr~VTrOh4>l*~b4?cn3X)f%Qh%Ur1PfcnAu zn&v6-&lS=_$=Ob@kY$qqEq+f-+N((E3@m3vW@eVTLLzn%L59orHnc&a z`;j{`>E4$zZM@=sWPnw$jA`W*935d4R_mMjgdHDX6WuqHZt{ub6Uiq+$&-x211=dw zGKx_0yn$16-%Pr1XBFKK8*cK7(uC=g`)WHrqCk1}kJq2@?ZkyQ?xFjhqbdI?XS zm~?0VVxA(+vWP*%ddID@m!Wz;{jmi9JNspkD@-TT%z5~O5GtiT1HSj~E%GNBW?yGl zNDdu5>TL?^8o6t(%<_jry7U{RJ6~k$Ky9Flk$Gn^nsE(B>3syBz1%>$47*qR^PaN@ ztGyY3o!#hnJ;~zjo{`Z#+W-1Cdt@?onPs}Ux}~xc%oZ@zJFc3f>wSLMWwQF{pPuX|9rvzoLTo3ODvqEa9y{*yo}D?|Ngd1psTXgDzdJ`aJDoUd95CGen+g7h%dg84rqVOCuEKMXFS=N7)6qGFa@4od9P^E!ue#? z)jzJk`u$KN**7q<*7b=o{(bYgxk)t=b(SLdhtw|bRTo}v0#R< z5%XQNW@ZKUW`Cb8m75v5DN|$zaP|CReC+`U%p7aJ$@7I8Z?I$XZ|7ruGGb5tFC;e*{Zveu}0~u3tM%a zj5SMO+b2RYm?MOCDa=0;ki+_v!cq!LDJ(99^(lj;43;ujTn6jkA%XQGe^C}_0qjBS z&o>{}X@VGgLiUivzZ9QQ;3VTf#xZ)#zOgRiYVv%6U{GGjEQ`RS$MYyfmDXwaPE-^M zV3A!Ckuyu3eLK?Xg(|yL4kl?;w!i z>E(VD`@!!>U(#q#=pX=R|6Y3{AV@&CHSNM4VL@-FV@r?aJXaCw>;-_bel$^x^p%ww zC3cjxn2M>k`e5}Zn2<+U^di=>D(rsTJLs;HRgyj92Jl5Z3*bIRM3DYj1iT60BoQes zR+z6I$)k+bAOf5{i>LGPq-|0#stB3r6|<~H?QFD&!K2ashMz3vcv*X1bljL(S?$`h zG|20lA5YdS^7sG1i!<9ZfUjZmXBI>OUSBQqE_7!vg($oRkwt!x+QAWEg`FJiCT3_$f{eyR^7Fi zw_0`A;{#URwc)f{b=TuVR$Z@)?N(j?OuJRLgsi$HZq?mbP_qQKeIg`-`KGyD3iHnd zm%)a2NMM7=U-ot#R{o6k#YfM^maDz2V-olx6@EKarRR$R7Vv@5c?7CZ#o1_;z-5al z;2U*@+-E(`GC>pxechtH&XFjRaki)1sDva4(J;E`>oiR27_)N|dB{-Y>|LJF9L@tM2cy>eg1P zZvCiLw}z~`HEPwZA**hUT6Js4s#~L0-5Rp$)~HpthOD|ZY}H+Rd8<`-Jw9O7T^mlT zRd+o;WYzV$*lyMJ&$L^0Ysjiw<5t~`hBZrI+b2RYm}7%>Da=0;ki*85!cq!LDJ(99 zjVXhr43;ujTm~E8A%Tq|f7xiWTcH$0c**!AZn5Ej1sX^%J|Uzjuz`?d_({Y?>ZMV` zqX(v4pa2Q0%Ck=h|K@C@Ca*`NE|NNPU59+#G8zaG6_Cj^P{9Na{w;K4%D^B*macBw zZGu`r5!5d9>b6Hq`O?xgb*dTji;sw(mu#fj^;mvtUI%uR|r_}Q*9+Q=fdzF;HB zXE}!Co_!WbAS0}RA^{y-GvjH}359|2pZt3CC4?m6S+0i}WK1aMhm-mwpcZZ^jw%@+?h>ZqFI)=`|PsUdpF&^Vb}Kw1rWhgQRANQ-d+kE)G7cX5$iC_Z1TizflM zy;RGqNKW=-8Cl1%{$=@KNS(Sd`@BP{cE z>P{i6?i97^P9dxA6t(J3A*=2bwdzhGtL_xF>P{i6?i9A_uD!g~s=FQ^uiTEet-4dlsyoH4x*IENmcX`8gk&&>3hh#uexj5q%{aJVt36vlF|425E#rS@lOiXMK-LE zORMXGsTlx565+r=+u}*7FL`9!Zh++KgH4fRgRkI+^fl(nz;tp>I?~k>f)qasspXif z3_n|EijzIih@oZu!Zy12zwJeH+*j{sV->@Muw6dMMxU}o(Vc`JgFa0nWo1ENQV2!# z;fX$kEn~|yoJDped~PC=@dOZr5@v^@OL;KxvORrclT-*;DIph?`ULOLQm!JGGHa}H z7TMOb(H}*oF)`xg;m^8&E8#9chP1ewM1npAhL&Zot>jy1J0$MWXO=c)D=+E|(JNqv z1O=DfuQrf6&rji@EnIwNDLkyB4SNvnHy`<41edD-baLk=>psdGt;U{ZbMyPvR&P(q zx%f5ovU;NB@>$C%Vjdtg`CUu`zL{lP+Hj|g82>(gzbgK>3Y0}f8Rze3o<&Z+Xd|MT zv*H#I4?42tm6Y=$sGC@_j4uAEBH|a($ST`jFG-!b`YhaW+G_x5Zh=Sh$H39t42|Xp zFq)fT(HsFqb2B8G_hr?cn|Z|?V-<6VQ_NvTF$ej?9Ay(rT6MpYPb8msiBBwP)!l|N z8AURR5TjV$Wz}82S#^_D{6ki;{4^^kuSi~zydsi5$t?aQ%pwpIY1MuFhVR;sRd-3N z?$>Uux=UJhAK!KH2;GrYcS)MkLx?h>`?E+MP#61D0sA*=2Zw(73Eyw$3^9v`skt_`Qvs=FQ^vg&$WY`5zAXWFg0 zOUSCb#I3p;DQcF$woim)FyB(QOJV+*b~&sZQVL5cETyop6!s@^QU>#2OBpO>u;#@1 z=MvbTleqi^VIYwq_ly-Zok$p^_;>Qy3HC2UDLjV4NO^~8P~zCZYH_w5HJLT|x1WWs zKrO5tFt!wMiM_g!_`vO}SjBdm;z4kA0*dW5dY}=8fvw)fC!Z;$51&=8pj4dwNbS9r z^n9v%fLJ-CFz|Esl(MwA_>gmjloQ*Ai!f&8jSZr}7yu%WkpL%6Szl254JmZ~zxG-@ zfD>n9jRW)=<*xZRqsRF{E~BRon{pueNq~PZu)=2N;7LZuv*+C0d^|Y=DaiVZ*|g9G zj}AT#0G6xZD`t)R>SfKvD#Ko8T768IK@x(iqOj3FpXQy>mI5$I%z&6EJ zS07Q}ee2f-jqXP_ z1Ec%GxD6KFk8B1-_hmyHB)T8DBdhLxDbvO)?nee#1&f4MPQlR;Mq!n-nNQg90XEU4 zRrf3TMDmH3_(Ydh-EAn7Q6!@XF^cX@R$V*MznWEaKg_ksE0R|vuLz}2GK*vuFEEQh zgr!yY@f*HtH&$JnytL{{9?+v7-}`r4b=N&wT6H}__hZ#vXD_X~kDshBsRFW^{9CQM zYvD|*?k}+FGMO!EOZQ2u?h3RURhKSk)m;lxqx#YXt-31|X;fjlpjCHWhPGLC*Q1-Q zx@*3-S#{T=+pW4=FK@K!ZpXJrs_WdT zSpwTW5t6}tgWfKM`DX%hSf5f@N?|F5#ig)5Ww4aNQU;65VEsEJuwLXZ#(~nrNb*KK zc2C4Vh>ZP0mAgI&4Vol_sxSmbo}ErFgqks#h03#IVjp)CLPp%41ZLVkQ>uXhJ))g5 zC{%#rbNrbA&$bC?)$#LAgjQ}FxXQ-2!93RB0I5m7)7E0AkTs? zOmvaHI!iw(vL%P_Qu|3ex|4yW;;Cs*aG`6loh3!2#@m*<_s>!u*piZbq$z-s6%f6P z@>!%*5Hf>ES(G|Tn!zNw{<9Q-PDnF-iQux=`jJ?4xyeTf2>_sBa*>FdHao1*1{tM` z%u(-S%iR$^w))U*y0nY46bwTvNM9mwoaFb=Xzpbc+{vBJ!o>+~L=e`MBn{taE#l%M z3=XssHTkzQ zQDQIt8{+dM!qB8mmB>`ZKvt9_eJ3$+6k*FofFi+Cf@q|G$#vSZY>3ILkCnZqmNh=j zRwBVxRea;)+iBM(8WL~JIIC2~K{O&_<|G=6AzoS;u?Kjh3K5yic<;G0%C6-gWxkgM z8nH?=k_%T^eUH~y0aD)rkNS^+qrMp$^$}pyH^ZVn0*d-(NYwAks@pg7iay3F`Vgn+ z!;GR2@`*mmCQ4d$zmiWRpLmH+l(gz@Lz#>s8AXUuly_Nm%QvfTvWou@t0+GV!O1I< zS0t|prB5=8U&br~bDvgSAJ83HbxT@xzjkZYEos$#eAmSzbVpX*l2%>6i``juOIme* zk5#v{T6N1ut-2*-)h$u0ZV6d+OVp}cLRQ@pwd$6TRkuW~x+P@QEn%zf+RIz5y6f=) ztM1xxTCKY4@gb|O*Tr_Lu79T8s#`)<-4eIzZbYbA0^2?jlEHlI+%ARrX99BAkWyGm zVJU^hrLZAou#~}428+vJ!#gCfLF6ynF`oV2xkC2%&>Er$>H{wyB`UyWRrG-(I}4~T zEljlnn@3Sm?1?v`U|4IQITA}WFZL{F&o3UI&`H#BUss{bM)Wz)$ak5Pz;zPNNB^t^%h~VU^w*nzJFUQ;C`0$--{3JyGEIpxcJR;I zopLtLL(}N|nhkmq{sMf!8&wLYt?y(dIEWlbDg!?VYGRD>SyTrg_7FIbjV6!1t29H_ zVumn@6XE@=YMCjDA`yFUs)5vblD+JyNZdv5cR{HDj#(z;Vm^lNAM<8dYGVc^ZvT_jsXeEvPfq-=tr|rov%$;cYmg!_4F++Ld z?v6fRrrV5uPLn(Zm9hUYB}W7=UX{t{nRLxkNET&)Y6@@>?ZpJ$?p1&^w7{d`W8i3L zhDJjK7!A#^Xo!HKp&1el`?Bf|&AeiWv5FzYDTXkk7=nCah_Z>AR^6}U6UirD;uAHk zy4z4Dqew;(VifgVR^9r|s++9hKg25P536qSisTi^D?;g$%;J|Zi@@BcRrm25zH2{L z-I`Y2uiaX8Yg%<5-*xc_-H}zdrd8MPVs}>EnpWN4W7Vy#R^9qht8NWhb!*hBTSHde z8nx=ykX5%vt-3X2)vZyhZVg#=YuKv0_VQM%?s|N{s=GFvR;%uMe8{Tnb+O&5>z`@2 z>ei4|x5lly8xd-jz_w3>WH8@4w@YFEnSdNNrWBS^SW01WDQrv`EM>5i!QwL5_znqd z6#0wUFRDmLlwL%Vf+VmXX0#6?Nx?nY@v@^~WGIqG*-w5R#*oKrP+k~wJ6`Z3vqmAc zch8|kjQ($cC)IiKd#FVWFC>67RFB|2P zln_#l5=eJKN95@qd>8To>!X7pNVdoqMF;e&#jk|V+5?B!!oqg}nsQ&@5l{)`(E1)L zse^y-L136MV*=#h6ARC_@ag=gz2cA7!FuZC-+mQJZ8!m8V(`%5?!bYRF;)|k%pLPM z3WTF$Uq#4d-BD!RtgEw$XRSeCK7P+S(O%3*K>~=$3>vnSHN_}pl43^bGPU?5^To&r zL;_2245h+eqq%s5=<7l4i7;a*b)E#Wqbv|uzo0yTEh$t$YE*e$fl{z_b;CMt6j7GE zvqeYo8Jwjt_EKi9g6Y6fv{PD~HG#9wwZZH9{hC=0SgV&grIcO-@lzCmkjPs!OwML& zUddMSi+HdMWu;6^9(>l=8Q6kFL^O~aS-@RzW_#W3?Nxv@w!owDW8i3PhDKuq7>&)a zXpDfOu^AGL`?Bhe&Aeiav5GOoDaJ6P7=wIbjIxO-t-4>yCz4OR#3!b->TW}sj3OCD zh*3=Mvg%IXth&i6KF%tpAEw^q70D}-SA^0hnZ+)cMPNqLs_Q|sBdhL|R^6}NT6L$i z>OQ_py6%pwx>H(p{VsNA)t%C+`+KaqQ>#^X`lwZR3R!ihs8x3gS#_tVRd)(mb*HFR zcM4f`r>IqT3R!ihuvK^M<*ioT_4t5QcWpSWR^9dZkX6^~V!Kt>Khtj2okCXKDQ?x> zI8U<#wtXTbgZYNIT?+Hh1mv(erLdI3QVNSpVROo0DTAd97MH>1cSvBf$X~=8g^0wb zY?|621Za^0MFz2}GQuRSf%{^Y2w#RUT!s81m+?kA<0=%KbLd8XzO?Zsq0NacO~Dd; zIX6du6b~+dJ{xL#2j$|IM)(`p>OFW*g1hPPY_2@YcmOZT92vih*c_8dGZ>CA+ufgIAB?J28|#itGw#CKWI znmyrwCsn%BB1MiO1lFMc6M$%8> z|B8$cK}zR@J#&TjqRgA$DUGWW$&HoTB+nliM6S~(o3JLLWZH}VuKtbO9d~*ZkZK|v zjczNzfz){tjOgvGG#SaO#D-!#TR$?wXCFgGo_hiQFoyQvD|zM%D?}UrgU@Uya@|du zKRli`)yw>{Lb*xXw}rsqxkHW@L2ZkySxh%zF35dtPg6hPTGa3faX(IxUftf@gjnUrKd-nJ-D7*Mbb{q0p zSG7k$vj8)DUJ+|s8s_YAPHd1ttQp7is{mPtWfMzUb-$8NB%gSRPb_KG-G(w5MKX#IqgdW$)m^?> zb$87wmLDe9fH@!#&!r zoLwcmct(lqzsi*}@<)#f{%vp3BR40XL1vt>H3A@v+wfiSF^5PT1I+Z#O+CH9@$5HY z6&hsCluB6H3kTV*bv_u@N%ZkNRCEy`?DzE5#Z%3;_Vl{qp=Z5?&7a6i`aB4G9tj)S z#fM}TG*P6MQ^rUjds+nGoif1Yj}AuJQ@AFuPk|%j!!+8)`s`PTNP$2_y4wpJk+RsP zGgb#54dBC7w#bA7r5dnc9~wH9?L4s9-c(xEFL)|=t0(x zM@dkw=T7besq_4tm&woB3v{C1Fz@6AFB`OnHj&(jb~hOf)_u~Z7Re)KjnxF@=O`;R zgdUSx8Oejs5%CYEyGb^2B|xf98a~LFwoIcoxs*)dNUi}mHu_!A>S>Ri$d){L=%T=l zf0N^^WH~=&k9=fID3Djba??^|v0xZYM$(?~!-|-dENeh&8p!VGv1+PO@wg=>Ih!q% zSbNIK5yZn^=pGh_amEu(S2du z28-@THiM%3vY`zU-H+UnRrkJ>Y2y|5BLl30hMfWDFuAS%?vWo79Z8v#E@`~gYq4Y^+k<8*h$}9r0m{#4# zZ}_g=Saogk(yIHoHo}N41?z#o+N!(m(bB5x5xO6%?mByE)qVV=3sVJHv9M?QORc(V z;Y_RUFRx8OV z0^2?jlEHi{-!6suX999qpHf&#VJU^hrLaC_u#~}428+vJ{W~PEUgR%64*s(DtR4N| zRk$ienDRagS+-rG%((G{Yv__xxYAxnI?jUr*|^Y4!5H@9Jb_K5IG~E*H^D=M4anbF zHiA%0pi(bL=Ag(#wvWAR)TsTl5Yv+|RJt@@}3d&u=}jmv3RMf%wFV<0Qd8`+0b71#2AZPLyx~ zQJ@v(kr`xNL+OGUo8TwH9@}LKo|OuL6<2{tbTC2{S%fpw3F)7J8VZt?IwC>VFLu9I zzema>YnFpVm%TiZ)fQ_a>D6rUi9n<8jQ`c+iu;;lCE-c5x=53;b|mXHYnuRE0d?dT zbHvkO4zkwZJiy|EwgT>b_J}R=DaLJ)I43e$#c=OnH{cDejMqvM=M>$uAT@pd5Dl5; z13)EOSd|R&S+FJ7$(2|+7de)dEbY-22wXGwD_2PT7>1@HgL5t(4`c^X$IhT^O2S%6 zbj8OSpKm0tdTD?>*QOV}g1ci($YL}f*1W7z?P*(N5X%;_fE6X+QD7311Gth58s(h& zd>?yS6;k);V@}qvzp>{B9bN@UeG5G5KL(EaW@yw$fKlHJi~0yC>YE`^zb~t9-^?re z7^~<*oT3jiiay9E`Y4+yY1REoK9PLlB|cHos=EzkGKyprAx2T&Wz{X;th#>*t0+H= zw#h4!S0t|prB5=8WEOupvj{|UT6KMbcVyKqY1RGOtyQK#|NysYr|=^>aNF!th!zo+pW6(nRcsg30ZYZ+^V}Vu4V~r`$R|va~RMrh52U! za@dekSW00jg~g??A!V?X!BPf`%V5JhB(Oo`FZOA+OJYaEu989on?L%<8>gm_%1(;> zrT7zv_J+cX=ajv2l080qN!;=7d76{}NOBJ#P5CxQ{ zUGwy!`>x_OfHbtgqv2!VXlRB;Lj)KN&9G>QfTE!p5)J#Z>JH7kVu-PdA;c+$FryfP zd}4^QiJDg3ujCWSCtl(cHLbeaP$r{DMiF8Z^<7ro`pv5Q3s^<{Y4c59k-Q>#MI?Qa zStPUgFEEQhM5a~u@f*HtKUUqER^6}NT6Jq$bsyh#@d(|KRkx;9*Y9F?R^6Ib-QQ!? zt*utw`cbQH4Ow+-)T&!UR^1x4>ei4|w??hHHDuMTQLAnZS#@jJs=M~`R;%uMe88%^ zHk?+g?s|O4s_S*J-Ky)KX}9XukX5(Ft-2ehYL>vZPlRMJ-_W;9Vg8wb95$vDmQq+s zVR0#JOc^X?u#~~#GT8VI32YSk3r0*dE`kS*5;4w^v~phMF8eLQq2Jfr}5-Ss;*M7zReriy^tgDM^;E{`9xmlhYM1i!YlK`2d=-M-c*hULTBf06}R&HrKpj$$c5$3L|UmK;4wN)n@ zbbHw)lv-9atP3c9v>JOxjsP42T!j^bPQ_=C)g>|$iA(e0X(^=IQD83kfk-e+y!e@c zIh@Bvex%kW~MzuK|JpP#l15|>!k0P`qt8s;#-<}=Abzc4Mt|E0)8o6dl zI7hOkE3yV>+?c^@@8>ZHO_P*wXO`{BOw}W{lM-$(u3S92n7e~uMjGion_dG*V+%YQ zKL(D*W@t1`BSp=dat-6oj z@Ll_{>P~6Z-J*VXR^2JBx{vRY_1BK9x>H(p{VsNA)t%C+`+KaqQ>#^X`lwZR3R!ih zs8x3gS#_tVRd)(mb*HFRcM4f`r>IqT3R!ihuvK^M<*ioT_4t5QcWpSWR^9dZkX6^~ zV!Kt>Khtj2okCXKDQ?x>*io|twtXTbgZU=AT?+Hh1mv(erLdI3QVNSpVROo0DTAd9 z7MH>1cSvBfzEqOZI(o!f>ls5QR6(d0d4NfVBeET4V`Tkj@X(->@b8;!YwX!AR4M8= zo2}~8auF~@ZDXTK7ot2+Hb_vQhy|wf(xXUFqa;};FpJ(!?YAc~u!W~yUOWu#;XR9| z1;P(OZJTsf0m~W)&&kB~^SxXZFu_ET*@NpM{dttpwuC$SbsnX+7^b2p-~5`v^(R3S zY^*5~RXPLz3q=O)EdoPqZ8G?M(SKM6*=q^;Uf|Q>=b><#XvF5Y^O>czFmCjGlHOja zw|JZoOB6!1(kG4fBr&jfWO8k=VSA~lJd=ik%D)+zUS>Rm`sZgcNM$xwd90`4(~J)Q z0O9i@N-!IGj-es&als?HUl3DzEW)aATwCX;7!*}h+ zs=K6B_iMLS-6gHMkMFv8gzm_yyQEdu?_zgW-6gHMzsIV(v|4qSk6Lw?kX3hyT6LF@ zRd_k~K?U+b2RYnB#4Ow5dxp%# z;~5%o72SrhJ&U$83!t;7+;IKETPXFDv@qKn3YX_+AK%c1a#lh_ zc;iT(*TSe0uw1#KHH8YClY0lwoMbeBGbHyQk{c@{o+{Ld7y(Y94NbUabKG3!Kxu3Io@PaaFeCE@j@OmfENey(pTXL* zUyq5$k|VZS6o|V>MlkZAeDcd8XY`EdC3kEDxJR;#`_k2)2zI8`3?2#OJ8k?bc(}+~ z*nV=4(ym#9kMi^!^7J5rCK=7A+=%cJK&poZcvKIc0!R0)UmG;KAK46y?hE5KSad(K z85G@@4Q-ISJ`XsaX7cz@Le56(P@f*Ht zH&$JnytL{*u8lCFhLO{MwN-cBqoq~XBXmDj-F5cTs{8o)xX1lib=Sg~R^4A<)nzhU z)Ryj(R^1h7H>xgO(5kx@q(=3n3tDwoDAK6HbU~}`x(scz>aIsOTXolbZ?o#IN4Hyb zw_e_8)!mM7x9V;Ur_rjr9UrmkN?mNW>dI%Dt-322Ym~mauvOQoQL_ZLeIg`-`S!Y9 z3iHndm%;jXNMOClUtBq4fO1N4F!Wb^Y>Uzc;M>v1 zmZH&ZkLg(Vv7kSDubC7dGJVk889kC|M(}m0QYV5HrHq`KguvJcGYgb2@)0slnI*@W zWttH?-m}a&yECCZs4nC_v#d1v9vgwd|M^NvTOCNXJ_~9F8cmwGq#gYP2ypOWX82iC zfFSJo7Xl4|2^>kfvs&pyakLj-Qr+n-@Lh(Je#^Hkem43^k?zNq`X=(&P1X@W2~xyf zWq9>_H}MQW!S+->dypsA6!{eEuY+7aYU@o1IszDlq=@WfGT4@yD}-Z14{)^CEW*Wm zzl$Q$24IiRk|@A7E9xYT^iP@+iM7b}Q=aVwpa=hr;Za%d5Cecwl`{-Huo|V2vH}7O zJkCSmzlz3u5JpZ>MC=>|Sn-XdH2{w*w*nyRBO7zR9jrvt=tHUVB$+KDF_M}TW6&ls zz?#U4x0G#0#$HF+d9>S8pd`PzYZ@9!PefTU5Ex_6zUq9m2SKwO!`v}S_8L=~9&1Jc z$rLBDn<8hgpgsDP*e-!cAi~)V(7+cT4GQf^6%W3B@>#a#FJb_#^(rF$C~euWw`9se zL^pDOco`t|E%2!S7&z*ip-~?JMtw6Z>LZ}2Z-zwuzO1@^Gq31ltfCKbiayLJ`XHa^ zqimw2Rrf3TMDmH3_(Vyo?lzRkD3Vcx7)5!PRkwVz>L#oBFSCmB!{(d3B6&sfictC_ zv)C!K2+VO>bsxXsyY^$%Eos&L+O1W$q*eFvT^Eng9a(itT6O&{c4yTsY1REbR^8HS z)h!>j>XwjIw?wVFC1lktQLAnVS#?X)s#`)<-4eCxmXKAqgsr-3FK@N#uEz(gx@*H} zwd$_Nhpf6@7u&76{+V{GZV6d+OWdlvk)LJ>Z2Lq=2JU6y@LAj!0`oK$E?+RK~dofShF{?G=c$siWVi zVauaOj^Q;*-L!sVAa$OkE_)tN@$o+?be37RmxpqlqKa@mlo@-jih#bWAWuf)B=Kg? z2cl$h@3gh6&x^f&R3h14etPxU2l^7F#5v0ZR-=p?D`j>DAfiEFqpg35uB+c8OB--9 zzajQmU)xh}4jyCn3SEA({Go8NSD5|UESFJuz+DHAd5!i(u;;CN6(9{Q@M!oLI2xLv z(GUSfLo+NIBA{q!hD5`@thz%puNY#iVhC}HAhMSYi5w|;-BZnBF1JgcZb?77J+l2;_J2&GRli(kMj0`r|#-N$eEuKieb zYg%=`c5BtGY1Msv*To}rM^@dMR$ae~-C1>OT6KSqRkyZUb?Zm1x;13gtx>CP4Ow+- z)T&!UR^1x4>ei4|w??hHHDuMTVXN-i%Ui9w>+u1r?%Hr#t-9;+A*-&}#dfQ%f2Q54 zTSHde8n^0h6sTDO+ddJJ!F;>iE`|AL0&>`xQdml1DTT$QurXz@l)+L4i_2i+J0!4C zR-6E1@L*O$f*=h6 zUDoW`?vVm1XCss>%zICZiy+ael$s+EBS`m)pP>rIFd$R?H_RX<6L<=tr&vQoP1+z#kW2`1U$y+9} z-aNt$E6qN?l!`^}&eqp}99Gj8zkZ^Tm8t#Yz9{WC`Hdj^QHq>Bp9#dvtQDW@B5O=` z0|$|x06d*a%cIXYYf_d89DkI#vzIy&4`-j3o8V1aHz;?I1qG2%q+zm_#!UcJXY_=zXp)T7I-v%3>=Nk&}fVRqp=wljS)~ZHbbIu zUsm0*nOBT4RxyS+#TaH3V~|gbQ8qE9Rrf3TMDmH3_{5Y}-EAn7Q6!@XF^cJ3R^92F zRX1718(GEl!;+i4B6&sfictC_v-ri#A`k~@)qVU%iwfO|iT_)zx>H(pzjkZYozklN z_^yjb=#H$qQ(ATXE_P?tozklNd#t)st5tXUs8x3gS#_tVRd)(mb*HFRcM4f`r>IqT z3R!ihs8x3gS#_tdRd?;>tybOj_<&V+Z8)t~-Szm8RoClcyH(de({9zBLRQ@=Zq?oB zP_qQKeIg`-`8K*;3iHndTgQW}>m%-+DNMN%*siu0YGDm|D z`YIfgQrQVfBL3|WA~NG=*-x=of;K>{XngQ3il-4T;Gqx;C5lQicxJJCV#kgENX)Za?qvrGli?>QZ2` zR8HfCkBb0*E`k04O1a6ll`?Y^Xk;(DJ9xm_Yw;*N41jP@)&+nuFa4G=Bz>=fgAM}Z&bp#utw(7gD2fNNZRKw=Cafc>e=i8Z#6pggyC8(QYtB!} z1ks@QvJRyQkZ?ty9cg6GA~{M#F~0()KwFegpoPH(=9EGL*qA-`I#~x%NDlHGBi1Zu z86Qw6DMd43#RNvX-*q5$o}@I+#=6GdkjuJq^bxZwJp28Ec1*giJ|kBdf6B?CE4$I- z)@JA6_sG4lel!RUtU7qCa#i+pn8~AS`TyAaljKN}CTJVGN*y8QVfn8}uD=6Na-{qV zu6TbDHuBL-Qvh#QyP?qlvfDN#C5gyL4|f|?)jbTp8!Qy{Mrm_r(k4&AXi2tM1@QrZ zp0Fpn_Z+rIs756Kga)L^eH0)Gf!H>ldkp)TP9Fu3wifVc`!?WcYX*(B3}Cc1gGE~g zDB7AqqV2h)x?3||vE{IeErnBTX^dh^;uBjIo7hXL`>XJY!Y4k2PwXYteN1Ix6opZw zFpB-Nq`LdtQ*{fg_}N&+{!ac|ctznAg;%89r!b2jf>|WitfacJ{7)p+-Ak(b>uIIB zdr5U~zjY1^eIlvuUQ*q7il>w6?j_az_egd3R;lj(ty0}RCDq-tQr$fz)!nmF-907M z-Lq2NJtfuMvr^qXCDq;2Qr&wlZs(ZgaCDo0%*e=zL@3c#G_mot3 z&r5Y5NKP{a_V`AM28))roeGQZw9{crXH*!0nueKT3E+f6UOT2KmMQ$La1s=8iPTQn zMlp6WYKXt8?4+zZMCv(O;wQZGf7)_Njf2r&vla4y6Ppo7qivj{LrZXIzk&}Q<)&^020o&*flwa@%6g^hT@VSsqewSjBXQVWxWHAs< zFZww}npUbc$Y8cIQ4P%@$^(sXj%!#uo^CYMo3Wkj6EJ#;IlZdN%03Db3JEAdq4PEa z%o~V2>rPp++NdZ-Cu5kLbJ~p!qEVxDQxj%;_UX7OI2Y}QjqN5GuWBdzhdzgcWFWKgv? zjsvPVgc;CN3nMWsnHkoB6@~{B;uOXi+Zg6YC4V-Qh0iB9W;$N$JaJFDq~1D?(XfTH zg#{e&WF5-%Kws`_>b(^`BsQSV8Ss#qx1`3JZe~A6qo)Y1B+%JH9QZvUTFMT$UQ4Wm zZX6a&na*F>i}{G&`(|h|eIEgBwN%asuT}<#o@YFLjIFbdjNr*?Vx{!hy9HjoeXxr= zfORnvP#2y~{h)Y1aJ7E~ ztG`e9{&5pKmkH#>&_NJKLFjng*=#8R{QmJnPEzvF7b98p+D#_UvX)c?u&@LM4{UDW zTrrjQR+JqIxB~5rzRxr!YEyN#)VZR>ad3?n0 zLiil(1$ivGdWadD9z@%NSRLY7WWB5lMT(U z1F!_LS=z^!k47C`t>1EBnTSNur<2&M7daWJa5Bp z(}K{;LTrK-5asw4m*g@_k*7XH5iDH;J+O2sYGD4OH2oxM;04@kqXk~BY^DTW8t^tc z;N{9@D&VD5ZleKSu6&}+7%$~}8zTL3Wde<+TyI69xjKVFE3-Bu(7HZ>KKE}nV-x~i z2y`LPg+Tvs1iF8-4W>}&LZJ(VE)@F5qR{;(Z9USBz6g!(-));IM7j{^LZl0k{^5vp z|9-<#q0)s)7b;z-bRLyXM4Z@erx&B(v`iL36%hp4>IW{XuI-GZ(TYHOXK|6w^vP zI9RqM+K~_OcciWW2_bH z+*=2{+7k)*FmUQ%*@zIzNVFP+sXp#-vYL-7L`;j>6rRC46S@}zD^>aNR|7A&n^0;C zZo6$p-EE_qI#j|qy$&9K8z-4n+u89yfG{edON@3ke`QU%^W~9%vUV4nGe-;d@&N}J z`&b8U=OyZyhihY?@g=WLb0MWHv9>_6bizE-Zh_z5-$mbY^gi$qYffjYGj}XG(>3&# z5VRE+%N=5bdimoV_h+?P0q(!r3}~w$CBqcgFnjdd{vNu;eYy+(09+l7Ia@8h%$9X1 zUZ{}8qwsXMPjvp#7Pg>5hM6RbTw+#t>n(LK7+y$iZ)_rchw{xDV^$iUK4^EZwv}RM zU@AJagnkA~B0HU9{nY8%ICwT}QD8mUm>L~RH6#X0(vdQFob~AZ?qubejyofM9>Xhy zEm={dd}ToYY)o%w8HSRHl7{R-Y!O;RB0veH52)_c#4b71`!^+QEWfP zZ0oImR;TR7b^`Abm&mJhyny50Z9+Csma8hE5+S~@Qbc$xo2-5t6gElx z_ej;YA@+WC`-a#@<=40&_HljthS*1vZ`=_3xIVKX)*^cIhFJSf^M=?vU(+Z*>eCxy zgQIDdAw9m4k|G79+Ac?m?<6EiL&=dSUJdjtIa0}yN{;knY;#c~Zeu4Vbs#F$Knp<4M z@^WXrbHE@Fva61y-@=foh%Y8!SPWvNF4Jkg7D{;{fi3`mWPWN)MtBI};HKEH% z7Xla;n*q|!6h=zeTa3TOtuaQODr>8z(+deRK>LRIh zLdUckoz`0yLI;B&iNH1+45m|x=P-O`gP_74I-5P65{*Tj#)=E7?7|*4>#mewZQV%=gaMuFY^0q;V}u;+e2VX~ z)}n^SSa*_`q+P5Fb4WF99fJZPt9FSy>(F#cFq^B3b+mxw%$r_Cz$&mV*Z7z8Lh4{P z^zM!&o^%{jLF<)_3X5H=1W>=S$BN@kXY;SC^@58PzYt2Dl|O`GO2V^|(3CuMEhiK3 z=`6=%jEebT_0_54Wyknk?5#JFm;#gX%DeN~XfX*Q_xRnb#V9Bt%Cv(ON6eB`4-i$e z`HQ6{R)`C80Cg>4(g!b^7}$Y;3i3jepG+RXQW<=+Z<;-e&J= zg4fNO6p+88b|OA=z?-M97PWPSbaZ45ds)4D*`NE8+HCi$_CJL`yM zN_cA~ob0_ACZTh{@fQjWlPzvmW^RsiVEMP}{q+SN2NVgHm=oo-DaLTL`FWx9K1LA? zE%dTF1BMJ0Ff`Ku!*gwj9hwp8A%{i}DI|JGqtHVVfgZBx^H>{V ze-#2<2y`LPPlZ5_wITK~+CrfVg)S8OhojKrXKjcb-)x92G&(hLg-917U5Ioc(ocj) zkMB447Ajq+bfMB;g-R#9v^KdV`@X}nB5RNrZ&Wm*$uH{ zYD4Up-4HvbHpGtU4YBviuXRK0{rbd)*n5(1-4J`fKD8k>B6|CV*!WKShS)K+A$H7f zh<)%H%`&9NH&RlhfFaxENb#M7Bxx!+62Bq{ErjjBN97>8*QY6w7 zu7_=u6p6p$ch;GHixg@43>ng75+wOGo_h_e?k%WxhFD7pVjjvNyD9+8LNq)q|7;#a zyaFd-z4(>+Zf}VPaY>NpPj0+e&8V}68OYfN3tV=NhgeOZb9E@F55rMqWKha(Zc2*4 z@I~HS!&G(hvfW3946I@qm>dg4q0{t@_;DITQWcv4aeX)fI(GlJQv}|$RWZfp-WYU1w|Z404y+|i>{6_SIjC2q%&e^G7y#e$WKY0ZEhu+ zA>5jz10WybVlfz5Ks1$<1tCBwDmChNf(>;C!C2fNG=)h8m|H?SVMzie!Y8oSA?8Z* z4+|b79Le2C3qy=kV>5OXv6N_c0wjPY{^ zSq>HVCFW!|kA@mxm6=c0kfcN zu{!EqJepaVhS%$)b;{LC%o2h*Jd0Hr4Y6Pq@B*F4e+tV7>OLD$NyeEBsK$TK=Aqag z(M*JneT(&-t?*)^FMf4!E zW7UodP~s6qDXz`;DSOrGSyp=a-H%ZOQwu#XeH%3}HPZr9h7y>X>3}Ii1x(E}!1P=j zVy9+Addi{EQwoWm(kS$lM4+cE`aIW$*k6S}7Xn=f^iv_wb8U!yjJ8ndLZJ(V{^2O} z{8<}f=QkT-pBjyx-)&MYM7j{^LZl0k{^5x9{C<;aq0)s)7b^X4M5PlEp*F_4<2cCHPvk7=z9v0t_!cCHPvVR5w~_RBWJ&b1*nMpzqSzidP7TpMC*L+tl& zh@D$E#LnNkA$Cq}h@G<=V&~L`*g3l)c1~@GowFNa=hTMSIlCctPHl*t(;H&%m0#${T3=+?#V`b+{)WTI>#;^s`62ay zE=$@Bju&_coWSjkLZzAj(%vjE3o159P=Uu`GzYECk0knjLJV+FgO{+-Wjn3m^4_8!wfKHR*m#>u=GXvB)A?8+99+E)Mo}9Y}{fb zSEFH60T~FaI)yZTj%TMfgrD3Es9Q{9CxCa3St1P*u1EsREop&DRwrK{Y`y3zNKjO) zJeMUp(k8V$X${Mq45XFS;fN+Ik-)=f5P{(k9i(3)vtm#&4O^uYvf@#1=deUdsUj#H>%GJZsvGO$&e$H7!@Lob8KI=5 z6qQ_KDNCviOFqm7Y4BtuB$GWG_AX|_hq!(+RfX)Cj?GFZ=W^mS#F&$xs1HGYzmj*M``o8IfLcX!Mdo zqL(xZy(AInC5t|2 zB^tfH+bCOzbRp7(NEagg!x8EA{YKeBr3;lVRQj1w>4fLkhS=NqYeVc1&-jmSh+S(# z?60mi#D4XL*tIsqhQ-x}*e}}c<3SAMM>_$o^U;?%^WTbgTxsXmmK|XvTO5mpWT!=SqR4q=+HbNb(~9QqqF)lM-N1 z(NOi<3W`9dpkVE=8Nxp{fIVPo6bK~nCGO1J^6P_DMmz=fNg{$kAS~&gCj6R=h#*Au zMkX9AK}|*ooDKTs{~}V1zQ5S@tS@$ZG*b-V6WYEOk8EU;3dl z!6Az*Fq2*gbuUkv2wJb?Kv+I-Ak{9EVQ)Y>mAl@eKvc29hYFgGO{Iaw0ajUY&k9NI z$*cmzini#(9st$xdX3Esu4~LZAT;F_#R%RZd1V*ZQ!4T%2YhWZx=j7?95#>0$J4$9 zD%hbx*OY0LIfIcJbRiViv&B*=V&`~X=7$bxF?)MOnOi9|S$xplh-^fjIiB=lCDmqS z-D=Q2BNV`Vh^Lbj@@#kLVx^dKu2Vp+-2y)b);hW5-%`okSq_jq%NKFHjevKIhdKYFh#tPzPT)$W^ ztISBeA}`EgW6YuAA%*`bteUJXNvI)1%(LFd01?^6xA+yQuB|i1+OfdJ$eHQU41J6u z*jng;?c1n+3cY{UhS>e>8)Cl-jo#nC&9xBeLZl0k zE=2lgBhvf(O{#@T7b;z-bfMC1sB|LA)P~qF(Ap6D1sh`b+7SDg*4hyJWgBAm+7KHS zR~ur#Y(wl`8)9RGwITM)HpK3=A+|Qee*cEpy>&zE{;eBg_tb{iJ-Z=xPi=_Zvm0Xf z)P~qSyCHT@ZHV2o8)Em=hS)v5A@*MRwQh*LU!T|zdr$JM8)EO*r#8e!L~q{^8{cW) z5WA-~#P0bGu@7FRS%&oZMoNklFlxITDZbM#Nm{#-BT>9wWBesYDmhZgk$$Qi>5q_A zQl#58B}FPJ66p!o!!}Ba#9#3{>rB5xiu6aY`uj4ZKW-8dBoGE29e*}E#Jcd2A;wQp zbhZLxu%bwj1h2vN&M|M@!@Cnhb1~89gR*UL}4Jx?Lb@9N0{w7OpjoubA+dOI^YTs2B$DsCZ3ei z8|82`zKcphWQMbC1oAyhmB4>C08E)2v&9L_9Rcw$fz{H5-V$($Ur|alkrsgs(1qZ1 zwIDhfi%5SUsE`oCif^`RdwfokAr%nXI|JSM_1=hM40ClznQKVJ=lDNCj&rVoxYPk0 z!v=IhJc$lio7ux@0HQ2e@kGv=0<*!Lp1hkOnb2WSP#8F@cO5X3mONjL&4>jgYlDq} z1Vwkkug?Yn;@sQ^ssTHZSk1sQYCvptH$WbU`(%kufzYl$Ti75$scSUGl@%O~p=F$K z!jwXiA2F&uew`qFvMvEHCT)_AC>emY`4xQdB^4xs)+@nMXJrv9f;X|U>aJkg0qTw3 z(Fyff4jy+3o0sg2r)FlXhbBP*Idcc>Rs|_Gd0QRQqpn%Q9wZ&J0+SM$xOy>LWi?0R z%!w7VkqE*A4Bl3$VpY7KGOt8r{lvw3IFZU-%&LlLEWt=()|8oH%)~&f9beG9HHZV) zgE9Pqif6McA`GMAa|#er=rzVaTbG6nC^llZJ`yXXH;eob&lIhr0oWo2jYyQ`&^^)0`6PSdzbcNdHXG2A%(fu}qNTChJ?xOUG#f5LXNg@gd$L}O%*xlqLr@co z*ji=FFDP+D>KQRh4m#V)&Q`k8N9w&a*1s+myH3`oNHk2dvf218PchG%`QXbKK130$ zT?0L^cHcz}ynuUcw7|=i&6L1P1KvglyjOrX&e z+pS16S7%UY<;7+MTGuDg=e{dnp9+EQYeVc~w1q+!3SB7l4@aTHhsT+CrrZl`d5JzlTaE;zezUy^WvcG(e~}#QrlI zVr6!m;O69#NI^(jmnokxgqwR1R51EeR4zW9jb3s!t}`vvG+!? zZA0w+>gElx_ej;YA@+WC`-a#@<=40&_HljthS*1vZ`=_3xIVKX)*^cIhFJSf^M=?v zU(+Z*>eCxygJEfwAw9m4k|G5l+Ac?m?<6EiL&=dSUav9!k|UKIspLpMR*p236p7$a zQlye1k)CipY@?(|{1v~m&h%TPNW*8ykOq?=5z;{wNKXV+Z~&~Dxq=r2{h1A|WfgSr zIBAQH+js_60R&a)1LVkt135#akU^OFHWo6WGQFsr;~0|Kd$F*LpGumUA z@W~*<)ocT&)Rlw{Y8)y}gNp~7AHpyYBOn~HfzRntRQ&;Zk(O7xComhMrP$eGtqH?G zW!SuGa1-m`=ty>CtG8?D1zEw#N)lZ5WQhyQXU>^PQm8m{o`})*u?m6!fsUE0bF7yj zQl6bE-l*2;0VzKyDLPauVI+*hi%Emi+tE_o?M5_7%)^tOWA;eho!PD4LU8+*WIPru zc`gDTL6Ls(B~~PY)+<4jBEw?-Lalv@l_fb-jNto=LE2dFYQ&(rN%{%a!sZtH!M6Ez zN&r+9Btu0uN`N)y2fxM_@Z5uyuDki5lnWR0j@#!-xkQ!Qw?yAv!!|mD+lf??W1hn5 zC;%7pL_S&F$9wY>gY)rX%1@QL_FXANF7Yg~YW(6DW7bSEhgcoG_#Sg5;Sh0nj5%io zeO3=fA*yt`jh`4b8BRlt!tx=EI-|Enqx^d#Yv>3?$ujai)}1b#T+kVzM$wALu|`-F zzfJ*5Vn5oPQ*^74B;!yl)AX2HWVUhQiHd1`Sh!TwTuDr`j5%3Ufv|;^dFhNlMiC4x z^uX|K)WFb83k(@bU}&ZTh71)jG}8dXb8Uznni1(Chei)6Bzj1r&_fb|9}~vexJqq^{YN*%jm8-y%htK0}5yxde&0gte12@f6mY0%i!CAuiD`Q?MyS zu3xm(GQEF@5W9h(<3m?cr@vl#H8*Xe2}8ckSX!jORN!$ z<}o*QE<9RI=pfg@%r9oJRKatYA?rrI63MZ|a60F~xbrz4-2?X3>S&z`eTWAo6hZw< zWyO_SI1rVi7($%#7=}P%QLTy_VYY-H7L8zkh#64*P68R@UjJha4epBvn5qn z1$r@a(|Cp$r@*aC%sEwqPSdtfN98NGW<}PR=iPb*@sm_KKw=i06dGA;9EE4$uT!`S z0bZ}RFktLtl%9evwYGuSz-c5yOnWgpo|VEm6k?~CG0}e4n9sqIgU-drGO@-!=2L*> z*=CyrYZ3*qtX7{ACdD(e)>GJw-T-iozcTaKDjtDdF&@&((Y|}KZV4-*JfXDdP1vVC z2Ctc8z2NXAtMCf<7&a-v%o?kJ?@*ueEj*q6l~waMSCEu|)8&IxtO$k1!Fo8o9pd&} z>P{$v*08SGpYD_jTCYS$7h74Ko9_(#7AwLN?FPk*BBc<+ZjF?Y#D(gf?wKNpuze1@ zJ)5r)$R#?&5^Svx)&Ud!Bmx;?Y$|PtT76jcWb_TzP6UA7RNNq$Sn8G#kU|C@VV0O5 zN);n<4mO8Zvv!f?*vTbq`(zy$5tz;ii{jb+T^|&-?zy}5vfl3sW3bprR|j3d2#Ld; zH4UAui{74L_DoKJn3r6Qxguxr6qlGu3Lnv7yR8mmnBxD6-hlU`jh_^aRTzcjv^`no zXjlcMwBECEj^9;L!%SjP)~E?DA!E)l^HMM$;(C>wbFAjs$T)scRNCdE6v5O&4@}=i z4NT3nz?7i`re-=|%1{AQGYv33*M``s8IhiHX!MjqqNg+pJtYz7DT_YOwITKqAq#;n z1iBFDr$C_R+7SB~ZK2SGLKh1C!%^t@vo^%eZ#Tpi8l9iMLZl0kE=0Nz=_f*@=l5G- z3zaTZx=`tV9+gh`XKjeRjlVX;4)Kit=!V$2HpD)rwKl|l*@oD;HpGU-)rQzF+Ymd~ zhS(TkZHWD{4Y6}=h^-B=-@hStZru<&f9rSts7$R*C#f_-jjUmhS>Y{sSU9a(c3q~#&_B`#LlS=v2%Vy z?1Ry0mLWa9k&+?>0NE}_iti*ONlVF*C|<8I{*oh=9I50;KUR*kloW~JP*S9lA~_R| zZIl$rc=d0WA}yaGLt0FNgv}7N8Ruvmo5FP;&(53+kMF}CNb5YEv?S-4Pa!RR_ys*R zexYPaLb=2zL^f7X0w{V;600f4yOUIA#egOF~Z4c0q(iXHo{|!N|FE|YSNC?)XWk==wzTGQX$|ao=Y!? zFu;%iL!x6m+@Z6e%O@mT0snm0jD0pErNiJ~g0TQwKqj7Rk1@|yMPea3>7P`_{Q+Ii zG22+q*}9h1f;}Y$#Eb4jGQs%>^8m91-E-WHphyi%AA>sz)V#)u00i<~L1pxFQ_Phl z2Uv?0CaeyH%*C8o;xJa0xtiksnmvA(qJXESUoq*+V)l$JF=I!A{Wzn1u%e8+u{yIA zbX1qX@{}shgyXXkIbqw(o~^##)qsau(q^pz6p10yZZ4^y^-4Iz98#?_SG>{UYCQ_+ zZZzO_Ho&_#&FEywc`!bFvtC@15&}7O{V8l?GZ@wV_h=nFkxgfsbGI%mVt(Trm7Xhom0uu&_!-GLH@ zBAr=MQ+0{a(!cg*)etfu3dA(!1)2aOB3ulrjE473vC1!&@G**DX`u&}Z=(j5W?Ep$ zPy$Oc9k67mfTfuRSe|P`?9z-#FF7=NNg>fo8iihx2=tOgpV!(D`>PP>LZAzQekufd ztqrk{(H06_D0HFFKOBW#KWjtm`esAye+rFW-)(0tM7j{^LZl0k{^5x9`hGiWq0)s) z7b^V>sC2@^YeVd9{CiAsZHWCxH^i>BA@(t?wITM)HpH&AAvP?oHpG6}hS;?>#Ks6~ zL+qDrh+S(#Y;B1B{tdBf>xS6%TQ|h6sSUAfc0=r%+7P>DH^i=~4Y6x>L+qN`5W8kK z#IC6gv1@um?7i}9-4J`fKCvP8p5$9M#NMw@ZHSGC-o7C=zSF)Tc1>-FUGp1aADl?D z4C(QWloTl-%yv0ad?z7E+DeW@@p_H%mmI0&NF_)5v2vuXq(}sZk|LE9iS&f)VH+hy z;;;Cfb*A4UMcO_?hP0UkNm$Y$R*KaZ4+ooQmP6_R_mNJ-)B!w~(h$VTG1jOvmXvsP zHSPi*eCfv%5AsS*G=!@`$KxW@GQd*|oGOoiCw^%T6T^H4WAgy40KP<4S{4=2PtY}Z zkc=d^He#BQ$jnc1Pbvtm6vc_LljR6J$Cz@R<7^e8&IrDQ0g_lm`0^_lCi7zzuFhhg z<6Ag1X{s|0tv7Or`5X;Q;#)c`p3ezpP|t*O(g-Ftgs}kk5grakr~p1)J;7qIq`OO8 ziIb_8nc^B!!DfJ@hbV#NJUer>gux=}An;%nB+tS68}2}WzZzk7G73tsuo%MvMWb8& z&Tp~4R6T;>=^^^~#m;Caz+^GE4r&_dv75Eyto)+hGk~4*EG8qcI1GWqmur<>F+jDJ*-I@{UEr&*LDI|JJqtIItf!?y{^IjWbe-#2<2y`LP zPlZ75wITK~+CrfVg)S8OhojK@XKjex-)x9|YBYL(zrnQ-=|ZFnkuF5~XCu=4`wgyz zN*5|!sPw-Pl}<#2+7KJ&QX68wU_EH^lC#4Y7N6 zL+qZ~5WA;0#NI2v)(x@u>k}Jd?@7LOL+t(f)P~rI=ts!GoAL zyo`bh9D~`=LEpx4&W^`-VOR9i*1$r6cmH+x2#KneqgA`W!+6pVpuW<#L(zrj*vM;1uUOtO z?o40?7#6qI#q{XS0Ov4Uo%d~Z?qu2f$J2imcuM<~UiC7A$lBIH|D)fqJfud5eRtT8hLEs`@M98CBz8?m(790~%QVpPob z*`y#Bqa$zv;CY7_S?gElYa4_MG%606z{!eGt#bz~&ERx(64!8u(Ht5W47boZ+Wdu-{yN88@r#^(PB@q3j?{e)dnOnxR&P=uD8v#lhL{=g z@Yk?j?D=3xOz&qfx|HXl2jaVu1Cs7c__3JyK^>u~0CuA-^>hZa>!klaY-zGCftpwH zl4GnFfsm(GrB5M74{;3J6NJ8|g4XNP|EI8llTij26F5?`Q4}**y>U2O(Dvzk~4IYRUn&uH`~r)eEeGMb2m6;?09n3SnMn~r)|*XMC!xR+^LBO_56#vk?yy?+ z(G2&oI_f?_I4FLx6QiXl;wT|!qme24RBm6w>LepRhb`?!FX|02WM2Gq`5;BGbq(~u z)_oT>@B;3&(E=}5Hd6vG4R{+J@N#7{74T9jx6uGES3c2(*q8FX4UvAiGJ!@@thOT2 zT%AFol~PP>LZAzQekugIuMM$}(H06_D0HFFKOBYbKWRg(Zd7RW z?f(Bf8r{F!vRjCBA<~6N7b5+`5$XPaypy(2=|ZIol}@A534f~%vA6M)7!44r4YB{s zhFFH$&-?KiGtJ#pl6K7@_22C{pg0+JN{N1Vq-OGL+n4lA@*)}wIMdXRU2ae z`3^%uIDq#BLhS)n)->8J?lN)01 zjbht|*!$JZ8)EN~s%=B;{p$7&v5(5HaYO9m`t}X6k0jr?A@*^7W<#t+^yUq*_MPSp zv3I_vQGV2?H^c@*(JVuHd?O`A3P7=4juhWXNRoz9wWBesYDmhZgk$$WkX(%ZY z!J(u`B}F1V;dd~>&*7SkaAHlb67IbV>R1b zJ*3YuC*U3+kd#;|Yz#xt{9u_w{8q5ei3fDi4>#_uLeyEqLpTQk725h}mFZ?AGR8vP z0Wbg*1|&nK#gwRRJA?A&1Xi_)rU%$Kgh{&TQ5`Hs^!w@C5Yu`O0JR}GpX`dE0k=T% z9^*ce1QC`|@IKoN6I5_b0jib;{fz;HLr(GLJ_4UCjju*@NxnlmB6zRybiEY7XVdJ4G=5@TD$+rz-|83 zTAbt8u_f6#DGo1VRD5D!`({-tb57vDT2~~&9Nme5`HZKtqRFdiET=b8VzxAkk02Y8 z1zzHL88cP3>Rdj7_ddnlNHU}&$tp-eeAf~<^G`Z@IrTdcv|gXl&n($EnRy}rzjZZx z#=?6mA^BIDODu}0V$w7UpV7oQV(eM*H7o=RKbeJ7SgF6EXCfAz!uBNlGoQtmy~7~t zvW~8To$dZ~sEbh&6rprxBpK1htd6MzM0odM^FkD?0P*i)E$TRlW@f`Yk%~CtDxS+| zt+Y{zL78b(wCDv&V19ADTg%-tiAb{-{uEZsHcw%N6*-9K!gpA;-N<#)FR?;z>R{y8 zxC0r7H6o=`AgDLJ#C(!j@Gr@|j$w5!1|!ZBU0r5Mo+7_6ldOV>dF%g}ReZBI((+(Y z8sXDyWfv_1ahu3S^MU>7jRp9K&Fy5?s3^^y*RUBP5BLH8Ld0gCU-Hz)D1xDd9vHrj z8W@^sfgwW)49#@Fkf8#GW*T64t_`t6Ga^0Y(C8tBL=R~cdPpMBLl%7=YeVcKeii~< z2y`LPPk}&>wITK~+CrfVg)S8OhojKrXKjcb-)xBeSEAA5yKSh2NEaeqh;$*+KOB)B z|HqqS3zaTZx=`sSMx_&;UmId?xS6-^{EZ95z*T>#Kw2pH^h#q z4Y6Z>L+pbqX_g^9zLAn51+>{NM~d$xBuP`rktklTG5(Sxl^m($NIzDNG?f&I;80Se zk|L3wa6N3Jq)7Y~zq8KtTck+SXULEylOQoa_!sCqHpA253wRXWz! zn|bU9`^4srljc`uTUinu#g#B}i&RA5i|cW&@z=#XT}TUM*c59`!AVTh0p?4rh13nF z)MUEUi5iUxkuZtbj^=ioPYGa`!D0%KR1BH-%(s zQb4Io+!N@Ju`zl46>=6JL@XZx7(&8ADUO1HuVxM`m!vR++un?>3+G_QB(k9nqRJ+r z?eWwkRi!VxKb4oNa^``hHb9u?8myMoY+y34wKu7b`ketA7QNPBDg)fvmF?5!k<^ zNURQ3_A#DaMG8d_Wd&YfwW{8gK@#xPJ;oCqtgBNw*2gL^{@yD0*@_@$jD8M_Wu^ER z>m`}vSx{2jV_gzK>$S|uN|l54b|<4n&^~OI#<8W{$^o6c&$ljdht&!P3D<7pA1v}n z3Uak4J%txIWhcQ8r3z8>9J424YKXO%Eq%>K6*BXB_Xxj8w8YZ(_`eDViXDmzE1(7g zoBe$NbcA}#$0`2pOj0Sj>UK|xeQc6wK(t4+!<>U3@VxTALp(KBaWEmK3KRM#3L^ad z8gr{2oms+Lx3DgJiuL7R%J!?p6J~&WvZjomajup@M8>%=j3=VEHnL(jLXsv-XaVhl zC3$*iWs^(XP1p%OXwi(gflczp2ueaCIgQ<9eSB}!B=&Z2Vvfj$6_I)8k5U9v3q3G> z8#ORB(*je55}2ClfGI--OwBaF^jsTar)ETY%AwIy3W=W5DD;#>pr?EI}8V&~L`*g3l)c1~@GowFNa=hTMS zIlCctPHl*tvm0XP)P~qOy&?8q`L%9{ye zHpI^P4Y3dYqFILY_(n>K6mVm^94Wq&kR&Z7N1}MW#`sH)RC1(}BmG!8(o#|+f zN{U2!!u7C?k|Oa}{LVVlZ;>J`pCLn9OoBv&A%;+#NNGY)J%xSlMjP>@c(=49MzRny z@yErux|bPC4Dyw%r;F*wDfyRRd9=!fsuQ>CEzt6Ry&Qn>V4y#D8=P`58d`P79OgC} zJ-S;q23o|qXCsSM=XT+UgyE|Jebii?g<&NG@-t}!@RKR0#<74gSrFO{*Z`8@7d122 zSe)L%xz78Z;(4cskv<5gOUxB;(QaHQ(9~k&&|quFoe9ZQ6ITOBb#AyB7Znrv|6uhI z4n#$uI~W;;I|62IMrd#c5)SK2WhWMNjX9*oIaz?YSd}fA5i4>GM`6s&KhP-mAxSb$ zD!9dfIziS`Jn3$ZDE%B&p^;T2pWS*9IjE5j5%zPKXoC1pZC;5|9B_K2D3+0AN2G)9t zzmlwYB9fj|m?X(dtk+AzNd&D|k{)%R#@JIe&juT-w86%V3T6CyUjcS&lu>WMDy7ZU zz~Hk*3=u(d%#Y+c6j^xU9`+!cw z3;CDtE(U>%vSZ||FR_S~BJwkntSMf`{9M9{=oKW`vKgZk5{i_2o3aN7%NgeuYb}rFS59G{fYua%Jj-q|M>z!>Ga_QLa+2{2 ziJ?#>78wDEC$bjIDrFZ@_hi;WDNQUD!Rtg4W#eQ|x`a*c)*aG2O5oJTGhU1~B1Wl5 zG|ED>47PfSwWBFvMT8X*8Ri(z=uc{LhofZy*$mz~h5eA%PDW_Fc>TvHf~AEXSiX%K zSej{pB|`};&2+$$p#qj>8en;@4Y5lzBE96$=p}_jFKHBdNg~io7JXi8L+r0YpbLR6 z1p28E=(RS)K1N$8bfM6NLjQ0Sdi|^ovFn=+u|F1#Uf*vtEkwEy=|ZFnk^b3;^!k3I zX`#}EN*5~qUqz)8QKL4*#zfbK*e}=+yVi!-$F$al*e}}#ICIyV%Klo5WA)}#ID&5v1@8W?3&#WyQVh8uGtN-YidL6 zn%xk)rZ&W`=?$^>%CB`p?EU)0hS+N{`-a#xwIO!RZ-{;H zEX^{c$2U?^q<}@+>|*9O=i(k+zZ|5gba2R8l0;6RwAC zloW}-;&;}Wev1@o`wSV<<`SeKyo0Bse}`AYLpv)H&_oPFJP}r^W7xO2!}36j5(9I| z5e$;fs`teq8(hP6FmOy2j*iL&6N6MZSp^|zd5HV3CQQ+p?ijw&8%&QvyFtZN1W@z4 zx#QJx6iEYE7sDJKSUZO?lKF89enlofgvk>QSDR)GmY}XwW6+BT4+5~&G6Ydc6qs#- z#O<$;=6v26q=~z0R{6hy+yX)g^J6@bPOK)~0Ym`>F-s&y>liRJ))(-JdR)RCtMVj! zB6JyZ3wSdcyGT-1{Y!AA+5&jo!q_`c7x1oxSgXR0mQ z)qenM({otuNr%Mh>jZOxF~MVsry~dJW1O4g z4Mtxu&!S|B7~E}+xs_;=F&xAGRb&luA89L$RGE!bp`ez$>JaloR?=HI4lxhJCB4yt z@|>t>1T3?3Ht#+djoF!1Fj~F#=M+yWU$!hSNh?n=#Mtx{*N;*JTMIp~eH%5fHPZrH zh7#DC>3}Um1#HbU!1i1lVz*{Qdds2FTMCKZ(kS$nM4-1U`n=bM*k6S}7Xn=f^iv_w zdu@n)jJ8ndLZJ(V{^2O}{#hGh_qQ8je-awKzuN>`h;$*+g-917{lgLI{eNtNEmXQt z=|ZIomCi(v+7NpiKjvtFP;H3)hc?9SwITK~t+gTc%QnRBwIMbvt~SJe*@oD?HpIpV zYeVdpZHV1#Lu_q`{r(NHd+UbS{aZK0?x_v2dv-(Yp4t$*XE(&|sSUAvc0=r*+7P>E zH^lC#4Y7NAL+risYuylgzdo@c_MYThH^knrPi=^eh~B;-HonuoA$Ct~h~4uWVjrAK zvkd9+jg%BAAkua@QhcXflC*avN1}MW#`sH)RC1(}BmGo4(jOtKq)4}GN{UocB+?VE zhi#M;iNE4^)|q~X6zPv(_4j2+f7~P_NQ1ElA~=SaAK`vR9_@zfGgn~6gV`Q2b2j^7 z2Jjck29GU%m^l=i5K%)lJ5yV5&C${do-Ul01ZrG_ILI-^k9A?my`iHj=dST@_aNO8 z)9WHC!AM5YQb9~s4dK=o1C1~}9C|T|c{9)jhalMWUUN}9Kowl$*WG0WN^Rkege9`5 z;4y;VjI)Dmyz@RV}ALjYX{J{n7rg!PM9vsk zDA;n3U*vP8$}w!4K7&LgY2EPFDthOZmsl4Ua-6MbBFqm)RXJ&+v}S-MzfOlIdJ_9& zeh3UkdXW4@(~_1+?06!6bc%IheX$%YnF5DWg&>M`F=JTEYTXRslVA*NdA5>``C;A& zV}ec}uz4bAy%JDK=0(896Dd^ZSY@6UyVcu2uwhC$`X`ls2K?*wHA7fhXTnh8fZkPbdlpLX(c&I+qOQogH{!6q1yKprVl)l^isHcz$G8R` zIa_D!g%Z!DH((GM=!W}v7IkJ$Zdf1LyDZHL>e+A<>24U$*?fn#V2^J}Kul$1WFH6< ztr88^Xw8A%Jz@m~#RBCmq#I)<@9==z+caE^6Qf+-su+UaoAW z1YR2OHag(t%4RCyrBrUC0bZ_rq7AVx<$D_<{c>djjizvIMWVSngF-9EG$YWuK7l^> zwITLbA<%_D7XtlM2y|Z?VjrU|6uMC8LZN>+3f+IwhFIOG(CDz}Pe-HsciVakkuF5K z5a~jse>fuDzu(qdsC1#yg-ZWDR65~%wITL4{ymJNHpKpu8)9X4wITL)B~J=o2VQMC zp*F;R-iFva{#F}eV>N0+>_5LD_HK8zAvV5M8)Eh=w> zkIJucL+s=F_6@O*B;U9p_Hlh?L###g<_)p-o#qX(cfO`ke$=No#0Fc@EJJ#HBPB%& zaIsyE6yHfml7^BaQM?*tR&u10Bb6NK$I6k0k|GftN{UocB+?VEhi#M;iNE4^)|q~b z6lwSj8PZ@9BpvHJh25Skm52m6#>|{8+DNZK`Y(w}b|Qf1Tr76i)a%7(Y?sYHK8o4<*(ZW5A~W^r-yW_rI9%EEs#lmhzVGC@$-G|y1 z1EDU%IZjp)>#S`;g5_k9-2@c^11@_B2SrfD6T$4^&;q)qxC4P)03%fl_4O7e;G!!Q zUsV!IdWrd@g5ZgOGzmx-gY+bzG0=#Fycze)9jFlH?o_n~JDsg|6EwPn(@d6*2trgk z7pt0eYW^B?$m$kqWGQn@yx4$y2KBqeRepB~LmVVMRB;Tj#f#@4NitU>zQX1Kxzil0r{L<;@1= z5|{8?ido7Kf;6-a(Sz05t#{uHW03cmg5YQ{Jn?~^V>1frWUHgMBM?dE7~5oYGPBJr z@m-*O3Vhx&fn{n=&S9UdxcZ)}S?Mvx%pGKnMrKOPca9lWSxu30i95(zh!xhGQV@+s z>Z<7>AD zjHg%;y}QO@J0d#TpxKCDy*TF z1BMJ0Ff`Ku!*gwj9hwp8A%{i}DI|JGqtHVVfgZBx^H>{Ve-#2<2y`LPPlZ5_wITK~ z+CrfVg)S8OhojKrXKjcb-)x92H2Pc6=<(gA*+QfXkuF5K5a}O|NRRI~%@!(MsC1#y ze~wBg{Hiv@-o{UIGeD>|#QsAYV#nGL`{uIOV}!LK z_RBWJj8B!WXpkxGh0dcyUvjglhq zSNzU8({GU?O`jn{noNR3iXkS9rdA;CUCiq#U5H3mV;PAy_!rlMVd-D? zuTI}TglXv9cj{9>5vBq2@vwIY!xX8&wDF5mm_KzB#>L{`=;U@Bj*5fu&v*I7tJS$A zF~SV?#q}&TZb6V>Jh&-NpsJh^8aN~}V-9n`^cG8ry|JUa&nn@BegYuJs&6^;Ip&Ih zM8LaR%}a+NnE^HO9wxaOpmj1fax>7Cx#G@P2msY+Wc1m}0g-tIr8~hr8mtNk3@nUA zU9I{)T786rN_@sha0P-5DQk@y`M24jW%k?TlAa_*f#sXJ^xc zs?Q)P@uX`!mpaic#*8mWMz+UVQ#4IRb1F)VaZe}@e|rX&08~u8C23=OqruqFZaPz* zG-7kRSy!}Le=ynqg#mQ2Qv4sEU2INxqRxn3><7ET(&+wKJH zmRSx)54kLWjH46$`&g-i#ZShp-q+|0Aamu-lhYeQ^UTy2Q`vJJ6wZHSE#)`r+G z+Ymd~hS=H=`~4eY=hh9e^S5q@ol_fP=j?{qIkh2n&TfdEQyXIE?1tDmwIO!SZit;z z8)E15hS+=M*SaD0etlv?>^;f1Ziu~KpV|-`5xspwY<#DEL+qT|5Ig5L#6EbCW*O4s z8!0JLz?SWDr1(xklC+c@iQ@Gd<1aZ<$&pHq^kd~nOG%Lk4kbk@DH7=k*TXhSio{>> zJL^opMT)e1h74(O3DO?cJ9ufq8m+O`*szXOzJw(l4CP@aFSdd@x}3u77?w|21~vqlPCjMkvzqgC9Disv0{ zgcuaS4|l$rL}4{)!DbclW~?IyND{-qxewPx1PY7Y%@X!_ z_Op2b9qQF!=Bv>Py~UZ)sLG2AV=VDf_Ab`du_8n^!Ppd-W>@$)y|~`GK=EiaEu{x* zO5d-yPgu0+jc8CIMn{Xyn>R`5GRCMxOB%g4S`;PqVH>mceEKd?%cL@NhZN2#pon#h z(~1Q@;~tM54WD5CXQNRVAw@dYrSAV2<56eE8g(&OXQS0r+*v8All|AQkjcA7!yZ(4 zTG=I$50-z7r`xUnqj8z6 z*rgefUUF#kl0u@FGzz^W5$Gk0KCiVQ_K{x-fi48P5a_2spx4?E`xtGZ(1k)53jM=T z==HNU#IA2Q#QvAi==J?3*g~WWkuF5K5b2+dNU!fV!4@iAsC1#y&wxrNJiIo<-p0Sj z0@sGve{@6aS{q^?(^?y1zidP7S{q`+;%YNYj#8In%WS%W;evHsSUAfc0=r%+7P>@H^km6zt#=0 z_v;fIV(&@5bwlj^`qYNli0JJbV&gmQ8)DbghS)W~A@;$EG|P}4-$+T30>W&UBgJpFA~EeQe!^G?+vHWi9>RtoACoeW-?qcs zzbZtr2$&>wD@leL9EZStscTGb!ep~_EDlgHd9^n;-K^TeoLLq^yH4~bB%9MSVSaxp0tPD9vW4uM`(!y2qbYGus$I^mWIl$6f=02-6xxQ1jRkdJDs zk1_L$7YlME1cAmj52Q6*jS3O=RYDO1(wNW50AAo#!ED$$Nn;9I+N>yW`PbFbCg}x# zS)GQWFfm~NVlX7Y9+nKO$Y}L0i)+{?a4c4#l#W%*HgCsRJHiGwAUcTkvQ7fOQwc_D zGV2v5&r{H$LU37`HXFUBa)3gBD^1#{UI9Cy_%b`3jJn}>Us87>XuT3XQDj{VWTn`d zt=K%<9Ma9B1)!`@8n-8cyu#j)yJ4{q1WMXG`z4-*8AGLtMNv3&PdW^eE$fRtEC#e+ zt+zhguSm+mZyDjn@9OOeJiA3^BI?CxHpi*m(In*t%p?KQUhrG^%k%)SACjj%)={b0kQJzgvk6b}1q#LPqdx(g6rp)Y%^GTtq_?PE^VkX_=5_?J%9OG`*Yo^G|m zM0w;IbM^9DAEOAi7J6X&HfmsNrUkYPC9pNq0b7O&*qUj8?YTC@Zq11FmP4br6cW9q zQRpp+KyO*}d9MwzZ)0E~(1k!30{ycQ=)E??K1N$8bfM6NLjQ0SdjG5qvHP11v4uu| z85+I6+m2g^bRp7(NEagg!x8EI{dU|!r3;lVRJsk7PWV`Dh`o)UaBhH5ZHWDcHpK3= zA@(t?wITM)HpK3=AvP?oHpG6}hSxS6EH^lC#4Y7N6L+qZ~5W8nL#O|pLv3q($?7i}9-4J`fKCvP8p5$9M z#NMw@ZHSGC-o7C=zSF)Tc28}H-SZn_AFM>P4C(QWloTmI#CADSe5YBGv~``ykyNr! zasw0+Y}ZJd0In206k(7Uoy#I91@;KzlnAd*Qv*UGZILo)B4}+%#9bsx(hVgs?Ep!E zqy|W*vl$JA=nTQwtW<*YRuTcJILFiR35^mZ2f#T`D%6Efwn*ZldPs;}e2W%iG(erA zZMQZ@Q2i-Vr({HY0(C=?KSZ(?S8d1=iIox%JcovkHt^_NEGi9>z9BgP&6E=qzGp+F zbgn7IkEPnqN+ZD)he+syHJiK5Dn%z+3Q9P5PM(N@fpup#&Q?fJWOE-;PdxST)&eOr zC}$}xC<|A^$7X}YDe53PX5+c_S7x4n$Cy3nATjRTlU9dPXNh@W-LW*D{c7Os;ekrs z|E2Nl41^V$XU{@`+Pwp2Mr+T7c3O+&;4)`MQU-H>zSSG0d9?fg_8JUfCEh(=Rx9kj8hFH zv4|*y^#bp$G3RQxOoB&o?x^x)5t33FJK^ah-0Q+t@z#sM5%?(lnjmlIL7}6!$&X1wJ7}ZbVJ;2vQBC>42lp9;zaNlQe&N_j^?#cpo3#A z;ev69D+WWeUK@uJo(4i>d=hAa1bK$hTC=%h0b;rW_MeJ%Zhb8zp_wI+Q zk46cR^kIt$!psl;s3eY`61sVI=jzTeZ&n%LDCmI;bS8pUQvk)#zNEyRH#Y+G{GDOQ$WSskMuFk=2Xh~+hV+zn}iTg%>tHYthri=G5iRGYPNK&L!{%t`DXyfJpG-)jfX$3`v4T7o_S_jo zateL4^&$rgmW)=CN+SojKPi2+-Vq-Z*$)wSjNby25Rze~#Kn@Q z-j3oWo6S7E0^v%^dG5)&5AiD^;E!QlcsD_vG6Xv(@oGl{y(SiGbOB=!5@2)+mVrNu@W19AiEumfhoSWJB;3ei5|bXe*);(mZH1!O(0G3=0>cMo!^ZD9@=Y zu!laLPVEk>fJf7mI96odLCgUS0`pLdY^AIAwooAqVZ$`ODw8SXZ=VR^Fiftu7z?IC z9FuT^8Sca0Xie01oWtH`Yu~|;s3@2vweP36^Tm)bq86UTsF*92;a0=U)?8lAs)dPK z3rnuY8u4XqB0a_kRsI{INkgx<_+StG--J+`p__PwcBs*`ff=9T>6A&Slnj$5%V;C9 z$$YS--R7K?r9D-SW37q*_!PfLq&3@<I5^D{ptn&}C84$q!ZlL$l(ho&q_IUQI5dt(5gfoJm$TS)w z9FjFX#wVgmmRL1~V-hycIL0%+6pTr?iNk%w-E8py!v8JL@Tiy(aO}adpJEA>f<xEZ?=oH<_c;tBk2d*-jSyO)*6bc+fCrH$%PGs$Zt*K5ui3zN{;vZm2*L#aOW3TAVaFG*u|C|H z8RZuT!-PaXjPZ$9ez29Hr*xQpHJh5l1_uMdg_hyRtJ$nEmRR)F5{eG3va#v(IwFS= zR62+R-?jUzPap;u&C}VlsCFE~5+-B3PX>kS*eR0f5UZo(f39KOaFUzFMepEsmN^~W z5G%5Iin+u(@^rKH$_InjFNT?sg3pFp`ItYDZtQTS**e74N;YAvmzW7@DGYPOhjid0 zan0}%<_SDSvtsK%ST#P{y6IR}Dr6(|gk@}D-8$#p{;G=F&`j)wG78L*U(~^J2OB@@ z(8atSjA9_(VY8d5J;)G_9!Jcc3S=ycRxx~7Y6NO?NVx^cR9rZPa z)%v?cbQBlS!8-Ya!SMrdjUW4!6>U z-=k=1s%Ra~Dq+{!aj>)}@Zoz}yx9(sdD5qY0I+{$zU&0_M$H&TM~ zpq1K1qQrxcvdyB7R=8dbJ>LvX9t?d_0XE+Uc8`a6DBg6rqz3GQa%Fyk zD^&(lPAD~^Z!=*crXdjC05Fyp!ouH@rw~H2BA`-7Q&pYsOLtG0BCM>Ea!KgLf`Q&$ zat${ftkU7>Mhkcp0-b@fn41=D4A;cZARR{>u<0*c( zx3LibFj7)FsqbJ^0`q({`cbcKw$5)ff`%|45oQ-Nwi${y7ijp zQ>?Wtnek9m^2rvKNg)8ej1~1pjS(v-RW7aMy|KHT5(4r zl~t1xv7BSfl4LX_ZS(!3ZL=YsOx8b1T6u_P^w%w`WVS9=WtS0L5&%I966-8x;v+Ay zB9Sy+iOFXxs7I56<0E?0uL+eVr@0v|Gfz1`#k1@6*pzHtd~z{68LdbW$!oDfD!(~? z{cI%_^B_Ec2*$7DFK4rvi>)lkfe~Vhb?_+Hv_@0h!DUR7C3EtK-uY!QmNtTzj5Ur% zbqe#tmiic*@D)RegfSQ`iJeH8Lq@hc6Ctq*vbJ6qNTj{pO*qOHHb!%a2VS;k$EpOZtkf0CC=UMod zh{XIzNj-(d`sPfWGQ{xEObQPfLU?E< zgNNrj+-hj%C5Id*Ii&c=ADfXi!3g(xX9unf0H&ofsY*D9B%a#oaFfKpsV5~i z@)DK*Ny;ce`R(&-m~jcpOHf{d@)DGnp!`o##wUo$CliwErGkv=7(SvGZtgLkgEcim zgeiJSl!w#+TogW72xLh+Bc^aQ0nS4#CfxubP!+@$!7dbFv!S`|Y=kRXzY1oSn+g38GM#c^>0OrA8w{Yi037r2oLkR<6bYJlL!^DZXt z@)E$Mz|4}Kh0)Goqy%05#hlS!pqHWAA~5JJ(9CKVZh_-6^CEzlB?8hl=9%!b8Fac> z;XvBguMn=7pHr-z`WxnfAPoU=jk{qXBqeNv3Yz3OS&t>+iM7LK2%m_=%psWhgH@56 z^$qlMlZj|qcfCKE`%ohR!Z+K zHNcoMfpPLH*o(54>UToD~ zy>=e&IK_BGP46+oN0U%0Qc;Q?V}wVuNdyRb=OrZucRt5>^!`f|(_oFnI%XbEUyagL zH%~m@;fPxDt;-kfX6*t` zC$s}gu&pxK*zU+dA2uKqgeXD8He1!0r?6r7dhca-+w3H<4r$p7a3UvTW(-5vkKPYG zhK1A6D5Eh0#8u{vB5nyQ<^M!NBsR>X5Ie|U3L^XtE459) zljV2(l;0)4C@Pxgf&)=Lvx2l8qMg^Uc5)msUqS_|K(uyP0wpam)~I=90UA~lW~+pE z42HR-D!7KdQ90<{>0Qh%cbE-%ovluj{F``kjkV^f$yt*<1=R?-PgS4AJv9NRu-?rY zk&87D#CFMis7#1;)^L!U4uEdM{m-4@Ghi?t(+S*?#@ zw^TboL?W>*M+hTlK5Z+314#G_co-ubEI#1f!UCD4Ijrt#p6FXzu(y{d{TNX^wUETq zw-LlsGdVnEh~cT36rM7K@YGBOPtSF@)zr*OPB~6;O7W3Xnv0y0Jmi$+Am=*V>M@?; zA&ZAB9Ts)^-_+q&x4#~2{H#M4^IC^n)!|le%d|S& zst&iR!>vAkxYgWxxYhivhg;35!>#7*;Z}3%aH~0cxYe9G+-lAqZZ)S4x0*OMR`<@K^>C~E^@+o+?nPGX;a2zSQ-@ncMruFYD!$WxxYe9G+-lArZuQU-G>gd} z-$)6{gL-NgmB)7y!t$j=<)o5xJY9*(OH^K>@)DJosQgb-MhVJqpI^g_OHf{d@)DGn zpu7a-f08mjK}^1wkeq}rydF;n3mRiSdEU*6G3lULS*(uPIEU5oSG^FjH#;%aFtI|Y zJuzX4U(st7ozTC8&GU;&!9+H4jUmOL*g|3{U`}D%j^&Q_)Z{Y8Pc&YQ;gAaZnwoGI z&7aKS_*d_Aq*k&JI9UxPNgJVkhzVN^5G7qpj&IQ8Vu?kxCt;XGZ6ph+L%j$A*o19_ z0Vq3y@o0Y~1Og}H+>%ot4?tbXx*gVe7VLa652UIx`%N|8^R}DEa}CT zRM%r5bIh|=!D!XpgcMwPGzvyS3hqfaKq@ezkCno`a4bo}2^pw*=us%=2it!eZ#G7qikNk~N6cwiyGj#P*PTNIYjbLUo^MSBXfS z%vA0Zp5vCiuJ6 za=VGqq_+jA;QAp}iZzwciD<(r+R>`5W-6{8N58#;Z{pC zFS+D6$tA@{E@>`uN%D|OmV;dDaI1(*#X}YkSv+L%ki|o`rH$euZ=YYol#7cjF0#1D z;v$QS{7u^U1U_Dqga9$>Jr8mn>egc*(y^9K}r*H(A_dag$HV zO(r5;9d30SE%4+L3s8q!)!|mZahp2a>h`=;ch`8LI^3!bxB49mQ-@o{o$GL`I^3$& zZ|ZQX+h47}tHZ78aI3#A)9P@mI^3!bxBB?uR%`3wR_nJOZndTkw_3A@Tdk?Xt=8<} zR%_~Tt2KML)tWloYRw*QwWbcYTGNMH-8+ZY!>#VuCl0r|7g?=`Tivfu9c~pFsr_)P z_)h!bR%_~Tt2KYP)q`7a7Lz}|krI>#71J&%kMAUem9X zT}UkNlov`$J>#qeHT>oqdhX97L94xfp zvOwa5LqWDih3V~}EI7|~3UfXhNi33$kY;_D-rs5J2IhevNBY9ud7_I+x=FSYdY;1J z^afz-*c39E2V5D~G$U0nGRFVC>QqTWuSsAq0tmYGV#!(W(Y5YMVC^B+Q6$k4<0s*3 zC%_&nt0%SpO9^uO)@BqEMm^ZCEC%sPtcb~v@f4j)F|8Yx2yKn0AT3C6IEU-(RvhsO zofhkhjZrSCkFgbG9ww`5>6Z8w77Hb>P6*31@=)ZYB|r)&MlR9j)mD=_*Sf>b$}z3= z!DayKvhs?sF_|Z>)^Cy42&-4K7FQc7bsxgg7{A_#Nu0AT;bbK(UVpKX5B9sHWkxFz zyb&_k)zy?xot06$rMrs}ixOv>=uS^fN;EqsAzw_qt{6gBI>qc!Q1=!|um=@Ntfq-1 z8NW+6x;L7LV>U7Ez@-Klwhk_IP*sNK-{48pan6%5H2;vii=Y0VouaXSj?dZ z)jMu&gnCo`5Z0*o!dl_e+f3?>q*nUTk*n=^CmQcf4Y!-{ga(CzWib5aY81BQ4_l1k zZ1l8*+5E1dN5V4kO`?r$qQKJ5hHVJHH00(LDr0hGDKuHxON^PUL_Vb+IM_4N9+AU@y^CR+twhx`+bH+xrpUiV5 zeF9K1vVFA5LBE1k5Qp&^>OC@rA-k*^UWUJ{R*Q}ndB_(;1F{}<8X0Xi!hEsnWw85T zOV|S|Lfb@rE8!+p3VuOLM5G#HX7~gj$6AO&*vV*X+IJr%inkV$c>6Yjcxxtyw+u17 zHIu?yh7jJG$>8m|4!7ExdC4uuNp2}Va!YfOTat&|vK-`Ihg&_yQ#@qxki|n54_Q29 zW7;S#^7grbU&Tch7g=0nagoJE{w8gF0w1}*Io#^YILZCp0Z+wC7B5-6Wbu;4OBOHr zmx-ge$>Ju9n=Ed!xXGvECKFM<4!63E)=Z}kx2nUf{?cvgaI4$%!U$aBiRy5xI^61a zEKD746?d+~t?F>AR==skt!{rk*!Zo3sKc%5aI61arq$tAb+}a>ZuRlQt@hT#t@dv{ z+-gr9Znb9*x7t&OTkYAyt@hO6R(tkvt37qN)t)`vYEK<*wWklax_1t(hg;pRPaJM_ zFS1$>x4K`SI@~HUQv2an@tyX=t@hO6R(t+%tB05Z(Q5^~*zFMv$WhJ&%1cp_yCdEsPi4*yCpKsmIAmCC;i zzrxb+G9n~73wy?Yl~q}NvK#B($I43Q*vATL9a%eTG_Ix~eDS!%>noC1L_Z?i%gtFN>y1Wud6iM9rMTfk=;?5x{!$C!y3#00$LON!3QxOaa0& z9^+rM8w7Qp^kP8{E7rR(mzZGm9T-AyaPMIK6Vwk~=3<%`MxxhfQ{T}!VX&8&z18N# z-z_|up{>?g3Toy4bIhcAGE%WoJeVN?W3unEY7{a`u-uI*n*zjoT)j_mjQgzCiDKp$ zzQ1GAUsq0PL#4bKHNkq}vU)K%GjE+MYr%8vMhH&Ub?JT1OU$I+E_sQ0AV{!YdVjUK z{%F9zUZ3v3Ho=Krg!Dz~Bjn66lM+=LX~0}b8aK!MFe-uTUCbdii3f>_vCbQNrf{Q+ z6{TaF7U(Heq*#HbJ6JEfTk$K(Z;ln|ZLJ4`^JVh{!ejg*S577kRb)VF%Ubi)CYuyS zh3y&k!1zg?XA|o#Ms{`9CxM#iozGi5J2R$tg)%2ryeo}Z3c_;-n;+ud!Du&%Da0Kr z8BBH|F|d&*db>N(kHP`8fWpdJB|Ke?g5e^QQN66Pq&#EXS<+eiE9HjAF{0>8!I(%I zuY~lQwT5bIwwQm)E7C7mix35pDyfnNf=J8f;8lJ6|7zJs5+(oq6t>YDHo)3RE>2<2 zcrIZ@LVB!8r8Ll6Z;gzmF_Q4u@E%Dmrg-YnN=^!D6|+=Hd-y_cG9P7=HRkhdcf*Fy z*02)I{2k2L2IatN^rPrR{Ai1@>CN!uXd^SFXQW&;Vx5?LwGAXvVq)ip$EZ2BqE&A@ zrs2R(4M!njZzejV#?YIXDURl_-8wZFiIZXw%>vW7sSPGM`*OT7;P_zDYztC2)+{#(txDJfyBqaFBf+ZuJ;X@sPzs77tlG zWbu%VX`{Hv+vf(y6c<@sWO0$jMHUzNo3!x>d}ROTaI4}ZznGKk-yQN*ykzl`#Y+}1 zS-fQNl7E>vikmEMvbf3OCZC9#OhmUj-0C*kB^Id;x2nUf{?cvgaI4$%0ySLYiRy5x zI^61aEKD746?d+~t?F>AR==skt!{rk*!Wq8F6Olkx2nUf-j-=~xK$l)Rfk)B_;4%S zs71Hjf9K&=cWG#&ez{K`Zgo$>jXLH&dAQY`YHrjs_sPSp?m$o5;a2ynn-90TN7}Z- zt?pO1A8z&N92yU|dR*UrxYeV`YCPQPaed}+E6YgDhg;cqnh&?S>kS%3ZtKid{ z#pI7~qy*(bzqE_W<2wmq`B0*AQpq`I z3Cc@QUV`#JNg1CYCLc^lj%^Rd>oQ}C4^~pL7E(uz;Ug-F_OKsp32$Y^DJd26DI~5o zlg3EvmAI^|NiQf?^-5D?!SwoF=HGOSjC?XaKG{OVJwhNR7MP6bvLz}(I|seE}|B3HL4GKol|^El{gR}eW8K*8iP3*!B21d zBMjU9NwA{)t$*@_kCRa|Uai*VxA>Oci%Du_RJbw@!LJWtQ0kVf$`gc);aIndNiv74 zl|_gWG#ePQl~jYJ6cR7NQUotahG4M8NSGPABGz=YaK2fAqtL?mDcR^zsKhZ(db=*> z0M)xnB56>h`|>sCcQUE@jh zrfw@|WUEHtGv|_$Gh?>*iNXX+R?|bg!aiqvc8^+CHnOtXJiyADF9^w7Qc2^L*c%@w z7w|+{U%bYWr=&<0g-#}BnT-fKTURa3BO~{%0$r@&U>JtVLrcXHW-YdM)|caPy{(Ae zm223W-i}OU1Ff`@Qv&ZHMks2V&p|ywDZuAgJDzlj`wQ2x$mxP!;+x)Qevbcp$=RDC zl1L@m)7pjAN>1rUiLOLNqV61)EJ+LT&1wMd*_-7rmZLXcUozJ*R!X8=!+r5_$wP<$ zmJyB?baQ8uzW3icZ;xULSjs>7{X-KGw=x;-!X{~AwJhg;R*R=;Cm>Ts*La~*C~hg-G!O&xA^ z`|H8R&pLE5uXVUp9d7luOsm7K>Ts(%-0I_pTaB%UTaDj(xYd|C+-l4oZZ)P3w;HpD zTaBs1t;X!(R%7aLt1)}H)tEZmYD^z)b?+Qn54XBspE%s=USzc%Zgsytb+}bzr1rzD z;ydk!TaBs1t;YP}Ru7K8Sxo-;MoLf~luo;-Jie0G0L{2FFlg7OlSm!P}^OGm1ijkb~`$tw=8L#chN(qSoF2#9<2X3nHCDnSItlJFhvJ_MdFOrEr`SU?gC zNsT~?p3H$rfQ;W%2BcOcdB#b?1ZH1jJ&&dw0iqM6zlKR-+Vozki%BxL3nodJ#958{ zJvy0Yb+q0uii^zQQY2W(6b&YHy@sT#m-t=1?3$oRaH9I&!i^vRrT*CBx2W+2oX;_G zz5jWSRlt2&HIgC5ONhei=m5Azce5EgTA4$Y$|tzHDq>0ug8C3^hXw>X#z9jDiS<@U z3LK;LuoF5Y0occ|E5>=W&gN>hzbHBU#UT8}v^mTG#RzpVYrPvyI$A0q>7A|a9*ibK z-qBlkB~h}4YCgfQC1=8VG7NyZrFis>0VKfDIzLjk-sy-}QvTqlMwKg89Ao^0 zNot7b8m|P{6iO;Et+bS7&hhWjNEK*M;=s|oPwyPXy4JYQZg>wXOAMsI?>!$~ZPmzJ z%o|Ok_qi!abLF7~a+XijT97%rMW+U-|c7K{0_XoqM zM$0cJx05YaM?~lpSN7I`Qo0h`^;UDx7qb>xc>f-NI1`?FSrKX}dHT&VY^sZlW-x8nfw!x1$ ze>AVr+n24jBtmK<4Rs5@MHC&vdaq_z#0@@?sF7-lXTgT?mq(nue^;`ZHLj!q(tDb@ zo@mdy@GYuDMrCN|WM~%k40b47&AeE7pJvpMGqDzHJP|8u0UDIT(T z$l@W3hb$hlF>MqVdHcM$$l@Z4i!3g(xX8A&@dJu9n=Ed!xXGvHCKD0A4!63Ec8Q6u!>#IYtG{%cI^62^yf6aS zc%nMost&jM9Sc*3Tg9F0aH~4ps?~4maI4#24>o?*p^JH~!>#IYtG8uZ9d1>JTh-xK zA3xk`Zav&;{?@~-=G5UTru zyM}O*pbySSlco(%mv)k(!nh5w5tpz-y&4tN{t|YD&5yZ>b!fHd7k)8=-_qRE!3Nv${pdj2z%6N#8 zGr@y7w>lMq3Y8$nZe+HEY9^wk#OREM<(>zFW=AVYm@7g!AweQ$<^hU<(ONApdcKPp zfTZuOSiqGDKa5aa7o+N9RyA6Ju^BRnODWDO-_3wz0`tMcRrhwZlp7a!$IVujr#{3} zOO|cPT%bOs-xh04$JSYI$BLW{1Grd!zZ;goxA=9+CG3;uB@B<|%GAgdmHZ0foLQAM z-u|yLjnadpf!%g7=E>+YY)Qe@s3n4#KB1sHhg}hJB$WU)nc};v1x3m$6`qE;P%P-z zZ`Y$p;u=Uv>9F`+0zb(OAE(=x<9R0&tYd*H0Z7Xx^gS9Xz?GtLOcc#8@}zo;cpvw~ zqc`(7f+gh)B{p4VXXPgzO|-e1H&MJy)(hf~7wcb%W0D6kt4sW!a6VbH!rD#NLvMz2 zV1W|%LQl~nUhU~jq`jDR9jtXYS_wZJR;PE=vlh%D1%k@2bcvZEsS1OkkYu(EO}SXB$I9|_l9oUdTl=WEXVyMgi~=u|=mrd94QoNNCg}nZ zdx?=x*3d}eMp;VMv+|r+L7coA=0T=7T8k`{%Md=IqHqXnosYKV0oqV)ip5OYK}IEV z^%|B#-s!By=*?D%(!!Pbl_lnUv|^2j&HqmpX_@Dfm0h4#vz7c<9kmb{L0b%Lb;#x# z6;%Xy+aB}NnbnEP$3CxN2~yy)j>oVZ**|gV7^?=TAheaarE)MuuzZ{~eGsAddorH0 zSvWEIy`GoMezy8bahs|GZ>63wJM64!7%ZA`rD_S{a~HqDOcEOj~w(#J>`f z9%H?*`PqORie-uBj`542+NwgQj}pa83rW0u8$rA@lfz4f7+#u5;Uz-|FU@4|@?3{o zEzP{-lH(+o6d$>yxyU8SLoQhka;?Ly9^)w5>{2HcQTx4;P z#YGkuSzP3A(#9w7k?Whot%{TUL{4&jcbHf4lEq6FFIl`~@sh<${$=7QZnC(^;wFom z{FiZ)i3nJSTbcP%h>@n~w9a8Db+}a>ZuM}RI^62^yhP<|JW(BPRfk*sj)keit>Vsg zxK$l))#^8OxYg~i2OGaZvAkxYgQvxYhcthg+?w!>!ir z;Z|$vaH}C~E^@+o+?nPGX;a2zS zQ-@ncMruFYD!$WxxYe3E+-l7qZuQ{Yo5kdhZ=?j}LD95}%Hul;Vfj{~a#G1To~}gY zB`Pmbd5OwPRQ@L^qXgx*&#z&|B`7aJc?rr(P+o%aKS>#%AST~TNUn%F#Ir-JOQ&i2 zSrvr#f66ea4w*?T!S28s9jvf{#USRdmSsBABTHRq?EseJS{C^%k%1V90xm&%d@Gyo^U#;!CnonC}a4rp1OC5eb-q^`V#4Uzy=&knJeg0UHGAET0RdRbyH*Cy_EX(bblsDV-*BU;fpqkrGXoCK;!J z)BgTZ$>o7#Npw{1mzZrFqPISV!mT&Tg9M^qC$ZpgjDb)}Z*&fWWo9Jp!-OfpPH|^a z1W$Ca!bFngKCDhMIU|E+3x|3mw_zTgt=h@RCfNq#p}XC~HY5k7bXsHeg)6vyVoQ{D zORTbQx)_}dxs8fY#ODX=st?v>N&`ihCtY`8Z#=IgCd{pMT8#5*VM%YeJjM#1tX#d? z49MT<-I*o2Qlr(J2+~FZ3*;nTe0=aAXXQEJ6Dx&|R`bEHn2nt+eTgcyZ%G7!wVY!- zA|o?OU;=h{}$U+$nC+n=76xF`O zzj)2raWY$x#iT%L*I3Ol>>M(EH3{y~nqx{!p;MF(OU&eIvEpd)f$~SC@hN6+v0ss_ zh7p1nnzj+YJ6roMn)DDWA`z1{5X5}_76>T+r~JVqrkG)#5t-Ly*+f)3ZO18Qc=X1F z!Wq=$6!#Ho*vFio4Qrv8nhdd~MZjB`RjQiJNLpF}<#EFxd&9$M@;1xz+Hq!nHQY{{=&X$<{%DWo!RF@}R&lk>R9dx5%+hSO3f=|+Jsaep z_qdxq%i5VA8c;k43!z###ghubWiuFArjO@6oBfj)&Q|eB}P-aI4}Zzkrk6-yM2Y zykzl`#Y+}1S-fQNl7E>vikmEMvbf3OCZCj>Ohmdm-0C*kC7h%Vx2nUf{?cvgaI4$% z649^mM0L1T9d7kI7N!ojiaXcgR&}^ltKZb&R=2+%Z2YW47xP+&Th-xKZ_Bhg+^P<@ zs>7{5ez?`%dbrj8t%qCfsl%=I?BP~>>Ts()d$`q}I^1f{9&WX#4!7E~hg#u8 z;a2y~q4jX9`}K*#t?oru>)}@S>r;nYMMi2r+$z4)ez?`1I^1f{A8z&F)|1DZ0O@y(# zL|Wx3Qv?&=)TCIEc{GMgFLk9L5Kce3Qoli`f3&B;FnY&!At5^&|7kNCz zR7p&HiYa9BFfqMP71!Zgmfi_qggxqaLIo*^&lhu}-tNrwkldIy={SH7ZzCsBu#8H) zbfwgoEFERS7$#3b=356#6u2fqaWEo@l+qatthckC!%QShvT6~UbT zaXogm* z#@UJp+22a6mkge)yco!@9G+Tg-sA z9}si481vb@Nn(1##`N}IeA5s$mD`kr_{$ddse+wy<`CE5Wq8(NGs&;;dH0C}I>cY4@iYr(Y+eNa_hB>rLnzU` zddD+a>|_?DQrgN)?jR!c9M3Dt*A$3U0<>KC7vmwGW9_}6lKjfqVh&IGib}PaQBg_F zV2zZDAP7=$ojL3W8Gx`clUt}AcV(;946NqCuuQU{2z1Mdl93O0kGR_gayKMbTq)$3 z!tE3`hUMdHo7tq~OUyZ?AKr1cyKS)|tUHl}#!)3It3yG`8Zp}joTzHL#Hg^$)vWsH zG0N&L*_f56o3&gALtd#66wk-F8+J~PW<12PqeX05XR_PLP+pWGDBl|apTNNjnnz-U6 ziNNvbf3rAUBzal6AOMOmQ7yU;_Sb`rpLOVBUh8nHI^61QnO28e)!|lkxYdUb zx5ABDbj$sB9&UA)hBoS#`{dzP_axk?WA2lOTivPVMm=+%JlyII^t2srb-%j#aI1Ty zZ9ClRes%ldR*%l1@o=lh_3ejSJ<x!>u0IXAZZrjMRL%m3^oAaI3rCpixBLrw_LZ zUcOmO{`f{pP#!c+yQnR;5|x*zyhP=Hk}^tAe*63yW?X{u z5|o#qyaeSXDF2g`@d;w`!Gz?jzQ1f&dQa@cicg}=?s{QthHPbCPf>xmLTKa~cM~eT z#jlWS^dM_kSG=|^@n|mfCJkN<)D*pQh@Ya$z>rZHaJ}dXRHP_nc+{!fC%0FPEB zktA0)F(Z06cP7(Q=)0uWIX)p^3#d2E1tDa$uy-->>%}zpRDY`p;dnX-Qqc-aJbPzw ztjObII0{v^1ncyX27mhEU%Y=h#8RJJByG^Rt~7yMXY$sosX}&3q?;!VT$Y;gY-V`4 zJKTL9I-`WBd|5#(XEC7H$s<;CwLVqr!nY`S-tCJZ)hmn<5^yZ25Yh`ow2@ZoP|f!E zS1%hs#YmXjv%%OBF%r5=;X+{3JGA+hjfZ*AtILPD|JkT6(R@qHp*nQ~=G8M z8RXBXxSqZf8$MYQW`0E9SobDzw#}Q~o6R~JgfGdTQSlPE>|xs!7wVAs+=?I<8I#N< zWWR>BAC2_TtK%;*lcdnq%1IPVBFRaiW6Zy7(&GkmZV6|#%^_#Q9w?JnqcWh`JNs*I zULc~tXg1QGp zMovjC8Vx(oCDm6lZ)S{`sRU)s4Y`Bjh2FQf5(Weg(TwQ9DQr($Q0BPX)mD(}g_Ka( zVzEQ~;%beciU>RfoQ9HZyU)PAganhrHc0O@4OjE-i=}b8?URWSu*}6!H!pH~YrjMl zVn16vDfV!*4Iz#}UJdi;E#@-@#g=2(q)>+;ESA*=TN2)L2&K_;HZpr>c(%k0TU^OJUo0P8ES9R`0z2%(wwX7HiEOi+kW0RM3|pcO++8wuiE&C^ zY4komd$8>oli}H`#YSzfpb_MA@-iz$uD8rS*i%m)w~2v3nb-2~g z%u5bAPI5@`kwcn`9FjcbkmVr9I^60pp5h^khb$hlc*x=*8`DN{k+;vUVamlt78hAu zWO0$jMgAsjd;%XizB%0LU&cv}?~b4US(m9c~qOuEVYBaI03o zsl%;qe?8dvS%)s>wGOwc!>!(yX?3_&9d1>JTYda+tFiTPtMOY8w;EH2TaDSnt;W>h zR%7;Xt1)%B)tEipYD^t&HD(XD8dHZ`jp@U!?wv#H;a2zS6Ng*fi>%het?t*S4!4So z)PA^Ce5d_zt1)%B)tEor>cRLoi^(6~ND0b=AZizt$9EFK@~K4Sq>^(yU5Uy|R9>R; z5|x*z{7+Iw3CeGuU&D+`P+o%a5|o#qyaeTck}^I)Og@>A9IwIOXG5;X48JhFetR%W zG>3sOJ$e`5B~1QosQ_n%WV;wJzF2~q3_PPwVKD_m8qG{#CJgHxq*QiXgNv}>V>qh> z%3FN*V$d|Mup5}SS_g1&s=}yHe`lmWqsXZ3zIt~e1F8Z?JX>D~;13X}aBhycTJi+C zmrT>(RmmDz7fXGZ{Ael|41v(K84V=yXcyxIKD=75hFeH1N4M0)uS>bZ$~x42jL}km z5grKb1bg}hoJlY4zQlMaHzeXGEdvRUaR(7-);;u=MyNV@M!ivzq%_9N(-j>Igcf*z zin}oZunr& zXrvxbbg+5$*g{Xtob(3alkkPg&>t|vMhL2}?QK-p6)Db0m7^(`B*ip50Bbo|+CN$H zTx=tXHh7riSZVwcpGc5w0vgs!azP``CMzp0CV9O&cN#nI_ zo7iqi_-I0CFc`h=o|HwQXXWi+bP(6m263f?)|P{grtDL6;{QZKv$vC#6|DPaQBL`S zI}b6>CnI(!Jv=7!yeGq`W<#wGhLtYs_AW+P5jhuAN0M8~anM#oFm3WNY>a0-JMB5e znu0!3{4#rL;P58=2xMXo%eh*-y*}g>_oB78JMSL5h*4zcYgm+;Z=wg@WEtm`n8*Hxig>P+EK9e7rTVa0ZuuPhA=4v#Q@oF3ABo;i!{5!Ep0nV5~_<$3zTYiz} zRcx`Ce6iZ#YR!|j<(OoN-_ld#zsw9(8Myc=FmdBG? zqjs@h>}?B!T4&P>1Jwwp^frPgr7gBN)*If>_2f13CUKq&qGrgbTES3NMt91^c6 z+p%zM0Hdy0V$}xQ6rdF(Cg5eP;4xN^rv^CT-@$D1WR-)O*ZIE6A0vvV7Ls`SHiCF+ zCWogCF+4Ss!c&G2o|?(v>A4QKnwojZDaT1pDL!&abCFY$hn%t;WGDBj-1VTYU;AIlntns(8ubC5x9V zUb1+};wAqwaTGUM++=Z+#Z4AB`LE;?8xrRUK~C>Nj<`)$Okb8^7UAb+}a>ZuP&*v^w0X4!5eq ztv-IZ)!cfx)%>l8Tg|D%t>*0ER&(lbt2ukP)toxqYR(>RHKz`@nzM&n&8fq!=JerK z_s*g9aI5?EiNme#MON$KR`=^uhg(HPYCqg6zSDlV)toxqYR(^S_0S$Pi^(6~ND0b= zs%jUN$9EFK@})%Oq>^(yU5Uy|R9>R;5|x*z{7+Iw3CeGuU&D+`P+o%a5|o#qyaeTc zk}^I)Oum?qTz*7hMoYqT-DXK~ehvF1+AmgI9Ukb={aSQ=D-nc{I* zHyOG*pU87OgyebL;TR81aP6#urV@mDCv{6aHry%L~qCJVzwofJe$!S z&6F@wYTiSbDwKyP5<&&PevI);M7M;Q?*;}-S#yjh6@7-g(6`}IbUeoxKmX_c-aATX zM3TRajS_~C+*zNYH%cC2y{Ji-BUcZ#DPXi62i5iVvn`njY!$d{uOc{o38QQlUeW4`Ww&% zo>9~~f29oPK30ToMxR0B6F8X%ykM}RyR&4)sE%e2>ez@R_M{>%##jrzEt&L-OGbA`X$NZC^t|l?343yN?3JszMU7AW2e4kiE!ldxWN35_t7`5722{tL`@NPvC&d)s7%IlPpPEw zN;c24P{JQf_T9>dltcWBzn;%^*MoGnKaZK$F zBb>s{`CK$3S%Vm5(Y`Y}w6_$kw_B50ux-9;1XO3pnIve$hc#^AY^A-+>A5qRh0M5E zL(CWsMmbWdUk&S`(ZTj;WhCh*2aPu8l-OfDwHlf}X4TOnG6JOyUW`Ray@>zPjA9Q< zSOR#VHbijEDQt;&sF@)m@mu7DEq;+WbG7P%k?T#^5-;CI5HHQ-@RA{h zmu6CU$q>RzGa0-**Wp%6GcUR1ILRf&M=ohDa!K-#OO}IN>u{^bc#4NC9#_O+tlG!x96o2xyBRK z;Z}9H)$drCI@~JmT!&lL;a07FQ-@pK{(7+SvkqO%YaMP?hg-cZ)9P@mI^3!bxBB?u zR%`3wR_nJOZndTkw_3A@Tdk?Xt=8<}R%_~Tt2KML)tWloYRw*QwWbcYTGNMH-8+ZY z!>#VuCl0r|7g?=`Tivfu9c~pFsr_)P_)h!bR%_~Tt2KYP)q{m^7Lz}|krI>#Y11w$ zkMAUeM4JXhv#GNMAW6sSI+2D$)#j zv~ExDEG2kTn_D;`u#s4}Qg5vzB-jY`ZrF3&N2K3izeuPU&5$qQphuG?;t*0^SQmIS zppg(bm|K&S6bwkGEbbG$%r@HU!^0vr#bx1OzA#jmksy;pSztL9g@^U-OL zJ}gjz8%PzxJeF_0tO`%?60G+Wqa9sx4W40otKA5YqmwNbKZRQ`KO`KwNlHKKhM6m+ zcc?S#Ry#{pFU3wGX}l79GoNY&rm$N)RPQLIjN;#8{3~G%B_7cUECkHYN+C%8$y9IP z85D^s-kB4+f65b9hv?dcJ!@-$mDS)bPNq@P&Q@a2UhEiAc{OiZO$SLh{OztXf-s8vXRVqHWE@;GSPrceTey|5!oC!qCH~v z_E>A`fx$5h%R#hp%9xL`^zQZCK}9Z@%_*$zVx{+D*W=ejMd5{)SSg-G@yfOjoUBwN zqs=zY6#fU>I&w0YgxEzqM<2>PwSCU=&cSLeq0wM_SPu4PB5?d&O`gFOco1GgMD;gq zQ)5V%YM7tE2I?`3W*RMXdk%ZktTI0){8q7ih&zD7Vnsyn!7_-~MXSYLk;#X63iA8K zfRNoJbplS#F^0ip?RQCEo+#d0NaF3=2;!}o9Nsd-@YYNUZy7>(YbJxY=Q`YKYvv`l z94EP@_{c5IMQ%wRa?5g%dmV1|7*Fw##X}YkSv+L%kd0}hxX9b*R@@gCSzKgsk;O$8 z7x|mC@d;?8xrRUK~C z>Nj<`)$Okb8^3|nb+}a>ZuP&*v^w0X4!5eqtv-IZ)!urz)&8xATkWaCt@iBUR(tAj zt37+T)t)-sYR?{SwWkiZ+OvmS?Wx19_VnRa_s*g9aI5?EiNme#MON$KR`=^uhg(HP zYCqg6zSDlV)t)-sYR?~T^#sc!s-&nj;^FPi1%#JtU^~8v!Qn;vrSF^)m6^Zl%Fwq5+ZER>lf}pmL|Dxtdj2w?`?&+(O;6UV4uy^z}7X zknI_=?USvkB}2VenUa&4t;<)CrpU$G_po97owfEJSL70RBk-GA zjflZhu)d6Tx9(PwePT7UvBwN+pA|^M9P{vkE+mr1D``6ESKdYl z%*D#I#ac8GrzYjav-A|iWTMLLbE5spunKMMpgcT~%;uX2iiZa^$$<}uxaDz=fqFIPU%;Z`s0 zYa1{5a%F;(q?K#sBe^=mMJnqz^N_ke!9n(QxYc7k#X}YkSv+L%ki|nbrj6nvZ=YYo zl#7cjF0#1D;v$QS{7u^U1U|BVbGTJ;l7Ewv?B5-mRlH>JlEq6FFIl`~@sfX;IEtGr zZnC(^;wJya++-pe*5OvS(NYLoVOxh=)!|mZahp2a>h`=a0@rw=I^3!bxB49mQ-@o{ zo$GL`I^3$&Z|ZQX+g}ehe%8VI+&bK<4!3$+rq$tAb+}a>ZuQ~At#G3j-E#k(hg;pH zp^f_GK6$v+Jqb7JnET}6R(GnoQP12b54XAlJ#B|u-LGyw-0B`_+YYz7U)_GV)uVH0 zJlyJWef!~7k0Pt_aI44lnZvCtBQ+mxW#4H&-0H43XcUq6>BFspe{U9(KfaL?lm}hY zE-H`jB!uNdiONYO=Xkmjm6xczMCBzaFH!lQq>K`j-#)*F8JD2E1mz_tFF|<;%Ks!~ ze1e#KFd@0Hazni+lO{vS^!mP&ebR>oQYusS!vMdma$+zp!dBN};arkpa}Hd5vN}$1 zG0SKvln2@@R4WJ(DlijVe2#|}tY}bKZ(*LQmP9Qf*%FJa_XA(TSg2(PA?msgVQ8WR z35sY6EEI7!>g9ulH-YEO02Rt1o_#iGlUg1#rw|w|cq_q@#t9))EVVx0VqsMaAL17` z>#h`-0YSHTI)bz$h?ZI*8dx=nA-nkeXxa+N@%io;GbUnUh))Iszm+u1HmFZYn*>q4 z`*)5jDMmzuV+ohI|7e{(1x{}OHg*ExEc%@FBDhi%^zn--Th>@3y)AYQOHf~hV^QE7 z;{W?Y!1}-phOkeHG71w?)@t;Px?2;4QyRG5N<@#TgjA>!{Ki;KCGaU`i5UO`P<2m# z#(H7lbIb`(sC_pZT1gN7m`V8Qo!itd)i-aXuA)t3PckwxKfW*kyghOC0Tl_njuzoRl{b*QDUaXm*fWkw2BLsPBez7yuXSe2NHR58qq>{!f0XAdf zsj)o@sNKZh>h175{F*3=N9-|U!XfY%yq+flJ%WCrP@ThuPv$!=nPyIyL(yN933xGO zHRC55<6lNCO3GuNPShn=s*%FRjJ_j362rNhzuSB@?1vmG)t;kPdpsRhH(SniA;ZB+ zJPKinBWNOtet2jXYeW$=T2mr{hGnsf%?ZACum%?|(5hKhV$Lb9dyDOhp?b547LHb0 zj@Aq@lUNQbKA0$11h18l{MOk}5aFgoQNvx->QQhJhlzoB{Ut1oNGrKGMez`}Ed-QI zdWzpV*mx$>x3cbzwu(5#FNg^quZYry8;O?mNNagh!h6GeW@~!zN@9-Qjm`hbYs4H! zlGa$S#TpTnJu9n=Eef$8wX2 zXkLd~g^AbUR&}^lqubQsR=4Mc5xB+^)!|lkxYh4im^$1l?p%jk)!|mHep82A-Tr#8 z@v{zH%xfKPRfk)>Ez|07t2*4O4!8RF;Z|eo;a20f9&Rz{b;Z|en zaH}zUxYd|C+-l4oZZ)P3w;I!jTirW{*2Ast*C!6Qx))ikhg;pRPaSR*8L9nntN2d) z;Z|enaH}zYxYa{H&@3i@d?O_&54x#cR36_+2+OAum6J-&@pL6BFHw1k%1cyUqVhjU z86_yceSQryE_-O*u-PHJY5wZ#xjKovry2SdUNI!ZigFjJp&=+ zONwJb^kSM6ufD0679&IzJtll`4(+I9LcI#1hE$@^GVOumP?)8kwb_Me?y8NK_g<1ogP3 z6w)|rLBS;|c#5aio32UVef*VKWz2g2CBFz1O@iY7YuFn$KicYZjowa-oh&gbb*@}< zh*drq`2~qB@@2Exqi-On8wI@?d7{2yvu81wT!KK-JDx@HIET$M!+PJiDWtF;zN>ea z61oUlQ`~Jg2%La@veYD^7~v>I%EheLdO^KK6-(%2#`M=i%=}`%%i7^nN@bS5CiB6? zNI)!kwT^sr^4y*dbU{yT-LqS`$|WnKR2r~GM3QUFHnSno#3^Q58oep(9N)oPS5FtW zZ&5f)YSV{>yBvzts-!_@xyPuE)?|nlVH`0tKAvqVeP4ocoVFeB0V3h~MifY4#$ws)3-n&jgO3bw0 z{b(C1Mk@dpi+FsiGvX24;$+wxZ7WZwd_jQ>L5xQmmd2C1+=e(dTA|H~2%obVMtDHM zJ6Z-`ttq4(Avcko@iI~E-e3{mtY*;L$PZz?C&Lm%PoHC+iH9_8i(!-63SyEkycGaI z>eL}tM46NoAwpi`NhL)gdQ(D|HB)!IFuMqNcH4>c(@-m1x^z%*?^cVX_-fqzdpD z_M>VOKea7?#DU2XO#^ADMyMgR83~W0<{`o?G1}3#u}qI$qYteyUa)+WD4tqK;_2H6 z;;ES&o-)Mn)JzIb8A5n!CWEKvI^1e%<|U^bCpo3~$SKW5PDvhe%5so%9c~p-w|Gca zt$0XkgW@5H1I0rY5Ba~+Msbn1&#z(1#YGkuSzKgsk;O&+CT)BIA347{-0EMob#=H^9d6a?Hg&kw z?Rl+Ns>7}7aI3#&Vd`+JxN{wDRfk)(`b`~fb^GhV#?Lw!PE?0m)!|le%d|S&st&iR z!>vAkxYgWxxYhivhg;35!>#7*;Z}3%aH~0cxYe9G+-lAqZZ)S4x0*OM zR`<@K^>C~E^@+o+?nPGX;a2zSQ-@ncMruFYD!$WxxYe9G+-lArZuMaKo5kdhZ=?j} zK?=2t%Hul;Vfj*`a#G1To~}gYB`Pmbd5OwPRQ@L^qXgx*&#z&|B`7aJc?rr(P+o%a zKS>#%ASPc-NRDktaYY8fJFp5XGFc0~$PwEf;@{3%0IY~OM$`pOCT<9qcm9BRIEBRy zrrjp;NS8x-OzVUt?6FcrIU=OkG@`3vlFGB>i!C*2E=i}OT8t2Zh8QgUs*9qoq3Xnt zc|>45ri8m$S|;sF)nc$HJrKXXnL0yIZXc#ceZ9Dt*o>DXpgIUjkdS5)zQrbNF%Xw0 zC8SZ)jTV5Z`YB#~5pWku36l9{1lnR94E4L-t8Afkw^>!XVD|bL34xOZm!8PFB1#6H zkyOC5hz>KLolg2>JqmggewWc6oLoJG(}=QR&bzo?Z|&wOwz$8Hmozelv3EuZj#jht zf9yvB1-cv)TT|&f<%C<1;v_<2W^h5HDD@8EbIce4lGI91z`U&%5_nz$aBl&7H&UG^ z#d2ofPeR{j<<-ghQ5CJs(j3ozuu&~maH%)#!VX=CEBOl{pOB0_`z{v)*Fiq6R)*s* zlM!}Un!h(&!f3Nz{E^78+Dy{BtTqN_j{*(gpScwcN)c!MmIR!1NTgG2&&bWie1Wx~ zfE~?>gfw)q7J94b99Bd)m*w++^3M`$gavj+K=IU0<52R`Yx1w&`D%9{A#3xA(I%r| zS9(jfdA-mJN*cqK7dCBSQF`<4C9a{BWF!YG+=wBYp^Ux7I+aCcOM3G*WtY)Y zvppj;6!uIhq;`<@#Ty!WamzI-ewVOJo|^ActO=jM-^qHc7v4v^L&=7{5y1?r7@Rsk z#P!&T1P?|?GADXByGdq*#u?&;jfwc4Vr<&}bhK5lja6zH8QbmuM=R2a$w#9iX*i@a z#ZSrROIQmrd^HqD2otS5+0aI)+)bgxug@``6lH_OH{o7n78)0x)Ug@!-_@czk(~LY zEf9uxju{47B%aK+34-{4Fx;2VsgC(|;)b?Au`Z6Zfl4xmR*!)~X>(B*Ho!`;%FGO& z<(umUYvz>44bAd**K3;=b4xa%vNAkOZ8y1qXJOUIN26VDv5{z_R&|UumCVgDkz_3f z2@v;R$ONx(N(p=<{olNImgqLsJukwB`Pmb zd5OyZBxRJK{Py`Z%(w*QB`7aJc?rr(Q2r+=;}gW>n+eGmW1E%e$v#A2Fx+#jz6z%; zEC&nJ3mzfpiG+q+5#_K+y>t$IX-o~Nh%I8z8)M#`G zwKKo2{)RAPUEpAA&1i9;?VTuYvi^0o{=?yaYEQkH@)EW|*cN3erfDqj|L63TcU*vUfBz#jy=6gw(1Ml2P?>Hx=ntlu@!#EE8=gY*}Az z-Y_D?i*ClLH#{@XSQ;Zag$?W`#njs|Ny4Xi7D>a8VM}-fk%XC1pF~uoT&4UmQj*c? zox2p6{J)P8V&U2&bd9yxjJQ}0$(XG>KiTK%z1CFHcqQRJTFHO1$gg)E8!H7G{EB*9+wj0Wua+I~S*(lZOuuM^ zHP&^pC?q+TQ9xKDc7;`(O-emkPkc74OIpP~?2Xa#>nfCt8a|kwk=(&|$r|!#V$>Yg zD;y55nZjl?wrk8PIb}8b=ev48@ipvIf-{rZ&DKB=Nhmp0_|ued=Q-wqNJ~^){prZv zW7sxPh`NREN_1gJs!*aS#sgv`wd3t`HPEM+JrV1~0TUHS#BSTDj)uKS=0&{P;~5!0 zGYMjJuvWnRl=!K5MV#N`dae-(OrcHwJ%!aNZrjZB*UcaYMIPppxJ0}%W$0uLG)*(0 zh}uVLDk9G%td!W*S*tOc%t{-L3^yYCbcVYtnh`UNK2?3Sh80P{N?ppVl3{J0RpXnF zFBX{>tE?mlw`+vAnU5>8TMM$9ewLB*i`pD${&=)@QwSfv0K!VGOI5jilqlX>NaF3= z2;!}o9Nsd-@YYNUZy7>(YbJxY=Q`YKYvv`l94EP@_{c5IMQ%wRa?5g%dmV1|7*Fw# z#X}YkSv+L%kd0}hxX9b**D&ScB8!VGF0#1D;v#>OHa>xm+}|8-^+cTH{_c3G;w6ih zEMBsB$>Jr8m;B4bQQTy4lf_LIH(A`|7ju(|7+r^3#q!kQR&}^lqubQsR=4LRH(uk3 z>Ts(%-0F8MOdW0&cdo;&>Ts)8zp2BmZhy5Ntq!-U!>#_hOsm7K>Ts(%-0I_pTkWlf zTkYR^xYeFI+-lDrZndWlx7xFZTkWaCt@iBUR(tAjt37+T)t)-sYEK_-b?+Qn54XBs zpE%s=USzc%Zgsytb+}bzr1rzD;ydk!TkWaCt@ixkRu5G`vzYwxjg+7~NThaAd3>iy zSpNU}zyCk~?``T#R4z4=mC>Ccb(EWwJF|f?daIPl7#;Z0du@!MlB($x_ZNotuFagR zDLWb>s-o}^sed!$@cw z0IxeMid0+~LB)8urzjjtd3qy?(P@$@Q@&f$7ZpS^&RhXq7|qL*?gm7u6a*Nffjz{E zQcKpKb&5oS}QatW4)xL$7>q7GbF3eJzeFL27 z3aB21`G9!P0aDHG@mIb0iOP*%xx}ro*jqBsVPmVY3iO-8IC!pW z%*HE)6dpmsA|yIKZ9S=20>d*;wszVhHOJ=?NuR?KBsOKOml!ABEtZ}6$NmjZ!O~8K zlislLT;(9pZq*)8GS3%=5wUGNGwm z%r?(LZ;0z95`olZ%~V^2lY=P&l>9CIjs`VPmX5Tc z%l5wY8e{B?`V*W9e2r-vwSjxhHj>^- zLMc`dK9LeB=uGAdAU`^^Nr_=WPN1&|Y`g@Z8#tLHkHF^dzwIn7pRJZ3tWQ!;V- z*BS9ew*&!oG5M(y3mpt;hlEB^a0%N`xn!lTc2P}t8_Pn2@}S?tg1YE8kl_FMfBipR zLxO$x$K1Vv1pm+f^Z)7_V8BNs|CbQpnl_L>pdy`rXiBr7oKI=iHg z$HuF54Biq`tRuvz)2J0rW=t&P!4`=c7{fI;P;5PhIWkR%45|Hyxe^>R=2QHlwqLAa zpx($)QTt~4gEh1g7E>GXj8vqwVPo8%1tXqPg^bqRvXH9S53!s&Yh+9>TkLhhUPz}> zYTgEPwM}Ab5@>;}(BNSxD4166uvrdk zJ$LN2Ar0%KOd7N?%pSwj_CVqzSKdCS5cj5RHdn&PwXG84WR+|`i_V!i$BgP!0}AeI z%n zN4xlSW|gOY8C!PUVy}nxWitvJ<8JGzJs`GYMh9Ebuu{6Ou^JZ(UD_hK#Vq1=yRF#O zKnU{q$#?V6dKf;|8&m+?(iy@=6hP6e^7RrvptCc;FwF|^1oAJopj{RG-;#!(Kgf3} zgJ(xpDUuIyA5x02)<-jv4U@jt088+e@@TD>T4k%rh?G|Y$Fu>N`8tMm5rMRe&FU?I zT919;kM;~7WSyq)BO(w@Cefg`=96nk8~`BN5p;<));S%Q@CY68c8Hbsqu*xVqsKb& zTzt}nCGkY;Ryf+;E8;XTn%7JR+ogKnU6m)a`oGq?+l60BZ1s)$_E%T86I^|xzWvqJ z?L=4KsBeFDb&J0JRdM;3`u0~>x9HnndG}xH+h1MXq;G$nt^Zoz{`&eRef#Ug^4I$I z*Vi}d+uugP7Jd8M@3iRKUm==}3}c_sx4-G~o0-PPH$IJR9Excyrm>jD48|}N%UCQU zp|4oRR+sq%hH)@<5eo!j*bG)ASqF0g+Zl0Gcl zkKbXvI=jCPOQ5lFNSNehel0A|+D!m1oy={3&(SbPor`4Xq0;miPfZ|wv5LebJL|yI z(vj)3K6jVfCpziYXc$5Q4y``iuyVZ@1+(HBA~z_|6bndQKqsg-7+6P!(+rk3ChOq| zKRO)Ds35%qWDR2%cEtV9alOz)Fn7b{MRYOEhBfJ}4pW$b4k#xSS;eH~CE($v#~2}L zWH)L`eX(IpB8K^w9-O%aswLqV!hW!-%85q0c8&d+ac`4PswCvRKfKztHOOi?ZBI`*e&Ma z<^Lb+?uVAne)!U^erWFKhfFs=GgWDchKrvW-b8+xQVF+xP(~+xP(~ z+nAEFjd>~Cn3l4QpDtyaiiIc^qF9Iw3o#V~Q4B;e5E%wy`V97AGUkBiZ)jPtOA7Uvfj6#Jd z1keZAxWpas*2Ri6+E+i^gE*kK{mt>DyA^n{0cHu`0mjkm%*|RzcLy~Mzp8I5&+6y zFJUbp_~dSXr`W~d^fhzT#`KDtgc_hK#|3A@&T(tK7-%IKo?{Z(*N!A(iHY5pw1>-{PJRx4=&GJ6U`|PX#^wx1pzmN20eQ7*<$0^snf-oFSl6sgGFn)Dp2p$+?Q-X)Te_ZSIc<&a4+xFh>qN0 zwGahl2e_vfP%;wkPmgBVj2Miesq-h0@Qk>W)3JOG`e6u`XMQ0I7`3ql}FoTCY`ujC;92hPFa8^hm^>IYg^d$bcwRl% zCG3F^&iGmP-Rh>3VTTIj7KHT5RC4Ay?#3r17Dfw}A+mf9o75{8msl69PKPi}AMJ3L zmhN`>($02i?rN7zN4qq4vrDFvU7EYt<+((kOLIfDc8DsB^;+DP4SCQA!%Am()8;I zB~5Ednr>@yj+K83Nz+=ArrX`<@t;T1w3ejl-ymsPTP02FmrI(~l%#3RN}AS`q-o7c zn%0!0Y0XNS)|8}a%}Scql%#1*OPbcCq-o7dn%1PGY5j<#Y5jntY5jntX-!F**1V)? zO-q{APnR@pg~S&UUr2lgiQfu^FBHB|_zViaeFg%*Ir`38(3bV#S)`uXT6996_Jp!h zJR>2LM6kx)2si|1KnFl&)^xOxs15Ig^lR7{oB(!98`Bv8#TeLqOo{|qqcL3#C?Pqr zA^-$~+mfYPZ8JAK?rQJ^DTCdqSUBmAmwWXFYVo|l87z=qre(fHE3D%h4sjpu0G!P1 z@p>w6rAS*k)WU#mr6k}!e8FHho{rc;1fvWf_7c+d@~S!R10X@90{)^1VT5Y=?0W9T z{bx%kw0}ZQEjjLX00n-*H5Y>rhzV?~7aVd7`y^j1Mh;-5%n9RX)%gF}kYCnRAOx|9 zbh*WIU2JT`a8kC82(Y^`=frmIBbWqu5ZH^DUVS1n4B_4~g&F4&jn42w(5tC6>NcF^YTAkY&Ua{JSa;~R-!QFK-goS_1 zL7TQcfmn5OwX_cot#e$!C~%$57K8w>h7n=TTo0ijoZC1Xo=bHWi4GUXeJyx&Rz7fz z-XRE;K$-&i!g0HpdG8xIn*@_&rFh=K>S)HVqXH-y7z6fzyYF#5hZ9g;LQLpv41xix zhWlb0+y^tKf;L>A@lbX0>?HZ#0xdNx)hkXj7)N!m^tc(t!&<9)9X^T_Z7nF#_N55X z){G8q8DwZ{MuoNvBD6K5LECdl1Gi>iV#|RNTMCfaJ{64EOB(pA0Eq%5l7Pfs(!gH@ zN)#xO1SR&*k_PT?rGW)b6gW}f#LosN_IDE70w@Zg_-_Lg3CAgkZT#X>NNo3#*#3G# ziS1qz+uNF)W96ShV!M~b_I5Y0GP8moF0tK9V*789*zTyMiRi`5$}1HgGO zmH@1Zz%>&VEE&P0dP!`j5NVfpwJ?LG5+G`Rg_EEX@|!R7%qE{4Iu=cpAqg)LzZ zJ@&uF%61+xNE}Pp6|n-l1*g+1b7+L7uy9%_SSEjq6+R9-r`0@%y>*6fl2&MeP6nM| z8`#ofenf-Eo2!(#N!G*=1IOTJAPRtcXk_R3t(ieBky@4^^q0g zm?l=hzcDJy=p@l86BAxNHO7T{hk;Jc7CIQUB`(f20k&L}0>N4k)3ak`uKdY>_+!+ifTENO7 zas+logalhZTU=#^d;51bLZ-LqJ=+~rJPfg#vPnCYr8Ce06rOA)Kx>WFxmr9wIT3^n z9K$wP1){g?ZHebSTfs?072Loq5v8|yYJqB}_!Wv4vCS|CUCckFG9H0d^oF_5#&+nu z6rLA5!IqY=0sOHi>s@2c1#a;~hx?o-0`;r+oq6TBgi%mLU@Qu3=1fBCyd1!6Z=Vc? z#1oz|Mos_ibJ4?8f0mpn8AP#TAS6;InB^t$5`@-ph0QQ^Lil79kJ2x0YN(nRvfEQr zzTprAjLopoiv>A~N?h3kzeEX?Z)+?m#&|FsmXx9bgvF=$VtF0C#Xt;=SE+@w;%cCr zgfyeKa9QwQ3JUSW7IFw|9yaI^#q|y`&x<8k3Kk*WkXg2}Fg8kY7PMenu_e6$tqb$V z#l=J#W+?34U5zKQAkka$A>=5q9b;xxXw!{#A4CY}t^pmKyRSqBUx0!(RPg1>W<>C% znQB7=U#@IM0$&QwHWcvX$|sUmzZAi3fYi&C2{4MF-3ml;^{0VQeMzeyL9BqN0-{oG zQ()BXngXK=jLNvpCje6Y8)_Tfl@yZlI;}EVCugOOeGwrB=zx& z&mgJSvX!L%_Ul$6{cK77y{9ipeXRU5Nb2wFR+9SL=Vk>zTT*`ylO?HtYDqoI*g~51 zUoEM>lN*iXS)Y{D-vdu0iPk42^>?tWkxc88lKOjb*(RyKU)?OJzk7F^r2c+&yQKb+ zts5ovkL%kd^^e5TD5-y3pOMsC6l|8%+jp8J^>@Uyk-_ZKlKSZKo0-i1(;$FL0{`erA<;Uog=AG-y1huQR((v=Uq!K)ZU`4aUT8OcssUw<3{4MMt_eZJUO!daX>+8lA3j4uI&aB2`E!YDRFe3W+h))t0LErTh+JYjBw)mCQ%#t-Jo)B@0f ze2aIv%AtoaaIq<1eOnla-c0(g3L`L!%qES@F-z1w5RgZ&V{~eX@I) z3{Ogm5E;LRqnsQemk+%Q)OirtGnfzU0g{BaTW@P z;JaXdq~*TWOVPvNt4^N2(wz^4mb+c?)gEBd<>--S`eDyOVOF38JQU}sLare z$P5`YW@tuYhUbzs56z&!kOKsU6c{jkDiAQ1toc`g0R;vm!GN)3&A$o|C_o?y2#lX4 zYaZXonhO{xV4#43zjT-a2MQc0aNrIOBpj!trSXeTAuSzCTKek=rKMv@OK)p(j+K83 zY3W$f(%aoA!p#bPxU_UEY3aW~S~|8$OUEylmX0ZD>6n$4jwxyBn3a}}DQW4Lm6nbv zY3Z1imX0ZD>6n(5j!9|hn3tB0Nonc$5ozi80cq*@0cq)&l9rBnY3Z1jmX4n;EuD%@ zDmJOuqzs!h6_Zp*SI zIZMF;eTX*9a2KC|qLL5=LhLc;j6vsGu)a$;i{5666%h>#;-jQtO<6Ckuf@8v5he!% z#U?|*FP3&moy^r_D~k>5rJjAv*lG!VwphW+3ZyX*l{vW>8;KWC;E@+}P?be6olSwg zox;v_h>(?7*eU@BfS1)LUr;byZ0!`Ejl(3CPR6p5@x?SA;<xy2oF^8gbA_eF0^Vwd zrnBM<#iF0U)kH8EzDNDb4Cu@xN-#!F;^KOKks{9SCc`I?Q(s#lOzP{6&k>i|#r2Gh z*~SS-L^$hc+yyC!5|zXSeTEZIXdf(?k+g*zVkc8r4i-g_I~$J5v(Uj{nUrQKc+C+R zxjM+Rt$>@JQp^Sbm8U1Zd&av`OA)}v5Mt{2-=%`u250}x;C8Pg0 z$mr)*8U6g_GWt0sqo1=f`Z*<|pR+RhIVGc?voiWQC8M9SGWt0sqo30<`Z+11pYt;M zIVq!`KO&=_KOm!@KOm!@Q!@HFFQcE+GWz+`W%NsNn8jfhhne9pm*Ovrza;b(f7$9X zpTJ!%##^#F%qk<-i~4Mhux)t(ZR;gwmEeGFb2ba}uQx2h*bvGreCe1bgL0YqgCTmv z0U8**34g)s7lS!3HYyUXpn3p;!EAWATW?~zoIl`oxnE~q6u3J2i&dRbSVtT-Z$>fd{@i}?S9a?zUC5%xo@$6%4lXY#-y-cU>Ol<;A zag5*P8oGU8PdZTY9u*4z(r+sGo#J;@7YyN=INaH=x6XoAX8URB#M*#5~2-a06x)&(rQz<_-Vkg3V)-BI)0dVWefiSXkFXhs;4h2P5dnMn$kCcez18n_4WKxCje#d>tOHNkZnN)w*!wj`ZYEWV3S~$I-y~RC&dW}X>xP|`6bp7glaTLp+>_YFnPV- zZH<*>l?gWLov|_VV8(DTe1LBH1v&aycf7T9#@m;6#anYnyk)xKt+^B4GF|Z2+yQUT zCF zC#9;UteUd_c2kycoRU(-FFu8oYA-3(uP2mJ?IoqUt;w@VsrHgm-R?%Nd>$#)UQ()m zgOqA-l~V0rE~VO2QmQ>GrP@E+EY@hJu9W!Q&OruE2Y{~QmQ>IrP`BHsy#2I z+LKbM{UcJU{R2{}{R2{}Jtd{u^HQokEv4E&TS~Qbh2j^AUnqV8#s9-)3c8Z$u9V^1rvG^;-u`o^5& zq1X?ejz-UGb-iKb5Klx3*00QAjg$&kYeD6eq*T%Y3HlN< zuc!zO(#M?429A-)^yU>x0^%XhPQtY@E8$}Ecn9~l$fhVdnIGN$PqYCwX0{;*7E9%P zOYe4K4w(}Q1Df6?tdvF_;EuMLC{3D!o4Q(I0I)&B%$xvnoQ)LXKAqY8YD5q@NY(%{|JZ-pFB)EnPL+}jNw$8IT9c%uG+4nN=@121Ux`72f@FSFuA?_|1-(2GpH&;=_p z$bjFa$=4g3#+WN%<@}Y%Np{}iyIL2X8r#O+u5mX$=jq5Yx<7LW07hOQE=~5k35w&7 zFzCFXPKGcTp9!ESSR4f+2;szCnEzy4&S3SgDrhRKV+Ldtta~K*S88lFs{UNSA8JfP@^Wqkx zndHGzC?E4!vF5LWc?#x9!aRM6HGdVghj8tf?Cn!H41rizh6eFoQ7+#Ss=qNa!n$u+?Qgfgc=<8w9|i zeWVo`9Tw$@?0JvYLa)Y12t>!OhInckp4Ha3@52rWjDmU$kQOJ#ns)Jj!41YEoeg$n z`~-7WiYEVRu!SRoG^0B4gFt!=KcdkD<`-HA*foX+5w#RN@grtt2%i#6#9zBu{j0$M zgLwpH13;5r!9}#;N_=pOIn=wyxC36im`^do#&hy3Gx2AS)!81+*nNbQ2gFRClopP7 zMe~D}Wh=k8|iqBwX+s^Ppr4aJ|Q~Gjib`#!`rnnZm@xh+Ja^7|(2Jgt5&=Jd@rJ zR@bNwHN-^LM~esqyOs2~rtUD9=u4KO41yQS)@GRrK7Auty|TrAf%a z2?+CRJcZ89!aiAj3tg)vOzv|u7uQ?)mXD$(Lkm(ed?`vYG$SNK1|1oik&z*TiVV$& z$nad^-J!WTA99WPkZQ_@Pi@G@67T-1ro5W+WK%wtc=uN|=GB-d8}sqA#Jl4g@oqKf z)u2B`gFe2KT2_-@P5OVkNl!RVNiE|SpF(Ommelgs6G|<|l3L!@gVb_tm0FHpF0~v}Qp+(bwH#AY%P}jp98*%uF)OtkQ&P(@E43U` zQp+(dwH%XD%P}vt9FtPZ@gq{p@dHxJ@dHxJF(tJe^HR$(Ewvm!U1~WMt5d8_u{s%6 zXDUXg7@cBtGK|jj8Enqv@62Pit>s|032_8HnoCeK?OyL=75ElGLm`5vJKFHhF#|^f zAhhnx-ZiX+PzI#UUUIPw)(*l90C)q6E5undHe0F!6gXS($J1%eX}C!}gN18s0MO)U zpsx^21N*O*BAEv~OI~j_LuwoCd6{9JBiMsD(vK4e z30f?s>X9WL1(V00C0?+nStX<)1=k zI+x7!b~ow=vw|NkGo4Fj`fre#&aE=j`O9Udb4q49XJw{yN@hA|Wu|jVW;$nOrgKVW zI%j33b4q49r)8#dQf4~mWu|jdW;%aFW;%aBW;%aBW;&;2rgL6qI;Ul(^QX&9m*SL) zQz}j=!znGrCl#Mmd{Tx_T0VnIT8u~19)AlOz6#j$WNkTXAq35U-ery%!`hiQ0t-P5 zNEI-fwIgU?EhLxTzN@#*!4yqlx1+5-X^Xa>!~}@IJPW)4xtqft2*N}F5-Y)tRD#Fx zq-3{BCSLX36w^StL1Ka6 zU}9z`K^P{L;3X!0v6`I_LL#DY;DM;=Nc*CYja%C7ZvKK!x{%QjUDE8;N-emk#R{&~ zT%R%MBr2ZNlJjIJ^lZEYbEx+f-tG*-$nxs`R(+F}8HteXW6UIJXEnn6V1`MTK;grz z(nYClD~*2X-ABz-MO`t5GyT(g27E=gZYlKyXyq_3@#^!3Xn>1#@ozGfxqYf6&7W+mxs zN|L^2CFyHQlD=jo>1#@ozNRJVYf_TF<|XNCQj)%YM3TOKK$5FcLU(zjw7i)k#TF$2zR#WEJlNa!n;vDIZhfnnT?UDW9x$5>h1U&s3}{xP2AV2v~l z>%o{7Z0}$xLuaAjO144%SD z3HxFf@dbl=R)f7^bqJxJSOU2LV#VDnJ#E*s3$dx;8sk406^tpRSX?H&nSd#j^Fb0u?UR>W(*Bv02++! zjZ4w!n>gsI10bj8?whZt@6A5%jI`_N`ALz<#&5Z zez#}kcY8{Hw`b*ddrE${XXST$N`AMe<#&5hez)i4cY9KPw|_)_w|_u>w|_u>x2NQH zdtQFGr{#D1XUp%_uK11OH;Ug#fOCJiOmQ2xYl_<_Zll#@{ywkq$4!FM09;@`36g}t z)#jgua<<@qFgQT3G@}{aVoe2?T2c_ufXysnIohgEdLm@;yV%1aJnm@7omxzM(?DO^ z48kT+MXx}cV_ozTFMPR=Pe?I5sl1ZdLc?v%E-T9lGE2lFz2lH^Vl(D-Jqx-LnBL zik$ra5-Tn!!XlW?7Qjv}vDQRI(K5$aBie5w3}CZdOJgb zdD7KDS^yr(KgK{T5(PnK#B&c}4=T*gF{*O{P5vWLICIt;Gc+3#e733$NFPI3t#+g0 zxEkxGS4kR42|^+e{v3vXwQ_*PS8`x^t#SeDVA|mDgccHzsO;8o2!%AOrw9PV)Wt9+ znV#X9n5~Yf7~|i~TtO%mj>6KBf-vDeo?57%g@=nfI_}H7@wwsOJhj}BIp>;d{4V8^ zc(QBE(!pGuxq`Bxh&WmrB;ZkFGLpr*6YwSMfdH@i{Tz2ArGO!V1G08JJFeebhvdbJ zLO#U>fn<&uCJ_p*u(tncBQ#UG5GJ-##}h_}P-;dzdUq@l#8R zS;iL9rvGY5@f}=mByakpr1&0q8cCc!DJi~#HH~CWpOh5ei_11i@%`#%N%7sg+a$&J ztJ@{Tk8Is2DSlkvE-8K_mPSeOqTZn#61>MCI)*izJSvt&3vDv8(4A7#ulX;4QxK|g(OHLr8F6NX%2FRbF z2NqvJ_Q@VNr9u=V;km}RMkF7GPmEu~kT(lso;|omh&(fZ`+`(K3T|P@%7liiY4#5B zfAJaTy9M1H2&1MK#z=8fX6axw=WgRaR1twW|~9h&>qA=9f4&3)?dT%yCFxn&x1?b48Hm4;7klg1Jq{;F1~TBT&GG?wV_ zSG7ykE+yNg@v}sS;~UZ8-)x)4ce12vovL;EZ?{ef$0=D-{Nhu{lE#uH{dz)K(pa*j z+nStX<)1>9G?pyscDHAfC50*@zZ5V zQ(^6ewHMZ&!P=+7*$ZbcoIQhQPoIIYPlm4()&QZ8hGbz&{)!r&m-eeOsDuIFUtEb7 z6DnCv+9b8DhJq0cf#Ev~H3U6*{gQe#$NF(ZEe_p1nPHB{)vKd$2;BPiE%v6fXrrT6 ze3wqxI^@nW5@CRc<56%jqB1#(5Q4FQ-ryEOs}JE2gc%S!Mm|^u6XtICHJ=P){Hx8@ zT|5^#Tp%QvJ9xqEyX>T=vH)2i#|lv+9O5*DE-HmF=8$D4kMZlXVH2b6(N_j`+?-Fq zf(YcsI%pHHRZN6|!Jy`&RXUp?Ae$i<7t6Y=(P9WF#!JPaT7Xrf8nSMeTuLR?8#X~` z#AZ~9jA1#l5Zky+$QjJB2z4Nig377aus7i7b37yU1t9s*f3&BbTKehfOMB_5xsRSQ zJ@nMvKTnz7d1~&Pr{|JMP0cOblxyFnRO>c)*w&tvC zYfj0w=Co{UPRh3CyliVu%C_c@$hPJW$hPJW$hPK`Y-`TTw&t{KYyNcE)>7DiVgH5w zXR!aJaR0*n3-{09{>x`z{)^-NQ>-Zn8t6NrNkAik9S=RmeClNYG>!lhd>1hF_J0DG zfQH+u9SoMys{#%&Gx$3*e|j`__mGH<(IOM}36F#MGIPs&KKLtXjvz+cN-6|20aYYE zfLC_LX^amqOHA*pw^z(Dz|n)2by#E@oI`yU(@7R0FCD|onG!M&o!!N73;;%D6{Zan zW-$%vK0gSRN4T==q?hb)AFvlP41t94fWY)|H$o#*$bvKR+EC6&$RvjLsW+siz|g3k z40R(IC`%KbPca6#1X2gN9rFZGh3VmU5B7h(9)+hSv`k_0gd*w)X6b171$mg+pk@Kn zQOG1IU1NO-8=HmFi(NTe)xi4dO(I*YwE%X*TyUe=*p$VBpEjwVVz%|JjdT1K0Tq07 zusMMf>Mh)oxWF-(TgJc(mfYir5Zem$XlZ7uoQZB5Rx@=qaOTT8xnyBoEH zS-}sNudO9t`!~qf)>ir2`sMPqH6>qLv+}hyC0|>!^0hT3Ut6>CwKXMQTeI@DH6>qL z)AF@7DPLRj^0hT7Ut2#SUt2#QUt2#QUt3f1wKXqaThsEj_0#2RTk#LYKNSCv;UBi* z9*TP??jgfHY@fk9Y{oh0)eE+F_-tv5;KnL|UiAi$U(Fg>h2F|~(x0GHY>fFa!1%yy zkS-10;ajW-t3%sIAfnCSTP;oE@Tz?Ofr-owf&W5vf21g6EF$_)kh@}+F z6Q5?DLG}n>Tn{_K+fqne*q-nj!mw?HmxB`Cwzv;9!fM!ptdVp?*dF5PhKCz{tXtn& zI`!>KyY#KOL*Fvp`PST-Z<(%qYwpOm=MtrD&CTJKYYewkQ@DLsoAe5l$z}& zHM_0Jvq{bNlA8Vh*?YSr$8{!Yb1S(7kst_S7qbQZ-i_JJ{%__;Pe|b>>+5NRUUhb{ zDsE(HN{S?a_;U{@@i-e9d_PjNo>H?vL2A}VrDpxdrDi=OHS1BSSr19gdQ@uGLsGLI zm74XC)T~FPW<4Y|>tU%`4@%8?Tx!;XQnUV!)U3ZDHS2Fk&3Z^`*5gvM9+sN*PfN|V zgLW05RRkFmi^-GVHlPtO!>aVNA5TqV)h~7FBW{9#$@aXH9lU7oZ3n1;fQjtgHG$*u){0?7vyPN<%V%6pdBtS%L?M8tCYFM^#k*d?k3C<0f)~;`ck%C1dnVBWl@9* zz>KXoAdNW22wbEOM5qDEm{VhKi{B?e!brQ5TZKJ^y83uefkwbTF7uyv6aG1gcM`5b z65j-dV(pame4YfH*+b}%NYyQwW3U;l{U$bp6#){AmR`kEAbbE4td#VGuw-N3R$n87 zj~D;dQ9>?Z8EfPYu>ot_;^PPRFQ@^tZ7d(F7Gi?52p5T!>J!#R4FSD2pVhOZY>oli z(p}-VSQK%|p4S%A7p~LN6WrqJo&^UAjoqcwHVe&Voi^r>@`F^>{GNF&fRzMzhqNOO zvcAA$&SU+h?pL?yvA9oZTrz5$LPE}b72=NQMEb@8?Wt|3HhJa3Njh5AREPGcK1&ol zy8Dhb8H$hE0JHRQi4qo>o1cfq4l`_h+^f&O&F#@=&$dpH^lBN0Xh2@WRv9m(D7MY~ z6X%zZn`_@|l}Xh%H&92Iqkp^9vo3%qCjY|_k%(sD69~qzQ6x!Bp0;e4q-sqBzQOrO zyqGpM5lp6V6c#p)zOdAiBuv;yriz4MuPE5uU~i(uA)KsY4lFPCLxYpBp$&If6uVp8 zkvlxPi=Z7jODZVR*IC5XEZ|ic9UK&QA~mlS9hjuFRF&1{zpR42umR_$E`zt>o^eOY zD1J-2dmKZkqXuWKxht%NlEiv)M{x*>6iJC#5vi|A_pV9;u@^9GK8mZM7o5^9XjxE~pyG6>qEGzLe1jKY|{izAc9NE#z)j4`)KD&z6nq%xAqh`7xM z=#1%`I5H`Xq%@M!_#-Ke=@&U~(i%x?{N1!hz;Rs8OVtECLm7RPhj55!#MUCZFrouW zu`VSw23-U;ki({zGV5jTxE5}9a)+_E;}S`)KDjK9z38>Oar25%DqdWAl?mm}nMCp> zIfJW{u{P0+6QQ`Gz4P{QZ$Kk^HK^$6PU51tH#2$Q{)_(#czKfg;1d026)Cze=x zxr$w{eulF=EKr3xz{u>C#3XaU{hMgd?bXJ!FQjc(e()van<{9M_{Y4NMtkvvG~|7X zBf|gdn+)6D5DP~@mO9Ja-`r?1c;XiiNgM=15)E-c>SZ#P#a7C-tIyvg5wOT?Q8FUu zJ_On9CqQQh?a%ozdfqk_xN3J0d#8WuZDuavvmpX&Gjg_$HIbm9<(wbl0*eiSog6Qg_s}l2!R+@cIEsbJH zM26~?ag^w2M1fe|q7Qos7%-CL>@x-_!AS3Z_g=eY8kF;L;E%Rlrih&PdGvVuWs1mo zpGS|kVWx&nSM-R(+pWZzt=Y1YMF6Vt^>p?m1>-cdw?<=tk%6VVM zN94Q`1&8Il@|$5f?~`vE?0-#RIj^Jq;Xc^(aXIgteX#6RNWIdmwk7biS-Yj$waEllPs6B{3 z0;TYJ$Ps2>k=N~*kKhZXun&e9wJKpK1%k{bZ2Pw!fslx`%e#+i%2RA!s>dX{#|MV@rFvVr^T zenl&UE30#4Hgjh?DkyGiW>M-!kXc|0DvFeefWtk%QkM{UeGAAf*Tm(NRo*)P3eb&IK9XJw{@Z8)9#f!ZdPf{OY*dC3R z0^}y9L7Fmliv|k!FI+2CBq`TMN;N9gF(xw$?~bupg?RE2*-JU3R58YhJExc;T?+zW zed$de<;6?-f*g`RO(@tWiWL59?_Rn3{M(yZgbxLU*oz9N!KHk#*NhN^NC;>DtioJb z4?#p2{Uy10kI|Y(*sS?SnXGx3#hN1w);!E!%@O8m9%ilPeF=!?VFG22ktcJAIGI06 znv@g}zXD4VCrO-y+$PDB$8VE7N%AD(HXk5R$~OUVk|;@{B#DwF%120)@~dPyiIgN# z{%Rs6;5aE+e*BlQ??JL$QnLIqvK>j5OG=g>$76#M{eN@Ga!JXu`^JtW%Oxete}ZJW zj7pZvk4u(INU~g_lI0STESIQcxr8LkB`R4iA<1%yN|sAVvRuNFjGm8o&mS2+pujvMY5wu$C-tgCx+NIF0gn6I-m=b0SRLE6||iZNzDg8{w8FEZ4pPn zKlm!!n=2;&#`m}kESz>SK;Q(kP2AD=abeG?CX83X5ruQdxd}pK1C|Ib9-@^+u+1wu z|IsISlSV8KQH5*JeZO#;gY+|Wmookf*L0B<-C58vi$JAdVP^B?vi-QEO0v$x>|;4d zzr@IU}VaYgt=t4+GkHkg+jX#46ce&@ImXSfORdy!5Oj=~j54%S&A;88~i zw>k@x3cANZ4-&=*nK+^)83}l23Cy-<;^uRRMM1*bZj4tqa7({jOS%iN1k|&Ov}Q?e z@T1H>VP=wsE8)cU+Lkatn6%xQxfa~&E0w*+7%U@f!SbU_!7|JeED?ra8D1?do)yS?!b~Pe^bNxg| zW0h_O-2j5WJ%L`t;{^7=&9euWDDIQTjmMMC1k0*MThdx{2R?gv1{v)E8umV!@ifrMFuM)>Bz?cBB;BSGj~@ptj- z+7sW99eAAdiw;6kREc9)`&GiPQB2|s_%%_BWXChz&>Sc6KB6lT4-#yZq{HZJ-$CM- z(9d`NG+;{O*ERs5A`Q{=lqOxSxT08hWSY0D5X_XnHVzvF_WW2^sR6mkY5LPi{X4^I~ zJo}lsf7oApu>?V}`JIr6W=UnnIu)N)?uyjGSgcP*V1sj@zJtt%+opPIVsF()ca}Px zP>roxuMW#O`6w)PH=oISczci8SVvfm^+y?vb(qaqBTU9R%wnt&24fv&FV=lY1J_|7 zy~aTF8UoPkN5OMTY2a4^=mgL~0Nqj=_>~|!L39vAw@*m}+c#-og6Ra)9|zOz7YSnm z>IBq(H=qtUPD&Ub|7GlZkTABCFusgzM-s-C62`~z*dRF-_oOI!+{te!VQeX3bl=#K zgt4WB@lTL2wowUV`*8_l3rQGTRKnOo62=ylFt(6{u|*|}EhJ%VQ3+!UNf=vL!q|cm z#uk?_wxEQuy(3|4Z%7#18xqDAk}$Togt3JsjP2tR#w|NA*@4LpOr!&|W%nh!FWG&G z0M6|botI6zE`SQVXYLj|q1OS}Sltq;fK==aSjo7ohaxQ^&1XU1poQ$}R3df5DmoQ?U!ChkjL@1aULo0?B};OD)u9d140);9d{(~<07Q8NoJCO zZ7y|smzUT^IEn2?`G{?pi`XJO#5T-9Y!Uup8|EIieF+e^VHmu{An+D~zuQNlZ%+Z@ zSHj5RoX@3v-U{Cp=`^JvsgFWSge}a6lkID!8 zkIM&pNIux3^1&XG5B8{hu!rP>Jt`mUA^BjB$_IN$KG?(Z!5)+k_PBho2jzqP9r<8? zLq6EwkPr5de6YvmgFP%C?4Ono_CxkhvVW5OlR*FEAD7AA$>X=#JIUV3sLTB4eUpDq z;yn{)#!7#9uHxgp2{(V1u*Q+3fJFe0?Z5<_fcoY5>efp@HZlkM#4Dk4VZN~K=4$~2 z0+?O}v;zuRePtL)G*A-Iu28wBq00u;)rv%I^ZcBjpn=}flaD{j)94H)y;%>XN0v1WTw&jo5 zs*!d0j&!9aApop&!62n?!#9AytI#f0=)s$ulL$G9SK@tE20(#8evobszNVy6oPzU1 zRFEjm1~?vjK8IXJdq}o#6b(F>G|Y$8BvS&4=RF^!IC3um@+6!nW=?1%V?&Ztvsmkq z8VX*v`qfEOHuR&rg*nIUCdOUaOB&?5EIYxQsfEyHc{iyLsW`Z2c!Q$#-N~137DAh4 zx3`s4U*ttNSB%$KzN@&VO+e=A72=k+v?TWObR&GxfDNCG{O^ zXS2$0g@-W)8XigMPq-hB-!vT+|74_H`g3%lV4p}q z1YI1iOO;1bCHxfWbzKFu+`D&gaW(xgz|-`@PjWPO$Tr5$+>adQX6|L}7%y`_a+s63 zr~WZM=6>XkB$fAaWQ-cP9~qzp2->5R07rj}4wzC>`IVGFQUXCrU`k2lSJDDW3j}F_ z=|hrAJ5kaDzLH4~Bt0PRdLl|7GkukeS-DrOeblZx1rlC%Q_R z>EpLBAh;*R0r8sbLR|hWWTww`OPQ&!>KZ%e*;C4%QlzIeXFnP!Mw!3x?oLeQuRHVETtjRa~sFempTfA+M0c*nrt~b3Xz=Lia##^EL)z6dq0ZB|#9Q%xj1qvww1a05tbtn{v@9 z66n7QIRWu}k(6ZVY4Md}hVf$azUtnAU)xJmAXa9-TaqF`108$xOOiJ+n_!@<=+UmOzP+_yy5GKsAIN zHoVGPJ7_MEn}|GEg=H(O5oQ^hPl^P5@Fa8&v=B2-Ho?vrqxI0Bk+6i~HgDUWUEPLn z>hD6gVe_^z8-3Z;vcg^-C- z6iq^N9HgYg5*9fg8(4*MB}YT4oTSpA8D+(l&@sdryDkJ!acevac|>`3m2Aj87=6S2 zQ$SvPMXXuZ+=?zzZ!ot+Zz>8v#4LV?Em?WeTqY6Vza%0lI;<-uh{t$FQjmxStZ#>LNiUE=Y&;b zgz3W0Zf};5nTN&CMse4r=mRYoeuA?VzMJ#oSjJ&WSDS*AqUJth?{Ss$2v0fxC`UOD z^OJLgo1BMv$vMJF&cl49CSA>#wB5k`fD2VkKqPuSHE- zENQWj+kAi;E8k?+NslExmh@QCV@Z!CJ@((GjiktuB1?+wNs$E{Cm%ELiQdIy1|=Ue zcp2G_9y2KUn8D+CY!C(z_at%=Z7CdyhQG&S1|=UeaNpR`V+JK3Gx!r8Gbp2v8I&J? z%%FrGGbqu=3`*!RgA#qrpoAVXDAC6ZO6W0z5`D~|gdQ^};l~V0@G*lDf6Sl+A2TTL zJZ4bdc+8-@@t8pgJ!Vkij~SHkV+Q5pj~Oi4Q>F5Q>du}jxifpJ|9>u%{nW>Av!9y% z)KQoDKreOC*HuA!Kq$xz@IAnW(E-|Kp&m~1x}meA5-1Vue32eVmwsRo8p7VwBJg98 zP{XH%rsfuC&{;ZflaN;@rA4q1?EjZ8A8TP(D1{6p*)_2uk^<~4i39f5-o*s0$8_ma;WYxJN&N<1rNSbo0L*S z38Stgn`}}zv4TZXxsjHP9SoG0uh+d0eynkThf=Fa~HDg8lg0oe|6nh zaGNS7iCgBx!kS^)q!iqpN(u(jxJs6Bazo(!=0-TEG!CfLU@goYnOYi(7$zx>phcp< zNSjX*|E2w5yU-qe@+`EFUJia;_&7ooMGZz_^ghcaEe~U&WYMUat5kg zTvN*IzOf@Ib4@AppCDzfqf+Mj<5K1tk}}t*l(~ka%rz=yt|2LNjY^qoNXlHJQsx?x zGS{$_xdx@oH7;eYK`C>6N6K8^kTTadq|7xWWv+24a}7(G>&KE;VeL2>V)OJ+P4hx@s{%_)Od_&;Hw(ZRo#jTMS;8@pDNNeql zoaMUM5}~^YAjZq^V!p={vFBNOm{vUCBe1L0$Bq{iNFtKp>b827h;fsK07ZrMph#qo zzoF-Kdr_zvYin>G($?fNi60r&&3uwLC^Hy40Qlq<0!aiEqz}dn^Gc{LNx4Zvgz$pQ zFhWv@6TC@1u1b!uPVDjNYfl=U$iVEevZQs23i1NStQx6Sw|slilkmcn1QrR4&zsF; z_mT2$6Ua}jOLr;8#*8;7BM|qBSnth$MT?0mLRa2|k}#5n6({z>bdy0S#x_4cW6{o` zQKmvHo`utgm^q1uuF}op?~^pjtkWymmXgmR=PTX@0-ARCEICL*v#uU>D@!-|5Ls$- zAnCpo3FH{~Bo1+qG}UCX?M-F}pElSVD?Nl?BDJz;)SFDIy<4vO1d~9Rwu2;Rs|Te* z=gv=JVumD6KFy@ECfp)!QKfdKd_aN#y9Mjpg>k(|)19&iUJs)_Nb?wjCHTRe8>_5c zE1V2wN$OBSR}ucycvbEh#)Ta6Q@Yu)Y8krN6m3CfRNh_)<2@#A9bwVdA7#+i zVfJi|FlXy9Yqmxhvvrs)TlXcKUWbXBHAdR3A;M<;C|T1|HvN@^O%gUi!ltEc`n9M@ z+9YWca+?njH|?8jI?0R6L6fAX#3>uLZaPLqWvlv)d?s4e;Gp zgurH-+hTecmvFaMH_7~9RtM=t;YPMkX!Ua%dnK&_<8CyZW4t6`snHI?ZQ6FjRD5tR zxa^B6KiD3r1cOyt2~_09;>>(LqkIE2xNQT&> zGQ=K|A@-;Yv4>=cJt{-&AsJ#1%Mg1|hS=jW#2%C(_IG56{S6sne?x}YLo&o3mm&7B z46%P$hS(2>?6G8zC3`I6J(j!6WPj!H+w8Aoe`VBV{^Q=t{UowSBUUW{2K&K6AhYo} z+ue<%CcOwc71#jtOll*n!FDlk7QV!K30AOR_WV9v+vYQN5I|+yePJQcS(nhjwG)7I zY{G09_alfJlQ~M>BajgLaaqX8CiElx40)BthV8I+a|6c}jH{KlioJ8?=66LcfDz4t z5Xs>oh6nj1JmM;Bm~BMJY)c;kLo@E^;wEPA zEZO|ORw>9BEfdNM5)2)a5W3GE0gt?D8y4+1+o`eUGOO7YxR0=oouL0~tfc`M+Oy=#mT`oHo_<*J^&$%g$>=F2`FaJOK~j2(Nxoj-bC8^# zVv?^{aXBRUdL2C~`FeTxkmT!i^swa1v-Ozd%a0$He0gFSlYIH{0m+v}!BNSV{$^D2 z^^^h@ zTbRt)yb#;0h*7N)`iu=c`tclNftndx+}^HY8@kzs(VqvOH+m7AA2JHtTP4(ElUN;h z#jGBMLAyW+3&V%eiXh(!w0ArF32zY#7gb{!tQBHxOY??oXqi=$I z3A9}}Gs29uofe-$+X4x55WbC2VFB_YCL_Tcli{59@bu9~1odh=;E?5TO(vCV-TVyP z0|C#LuEBUfQGNLg1256lwIK^UXPG3JE^SaZV%eKW)MSU!PFSPD|ZN!S%uHyl?irc zsx9f$VBod~Q1SEF=2nmM9F!qB`RMq27Osz!NH~ErzLx{oET)<1i1i4ReHP zn1@-0Il?f^!|cMmFX`Jn40Puh$elv~cm622Eh&BbN`RXHHwbV`O5eT`09|GeM_+W7lPgLiv%zMZvx)G8}J4kCnbQ7|1$PHNB~Pp0AEJ7BMD$h3E<;+Y>*g@ zdxFEsH^2(w=IL~- zB|9Y9A;}I&q(ib~cO<(b*&T@h&gB!Gkwv;9gwQVVo4|e*nij%@Ai(NlIp!CH&Fb@m zZxTS7ggzsnWHsUVY!eiG4KJ>~QqUhw(nJ;O;%Y~?8)v%gbCH%RE#yrq;+upSV}a_s{KhiE zZ7e^^Yb?W@#uDK(mSHYqiSQW9Fo&`1OK7+Z!|5dkrI!$lUOoz;YYGit!7yQT!sw9O zB$R&qHlcJv>4@8W08ZC$Lc@gA390{wAa(sk&X}+|VfEh)s{@Xca>mDh8T%gOj5Xzq zFC*KLoUx{y@o_vh2y1|QlK6?alsn{=-$Tw=Q_kqVu_HNSO*!MAAZM(ja>n}Oa>g2x zGuEh_v4-S~H7aMUAvt4>${A}&&RC;z#u}0{*07wh2IY)3E@!MkIb(fC&RE}&GuAic zj5Q=@tZ_MG4a*tp$K{M`_F=LQlYN*-A7;%SO!i>12NMCD>nHjztMp!QVR$zn7bFiM z4hnpdKuS{J&Iw$$4UdFh$VgThsEYkt@D~bzAaC~|)T~jMSlz)b2hTNcB~(IGv&zla z+Nhp`ued?s&Cg~j_~7?*7E5EKtB~l|$J!C1Av*wmSWB0X3(Pa1*nEtOJiiYI3P3WT zEN?}C)Z%V!OC-`dM2WO1xSvJ3UfhpSXN(cb8IPcNkQvw{{uudk^Vwd-hJo_f!y>#Y zUOWpWs2ep||A%?F_!W6e1Avp6CpMm?>>&#nNx=D;`J-PEJLLQpZB9O3W*FGQ=?UR0AmDjUg#*j%|leBnYZm9&jq-&gs z@`3OVSI7e1q-20wq}c&#sluINR@U;6I{GHe?IgTDaG|d{LXx0!tvwoDCX(^L^g_opflAZ~XBaZ-N$_%CDMgZ#Rs{Q6~NJCa|wlwUuN#|9}YaZgHw z$DRC!^6QrJYxj*E$*)_=um1%3bsLpmw;z{Zw~+k0MdjBmB)@J^`E?7)uUk}p-9qx~ z7L{MOko>xZ<<~7Jzix5)bqmU`+dJ~>_J;hry&=DDA^CNS%dcBle%(GUzuvOHm;Jr$ z??w81TlV&{x5t08w>RoCAL#3C($gdO&jMf!@E?6v2}jmv=x%lPE(_>w{B-kq;227L z=Gpe86ToL(5o`lCP5i}Pm;;f#xy{2K5*chYv42*FzCh^g(<89G`_YI7^Zu=~x;f z(USy)YMG?>VqK={S3HO(l3Z93z^4)U7hf01mm+@y+|BQxdnP{{>pp2uOlX6P+%vW} zNnC}jAznck8nuM&9sPTIb&srOkvSw*PtpyeoH)o_9c0~swX4ht%>nF_0?&$>Ysdk$ zBSkPfh0{W=YOWKWVKC$q#>W6CRJzS&O~8vGX@!gV*73ei&Jr?if3xCV|)( zk8VoLBsCg=jrKW4YOiI&aHzp0cwgj-@N1it8x#wK5XNPjY+~#upS_E4EGOaPKnAw$ z=FMjwZiir2q&G=0qX~TyW~qxilGypLa_TTY_KqtWD;KvM+?RFaPL6_CtSV=H2^a)p zu7b_rQo>`}&WVq|*VDVq&o;vPY(L8QY{P8N7GZj}VU}l$Fg)8ZyR+>}K)ekT4O@(4 z*g^!u_EB=7r-1k?35FyXf&@cP0r6{5lVnJeA>=k6AR78N0dbNINj4dR}aGaFDKK{$t_aK4oDS>?%*^VTzJteS@^DOsPRMCu{y564;&+ zSoe(`Nnm?QVE+UOY#)`t_8*tP_K*a&MVOh8nF7GPA)(9e@B#f{S%EPuK z6mMdT0AfNb0Gbu&Z@z~jxeDV6NVARi2)_^(;`NJobd?v&usW0Y5osL|Xj=>l^k-%) zz0!h!@st(;t8c{f!T*ch;`MZI&Jsz80QB*Ul#!wZ(98Uvm3V5tI?Nss49~(JZ9hxK zetDYuGj`ENxCuXNFC!vWoP0LuKtkm6E2Ark&$NSB-;1BY-n?-LIhS^un0VX;iWnn0 z$b`|HvwbS59pFA#>YERRTEI3fWe~6v#it6|d=YLCvw}~ts*^Ok_<~r-hsGxa&NA6> z3!C4q^&zTHUK7gQI9JSY^F<~B!a|ty-TZFhn=$Hxbd0poOGvPHHE~55OOx)4^+<%D z#++d`h(_W2p&Ro@B^%r6z^jwibi53((NF0mW}65$ZX zI=;#3OostRXFB{On{x+uV@%Hd$YB=eUI33VIQJum*_(TjFvi^6kKB>G^(+G&-iAmaaYt>A{A_6qK$$1J7XNV+u-Fp9IHX z17r$HSD(e@m~{1d^ssdG>D^<})#uUU($!bC9+a-WjvtqyD4if0GUy_h7G%x%oHP72|CJtnmdR0OzSn6E$CPJP7zp8al?7N&6Oy zWCn}wxB|o}E_m|A#OW`R6KqROY6oH6>^&umI~?aP+82>JWs)w!BDfXu7CiW`UtuzE zjj%vu(Z^E2+uWp;$aIqV8P`SF1oA(56~-Js2Tq(`NSD?f!NZ8w#m8PH#~y`ufSM*J z+j(Tc|Ft`w^mwjP7mx(1^ai?Qeu!xH)Z64W9;6^buf5#j&yu+KFJpwYV{Wk!5-)3KYzApu zm`vE*_F}%?;|JyuZeadVUSJ;P1m*}IFb{J9bA$(&hdF?GUn0nP7>>>{C_0B===@O# zT2ci0l`u46Xb^^$6hVF^6ip}^grenBBFOSh1euWZw}qtT7dc(R(uAddH!KY}PRi-r zSa%_(D=DXY8QG5HbS33?^)Ii35)j^uPD<#d07oUV+@ z>B^7G=}JgWSE6#d5|Y!EsGP2ZlMg(v!pXgsK(z{@0 zSQm&9fE|Iz5(i;Wf)cCW1lU1ib2fXzy1O;n#z-fhACeB#CgE<9zJyUmtir)p=PFmc z3HeQ+Hi84TuDR_Qh=L|3tO5QNz?^*SJZldl$*N%qH?i%D(AfBE_B<9GN7J<$6h5Khv7WPYIHyEN)-dpk^f@v&E}O{5x9 zr`hB_N%B^SNUFpwtmY-Cceg|ORmy4-)Xlmse&2_Runcn! zON4J&hPj3%!ZR$x9K*6Nx!y7icb6E{T|zK-`6$G#DcAc-n42&+2y<)7^iTm z8gNh0_~TA~LpfkgIiUN-j^uzf<$!;J9I%ec0qc*;0c%JOSfg^l8j=Ins2s3{q#^r!DEC;L~mjkZZ zC&@lZ_DLdrk~MoI*(1pwNd$1NpXiUQ(i>5rW)uTOyf`@UgK@#@<0JgncI6SMV>C!} zoA2V$1|0D_W*#3u%UUQUAK|~&e{ua}wn=y(Ob;W)#Gn&FKwTcxwpIlH70$N^B8B@| z1pV1AEsD0P8!~|e^lJ!zcH_cvEjB|%;!=FV%VUP*x7FRzc2toE$7f-62qf%NW9Q_G z;7WoV8ISNFp%izqg+2RNY=@ohqcCI#@)Zh{Y_`h%+q)l_b3zw6gq$Na5y6rd5UyT1_WulEENcg-2rkS211!12n8{cSX`*ED*3z({NvlkFE*V1Sf{0kXQ(oi!hxh z>3{ts&^PeiXK~l(>B*bW7+Kgl;V*ZeI!C621lDTll5Mq=ZT$(dtu`v#YCkU9Y9ZNHi^{fINVe6YvaJ@9ZMCRutA%7+Eh^h;A=y?7 z%eGojw$Lb9zEmu){j`D6uc ze-|PE@E101@@uU^k@5gI!5Lo+QSjR1-x)IAMO%(2My?qQ>264IHE$(1pP7Qny+UPe^!cF|L09T^Na@yez@y zdG+%!I-6AqGbAN~0fhs62x(S}4tPMq!zN5A^__L6u(!q6<=WomL$(nvWcyJbWE zklTC!e)n&ZyM*8g!G9A7-hYuxCJav){&&Ohfa9cG^6_8Bz6ZHvPr2mF$aW-`>?xOg z94|R?7jns-a!L1%9myqo$|e5>;^ikIN-{ST5N=Eti}R(zgL@ zT;%ysavdZPq>knQs4R{r2X2BR0UkygQ4iB$0M)@65bLRRr4K+JHY)SQtUoino`EVF zKEP_}$s;v@4H}HPomz%kx=S6#-4fX^QVSHxZAPbc&x^nr0>RK`)bu*PBnU%anwMXq}djn8sQG=d+p2?s_{;r-2sf;edXTbLuMGpLHlIKA4 zFe^v@Ei-A@N-zbL<05xU{|a~s1qd-l?L+l!_9hR0+Qt|~kuzY(Feaw9 zX>PDL;r#3+5WJK^7SML~Ig1I1$>X(6Sji%HO9Hg_lyC-7@UY<46`%?u^m1<(KR=^h z#ECJbRZM9T^U?F;l*Tm53|NpRJRki$7-Q4qKyYR4jy@+;D3~xu+DjdT)4}|WrIHeW zP)e1`8(hrlgi#`0TjfXzAUYLm+)E393Um^Vj1+pm+qZa$`7ppq%!i-kBku5IjElG* zIm|=cOSmx(;(p{X|8P%pW8B02$Q{WR@2PhT2H%eiKwyIQDE#H* zev_dQODLF3Lh`r(wZA>iv$+SXvQ%IN#I8JXa+DZTMVW684UsmbP%}C7#mxo$2M#DA zbFzps`GQgPV_23*#o%~aMa8`orY5Y#qy$44R_J~V(T=!_6pA~sl+Ji5+*z=*FBl$1 zyk{o0RC;6CL_SENMZ~9=>{6;R2RyT6D*nkGinwF1FQy3OcrEW2H&<4e2sjIDu}8|} zi5g~wvr%?X)|gan@j13K;^el2eO<)4DDTM))PQ8xo0MxN=_JNo{VL3c<%8}vf^|1} z@@kcWgEIq>OxAaFtAqu(+g)_sTs~N(0Jq07$!;=#RRRFBf^YCijlmk?C-%@F@JniC zvMs(%z97z%b4AAA;2?UTB{2+@kNvI$L7-zk@QS)hBhc;>WEqA`T$&(Xcv!EOo;o;!A zX2IK33Kzk&xD?sI-gUD0;+Wx+0a(VHI|^Y2mWHb{+lIMtM{!D+zl+oh)(oqDMS?D_ z%pMZeDnC#RoK3Z^i<&9Y)7H)tIr%7rwEe*hAr-Jcm|>Qqwd^f<%Gf3*v# zQ%R|l|8_@Gr;<{qKSAnLMx{>W$E8jsBy}oLsZ$9_ok~>dR6NjQj?}5VA$2NmNS#VZ>Qv%VrxKPrm5)oEmSp9Vl}}ba!U`_Q z$R{J8jC_PBSU$nVFT%vHl7>iC_S);&ec>vUGpmnnoCTZ^qB+KPQ`+2ejsmWXbbyH? zzykj9){9%6ZEPkq1T)P2;711Ro2+2>Guv)D{0-$raw%?ab`N-2b3Y ztq-E*Rj#|Zuh~5lfsZoV#pl7OKPf6~)4Rtf$;*<(O+1c5;^xQja(3bmcF3Jm8rilk z#7xL3u??W6H4P}SPCg1v+~t>Yh&i-X#zIK<*dY-K%IxHGNb==)-Ll2@$>JEHcC-;; zPnttxkgRDyo!z3yG6s@~E!FLim~6~4<&99OwhxoUJH$@|lF`XZBc9 zoDz38-kUpw!NW}GC(Leo)+-PrwRP-1M!Pz5+hoRYrrBq5miZy^8oy0|FTQHFBdYSY zn~$rA>#x#!qqoXA3B$M%_YcyV#fohEBU0Av>qu#KlQ46XGV>}9M^SkdRA+BM!N#_y zExpGOE+g#V@}tb)GRz7t5k_zsW&@W96SxesfXlw*q02BKwZzD%B}7CmA0?q`%0s`B zh)NW`LaKg~hbAeNq*RhpNlGOt^&65>^}mqRCoz@8)Za=> z1so?O^^Z@cbq|vInv(jj9ZKqJO6nhHIQg%3A*rt^srTRRNK#)@QvWAN>g%YazW%tR zzJ?_AH7cpEAxV9WO6qG!QeUHz`Wlkd*Qlhvh9vbhEUB+SNqvn=>T6I^U*D0`*Eb~f z^$kgV4N2;2TvA`dlKT2_N&T9g%IJey`GbHHV?i}|>p>|)|j*~R?tUFHKF%vHLV zSOrA21v=*c=rhJxZt^`r!@5IPA01GiWMQG6wL7}U5v-Uu2xfqa^#hw<3;qjOyb0Z4 zlr6C5>}!WNk-RMFNS|{N5*i!E3kcoTbrdoi780KVo>}6a-J%%FB;+d=PU@MZn_;25 zx_4X!AOVOOktQr7-{UR*@>#Qd^5wP0=fS6tYf<%J8fIK) zHynC$Q1oyhFvqYze8ZyIySOAd5Q=aziU$5T)Ey z^HChd)euq;bO~(O23J|6wM~jc`KiFdwu=xS(~I2U_y&6wv^TW39{NYDywZjE~{-JS#68TYFkKF z+oH1C7LwJrsI0byWVJ0St8F1!Z41k4TToWp;lHQ^n5CMIB$jD>q39Ru-a8RSlw2ubX+O4m<kL1BOU$$lJBfIbWhP<0S$A^KS;`g8c9gZ?n5r4)=AYaxQE^pL2OpM@HFm8TzDpT6VBy$QGQZx=>d=%m5;!DBe z9JFCfdXykNi|bsZBF0!SYAc|mI;PrXZh5s2uFRP+XN;G(H(_qGw56@*it|ykAN{`= zk%b?AMYz4nD5$Sxq}DP&`1vV|F4B3h8Ls|c?yGJG6JtXPwQAu|XNxFMj(%plS z?jDzP_n@S^za#1HZ%DfP8esUUDNk-uT_7)aYn>(W5qnpL5D*Yn__$FCe2>r0?m_?BWDc_6>@z@UB?&TK z_&%=Qv?s=$%Qr?*V~1BCHLnb^?G?{HhY;SJ!2lBB7wT;CQSc%u&d)JKBpVmji_K%V zlAxJe>lDrI3)~gwdam8F6eSXNK#BJ`7JHJWXpir@Q5Y2uD?u3$tNTNFyW80fp zAdMjA*2cmrORP2N%oEr3yU z++>C^KvK}`2FrbtfpHP)Vw}wS$CB#1%rFMHNRfLJt_*h}KpOf1IgyYl@o+xwp~~!0 zz%sfbYfWi3`?yH>*6)-y7B;s0(%%5L5q_{4TPbl$g4rxgv~I#~N%CFBuN(&0zH<0U zrtc2?$5_7mk;4q%9UP6Zd-o%UnZ0`fImYVUkKB>O{9e?K5lr_Z1LP7xdz4t>=#P;~ zQ%cNVK|YD4B$h&MljPFlev({Daw+0AA0U{fZxZt)nUZ8mk|{~1B$|+>PY@875Qm zzH7-l%Q(^mn|@mI{%lqZHp8Z%SGGkD7q;(k!R34N7lrw3rOJDjbWCpfj?**zpB4QNxLo~h# zqk55ffcmqmK!=kTguTTQY__ow64TYK;wmYAp-{m}DH!NGaW=957KleQTA9vhBF9j%w0`Fz2V@N7sxxzgOFmxaC&-_k&NXa#NS2c z%Jy=uZcDmpEB;8-wXDI~K|P#9K}Nf7O_E!a3BWvINLW~^6*D@iD6Q90{dmF&JI`Wt z+$_sQh$SWR)--c{=^*R(>t!LFD2}gNOF(^Wai42MxJ4_#wH%YscG-%?6*%ylX zmw<7Rh5~_;#AVz$iF)(O@{W|bydh;SZ%CO-NXlH|QsxqtGMA4_nV0OsWfv~HaFH&+ zk{!70z-0$6LKG~Y=)Nt|dBaB-brW*eXmVy-3CP)Jo^N>117RP3vAM!>@P(rvIg5Q7 zn1S6Fun4(;<fmWaOO88SbaO6gOuC!5$p5@I-TAkdhEgd*)Ldm#!{1I9}T5f+fpbr#|g zR?nDgp&~bF$`V2drB?|*^qZbQ8wxAiWj>#wvlw z_yp=8!s^9s&#E5QTGo*yW^V|a{kImLZ+@T8R#_ZbFC(aW`B6l@45R5Kf~1#W6um?c z^fHW|mwm}7mti2c#6a8<0&vSm!COrkje~Nw{iC zxc&qQR~?mb)gPB|)sTd%MkQP|B;l%230DnCxN20wRYMZ48kKO>kc6v-C0sQq;i_>7 zR}D(I>N^sy`i6w7z9HeNAqiKFOSo!S!c{*m;aal;kR5>R07MwbHQE1U|C9ZX5C!We znEzE+f1uSpcm{s1d^*EgWtwp*81N<$(O8z7PYgz9J38SsXEEEWyBa3L!>Jf7j)loE zofs5GYMZ7JiO+8S#=zpT-Oa5F_d_HnI*d)%eF>!2 zVVJbWAkrFwN9#wSQA>f;SHh!&M?rYhQXut}5Gf&25F)it38dOLfz%sNsr@29O1PA8 z>FjPqc$o( zYCkSNY9aYii^`8$NPg6!@}m}#AGN6bsD)mmjsT{HT3gezYaOp8R_9>k)o$OKv^6_2kwgM8Wn6UVRfzo#!`= zXrPF{$ee64_M6WkFb)7Z3vI%$2xyiRAOdDzP20NQF(;%XW}6_q3PAvIWIQ9VYH>Tq zPw_8wZ@_ z*(T0G0>RLzI?V(oH*kCUfAjxh+L!}NZJWXf{l1E6-=u!AS(?R=!T8)QeT&tdhS{@J z2H(Un!Z)3z8nxPo*}M6?-Nf~arbOYM?9p(jenJ99z4@p~M3fSg2~^@3I}S~aa}Z`@ zk**$Ap}`FMq(+0=S+Ky1yMl4m(yQa4`Gb@U*4j9|%Z+R!yvX*WoX9rJhinlpWE5DRKKs7@jaZ2*dlQByRni z#4X`?!tvh_j`v?>lnKcblK<6^Jm5GfqkMc~MthJ^_LNb6?NCP9Q%3nX!^wZO3mIik z8KwVrM>5KuGRi+eM%hPYl>NtLlszP)>`@tI56LKdR7TlDGRhv6QTC9GvPWf~F{@dq_sv<1)$~mQnUk%P5ya_HeR?lRcaOhy0Jr zWdG)IKiR*@{>`Y%{O7%!e@^m$e*>&Wf}Y(5*z5$Tz}Nv8lN9a%R@=;@_^$wk_!=`m z%X)FVfd~Ez1mX-r!r)D_bT(#z`ao*lKVV$j(d~`B zDIvRJ+88Dn^Cmg`C|w5@jo<->Z7)oH)z9* zJI6d(WI^Sa(kje8p`EL<3J0Nfn~={0W_v}%$>)|&oW4s%!whRcwH;d)ze<%^HH?qJ z3R=ezaUjArY!USc!IG{I*TM4490Gq3EW+KREs;xRd^rc<@oL5 zvwaZGWRgx8^Y&!Y!nl4p3}E`@@RNA{Ufz#k`TLQ>IR0J&jbZrvk;C}?o+iey`~Aor zNdWJuYYax-j|@Oag7zqUe1vl37Fn*VAK^0nu> zrF`vipSzK-J;P+m*LE#mV;M)N?&+uHYfnmYkn)~_^0jB+8Kl0apnUBKaR({zDJWli z7MEl4wdc{p^0lXTkIC1bM~}eCH^|A#7T%C?k%pGB6~avt@HnR-P{~@hOVR2^$1=jautWrV+cgO{ zCFF4AQ5IbI2m%J|1|E49eo-IRCrnmpfU(rZk`m0|7S1wu=_nBDuEJ3ehOIUv^kN#4 zJT0}V2}=-d^6CY6MP&u`A$#t}Iv*!DWbOnj;?a4IT7xdgDJ1n_Hz62OuYz{eS+2-}4Ou%ragf4d_I zU`Yw!pCAD&qY}XK;}XCUk^q*d1h9l8fF&vcEFlSCiAn%VNCH@*62KCY0G6->ummN5 zB`yIhK?z`aM*>*hkN}o9B!DF(0W5I|U%u01F$6b!stPd)vo=XuA!S&y=sqW$;rzPo7wjp%YDMS( zptGe>0rUKp6}bxNA~6xt3Hx{)SBID)aG9mu{G5Q}B3z_xLUVJQ#MhV&JRQOcOP*vt zu{WhKxLf85PvNx**dauj^_`dj2;=VG8wJPN@NPKA=GMq_>lPtN;@y7*LAPia7ZAu= z7%4}=u(^LN!o#vrictbrA3NW()yi227mMUw>__gIv2f=_N)#d|5sdr6Ye<*S2_$;F z)tVlgub{OKWF5~!cp9PdxX&t`u~}jQG~h`xi*2HV^^zm5zV21Bz^XIAC#jZkJ?@YQ zOuitMFOthB0I>g~&`5x7BD2jNSAE*-+7 zL~_P>U(-Mc`d3d*7^_VthROvR{33N0#y(3!*IpxW_MscsAv8M`BCp)A6eR5UziREx zoq%vo2gnuy<_CkSZa(m_o1~_LBn?an7q=wP++D1pz|vv1lss2AJu`p8Ee0!%Qe2IK z0)xd-2xhj$TXXX{3tNAXJHdn(`I~t=N*|OGV}bKN`u%qT($Qy(@HT08lj22IXO{Yx z(#(P}PS5-kS_t-13sXc)(tm|zI!FmdmyS849N^U>M`_|r6iuwAI4kAAK^x%*cNf<8 zNa;ikjs=of2uPGmQs_}85T2LzF88&J@LtQ0a$d_Y-?c=zu4S0#S|S|RGR$u+`x2op z!&J)>qgj>^#j<>qUa2WU{Yr`@DV89`Qd5Nbn%1OQl4c3H%?GHK`b~tIbW74LNw*~3 z^22mX{Z$5?luJ@Be>LS2aGaDuKRz+~J;6Pexf(GN?(r9%{*^nEkG`M8h}FVkYlWSCY)ds!URi(y~3xe5C^QXr6fFBx1%w`$4FOVTARwca<=r&DYv!U5*EmLM7n8M?Yp3 ze_4eIwND}&_AFgE=xTiMDrvV%ys{1q3H0KAbe6srf!FSwNO<#K;n!D5#8~N7NhN3l z=(6VD_vQOBL>TivNfY>&z1M|L(w21R81GFxX{-qR>Cx?Nmb5hq#b+C&Nf(r{6X)$E zIXA!7N&8FEFu@wR3im+##2z?5fcz>6w@HlRejo#hQ~+H{1@aenVkGD6)wT5KFFqn>+g3+f2iCj8W`v$ON)rrA zI12R!{e!pS*T(V_!=d@`S$g%vTkeN;6T|^DA5FH&?Zn=YbMjFbMSSryTZcfJdz{(2 z#|OU?N~~1~7w(GkhFnHmI!KS#wow$K)(AFf-CQKL+_O?3L~GB|TJpFEi3PVPV%nIb z+!QIAw6+TCM{z{Zr4qFMnY3UqC0HgBJ4Q{Swyqcqm=spl^o8|XecJ5BORJlM^|UZ& z#>L$dTDt$%>hzo6m9b$k%utn1nF7RQ83YgR z{PB&YyUp(q!^dE85e)etr4xUHx-L>8QPdO(tFxq2f-#}a=63dZAUsnT@^U8Q?j|>9 zM!|h@|0V&UNTJwaRw?2@ON0<)2hx2o?s4{!5-^yPo0Py7TuE--@8l{Rsf|Uxzb@}` zgX;({xc(?7xDNAyYlI72hk3v?!U3+s{NK7SnfN+PMXfO!Y7J3P>qqIQmNN0Lq@a?5 z3Q|xlW#X@CO&Tg`sF2%yfQoA0Wa3FjB^{M?RMJsNNBvfGRQp9npOjQmQhzrk6>yxC z(Ys0QLPpphANP~}OX&$@|MLIWWj@fm+@x=bcQgh0 zk}|BrAO!P4DOD26V=TPqgm3{|TZQ0cbqE&*{s0>{pDWgm;~|oPl6dG*NCDfZlJiI4 z`u49*0GXLQtgn7)LJ}5XcX(xs?X5|OB62T2RRk?ec#^+qs7%rv!t^jS-s%J{<8ON( z5-i=~uApzLGB!hyJf?jSzL*KKcQxUZXE*0f*nixb1p$p-7;!Jw+OP{hEeslFLCNN z4DhxXxZ6U&Zu=;x>nTqCN?@13E(q*;ic`N5+$FdRg1i1Hacci2PW`JuUjIe%l|V0n z-ro)M0*;fCugB*}O#E@5zpdn}r{wEvhmx`)eEkWM zuRbdI>OU^|>LJNjk4nCJNb=RAlCK_;eD$d0tA`|CJu3O?A<0({OTKzg^3~&#uO5_q z^>-v+{SC=ie?#)sLz1r^mwffGLJn8OY8+b_N2>On8BW;ohK-jU2uBD$D|~i_qavo)%u@_6!hDZlCytJuN$lZEtRw zT=ytGNH8QOT*XfCR&2nC+v4kmkCS8>DUpGI$?EfbF6SXtEy8IMPDzVKyWHGDNRDue ztUeZN6gcS&t9YCfpCw@di=oK$Wgvu8$_9JB7>lazWwv#hFs=6LgVo0c4Fr=&e6SHg z0~~z?x$a4T<<>(+rCk;#*pR)Cds<1 z7#+*Yq}pbkSD!pWGJ&v2Kfr1+A!e!O2x&Mp^#x(l9)E}52iJr2={X7KY8!(}yOjIQYFE)xp5gbC(H}a#*C3>584^RtQhI$W7#C=+CGDm ze`9aB!L1Lznyb`hgkGb;2_BQL?<(nq0KnSW28+UB*}FPc`5x!yy4cmxU8e~lPpx#4 zm7+$r6pd{V2H+3j*QkF_ejXAm9lJig$!65U0FzMCW6Z_< z$YIvvo*c&*i~Er~lGEK2_854+9~l771np7K%+VhM%u~wgz7jMiXbytrDdlvpX-(jq zz&YeL9{|tOH#uDb=mgLo0npPgQpE((38MdQ5FK!wlqx_!`6>Zs4s`xktlM>|d zyGj+G_#>r?{;NGm6`$*tQpLx8?nbKk43jBU+_hAZWgH>+r=ON8K8e^tqJIiX6`z4; zkno>^QpG2*A0+;#pj7c$T#iWM<@*nton@U9gf zzE;H5qu(dzvE9zPTj?gP5@(~Y#2!~$tNX{&>UpICdDKL9&ItK#khDO z*P1k-_$`z#b7=47IJ$)}F1{yPauov_1d0Zu2oxCy+6%Hn_O`EYeN2F7f01 zbb~qnEUl-5k~N$YI}rkrIpLUl_78+y?LpE{!a1x+!SMOK`lQ|@G~%EZ*e0J;5*>?A zxS|+2N*l#0L8%jA)6QblRwq*INFmUq93W*8!s%L3>`Oc4Z|z+4j#X?fJEpz zx(#r3>sa4>4jHKx)T|Nr#*CeP)RZ$_0-lCj>y$IP={fW7aeea$&o}=l$2Sl2dvk=_ zn}>P5Il}49!+hSnFCp(dOfAhZT4@eZO7lnQq>@73ucVZcQVLQ^C561NX-!%wX{C_c ze1KXi--NtLFD1Q{^itAGNiY46(o5wRnR`-9NiqH16jQ))Qs(~n#O?PWb1x}#|JtF< zy`;?jafXxsY8Nv1k}`My?T%#bC1vh^g3P^)%G}G3%iK#y=3b&Q_Y#u1m#ECWgk5|p`@xXir-W$xu2nR|Id=3d^AxtEa4y~JhiB`k9SQ;VDwo(%!i#5VeyAVpm6AOA5x4@fF7+f7+ zHZKrg0M1&El;2L`DfDcQPg@Esf%YVh(mI-?so8`vC$~U0!l;40*}o6t#qbGQ?7?Tw z2NQAiNy2QYJ2;ZP{EU$Yfzuqi_`(uCtKTX z8&@Of_$G}aDw?yjNG)tgb956H%l4-OO=I%ZIHa0`kINVn+I3g|n-|G24_37ae_?J! zu*VGPB1~@7gkgLahQW4kgqoH>ScSpI$rfQ}m_x!RL5`Y{Hd~dpC0W|`D3o)agm0pP zqZ4LtrIG|f?9AYj;B2}?y#WX8^tHt!AE_ptvmg8P>r#r(@K-d`eE ze;LO4O9bOD!}xyLm+W;JhMG$ZW-cL!xqK8})|9<|CB#gK8HAWMWv{PkO_-T5GvqcO zfSUE2>^0%${|el!zsTScawg>byCG-5aZ&~+Q@;lpTum9=*A8WHHDz#*Go1WayO6=v zl)?FLcO-+WDTDhHWN>v<23LPv23JEexEhtg)sPIXMrCj{B!jC_8C(s?;A&I`S3@$m z8kWJ;pbW0YWpFhpgRAez;OZMPxcY_+u7+fAH7PC2tiQ1 z_#jq?Z7f3FVCVEVCZUE%aM*@D&W{xVoQMNww??xWl95m<#2H>2f}I0uImWsofI0xu z$w%q>ptWGojGPhhjqvibx!>0!*mhEs9a+a``a zwFCx24vs=4Le9bDZ^}(CZq8)Ci{MJ*2!#;>r5d*7Dpz+k+zYopiP2RdkTEEjckXkQ z|4tIR3^h|VP#s`IS04pS4I<`E5-cfRRfLt~SN2#rMj^cx7z0uemEFJIS8?#Uou$iy zVcHunSQi2bH1)~X3vOtZ+KNCz_{T+z2Ox#A*8EL~DsGY(H7-R+wjK|kq&VS>2oiLd zU}tf9+g(n&9XRePy&0~H#o}sk!>}u6fikPMB_*qglg;n)1M3Jku>L47unuzqYlIJ2 zhq-_?!UL?s9KgCSsoXjYN7on>T|+Q*{U`)&DV6(57@9CN2t!*+{7LvAKJxx)zetwWyq~h2(TCDyM59IbDm&=~_rm z*TQnT7L?PqxSXy9<#g>GIbC~0PS@U$)3uPCuEphaEi9*NAD7c@*~iE}M)olxJnEJ` zjO<}#4>x>UM=~Fh(1@*s3MR$t`n{$V2j-g@rVm z%ZF3jMeqzGn_tWG~pae*`kmx|}E>w4y=!#t# zB~K(|rAVM0fA;h6)&e6!@LATHnJMyl_L;QZ%P3bU#_;Qyi~YKj5iEw)4g_XcGBPJD z9ASwX>Ty#|f) zLQg5=Yg&^=NE#vJHXoo8`Zp!CuOX@47-rA z_LQ-H?NG+rQ^xu@!^wZO3mI!q8LR(xM>5u)GS)vq#@a_^to_GjtUV-S?NJ$P56M`2 zRL0svGS(iIvG$ORwMS*FJtSl8VHs-=%2<0`#@d52*8Yx+wZ9=_?Qh6fdq~FG<1*GB zma+Cv%UIWg^q?-%y|HJFp|6DeJqXiaTX!rTJ*muym~@cn26O==#B1t^Noy}M`NgxV zJt!)u5sYqJ0+lwj&FVP`Ow9dT6?O7jfLt{T6oewDI#{F|WBVLPekBW%MaX3E8CH`C zDNL0Ki(tgMRK0*Mm>7FTTfiapF<_6Gr;@TNQ#yf+g*>{*!?3``Nvfeq>MvtizyjUZ z&ZvK>R;fx?Xf@OwVwP0wCE;0gw-PQ7;KT;OeF<4H(Yj<6B6;MsB$N9l%hVpLXRoFi+>(nEUnI><_F~l5I(x`;4+l?XIVIwpebnw;fG^l>ar*pKkfiQ zs76cS1(RxqD(o^Qr=Siap#aB0xQe~pK)97v*aze9A;vELD|%fNsVuz(s9y}po=+Eo zlVYDRf{7Adt^#5J76b}|wHKcaf(hNGqm;aq$Ut8MnFs$Hj^Cac=WKAyz>Cc-$DZ^T z@C0m9jtP1JnvHLibUa9x4%z{d1lWhfU=@2a(vDCc;Isd6ng6`^^v_AW?=%ZIv6pYG zZjHwDuYL?&i$#3O+WQSb_6{v4UYiitkU0D zgt)bkD^338>Q;m$Kp5M50|2%!#A}{2ebS z;z6W_gHYN>A>GYSiCXv$-xK_~f6jUHHPX$WZZFE?8BgraC%-HDLQ2DvN`UMaA*5If zX6Y>b%vmF+cr-mRnkvvwq}`*49gO6FHY7PpM1^ML{3>9fC^Flgdd2a0S(u8Wv7puY&nAbat?!rXanX zHISctS*WUv{p0+LFCC7B>sV1hLBWxvXr@`5(gY`uJDG&i=RDNTU4ogJj50PSH!jR} zmHrU4|3$in)|l92xhPEJT1EPcgwKOG2d2jvX6ddm8`k;-TZq=p)KpUU8C%5+NOOcR zV9K-ZW@}oy>LyIUwoU!I&x|RVU_zz9F-C84Bei!m@i!*i{hp6<24kwFlq0cIHPgYs z4k=H%lv)@*fx(ns!W&~PmcA&CR+-7i-4agh9ZOhCdy~If4+GrQdiY7+>JDSaIIH`S z!+h1f)F0!j?ne&uRQGadjH9|Axg)9Wy+j+MOYTPos1kzqC{4oAAEQX7Z&KZ)Ns=Z> znq<&zk}C0qNvb5Nl0mom09`VDlj)l0h1!05|z%PN23lQ!gLPL{a7VQbY9#*6#$c`8R@EOL0KN^D5`W!lPZL&o-;6NeZY)GBG3RDt>)nTQeAKI zklPeck=wGl9GODao+mrFMc}o72P^UMQANol#-k4yTSN4YKo5k9ugvnqlSz0d_X(5n zQ@$1d1`lS64aHVp3@jbLC*F|W?fE>;fahTln@=Tob&&GiqU`EEM{Kr8+1)fr&KTSx z@uLcWx#&X{Hy<6#S>oO%a%55_W&1?IpR+0$~Qe*%l} zM`oeIys$o#oSzcPp4$}e#-5Ra6QRgs4&z8g^~JBqc&`Gn@M|TV48#%_nj(;k)i>hcF%K8v#jry*2D5p_q6FAo zr5D8f7^Qmk|6awyVE_rR_G~mP-t1mBiA@5#ZDpZ9fi8gj&FB0qfzDF!$vw{cT0#&R zNj&*l+w=1mUsK|hr3`EjYm|9lo{2CvpDvuKU@$~Ej|O(r=$*JrWe0|#)T18skNC0OBa*hm2srZZFl495)SFW85d4~ zAzd_|B@3DGrNX{0(j~GWE#-jq_HZ&x9-}_VnU8MT77|uBe|wkQMOGGOn3C%1t3ya* z)RvHC2D+dPdw&&WU3H7S2o|yLnSUzri`&Uff)FLQWxtEDWWQ_F zWwO`hi;}&r>~#&e%m?~hi}bhv-m`#0+oY}geO|;njsg$#oe$a}!Gj3h7lA9R_(iz9 zDm|GZP{%?p{@DGxM*9%t;SITp5J$#53WT+tOz~C;Xjm!M!WAv~5_s_f(knoy`PB*0 zfHdwO8^&Adnb=-wjPCkere`d|b4krm)RsWc{*CQmTiqIMtHQ^5ETj|7SP|$RN!e$y zSO~O}q}N5?GI8^(*oJvR`P)9D0@LlKEBG27AuKSXus&q>vvJSXH4=zx8%1j$Oi2aq zL})-_2yaRu{!mUBZ3NRQiPE}l%#8F-xm$a`2hopQ!|1Tyi{Bf+;-yUb0wq?2d$6%U zT`;!-o2^SGQJVS3*GT9gs($%bf9oP)l{5%zgHbbivzVmqbV+!FyCdyLe}yHorIQ=S zDUG)xp<(jy%`n7gUntu*s`|ph>`=$SaKc5Lh0`U#aJ=z~aA!>O>{n;(i!d#=)P(l4 zn}fME%R-7{6iWCnJ__SkyO;(QJ+&~##Tkxn{-j^q@cHC(c#&?|Sr|aurHc|{@jEH< zA{p8T@N3l3xa=x5FO@#7FiCsDYE{A~>nktU!Spzf?Z!sx>pn9C@-FxWw@`t?L2S=n z9#eg#a7wD$izfWX)k#NKl)fqIAO#l=M{;1U+N%-s9*?w)a7fFK@<+=sceF%!qh**g zS|WVWGRze%`;zA_!?eW`qb!yXU9o(Ws;DW?{Yttb>53p-QB$7#m6SzN7D39QeoCHO zzsYlxx=89Gsf%4x7xfo;ZqgS?U;N$lMZj@Vo-5`q)#-05&#fuXeNE+#pwG2RkLw~NE_48v*2NMCp%neL`P|uk3O}-d#+=Ix7$61) zG`B`0WQtq6c`h?^bX$UkfP}FP)h4k?IWrUq>BHVK0kI>bJ8ymZbIl{=U9ckTZ52}ouAzP_5B`P#i*0+SI5iv2JmJ(LGmf7^P*%w)G?Zmo!i4rhQ?bg^9nS!{j zb=ur0CTS}|y%GQndtQ8@Z1=jO8=4Z=md7xP)fWnO&^RtZ%EnFcTa1M&kMt!0PdR#X z0)ox#ldXnHZDPACN_|JLKMIk4l?n(37c=3t9Pmvrgm5>rR&ZiC_G%U~yfC-~R}A4O zb*Q~JNNQE%gPF1J>p~i_7li1&NzaCK%Gj^c;I!>iPj2kCmtylfB#}1ZPiP-d1s{a- zCT!5ICj7(3kk+)lO-O)OVP$Q@SrR^_f%F0i0C1SNCfpe%00F>iWN~rkhqA($()M&0 z(#U(P$U4G^tUt0}E@CtFlH*+SCE7L`u6kaV&|rIRfroor$0WD80sTU1*d0EA%^-U+U1p9-u+29&UGDW$*lbZlZfQA{>jcv859VQqpYB9n&G&>>o z=1WSbBgwGraKLabBwKUn>NAORGp-_B6@Qbs;2Vwcc>I?nvq%SyiiTQ``JaVDoh4~+ z(q&-=2pBhE%@!F2V=U5eou%=~f304F35{l^O-DmYZwqzS&O12+mNw#5zWQ(vP+b}b-MOcw-m=W3b zC8^wo!TA;g=35AqZyyEZJtdW23Ca_c2SIsHN#$1p^91HWVBS9^sqEh*l?l)jpzi{p z_g|!z3DOg!|J@)x;5aF@e4Gc+B{kS@E4Az?wRC?XBJM$I*;8uyI5XeuM{3zqYWetn zZ&J&iQp-O`|#@4@oV1RBG8nQp+BdTK16CvPY$sJtVd4VX0*g zN-cX_YT1KQ%l?kkvcDm<>~Baddq`^8<5J5WmRj~tOD)?WyE@s`$*xYItMiY`WJkvr zB|AFV(HU@=|Gb;?&q=(K!zvTLu)0|QvxZYbjXmQpV8g((%)EgO<_B6=Yyd8gBmybG zs@ZN>-M{H_Kls8`zJc%KDfN@wCpNQ+7hDA<+B*bTaRF(^7uWU*s@NN`<>G6Ky)pS% zGO)FXT^;4E1?GwHeLzQ{&)KaFx*Z!Mf#Nmz)Jceeqi~M1z(u1ouv>{>T%G8F|6V0k zLA$Ne)q(C~T}Xe#G2o&V035%$RYMy>tTBgGS`DiZ-c`DD%m%;Wy%sllZvZp~oiPe3 z+u8~)7;nY)xLaw79ECPAlH=wUMcUe=xxviXJ#a-L59hqOwOA*u`W5jAD1a{1m}LrC zO-K=YYlMJ*;vVghCLp;pG>fNHPaIrxg)1WBC59=b4`wr3(&zxwgk;3tHO&4BY}>06(qpG}}*HNlRy z0jP9{PZCy-G9tn%>v)w^&pg}R z39jiwl4Uzl5?znaB)XF5N}?-?uD^-sntqY~C)t%`*WXQc1so@(|Bv%XF8{ry|F&!? z{r9`tgY^H&6QuP2@y%|e|Ic+x>Hp(e7F{_k4)&oYiQ;-;UL{y!Tg zgAKVUDE)s1p25c46qNoy3An)q-4vAmKa0yT>HqWSVd?+VyT_#e&!fks|F3L4DE)sO zKQ8@$C6+66>Py{rjRLwc~B%{qYqzu07IccF=s;kY#I zCTai7!m)58#BW|I0}sbHxCrRX7`TI<&EB_k@+rRw@4re@`6Sb6dnR&~vri<59fWH= z17Wl+uX1Jr+w9gy)~b>*Y@^l9@84QqXPF-{lapjl!=4wP6Kjr=MKMEoFzOTt-jk2c zaumUa{3(o}vEkD0<=!sR5arH6*0zEKHuy9Q_T&ajk|8yb$*tlOk%lhS2SKjOT9cHR0m3})PH42s@#NQ9r3a>OK|4sB^By?g zL-F$nf}ejBz0bqQeU6~^c^I+J5wt!JBlUS-QrdYKG|n-=IETRE{86A-QcC-kU@^gB z5G^4NY4NGBqBl>`(^GKT!3gmJgf- zqR5Jq6i&@;i3DVO-QigPT;LY7gq;v7SySwUGvI^F{L!y<5`GO2GT)s2S{zR>pT%12 zr52=S?)m2TT!nffbz;dRIMP!U?=X6T^J6WmTPfqh!g;zGV$Gg~m-u#;ICRQOAt2}A(&>#AlN6C(1p^li~yT_^Vw6vvq*k93h926 zrUz#xn%xBCFVbW%=9=>mm!y+sFKH2i&nU!;+b!qBdToC20?83Tcfk27FOD$ATp~Z~ z!psyQ0f~yxo(CyJEh9)vN-dmmQCb{@hPg%9>g8XZIT%is7sg|fJ`ha-3sfwcv=W#e z<2LEQHJ^YcAsGX)2lpjWoFr*er7~Q72?T|SO~&j-H%TC|8XN;82}>8p-tY1_KeZtV z{30x{&EwYGx0oAsA4T@{N@S!rbYbhj?v8Rtgo%6pajw^<05o{fha~;LF!Nv_$FOak{BV=_Spmh z$ox|T-K4&T8KeFsY@emi%DAj}AwWu(faK4p3D_Ke7XH~13wgUf?e;weY#Cv{mLFxl zmSNUwi7;NvFx$06n671*s*EjmnBBFEFq$0`6$U!Q`Y&FL`xDaL87Imtn(|$ zmLyw(WJ~>&th0WTbtdVOq)U=6NxJ;6kS_HXNpun~Nxb~s#7n?&QWE_*4-+bN^=~VQ zt|^IrP34Xx(KRK}k2CYlek9Q~CDD)X_a=$1DT)3QB++$L5?y~>5?w=*=o*zo*N`N- zMkUcTB#Ew3NpuZKqH9zVT|<)S8kR)Ypd`A+CDAn~iLUQRqU#%y==z2vx`rgtH7<#+ zVM%oTxFmYbPF;5DvQro7)UDa2%Pw7Z=^}u0{X~aumF^t#z@1Mz8!<;#hTWn#{KL(s znV1TywC`!s$dSY<%ofZ!3)Z!*!Gu^NC)mbko11{W@Iz1-&T8EE;#Va1k|m7C?`~W$ zx$q=JZXAN&8Y{NAIb*yQeWk59YYS6woUzG__vEI*)tNVAPH5)I{J_}3{1A9%VRgV? z;79U(4FR!A31%Frtf94$1d}exs1-k( zy^jY9x4UZ^sVkwBRVH{_1Cnrla~mU9cWLsG&2VT&$2=6_I0(ReQrW>c;`)Rxvh<<7 zi)7ak6ubT?f?bEv>l#6>>o96vBZze!Myu<-q>bw^a9U%aX$=9U^`l^^rL^%Y0aF5| zAYf`KZTw2ml%OdHn%bwNjqRJX@gv}={UT9H0F?mh?*>o-$4QCO<2)3^dypu#lqkKX zaz_%SmJ+4MnfYcv5~Y?BrN{SslPI;6DE$c%r8X*2YCkSfY9WbIi%OJQNTSrD5~UWB zD7C0Wsf8p;Eh+?G1@idqbksLK3AGmngNcM5%pT zqO>LBo{W1k?h$fsOSV1P_GH^5fOGo<)4mDIj`d#7K6X~~Dv-uDo&j9qiL4zVg1J4r z{Zsm5jjaAzATJOdK*=}uM6HBJtP28y*<)ql0SUQKp+;)p*Z7ps&!jD2cazjcc;`WW zvua|?$?w)4duM*QXZ)J0RJn5?EY^7Q-=2h4SNpF*!yB~>*khI?EwZ(b5iY<^s662= z8HJGzKszB7I0JEv?~RCw&{NyLIw%%m7k5)zE-D48gOeM(xeK`$PKla@o){=J=Z_AAnf z;hhSG`suqc<<+lF7=T+bZfbJZ!H8gmnA@9}6&&Cq_ldhS;XA2`s^o2ZqeJ&ma3{F3 z%`Kts=x3OO6*LBvs*28y+_Rznv!5ShJP8Lvn6%)!x@}lrL|hp@laOrtf+@>~t7(sF z@?)-20uW{_JvP4|v)+rZyYYc=jKZVYUSnLHs`>CPQ?ZS(6x)w76x%R6u|=4PZJ3qV zB8_09s>>-I^k4g-CNMhKd62l&n81|^du!kguJt{HmA&FrR zOALEZV%Xyn!yc3v_ID(P{SAp>e?wx}LlVOtml*c2#IS!_Vz?c$qmmt!?5G4fD*w1l zc2j&&vYV3KlmVCd&pRpqoW#2*_|*J5$uktN`T!mR6d~v$WU6h+a1vXUj*4|51lR!| z@sTF!Mo9!b{VZX#i6ziIz_kf!l^NLG8Y8~Atg&x1r8 zpluV|<2iSG8vW$sB|bna*?R+ku*@fsP0|+R+eL{LEV;T>8v!NV5=$A2kHtbU$&O@Q zea=apq(8o=+r#|RE+9%!S`cZwkYoI+3Q**(bZZc7-sViF zm77~#4-nY@7`b+RFc#1>hD<$0xMF7(eQm>4G3?~SWzo7&-|$*izX(lDsN{b)w49TGRNd$ZC)zC7BzYRg*xa;nDPz;%cbVbU zM`Yn-^I0mAATWSgkFIjI06GQchpUJxDoi*;2~sceMv8=MxX5l=Jb;Zls*g zbxSGd<66`ql0AP{Dd#gxrj&EnQcjj}q~S3Aw3PEn3=cLQrl6Gb8F&U85K~af`6LL!XvI`XH0?pY0$_`L=fFgi%{zUg@md+34 z37@2!hGjCV%;)28*mrD6w@~5+3^2?x|5!fj3!G)tSO1=sWksOF6~@d0Rq+Kp&blrK zpGkw!TWAurE5MCg6M}gqFbF1x!C=`T8~@cgxVcMV)HsbHd2tc4ALtL{Xz%loVG;Go zEjPi8Gm|A=l7E^=3Mt8PE0lu1~X#P*kM- zW5|)KcRxSj6U1s}1mcBvP58N*pzmMb2mny|`<-ZAsUtdJKOyJjdNA&BE6ja-XNbf zpwfLIu(1jksW%C(B%(XN`yTq9N09gYqo{ixM%;4*ZO_9Uam5>yyM5SOQBn2x`DOd?f!AevLRzgy+5|x6LkQA(hrC=o}1uJnWSP4qO$~#i9 z@`e zn9iK6VT^tzgC!;xU;tNnnS+5q=9&MJR-|~~>gH=F_ZrS`GbvH`AS@?| zn8XJ(#g7cc!?#wqd8kF^f!J@;B-hb z%;8C#kGE4;f|ZKTUQQsPg*jZ{q^bT$o2xs=RV|_VuWU~xEQ-`u{JKEvP9UCWtbUR zBCNobnh#Hc>?nwFt4AI?$vM7 zy#(k9(02jQ>n~Ev1nCLV|89^TaGaD{KF&kzmKyB0m0H%6TE3=oM^ek0Qp?Ag`DQ;- z%bHTl$M<`aTGo_W{s~gcIx4lSKQ6VbA*p4JN-b+hYFVRF%Nmke)~M97hNPA?Dz&U3 zsbvjIEo)F}S>sa68kAbrcchl}4XI^)Luy$=Qp*~bTGp`CvVL4@xn@@^VJ4VSkrjeL(Kz=?9fMcNsPN!Ck`97}pgT&l$1=m_21`T-jdKRjJJ-4jGiw|%xk#u* zm?SfK%nDq2@pJOI3C~VwnWP0Z3zueFSrMEhz}VhEgecq>UPY0YWDGDJPH)8K$sL7J zlM{?rD?Z+{@M^1&v1DUb%5bq{bz^2$zj_yZ4YofC)5YrWwvQqlhusO`mKsWsGC`$? z(-Y7mf%|gL<^%^{O)@_Ln|x^VBb6E`z6pXpOU`FRWqKD2 zuOm2k{ZS0O4&&c7f_>Lv+`C3F?>dZk*L?};)?w(i#$eYPf?VrI;Z{o_-B&`cgj_+$ z)lx|Jm9Q&eR}gl!PYLPTHzD0`0>9d?Z=_2ImJsZ(hF}55Ntx8+JQp$L$9aBRnN&-e z)N3ktB$H|>lX{$)Z}uaTYAKU?e7`rDR7;uEpCFTJqcW-X<1(ohl1a6wOsa)sQY|Wz zY9X0ai^`;0NG8>yGN~4lNwu&{ss&|IEiRL4L77y0M<&(YkV&;SWKu08lWK99R13?b z+Q(&5TXOcv*(YZo;q15M>yxifzCHptw@+~OoAC6kNLzf2q?n^{YB)I1+Cmmbk{Ynp zo6jo21b~5UVDo1GV&{Y=JQR>~AnZU@;FY8ss2&p2!SC5ZI`jFMf9Pr~mWQux51!XV zJp(@8%AJsyn)Dn_YTHM*BE04x#EN|nskOSL0sJh~6UVMTUf?owXqHT}kT}DPkvJHy z?FMx9zm06Z`1}|fTm84tLl6u$pC_LgqC}CG5&-mR5fBHUZ}4jfGyp0w7N*i{Lt=Or z>iQs%721W8hJm56E8Ipzape@o|Clb4$_C<4HK9f?}0GhcM;Q`-BB#q!zA!2#%0dE zxGUI$`v<=V7#rSEF-doau#G`k<$?r~y`5?D>+l390J z4_MUEP1xp>GK8c-7$(_D?T<^r8Wmv!?G+BpEx)3nFu64nsHmE+!s1#}+c49zMOc?8-LGtZe%d2c_1o{c||063H~W!(_LP1;zTcblv#0d)Pmq50QR!#@ap`9dNk4m3`q@L$&mNV2 z_K@_mN2Q-VB>n7B>1Pi~KYLjE*@M#09+!Uhp!Bo9BmL}eNI&}<($5}}e)hQZvxlXh z{nOIVe#q`nc89V%6zC59<1*P9@EMbjH0M4L; zxc^Py=1~G5!32-9&H%FtHGp3Lzo9b;%Y+&TZ^)%pju(>E-YRhPPps6y#tX(j=>RMc z-?7ey5ccNj-EG+RKx)2%hnGJFCRw`nZK{(nGemuI_*q_%01kytq%lU*i!*@i zHgN*mc}KbUgD*1MBoPL>H1^=SEGsVlD_FNGOJvOW*{?hE{p5yokN~Nf>Ll$$!T`+Q zDl8ToGa0u>P@LsXFhhdD<|D;S$jRVYLZ&s1#H<+OB1}Duzct~mexE0)ZotBX1OntD zW1g)VFZ)=SuiliVBl{UV&hL0YHA3Q0qe^D`nC zO#-d4FsqM<6|~+Jzr|g!F<8V`N8!aWGw1wQ==b~Dy@l@kVF20p!%w36dyzke=_1{^1)Y;Nd#kh0mbrIgL@ zY7bJjXFZ-$w#PTSk+MD4Ev0OaYXKaOZd1RjlO!+q1YFld?UJ9+t8_y?ac`_B?uA%J$0EgHpEF@#9jq zS7I5Ivb~OvNZBL`4olhOH^Wl4C)+XDeVD>hHb?oxU5M%9Qnop}5ZQ&uE<~gYF=q!N zI}q7{hyc#{6WxbdIuEvq3ryMSbIbGEcpT)6ZMuW+Y(5GjjyC@<9tYuFWwwD6STg75 zZ=)wRw>?6Q(LM*Ct0qAkcy^L7g*{_A%sF<8jbX_KIq*k<0+i zmXMMEtLwwGt!_$~o*{SG6P*6&6G@O`DF_}IR2R-2GbAX&#j&J>XO3i2sgFop*2cqw z326kO?so!$rdL5gC27FRF`X8EVD?rwMofeH2(!i9m|7MAXXPrm8vG7pG(wy6KylMW znA{wUk;C*@I%>)4Mm-Da=gcfS$(gyO#<4e=VAP9`ca{2%(b>B$W;ZuhmVK!xBBmF4 z{;c3wcifs8#>}aX3HfkdmhcG)(kG)0K`l%g!PThaa81&h&BN?7&s-UkIs00`I+HG7 zLE(=%10%A!p70L!XA{@h#9iZ$0 zWd|q%IG0a!e-`QdoW;%|E+7#JK|mKAoRA0@V5Q0{ga$6HTs$!zBto3SU@enyL833l zf-BtI1mGnO!go)C_lemcZ4jyLd_>wC;JTK7KvmKPDF?h9vpw;qGSXEPC_m$8pp;ZuC)fCu$CA>;_ z6@*vyQv$pCOvN*^?W=E@V$NWlyiE+>z|5rtIl)X1>{v z?5U>g>GA#EWKT6^Pk(~!sgBB?>W|BwYDo4}qq3(Ol0DU^?5T!iPccX%ow%=ocLD|7E&AwhoFT-Fc@?2UttLx zvz*aA0NL&a7?wKS@ ztYC{5=7jIf+Pjb1He8u~4*3M)AH+7!0?P3(+rdaup;6%7=fo&;Jc8L4vVqlv;3syG zfY>qz`hlW?)Wfv^c($@MJpgQwCdEC4^V}px0pjt*iS)#{@FtR)086MP1ZH9P4suWYiia)tkHz5S^4kAB!3i5W9X4EXS>OlxNdocnd-TZH|p0#~0 zZj%r{RxV!sZtr6Z1RU+a9o0=Arza#>kmxccq!dX4xITtY;9rHMxd}&0+Q%&j74+C( z{H!ip+~irtqx5y)w)H(!p3HgcJT}`JV6t`^W1j?g{WcrfVHxxz-oBXeMi{Min9W-E zC3akgiIp`*s;nVGW&J3b(o*dBm4r$XDnUY}rP%Q+NtGm3f}~3Ol-RL-6FVlklH^K~ zD@m^WkCH3x7m0HcEJ?8Z-2_X(aZ=*^I1l+=>gV59;@nc=?EZx9??K|+QsVqLGvDk- z;@nc={P=!v66cl@=RZN>+(sqN?Z+j~EhKSnQHgU4Nt|0$;@mYQ zmfg7Q#$`7y0ywu%bmBJM(+di`xNQ^eEQD^)JA8)3t0o$P6~Uj-irtdVUI`^|W6IPY zB+G%DV0bO6&29oWXXht$E?nN66j7CnwfoNh89>|l#Z-N9!mi8wm zX^ppo8?3QOi=SB;YMhdJ;7G1=RWepuWmYLn{wqwzHZLPE-~8TA(!_=1ItxXNJ=j}t z$Xx^vdF_ggdUiv;N&66!Cp=g)jKB%Q!pyMx)mO@TJOtYAV>cc^&^qTND3bH3We$=Y z>;)#>laCsLIZzE`U`%xsk4Wr;Kf`GSS^t(ln?>3Bjw|z+=w_yOb#lY7V0$$rk zL03;H5q@GWGa=Z<48=lBqvIGSx>VQ~k#!Q#~Y^>QTv5 z4@staR5H~=lBph*O!bgtsz)VLJtUdxVaZevN~U^TGS!2Uss4^+s=pzb>TgJ( zf^QzY&r;}pO50|)l(>p9q4nGa-XYH{2FB~T;?j^o#Kt+%Gv~i0%xH|>}e%vmhLHz zgt;pEWQL0$2^KVddhr>f;GqDwl8IG&90SEcvUd}D~!lnjhW=q!qH zW2t9f1+#>M+YiMHrKS~xfRFALZq2E2wEFNF=k4u@G-<{#*C$yaD@7i6Kyd|kZOt(5 zTUd9zi}H~c4&`GNjBig00<5}>{OBu92?ud@!`1<0Z7?_jLquevIXU~knz~k*FzX~AAdKob7-N#5Q;28KB?gVc<3k0?~ zncbq8b0QiMgzuqifkyU#J~kudAmuL1zflxi3rHpuCkzsgbe~=TCgL;yF=_uei!=6E zI&HzD(1}>ObAJ^dPvOSqRmOz#weX`hlz-@l&Gcs$@HW6nlhtI=h8-iC&Np+&>maH0F55 zc#>RWk%s$`UlDJOC9Qsk-1AjP7rT?q*9DrLj5Y~nW+WE`mW&11PQD}BTjx{G3Eae5 zR%yNyU98bBUTb~{%qN~P3P2|jg6Kt#!=Jcw@+`A)@@sLWZSh#wPKsaiEWdwEaDd*wXHsuAQi!)q&)UB`J7mt zCAksV&nh%6G$VIQGXVOI%8Tk0TOxBp2}9Ny*~5K`#WF4$ue1wi$z;^YCbIzz5%XC! zI`ETQ8kT?;fD6dacnUUY-5BPa8kiZ7CfZ5jDl=fMK%wi%J5)>@PZqn0l!db~|3$iC zREt>MSx9{o)nH51P~|;J?CwJUJs);I>Ica%u<;NR#-XD$7yx331LM$90*oqai2dTw z{b(mC{f4L*4jt!Vp7DE-gn1tRIR<9>CZJ3fCRvzdVMhHXnV83CGBL@-g#6|cY|Qjc zLz#?BGBU}?BqQ^`&&W)_2&j{lNml0XW@RFt;|l7VJPBe-=GpIY65%Be@?qDLWN<`p zP5ew>;!90K6e3etEqn4$VuDr7SHH?lu!%jb^Z2g`fsa0O>)q60AIT% z&!E`zXy9ThIPn_n)*h6`Q^+(&xqq(pIOin!_@EC{Qx{+TuDW<1oF7YUa&ckQu39CK zJ0Hi8Q^^?274i5ev7C6%{aciH1GWB3MNKIJ2H34-zTX7RWzlo0?m{7zQ_oQMZgR*%u^iqc=l$?Xd07IKac#`*3lFYQv2b77Sa@u zQv2b7R?-v@Q~TkgYHF`Ehvd|L_^6)R9eqep?S~I5swH`kNvh=s!TJisQS8w{fwtCL4UUv1es~76(&Dqh*j$U^3LWpMm zNH=emPM)!8RaOsPN1_vO=_m}X@v%fmau#cH^f|zvETdiA%CJq)q@9iV;}~HTjf1=S zn%nz~R<}NWMb@wfg|U>ITO1k3UMD8F)+`0DWz=V1XE1u#Uf1N-Wc|Fyk#J74@ZOyB zCOw-f%$#*DC0iMPTjk8m|J7%VdBE;qEzN_w&wxFqKKb9qX%la-LEvY159k8o0BdlB zwi(@GaDTIr%)Ue+BOkY3$MdbCCt zh~L3eQmfeO=%|Z|pAC=G7vtf-R{1=>UxY>0*ZELISbti&txbCB#w6YR>b6NA>vHt< zV&*N{Xm*|a$cu2di&P-?)-bMn^wn(A-8>4zbd{czjYTpZJu)H*_H&fV4Xb92j>6KuLb z_MvkusdId-?VfawC3TLEGgqI+edruZ>Kq?uzWQD5L+4mh=lDnH9LuoIvHZNwvBY$a zC9HESF`Z)x>l{l==UBoz#}d;ymaxvT#B`1&u5&C=onv`J=UAdT$MTlWvAm;mEbr(X zOHAij-q1OgxX!VBUgx-EZzg*)*_#RVW|r*BWM3xxG9g5>e55C{NI%BjNdm(qjO8ZX zj#d2TD6o5yh)T}72&FLzCu|#Yp521L&GtS7P$QPR`AqW-oXth-#r%o62i#*F&Fv1G z1@7B=mgh`8BQtryHfWK&srw#YB_s1+A__6Xws*a{CuyGv8e^4?7gjS%R^+&EsC4Z{ypa*=W_mwiKFCqV|#@#qv{|wP_f`CSP|#67|bZBYMR@U?QX^$ zcCk_-(9y3;b!QvdN}qxiT%-%bY~wrj{+8-9#=CBa!F*%yZ@{+C{x=zkEAqY?q77sV zUJUJLn*m?_zxtjT>mObGdstppjm+PLlU^iK*_$dLQZBw0))#}#lAL4TT;0a5LIDv~ znsnK;(?D#*+Bu#K;9D<8Vzl-&VGXU@L50jnu^%|I>a$9OvF+5fmb>~foQ-OeS;B6q zPKl6M4iyJ^p-J}>Pq%LR<9=*cT7Pjwjh33kOql85h=~ zn{1th$0c^*JM>}fy-ZXY)TF}EQbpnmR{zVL5S`45q+4d2dXn$RYr+!~>sWo_LzT#2 zv5QLi;B#d?ZswovBzG?Jz|1$nfQA6LPi$s+n>JjAD8uDv>B424DqKP|;WADUE+Kkw z8K(x9o#};_ac*h}@={BTlUhE@N7d8|zy6z?RB}==ze!%|@tM3-@=_tc`2;srzv+dO zpGtlz`KjcmlArp$_^JAf?mjuHUXsd-F;2n{U4#bufw|g`t!Q`8q?j^usz|}`i}0tzN5RZG2MNALw8@}y8HTh z-Tj(9&g^k!k2BQcT(iHK{mtxeh7isAk>2Jiea%fQ0zQ`c#yX6x!&=2-U`_39KQ~`P ztceIle6!vj-#1^?f5jqtQO(abN!GJWB+=XUr4wezc9J{!d}Ci^L%TX`s+<{nhjKW` zIs^J<=?vlhycYy^|B@J4rR!FNsm3;l!arPr`Lw zgoR?Z`6PO9|5j0pbs4EC{X4ApEdAY+bZYL=CK5fh+c-%*Pn|-YNxf$}4N2FWw~d)*&)){aGS!9VhYD z5P`RjlXq)~xLe0byLD%Z_;s8$T7!(y8e@yr&oV_V74fhCCR>zjQOs|WF?xI^W0Z_h z$ZtNu8nthV_+*ZfIZEaznWJQmVi7diqhybgJ$kZ75zk4jy3g)DwCXLj>aVrklUBW@ zR{e42>eILnt$ItX`s2)3zpH&{)mv)S{|K#m8`i3~pVz9lm{z@owdyUVRc~RfdW&h* zTUe{!Vp{bU)~dIdR=vfw>Mg2OZ*OSTTU4vw-qNbKceLv59j$tcY1P{sTJ;v!s<+Q; z)wk?EX7@3>kD>14mYv7!JZ9%HglM*pbR9S8I9l8TM`GiY@t`{9n@j|Fx%dh&8fMhI z_TuYlZ-^0I-MV+uLG04&!W)QMlVlCUf?}<+_QtR;dJh6~h#dAF6v6BK%@u9^rJG`m z5&j{TZf_x5{hrA<nSciONMuke$O_;LbpJ%bm`QdgvcRlz&zP|Rs>bU0Wi`SCG3ryz$h5+!R-?+wg_Ed@2$e#Cbw!vZ7h`9lH?G& zQPwLJ?%TR_&BtpyV4r-J=ozh2Z&;p`6|pztbBk9{iI< z9_f)8YYz=c2b8Qx9YsdM#-su#gIQni=sp)hRHG zC%5xWDwmT)dseUrGkOzFm+DV@_V%Ve>|ybhvOWWTL2Ri$>Lwjb&Pl8@m5DS8hy&*P zWJdgmY)jpTUsKf=p9gRUnCl?jck9)HTdBENHCXM7+XnN1hhn8C>3xGrR`GpCiv3%M zM=EH}&m9s8@tu>b2zF(CRq5?m_nDjsHaxhe*m=Myo6i-9;hxRkq$0N=8glzt3UV8# zAGZ+oxQ)|}TZnSp#_7gwXDa(`obTF#T-O%kxwg-8Ts>9xum2{`l{{C>Z<6bJd?weG zTvy0%KEZeOZz}ubypr=u&MP^u9Ega&-C$`J=5%&4*Sdp`lbJz zMfT{%x`m_0(y>Gkr@hUInIM;4-7}2eZf>E#_j{C!+>>(n5DeCt6W-fMks>xicMym# zD+Bv=kq+fW2o>X9rFUq|E!k5%3BR;AoAF-(P*_TrwUx~pIgGDjel-kv=#9@iUqBv~&ly=q5^!wql=@(s9VzR_!e>WzJcuwl79_M6L znMID2`t7&URoS|wuIlm4esopO8a8!RK8?H3RXrCjbya>>yUBn_dPfBl;Jf5Pus%Q8aC6TA7uIdRAN6F+Vs;hcdnuEHk=i%eJs;8q5>Z+cH2Xs}h z}Gj zpPYV(f0&ccPd-2S{1BpkD!sDNWZMHq=Bxezwm_^&~N@xb#E$!^K*@ampR*>mz z=D?T4%mH(<2;_v?!Me`si$o5|bhA)U z)Cur;tnyjsQ@BRs0w2fB@>^Eq_DhTe0^2#|o^3BTcofD3uS4eTZpjuev3XcYqOXv1 zoAgSc2-F&_aw{>v)jk&tkiCwg`671+NKAHOJzLmm@eo^>P}Ft_G| z#9(=20XAU!y9&cZWT?V35eLY1MwLKxU{{ah;hf-yPQs$uPO#V;<7KTSe-d}G4Y+5b zyG0}_L*c@$lYteHpQ#bJA0a_)#aFjF&N)f-OO;`Js22H~I$z?Laq2{stB=%HWcGWr z9VvzR3Y(W{&S=PZMH!>UDeaE=T>UVp+yiFy|Lp0L-vlP-iP9M!7>S!LPjph(#G>_9o z^Ukz~^Eh8I2f2zl##79nT@4wzWQD5L!VnxpZiDXbIY(kxBR?5x5V_hC9KaaF@0_c>vKy?pIgHE+!E90 zmasmz#Pqo(uFow|eQtR}pIf5(-13$_x4fgzE$`@aOH7|z-q7ckxIVXhUZ1;U-z)oG z+4lnULi!Ye5BvCNUsaOX#&2D0d8*H#-MC&aq#3s5=IG+#_AD`ZCAIW zkC-kIGkO&so-yFfmiwxEgW2-zSFv4Q#B#}ZRr+lwiC|!E_$15AU~atUF>3305qrA( z6Hw^(|c1=GV2 z*gTy5&TUV;#n-n;Ho0h~kPaC$e334cy-7kl5zL$PIBdTqA+fGX5p|yvyE#qJwtRENcnn1|PGD z7h83TT`~W%F1EL%kcdr)OscY@aLjlmj1)6jUfj=fm957o-T|x4`cjh^DY*JEbPH^) znR9AXve3b8wF;+2Y++@o?V*V{hAMzKgO}-5h+25uMRIFXODp5@bY{7#p&DmIxW=@` zHLNwRF|Bb8YmIA6Yh1%x;~LW%*Ra;O#YjeZ?-7oK`#LML zdT|@E_odw2eosOh;F0#m4q?2{!sx(VSNSch3=wjbUs>*GzG6Tvd%FX74q7FfU|HQ) z()OPdAcL>Bo39DTvP+MOeckL$6`*Pm|IN>KkhlU+!hVTWM0I-u46$8!Kz!~X{24r% zf~<>VI@{k4Pm;U<*F|kGNhB{q0!=bM#C$kYIBMh7Ssn2qP(CXK1jeF)&lb0Y;ibX> z*^}LPI}P5zyjiD^dlqjXjuP*UaTFL!BnFt%k%e*LoJK6oKF=`!lSC1qJy{QLv79iu zJy-{X*d`tiJ8a)y+%{(EDUh$7pLot8^JcwF@-@*87Ubr4MTW&1nRCX7wU7bGZ)9gY z5ihe|3?4*8Jh@$A^RSgr0i2(2U^LG{FHpT;jYKbM(VMVM#y{a-`03*JY^?p_vuAly zMntBZ(q_q6)@LX22fQmRdSf%+Ufr2Z_@x#MhA$QHbB zmcA@=WwB^^u6`u`{%h}2G6t35;`49sp_<%=nICM4QJ8{3*fMey(SRd~hn(N6PI^@~ zdz*i9WRZFSi?#QO5g~~KN>34a7Pml$O>#0p}L%n5ZFae$fRJm!@LpJ(iCmHbanrVFLU z+?pyyD%?%<7WO{3qtCE*ON;dCtn%d>x^dO5m!5Ky3e*Vu;=aQ?oTSgk`H3oqL#5LK z9$^mY6cI!C{w9^tEF|IlV#MF11lJ)taQ#^-a2=-s*ANA`j?;f@i27T{X}@)6YVLKM zcUps-(;DNO*3WWHE!Etw|0ds*d{fMCl5=`|Cg+r#Q^;>V!8^5YYVPEol6y+-DY>WQ zo_>ydYQN~^lYdJ7>F?&BBA%0a`Nuhlnbi6mDOmOQ(#yBh%fHrkPkQ;5dilqht54%T z^ztqB@{coL{jT<*mv5<;|0DGBZCEegeqJx%VtV-&*2}k;UcQC(@-3#9Z(+TBi|OTC zSTEmVdifUD%eSarzP+KBZ&AH`drL3h-qFjqcl7ctrk8JT=;d2nFW)||m*28~nf=S` zUxxUHEqj;QyUgBY2+?dG>055nvn;~LKmZ(sc|HlF2j^jLYPz~5>T1|tk7NPtQMf;F zBo+dR#GE0w2-(_UGn>Mj%GO3_j>vW2R z8Y<;l%oXu~I5GP-)w170x}iJTU77oQFKi1t1rSq0<3$>5V)B7eh*>rSf7B-w2d zZXbKM-FJl{x7}QY745<>TlZ-7b%FV-;+NK^#E)km3)iw5=IUcHj!iPD?O{u$bc$KC zc7O0f;xu62_98v|=omHekGKV_wz(2thZbO5#&A%3F!q!C4kIEP+Mc7r8Y(XgH$&vs zJz0s4v(SFr3Ef}Dg`Ja^uu}FeweGuguddRMx9lnv3o#5X3X%_~Zux*7Nyp`x}8}4#+l*CHus35#2JWQYzdDm(!oVt z!95UBsRgW;0AU6Dczc^**@noK?PrOVZJbouLWIgTPNr-jB4ryVQMR3_kGF9YzXcKe z7DMmbXOVkP_3>At_eAee^xji_{FMkk5quQE_m8QM`#1G*BKbt}`$qEp7cFO^`9$-7 zH=2)lPHH(H=RCS){q9=Mo?6b=+U`lq*;C8;ICJ%B+=rI4r;w(_ z%m=za|D44;KutK9lfWOdcd-JZE_RAVF!w}PI37EOH3!!Uiwl0e3iEXkFNag%x}aNp zk(Jj@22aLgHMZku^K~G862r+#mL0(5Kron|vs;G|75r9EIDg+q7nxt}M;M3`R*?|_ zA<66)u?S!ncW8`s@jEZVX&b>q6#+bCy@=J!p^jHbBhF^taFR0@_a5%E2tUu9SjR!E zg7{(75!DXf05`x$CDJUy@DV|wnikOANp45f+BsPdE?}tV(CGmS0PjdL@ zu;i5L!mq@Wi6^6Ya!PgKS7OS>bH zX2l>>VXBoq1Um7Jam5$E3RlMlbss1Eo;aq@MlZrV!($PRuVO)0i5!zyI=+QP?ipHZmQI^7I>On|o8WFWHuKF*W`jE?H}VY?mwBT24r^*VbxB_UlHp;3k8ZVSlniGli!=|28oRkmo9!4iym0r`ZftU4-t^_&ytVxIPo}#NXL1c zaGXPA<2+6@&O1}!&f`qi9AvrX7{fJxmfb3;!2L>wD;cgR!&Op&`?Ba{xsv6I`OPPo zuJTQRn`~FIUCDMO+m&qBpUifZU!Dm_#w!`Gznk%jcuqbO@Hi*y3A*4&LC3$>GXW)^ z33#pTo}LLP`Aop$%+;rHAI}7od?w&==BwY;KAs6E`Aonc@k~G&ekP#&{4)V1_Dnzt zKNC=5&jgh4GXW*`Oh5@g6HsE$1eEYI0VVcKK#4ySP@>NSlsBFUDA8vE%3IF_ly{y9 zDDONIP-4#nlsBFUDDh_k%IBX6Sh8c99n|_)FIG(c0?nI!Nu0MF0p2Zcr`FdL{+#T2I>**S`xhta_TekW zpTVw@DfpiJ$VjDUZ0|$5`JCg~)>puRHc> z9D_h(?H3ZIEQ*i~$f3>e+}^}ByTw|ki95tHi5&P*@p)j>7pVmJ#Ci|XmEiqMt3=yrsl*D6b5Nrt>lWGTkmpf-CKdo(S z&(cL~V||+0hXO9c9(G+x&$%k62qU%XR&8Z z#qL+)&%~cm{8>}6`;{0pF=!Nn){iN6>o>)2V$uJ7ELwlj(nYb-IJcKrk?I`=IYb94?SH?J>BEXQi1M6Pghe<_ebdI>ad=! z{=A;9#`JVGtf#9nJzWj!>1s?*SHpU`8q?F&u%52Q^mH|@r>jvtU427OSEG8m`j(!q zzN4qB@961jOix$e(9_kpp00jgPq$`2Bl{WI&j|H1*6d|uFC%*yAw;u&q>r&m591^( zzcE~ozc*z>gs0ntS)sgd5?A3%u_=420GthL&b7!;%$(p&`$YM9)%(>RAy&PskKpArj$7a1H=|~yAZ$2l=ERu1E zg-tt8NAaY`T=7N-GAVPiNT2B@xe|Vxb;QGLPsqu=?I^2>Jy_QOue$l_PX|8(He>IF zn0?+Z!q^+^z4|Ah9=kQxq_`CwrH`}7T&>a{A(9!5clMdIw+P^CWQn7njn!X-iX%G_ zMW}FWXT+P&06aK3#JVS;F53Ek=%5*UKKTq|V@5+t*TWcds@&Br-|UUKlD-&~FfoUU z3m;*Ph!2bO=7>L7veAU(E0}MI>s+0R`YaSCc>v3_K0$H&wBuQEZ1U{aourFE=ZGB^ zVc?qhFDpnzL`Jo5pkQxqA+|5$)$PzIRqCs&|4sBeiLF|#L8bG!XKJ>SkV1^qs!g$2 zdkYO~QT=YYeGaK#r5EWQ zEW*K4nX`f*CL%C3D&H?sx!^CvZEWKr`O7+3?~_#P5J9#6EIGA~6H{x5lv>9LsWn7K zt>Z-0x-&)RI?jZwK^A07b5bFZaX3=Y)9x45RbeO^<% zWk)SLYS~c>b=0=(re!xRyJ;arvwftKw&_lWH@BCf{1lL3bxW~Xxw@r*8ZFKUX9Gt% z3+qR;G_IJq3Sq#kz?8zxVhaLQ@Ec;Oy>Vgn-x@E<9m28^ktSa;q9u_TENjue`Dc}0 zlzAQuIV*g0J0eHG0CA-4FNfbS1Ka~xmLr9J0EBV|*kj|9$lcu4?Dt7Uar&hv#|+yn z)tCin$Ar9p5)ZI_zrxZ32U)RhMBy&rxF|Z8~(-se)kpJq~moK=xtTp(dWwEgww=#7`w2o z#9ix+@i$fhmjj=~`KwzFmU)(568U5n#^t8t#WI;IAq6+dY0Lv>z?&xN?9v543lEC7 zLNRJ*)VO}?8IEC=grqzxZOIj}mc_?%lPtYSp4lV@+pc(2ahrPzoUUbc*l5NMUr(-B z#onYdeSCEs-y|irAwpvNSu$c9CnB~G39*e65L<|R*v5&6ZD$(NZ5;V-LDaj&5byR` zwA)id`ucAo-bB1Hze&{l_)OHBs5j&{pFqC-n}#&e@85`i`!AZoM8JuF|84{v@to8Q zx`pmTGuTrz_*&aNX$E_01|MgZ0&O3f!JeAI$C>t+*mP2+>vV)Qxlt>5VAD_wY$>TG-C)qt2_L&cKPX0NIcTI>V za6)Dm!g(A7F2ULtqusg=JMHv5o?q1n`qB@y{=tTU) zM(}Klgw=f!TVu724w>EhSS!2%Yc;ejOd__niQkYlh}E<3NwXkbdzXSlX)JV-ehIu9 zc>y~*2^^!Au&3b@zd_QzgdbfLu7({LNLnDZd z_&to)IQ(-+ZA!h{SE98v{ONR_p2LgIcZU z;Q_7ID|wGl;7`awvmC1G(~t0g}g*J?fKg;CajifgqT|Bti()91BX zbF%-*{wMn%V*lr4{*(Dn=0AjJ=8v%cvoQWJXn4KF3V0o?1FOW!&i*$ry$e6I381es zK7iFtvJBu0Bzj-x$bBo%4=OdrXm-zlrz?_KumU1;7ie=5YGjcZU_cK_1NcVdJo%af z#3te1U;?mTI5xcB;>W?Qk6$(6D~tG(JXBzZr!j@X1@hGYB1BFlb}oJu z{M+iNqyLInVm!y{<1*TbSz3L5um|fVV5Q^@GLKX;kHh78XDY3E z9IwqmtTxAR+Wc9JR#K()l{hVNS`??1RB3%BR!giF#cJhaDy{NOrL`x_R({cEC2mXH z_IKm9i07m}%dK)B`mB=rtk>G^NuO0xpY=HN?(|tD^;wTI?@pgpQlIrl=(EbOKCAq^ zKC8s^StYE`DlvUl3G1^;OrKT4`m7SuXO*x%tHktKC9cmZQGHf8NmAF2ud|scmB=4WRfAanz-hWBXKRN&8{6mOl`3T>?2-klVu9CdN zQ=vo^tlRixi3!XfXwrDVtKSX3B5s2$$$eP;S+K0_o*}c&z9O7~$YTu6#ckhmB6o6e z571|ev2pSX7R2#nAMOWmM=WhO8O!XJVmmkBPu=aB*h75AzL>Ft@Sd|WQj^<0oHkL7 zv*8VlmutcBUtT=Z)5D0{FltAEX?7KXY_>lK>&sZG_y@65GBOBz#lwW#!=mBLiTMCe zss*lVpbu_9(fsCXbe1f0mTm|P3USfAO&AeIL@s6yPrziU9JoWv;1E&OzlS2S+JLwv zvF$2(oHfO|?0NCoe@kSdW|)NO9GnJee2T*J4n|Azhjlj?Q~)+A~9E3&h3;fe8X$WP{nc_T8@Ma2@ZaIS7hg!=Sh zEub?pH6-CxyoTRe*O-|EZLvD?2|;=iyn{!ta%R@T_URHf+V**ZuzkgWH>t&Ch*n&F zmQq~C>BJ>OB`)JM;u4||mvQ=V*_mE-8RxH-Aa}LIc&p{JoK;P|>g&JBTP1H5^PA+Z z9-qlwC3h9_n@{jp^_yNbIjrQclEX?4D>h?e%&6Fd^01}hf+%i>{o+iB8CWd+D?H(5iAfgoDq0k#kO3R_OB zBQ{+9TAOlkj86JMi}Xu~Yi{>_LjE?|X7X=fu(8>r5KDNx zRXA9})vtm*SpRJCnPlCuBJyUHJ{jH&)da`7ir>Rxat~(fi;vFs@x!aIH0)~gvvGB5 zgH7zy-qUmO`NR(CI@?ZZ(jjVMlg87W-7>A8LdC*$iGQS!2={zdBVAqkttR1CYU}ri_@xmgL@uh*qa{ zA1~*}V(-~F60@|&$4HI$$I^tm!sE!^*gSrr`L+q2f)-(x+=y?I_lP#S3bRBZ#!HsK zN~v6``ohh|J_^)+Wt6S+oYTBdF&o{whR-e-YA%Z>rrY^AF2wAE5Z?Vj)bWXLtqaJ|| zrZ1sN7iwEF2s3Z_sJ>03twR*r`m^-eI!>LfA=+#mr_9z6UAB%>W$Vtg>gzaHvj%yZ zHOA4bpXFy-YSmx=O^zlxnwZ}tPxJUpo+f#kkl%cQt7+e~>dDt6Uz2=I@-@FZU(=xH$x6kXcx9s_4&o6s^p`PEC z{l4t?Wxp?kXts~^`ZnD|^)VB79xd|wU-vP!Zp!8}Vf-4Hl6VC`fK3yoSJ^#ah3!i! z-6^6R|0R->J2r`m7C!)4*r@`a?YrgT-$YmLnaoA}w|7!Cw^rWEgty_5_QoWM$-L>r zprUZmU}Ym(h*F!|5ms!+W6|U(>6u|i*eSdx9>!SkQDO`zpV-MgA0%2>&c&92sM~kX z04Ce}h>kv=#GWpl%O-uDF0su3FLSuKh3H#bZW5D>U6uTM5`u@W8~Gh@4RgT!!`L#P zFpjhEk;W{O2N*SX%Y9zmX7qh6#)y#h=mqjCdX_N!r?(;PHUww4pM|p9IE>vw5Oy1f zuUiPZZsV|Z+nGjk8^=vs5HoEtytI85EA`Y!ekEQ?ycEStJvEYFiJ1~JMKM$Vm`1XH z(@4I9o%%0&rNmE(pZ;$A6!DzYE4g*=L$B0Ruk>2mJ?WKt>Xja6-kn~lr(WrC=H2O) zdg_(_2)$At)+_a&*DLjyUa5!mNS4W7kLi_qSg+J$dZixLEA^OOsmJw7J*rpg zZ|IeJRIk+E(ku0M^h*65y;6_qmHHccr5@KS^^fb7mV@x`wqF7$o)pkL*ct+vJio!W zQ4vrhzh`+?oG{bz)En1lnfC#B?RDp0v0x1*nd zvX{gM2gW>DpFnyN2dP;|))$#o(wse`H~X(xWpD*SrB=b9?n_1Pxky8-gWYG+Vf?UYx2}9-H#$n z2JocIla^Gu_&EjEO*lBLhx43-7s1Zp>alMtF3-L~ROxWD)Xzt;3Ah9>ESA^gnO`sQOYqcp5j$jo4M_UtsV0~TF) zemH;TVUzx$J?Y)thEMYB;VIIs`o~*7z_|Z&7H8Wnp2K-iO;W6|> z@F99ujEogvw#ZGEUx;kouSnMuFJZQ@&`ns@NwDKpY~OYv0}U^3JBGgnqr*9$#QSZx zAZE`R68_oYfM=t%dr^SP;CH_(#0a{s_l2!>k(YEg6|e)7)B!+4j^s*3#WF ziKF)9dKH@&ieM4oO#C2&&%(1}u|$15sK{(vhjaFMW-Mf(O`a6rG>gg{LMhnu^ms0_ z`nZ3xJij^!-N@=3WG2r-vsvz4eCEv)xo7FYQFTzq@MExJyNfV*N{)R zH+@&btd@*5k^!c7$%o}ILOd*oA0-{`cw>-oxF0%BHr$J{L89S)=s3x6&tHQC!~M`b zDa-Cjbr9j+4~?K(;`cDJGe9&!;&K)YXSLr!u1o&tzJ~U6g{+>*b>3Jv(Eu_}<}R{GAx*;P>IVC| z{|%_Y@JKKwr6$y#e7v~+RV4AG@FL~dQI?*9na6JIHJ?(}5gd^+n;gCRvfkc-bgls; z>QD{X^G;MiWSZjEYbs|sk{U;!?_y{soMb{+CSf(~DHB;xypO0eN$suAvXCc`M)Hk4 zQFii$vxvdMu~_1FXk%FjA~%_V87NZg;X(Fx+{byUWC`ZP45s<{i43YDwDA(ZVQ$WD zy7i5P`?m&A$|r*?7xx=|;qgVvFp>@M-JtN*{mfo&D`&&TXDKyJJP(kCSYi4BXP69u zaQ5>MZn4=-7RnxMl*bo{6D+b7Ia0`RU4SN`o$rqVlqXf~2`nMuF?M@6qqu1s{J>aF zZk`-tMJ$ET{5B0gjcNcn@@MJzDWm~>9v-0Or;rBld3b=HpF$eI=i%cTz-Og7r~!N) zKCS_LI{Kgn@OgMZ1NchbqZ+{14+0v%SE3o!0KR?@(f~?W9M=HKkH$5CPeNw2Lo&rR zfR6viJ0;WSHGp$=O0rXuosv*>HfNV4yCm5q8TOV>bVz3Dj&Rplhp{!n$J+ZQ;4PUy zMsReiXP)$7Mf}O$5J9YHZtn&V&Tc8dciU4$@(vb6tiH*!)Vk|N6W)+WW$zEU`d9!v z__sZGcky#Fc2F-l)c9V3Z}xtT;ud-zS7gSuH^KY>`fl>vphZ_;6tf4PxA>@MAvTyX ziwgMhCZ80d#IJwk)E8rMMdt@o-$oz)wPiW^I=(0raf4?E}S;M5?Q= z*jZR5gJ68~xD(q6X7#x=-gR;-!1K-$70!}vugV6V{SL`xygi=$rTZ*Q0%!17p5(UO zCFGfG{DXJ^Sc8QmU#!G-JPFbTi>Q8A%qP6Jy-uC1G`s!cLyVVMf;k}96A9qPh#9uS ziDYxzqXqg$vNIWk_d*=S&WwAlJ{w^7qcX5JpAC*A%TpUz=V|tJw7s9?jT1yKwJ6&n zfp`X#rh|ZG&OUb73)^L<_=>=~>l-Iv_^AXqo30mUVBO*E?KysBb*Wx%e$QA7e`5o- zhfVjjo21i3JXah86bv7y3UF;}bt)}s5$QQPPaNvxE;b)@(wFdc zI}pAv?{Bbpd-U^DIQuL?Pg(q2e8$LSc;!{_3-bU$ zN99$7P*P$#K~ ziK5o)U=-xU;`4Kqij^q63FEuTRcv?2?sGyPZWbS>I%~r3mRFtdCiS-r(SFO%Qhv)g z-M56OzGa-|TS64yGEVO;JJY}}v+feMP0@m6BJA`Au?5k0X;? zN^WV;V?Mzz)o&Wu&rvF}U&UQ_@6_%FzMNBZ}g`u9IV|6Ygn@Ac>P?=_}>uVMXrjp^TOSpQyQ z`u7^vzt@=lz5ajfy6*oa72!iOv?Sg)v&*}fmoz|C9M%iobf#lZlDplo+ zhlfOwAdtTiK`^X;uQC05jqBfQRR3Og=-+Ep|6X_L-|HUzd)=dduQC05-JyT4as7LJ zz5aboo-%pLa+JwY4tvWh_{mkc$we@F*c#B3g8&9a&|_ABEJj4S2?vSC z*jw^0KD$H@{HX3Ak72F6LGhT){B##jb87(o4s)ic!;O7CqVQgnP+fle}tR41_hznoN zYT}OurxDj#U;F|rhZrV#!}bAUer|qucp^~{ufIw~p{zC*XsivR+IGVQ>kw41{wz$e zjza`%2p(9+p@B673#{Xi!1`vI*>$`pU4#AT8tX;Z*Y=?;HM1Yti)Jqx?L}K^WK(gwC!F>+IUk>+D)gXV=0yyB5>gwXn{v#dLNp ztg~w|om~s->{?7`*Wx<67S-9c9Xh)f)!DUOI=i+=V>{?7`*LLXaT3lz>Uazy; zlG{jbBe{)Gb+#q1k-SFo8pGc53Ql7aK7)P>FSflk?qdX6;65nwjV&OaNK=ko6H$rD zhSstElYdJ)gI$B2U}g3M^VQdZNY0zIbk`2N;c#CES{T3*#afGEITv3^i>Oa_;n7AB zjqAaW#Md{yQ(_Fw8ZZg1*5>CtOXjW8F>_yJAFjIy0*{w)T{4%wMUY5#@oOp9KyEbz zlRkd)Sv9nb`IKE#CgF8Ho3)6={PGUJvs)hZz)jFct1Hg#Patqr_$Q0s2cH?{nN?VY zAF;g`I47`>z)1R@Kkk>cz`t231AE9>H19+jxS_MJ2w8HS{LJtOv!IE#8^+P+78|fx zo!oAl>_I_P14kwT!5v%#89GSq0SZr)WrWNyNC{R=qit{3gG<9-h=|2MSA59!SHar5 zf6jIBvMR_BF^{!i{%uzAl;(3wbf2YC1!iHiwtooV9Ck}(b#i|pTAM8~Kg38fD!&yp zh%2%W&r#|e&Tl+{RIS|OBJjl`abpu!l8jxXR=3*nv>U$IhMXJLzN9J1I#aK$zb zRcs-cVjG7jwl~xLZR0)i7VM9=SZ}<&wlD6f`}@e=ID6x0Z`@P&_mTZ^_Qz3=c}0)h zzv%w5PtHDh)M~O<&R#it@gi;59<(nOo!ORI>a8+A@;BivBz|X zJ+4FSQ5|C6p+oFZ9b(_5L+pEWh<%R^vBz|XeTNRQ$90JPDkzRdW12zBK5$F4Q3v-qc1SRLVf_Uex=3$o zk%`PA*3AeR6&Rb1pV%&aHt~sFDah$$G;G3O_hV9YbGJ7YVPpd%gzdDH>PqKFU-Yv#vyIXJu zj+Y9A2uHk`1Ret_;~v>}0hG}i_OqV>gcsCbc4|h-; z{<`jIO10WYc2L6@l0JF4uc{_c({;yI~l zx}Qx}@;BEs*}A2s>HhiqXqp}sXlk17<9{Db(_`UM({w-E`)HaTkuo(+@2zQK9fu&_ z>Bluq4?u1d`kkVhrbqZ0g@C81rs>h>jY7dwRMYgRGzT?JkHg0`O%F#O)HFQ~4``a6 z$$M1O^!!0U)AURzI35(;JCi&60rs>i6k0S9?T+`(J|2QH)yTFIlKGFC@%>#;@>r zdp;PeKl>SgUJSK7`sdcgGE20LoEhK&pTJY`=E*JB-Xns|(#kPfu0FYyG0*339?ZOv z<;ii@pn;_?KF>CWqpv%0$nq3kxcS)@MN!Z0A9x$Fil|%!cO>%?ONf!ohM}U9Sc@RM z#6RGuv!J>}5#A*;3kFUG2RpR*N?pNfR-Xr&&|l_+C!UL2wXUzBAk6tK=3~l6(NH&O z;fdn*xqxa{y&~DU_)5VbFmnC}EF?nP&IWkL>b_v`0{#n5%&rRpL=X|pn*_@)g27N% zkUx1!8(wA;KV{CDf9wZ9pvb83L=a`ObIEVmd==Zk2W>|SfR3Zzg;hu0SC$cC$tPhE zuJU~UELrp_wVb_O34~buf?N%ZL*#A323k}h9#VtA5U>hlhJ#;s5>|s4ORgXqtinv; zceam2bK5XamztcNG{}~-%VP^9odv})i&FAuW*SeO}x_-Q)*0rS8^gNwoI93*zx zt_j4ZB#5Q7>VRC2r?bWU5D9DFp#>H)bnZd5W6^IHKX=xer zL29Qa02q;}33o*;!TcNF(R|fz!i-`?Tnk^I(g2Pkx>GONE+fU~iVDGS9hlmS&)EF* z`G@sdrn>quH^FJ(t-zMZ<6IXDF&>8s1n-b|c@;p>cnu;nO}+eGqz0hIz<;k||HOVO z4XhM|>?DjMRt*?w2=4JQ@<@zRHqekZ?(raVg1u3HlJl7*LGoZks8JW;EEzvJ!R)sA z`cknssSYex7hiF!;toFN2Z?o9GP7zZ9re6`MOX_x1<{W?<%(Dob8f8d(dYao^(5mV z!gPsgzu0hhf5E?qmejzD^fH_c=9qZS`Z7!KmE0q7$;L)4z}zlwpWGug1>a)f2jLux zaC7#SIYxW)&sl4H%H|o!9M}qI?&>Q}9ALCJ$xu|k`i?s?BXtDz9dAbiWV3mosuhdk z9+@|C8F7p&t`fVj94x`q4_E@(4NK^LtyM<#X)QYew`B-yTYeU3TgE}QB?Pc7MTJ-XNjRX%WILGnp)$JL~|0&iK00*wZ>O^_W+nI`xaz zIFX%1b`sf1Wam#qcIr2+ccMFq?)=^8PQ-Ik>wP~P(fB6zNWMF|ZT>D=@0wcgk9X91 z*VKAHjQzc|-Ziz}_iv@rd=IU6O|ADIq4loATJQSvTJIXude^YlyT-KMHLUfnF|BtE zYrShs>s`ZI?;6v3*SOZZMz!8`ht|7Bwcd4?*1PV}de=Q#?;6v3*Bx5#8rOQ)*K57k zWCxQSOm;9-ovq0XCNr4K;IOy6f)!ka5j3Rw;1*3cMuT9nlz4maIU|PCWg3Ep)v#7% zmhRp|n?n;c3$utVV2O*cZuHHp31{H1?b~s23+i%p+P7KIV{!zs%l5Q6`BfOnBA7P) zEAg2l@rhNiXpm&%vFKTe+rs+Xq^GxiY_9GH8l|lf!}>P2ciS6g^82;skxT?$eepZJ z2^$JWHHn`QORO!Wa*#TNR+Lr_D<(o1TTH_%QJK6$J8Y5f;PXRN!-J_M>^*$UCu1W{ zXkKIHiM23%VDD$QF@t}oAFjS?S7}Q@nVBEM&*2w0x9yw2U9%v9O_0LniKRbq3&Vmz zH8=xfXnx(RtRvYF121jWaC@h|SqIKd~xz7v32 zhrp-xXMv}69CTVkfYUk-HmxC`X&ncd);H5Wuj44k8bmnO7`m~(7TIX2ef~&vBhig0 zy3tbm{E-MpA{1f}yz=?Jw+VOXz9TCq-E%5zp`2Ec- z_xIHTx6}fEyrUMlr55;M?C+%oZm9*ne@or>Mq1#OTHrrI3*3ga!0qR?z%8Z)ZecBO zi)n#dSPR@@THqGe0=JkJxP`UAEv5x-aV>C*YJuAhEpUr!f!i)EaNDB=ZhN%AEv5x- zJG8(pt_5zd*8*?JmL*%3Y+0x}+mb0urYxDVVQ+Z_OSTC^X1Iv#qhN1(B;xT2z9kq5 zohx1lY+#K8J)f{y)^}ppf-M~dJ+?T;nvhM1^H;ZDW6>BVF;m8a_pmnx{)Df9Y2$_1 z8ejmd82-mjN7l-%k2QHjRD5yOb8c?k7Ny9u#2(roX`qNAKrDtTViDD?j9f;f;kRIQ zc(d&_vbsMl%9Aldkj>3!p7pXf4${rfz9L+!%WrLO8N860q>VlJ=Y|e;_bqyQ+DSu1 z&OX9P&Z7~|+GODZEFx}hhtxbbX<)ImD!f3|btiAkZjD4K*k3Sfb^#*xz%>~BR{UC% z#skj0$hD|s7QgOUGBTFWJm8<$l3nZS^Jy%}#jS#<2L2A(VS6sIMr1##JC5NKBBC&z zR5iv>2BV8IXy%o`idX{R1FH#}zWLnFVu7&8*!C=7g}pPC?!%h~G8_W?oQm{Fl1d-hq6R)x3PQ7JIw$sQRSnX8P@Q5k z+@s~{ga1!$eAQ|ZyOj*z`fiYF8v>}dp9QD3abRi-fl}KzAhm_SsBIjG+TKhryp1Cv zTMz}=VhG6gTJ)o*Uig_05&=mBB<44Xg4~Zx6eLlQL63O_64Jlug%b@)G$hfGL_<6_ zBqEZCNFpL_hv%fG_~iiaropuw+SP~uRy0y0;^arzWVog*Td{y=C>y12~>08ZL?q1qROi&thG|q?(6e zpR3!(DtIw%Cf-lH=lG*wC*&-y!e6Q~eoF%j-f$Ak-`@Txs47>-BaAugevep)VccXS z;TO2mgK&6FEu8yWd=81+Akim*xH!XEV)H6ED|!DSl>jqfyH0@#QA-dPnFj$Jj>7l= zJCL=kjwM1L+?KjP1P9@aI3Ca4#Kw%(hLd8>fBb_ik?(r53V4U(Pg0E=pM}q^ehl|+oWaHK!dOVw>)=*oZ$DjPaa%9P~S0=jNkkVzh2xXnFq27(OBOH zPW(BE0>%i0^IlMKJ&XW~>)}Vi#7`Vy5J>zybR0zdY_?*^9tl@`l10( z^eWM-M6VLPO7!ae(5va2WsoB4u?dCS}n``!M-BPoE|Gc^#{pOne zN5`L<{rmXeN3;J}xYX?5&-Ol={YRus&Hj69_F2avif#IF&HjS`8Kv5$sAm5Wenu&` zDXQ6j0BfVv+Z5I8KPt^Z&Hm%?an1h2(FZmAkHZ6+{b%wX)$Bii5YX&D6V0e*|M`QE zW?#bMxMp8|G_Kiy0Ij3U=M>lMd;dSqfKIR1?9a)7CIgxbXs9}yll@HgGuh8!Z+Qjt zIe%k4ZFiZY-#2m3u=vU6p1UM^U~5=k7097z4|?&{*u>uPS5|VB^<;+TCkOE88f`Br zVGZ$q@)79Ntc}vy?U87SmxIdcUO2WJlHjrY#e=(aw^&(`8L(U|ZIm&l7hhqH#1=qn zncG>=Z<}pA4Bwr7#`qO+i)=;wFf6)1EZ}JkSnJg-9g8FLf&x-|m``B!{7OFOzD~mT z%;H<%xwG<}_#9COD-zto-n&Utx%elbtJY}GeonKitDnsv9Kqht!f+e&eTaF2az;&T zhWV_*r|^be=Jp_dVY4l$>MR+bJT?iAOkFey6KrpR6<*nJ6oI}hHiL1?Re%wiurowx z>cdGgfT617F)BA=+x`B-)8hnkL}l>u5TOliL7eJ_^fjpWs0P z`+8!f3D{dh;+Xi44Z!`Rqg7Z>qbjV zH(J8F(Gt^*mauNL#B`%2tQ##c-DnBxMoUaLTH?CV64i~C9lFsH)s2>2y3w*nH(K`S zMoUaLT6XA0OI$ZvUauQnl0!-kDLJH2b+#mbl>AZhN5kIo3hrnT-l#~vFdhXT$I4if z*=-ig11yY{wD+mvuSd5adsiZHi5N~s5Y&g&py{yp*wFZh0jAqRm{ngKg zWw9D~3D^}KpX)DhHC#3F+p4{pPj5BEb8%MdKF{46A~jKdL22#Q$7VTdIJ zK`i6&!}4a@$z{C%U4p&u66<@H*Y>lf{0 z_P~F84_v?L2eS{(KKSqMgCm}k`oa6z#NvK;{a{V~;M3yYNk3RqKlm{A_tFp6)DPaj zrSg9x{a{V~;2)tMti$@j`t$n18q*Kfuzs+{^n*35AFMI`U=8aBYfL{_!}`G*(+}3T zey~RMgLQ{~utxQRb(emy?$Hm{J^H~K(+}1i`oS9457yV~2iN3Ll1E7%B~+cQ$)O~N zk{rsgx4eQsS%o_}2_i;Jz|!qqZGyF85%vr^>v?i}Va{l^=>ln9%zkNM7GGy9aTCOi z_KKLs)8~fOlRE^P!J_T$Rb&Cy0SM&a{y__d71&#suw`k!uv6MG{F^vts3qO4v{!a@ z$s-((P0{{XgL(5~`V%X9*acYRP4GdYlwrl#GG|~OKuc-Lh(q9E*y;RO$A}#$W5R6T z#Gg*$oi}M|sSp5cs7!PR61(5~w}#Ih-4B=nJdbL`u-%i~#X&3$9HP0^F~dYeGUH9L zRO}fnee<;g9|ad-XAI6vv;a;k%HatDdY1db7qDK<#W%qS?d^P=t^54^Vl#5@#42hD zkW^-p=6V%N<_s`x#&D6H@wmm0vCO{uDll5I3jT%F9RzaIXgUe5L&V~3c=qNq>=RC> zxh0&1C+Jeq*}fXh*O$z2kecu!z=eH#@HwICAl72591pM5BySTF?A?Y~Bas-cN0=`v zpUqo0EzWy!H9Jnh*(1)#5xW@tRe7W9S0uPH&YI-FL_DwUG9dLHQe|HBQ@to8Q-p?j6 z{CC$3w$u!MyrX8YrDpJ9?C+%+Y^fQ%e=8aEJv4(YHG_YIX0Q!w2HVeT23t%s*ut8@ z7Sjy2ux7BuG=nXy8Ei4lU<+#oTTC<9;+nx0)eN>Bn!y&;47OdG!L~;;*!E}!TTC<9 zc4!7$Tr=2SuNmBuK}iNB8I(|Uwk3O#>`AgG!`|`==42DrWY#-orUiwr5@GDUDaG#z z$N}5u?;?8+fY5c>i-5>uZ+yY($sm%mus+*807SI;|7IQ1?q3BHx=FV>39^mtla!ez`6qAsX>^BH$KggZan0Z;F015@rU^ zzWVuz8CWYbNt`b-dxmw%RaUuoTF$dz%lyB}IPpJyXB4^BY8!luT-n{vXm!aKR^fnD zOT%dI4U@Y&Xl5s(gXfazXdy3tU(5{O&VuXuvD8ZG<{IFE!9h2KU$d*Ag!s+5E_?n^Glb@#u^4G+E z$X!@IH4d0P6&Ka}CWt$cnY!0FqsiBWd$fEA+9&nSQP?Z8vE}oFU-u+%=^`1@c!Q(c zzd=KbkKgvOSlyPWjKC3z1G6xOtJFbOVNp#8n?e2c36}2!k+vZKY5Q65Xd4HPwh(Bv zjRQto2rSyhfuilrG@jcyQn3Y5iYxm5liOpO z+#c5C_LwHOhc&r9rpfJbO>U2Ba{CTVZjWkm`z}px-=oRxdo;N{rpfI)G`T&l$?Y%K zH6m^!g7&i@D;IE_RYXrZPcr;Ds6(H z%~!XbgV+~M1Z%?QSp6oEhc@~ni{wzvN`7|%EJ+dq*EuJodoH%w`U!FZWmz$&6b5TBi9g(sR0-vxGM2r6(6;3 z9xuc@g+=3R_$9k~7kDS3cB(Zlq%=V}u8gX~kM~E*Hp;x^k_e&HPW}ypa zjx|!ftg?Ft@!%qr12K|0Cj(j|PZfkcboW0Ra6^ZwrmEZ*GcWawy&(|Gm%8pOk?){! z6gy<~4?Z5Uwymb{3os7X;_FL<=nA>PpGh7kFHdD}Tip&LEp_u=y?158JP!L=g&jmNu~IiE(UwI&qE`98}WO%XXEhK^=nhA6hE?O%bqRT zvrVZ|{K&p7`?jdZyrOrTzN!@8x__I#@1>YMT=sB(bq^QuoYZaI&vx_K{mpe-wr;80 zx_|yYx~)geo4T$0_}@pj^;o#nZQalIKDw<(q)gq`d+WAX$03k;`f=UX0|Fcco2RI5 z>k)oNLFXx|+j_K?qu}!t)ond0%|YGPUbz6_a1G=qe@*dS~J%13;Z9Nms zsBY`|gOF}Z!s57YOMW!2+j>9^quBox*KK+KKh6P6uh(tO$pIt>kQ_j$I-3*!Py9de z|6y-=1@=D+?%xE<141xdUZO5-G?5>)_8{2LQCbFC9wG^rV$q%mb9PH75?-VaHcb8| zen4!&R~EM{z9shBQ_;jOTL0@~MjnySZ2#ys4x)=Cg5uz#hV)94#h9@ju7dAcwq1OL zv_HTkv{xs|{!N|{Kgc*~4DDW4w+;|s>+Fwy1}xeTsmZU7mlJht{LC93f4^=MRGd|# zeWMjMRt9^zxKEIsnR8;8fkWi|qpv9l`6gH`v6k#Z_s^^r!4waI6!L60XE5wtFb`rC zS&!e^eh4T3#CEYby9F{ci=e>RgS`t%*bqY#iAi#&_C$E`&x!Z^zfS&%bXyUDK8$>Xo*(P-a zd4L(S_mDN80b(8bjciaQt5c6Ks#TD3YGAUiVe^a6gT)GoBwg|ee~+^It043sZA9r+ z;xqgsZ{&g_0h=ca(H+3G-GrMv3Mx-dHe?RJxcX>~0bJc0yHpL6z(g?0HXiX8ytv5z z2diR`)ZWu$JUhXnc?c+)e-%t16_jv*2A zYf*@jYQ&F3A`*#+A`vCkh#!eYBpMO*m{%YY<%=3IQHew)5|#M9P>J$QW1GlCA`^c% zG7<5d)Y!VcyobiNq{jB+9W}NkHMS39e=m(~NsaCOTPmkF(%6>N*!~e3+cK=NEkCcZ zEisL432SUiOk-QZ8ru@n*p{%yw!}2HC9JV6F^z4BYivtYV_SA;Y)e#QTXtz|%N~tw z*`u*7F^z56p|LG-jcs|o#&$_&E19iiwnEj}lB`y;TFGh+d&?^rtwq=@+HP7Ka8zc+ z-b_UgN@v#GuCdL7WT=y1v&1Ds%7jBY3lhglg3W;C;m!C54G!6g7+@GX*1GurRd^l# zo&@7H{t0O0;N#?ejj`bK;@-ph(1p`?8Y+tQ5&dL;4)X(6RbtO3EEf$|53aT{8h91a zh&V*tCU+c!r{Rk1AwiVFn*ohB!A7xVY7!7Wjwd6ZrDDMn$VB#*DbRKD5qv>&+b{rW z_1Peb7=A|ny3d$lb&LDiCKhsJCk$p1EcI>#im6DsNLug=)ak%=L5?wA*w=h?R zJqXUhyq%Z_Vkgb-;zMlNP z7{B30vhIc(NvtK>air~&gC$g77x4N;MhiSL3726x5Sy8OCW#XE_O_$=3v0*S0g0T% z9t3|i=m17(+6@{kLx92ZvtYq84iqdQkYE`H2$m2yu#5u(%bRH}m+{VY33jDRtRr1s z+l|)LT7G0lnjLAhBdw{m{K&2}yV9t~yrMI$U$mClo&LVvY5k_T%MLX=)W5q!jd)IK z?(S#9eyO79O7KD|Oy=a|_xs<}+||_FeY~UQuBPVhVeIdvxvQzUyMIef{zjU+nwq;m zLUUJ#HFx#rHFq_pxvOE#U5#n(YFKkuW171f*4)*Y=B|b{cQvNDt8vX;jcV@d4$WPS zYVPVT&0XE2xvP6LcQvNDt2;DzHLkg=axSw4?uq#(0@JZcXG!yd1rZ5Bn1CYAlmE}^vChOaVw3_BU~^ZwI@!wB>?}7>Q#xojK@6q>fhqWH{ooKf~Xm) zEPXR$#)4Ks7%gkl(822n8e9d>W1MG+7EQ1#vhYPPSw;xtLyHHZ4kK_BWNwiL(016s zPG(8F79^oFF2C;of}hCc*G6ThZ#uoHMJ&i4d(>7ozp% z*3|{GoMg`fJ|{8(t>NE90$WYyT+R<#X|a6s5wgCv*Mcx6R2p0z)^HOGJPAHz?}(#T zIr(4anHb+B!vGl?cPNYO*tuj9a5B2rmn-Nkxq{vLZLBX0HO{P$3)R zbMQ|TqTzF^Q-lq)JxqX@ird~SsCHElS6D)O`&##Jv4>f91R)Nv`itatXH_4uk=dYY zzz%1rcrW5vw(rf=zg@Hn!}6(D4{n*Z4~JB6X2TK(upjP=8S@(QVQ;nv33kFv-uxb| zR}$W+N~KmL&l_(<&mxS6)#{tuFy4fnP%nJi)lS%I9fGXZpM|T|aj0qy!Bp!wM74(C zsdXHhTHj3dxsGEaYY-P%W0=VLT0Eqs>hmKpk;Fuzm`F?2=SSiqiHk%%<`vjT`=a_x zd?fLa#77bz`JbXiVkC)?Bu4VUNFtt-y5sxVsD7y9v2OAXb}Cu#zpp!PsXP97N8NEt z-SNZN-%EGgQg?j+mag!PbjK}q$A5(GxDD%$+t2HcTTFM{!n)%Y(;c_4?zqKt$1SWo zZZX|)3+s+sOn2Pky5knr9k(62;}+E&w_Up9wnul|_UMjVOn2ON=#E=lcidjDJKmCG zOO7o$worApCBK&ZTJmed-tr1=Z4+LN*57~!!DC=AfFb|}th@)aQ-oP|>|nMy-kNoq zmy_Esc?27T0|1pX^z!KbL4Ry}S`gEOQ^7N^V(Y?BKCjHZc@J|hy*2-zBxV>VBoUik zK)Ab4uZqm?FK-2jO2?FT+a&%i(xps=fV7TXoQ&$!8mzH^7gKDx3?5uZ>ODW%Ieh z-T>7APZmLBnUjN5mByj0yPN%OsL|hkw#nbd8~iQQ+;8KJ{T6EKxABI4do#7>Hr`Qg z!ESPkb&}g_yU3nu&5!IPvy+T=l0DU$AK6W2HyQPqS9Fy9i&`_g%GY<5{rmf@v$M?3 z@~`eJBc78QH@B?!(75%~xII1OoiuJeHEs`Me=m(&PmSCCTPle+(zx~1xcw0tw?3?K z>p!n?>oJX64{O|dOykzW8n+(Pxb?8ct;aNOJ*;u-F^yY~YutKNgYRjaz@Y#%((YGjWi9-#S@A60ES2=X0$SC(D719y}i!`gDAR z&?hDi@=AEWd5US0GRV60`y_=bcr6*2{0wr&dt;~w?3vSp=j~b0Vmd=B6{!o3p2^AH z^bMef)F#{o$iODp5QrVsIt6AEjEo}G-VP#XXwrGE+I`KQ&L~AmYNU9+rCdD;noBLi z%v;ZS_Io$n;OME4=P|7xrcfn0Qo8cnqhFnlfz_lgqyA#%t(Rv$1p#IDSP`m13Wg@B ze3m|(GtluEYtnoU4S{APo3A+Rg>|YYw^E96d!Nq}n|t73XX(ApPy7KJi+GN66FgN) zm&Y@=*f$+K&jVv&o6J5%l9f30s@xBEBB(WO3mq%%50=DvSfN>1FDl_hJjbjAKCOsd zQovQW63$G+VmPSSEA2^_B8)1X834O&T7gr3bzdP?i&lu)pak3mLp%u@Z%rTfc9feAG~ev%HQNLOWRB#5{^H(i98 zq*VwZK>zs63)qQ&&f?4jtuw2QMPPm0t36{)rXUA#Rc7eut2axuxd~Ga`^PzLWyn+5 zDY>Tj`e2*<7Vp0Z0z}h6-XW@!J@G~MLtws%4d9PhA93}j`R?lHVLY^T_LeEKwxE8K zz!EpHR=o2pO%UF1EfSdE=9Xe_HWU155opKIPiBdG5w_+e^V|e0-UJ#UVi|u+?k4x) z-)FbYo5Vt9(f}uNI_q`xyP(};RQ$znj*1a?w;a%sqdX~Yd6}p-``Qt?588$wd`^fN z#1&@Pn%UXcozYrUU`~V!B{ChP(y$g)FjPF!=936|_UjTm57OQqq|TvUGW7oD<1r`z zTM~wu%IzwVY!U$BD(J}RiAP2}TzN5z5zH`E7URc*#A~cF#EPiRX8CsZxx%lF3lyJX zhR*`{vHCCv)M+-u)Qa~R#>=WeddB(!?;YJHxnh-S2TKDpGcJkjO3a3#BihIa$?!ll z%2DIFL?o-{4}KoF!X_C2){i5(A~AuvT7OOl%slKZ4 z%EVRr3sVAN{{XbYvM7splE{F45@Gn?-hoG~v*#QHojwm8 z2b?}j@9cMb1erb$eJ9=JXE8O1a(o^dK{$xw!{`QwzYf`$zUVF!-AHsJ z(T$k*B*JkYb0QpxaD@Ek6)4B_MT410MKO;4{VD&k}mhFi&sjjg&&5TyTEPgHQ*VNK@8#c>IQhD6ZNk&G% z#3!s3U8g;9bw7sQ1nnyki3nypn%-9uRW~zWI&bNJ@kM*;f;+wVo#G8wscwm-L|5xo zi56HZGjNHo-v9ktEny#g1JrbKuY2STz7m1!^X71kV3$9B( zX>Qr%6S_d6EwzRTRM+_M>SyLi+o6_vM8~lC zEK&K>mD=-x=ZB9ytd9&&e!K0cbwwA93b=`=lTR3uJ)Cp)Z;L!sM*vlzWs#EhDh)So zWOC_?8#vQA$=No69B>+fa+3mq0KEzzM4~cL=h6S7U|ggv+O);McqqyUWZV%ZCy$Dt zdd6&Q!(f(=c4qOVF^Q{$G0cPH%I74)d57DHE?A#SGc_&)z(R;LSD!Ab0qV`OEGxAz z$N*kOwr2Ts*mPT}$+bRFtetbtG6_6O!m?^zi6>s=DPPX8ikF!Tl~^H9S?F`it6)nQ ziM>03egadWGL@XiGeP#$5>>p^WM&47_!>1F(QJpu{h|xTm1*U%?peSf+r}P?BlT10 zYglLEwcKLJQkr)uGc?6x0tS{bJyO zetC6MA_NltnSqP=nHk99VhAKkL!XTjy|XhejFaq1wWJbs4n>VgMcphnP^6J z!OtIrbioo9$92K-qj6pE1C$$O%%-?5*b#wo=4^VsE_hDnESa-p&UP?obFya1nk8!% z>TBkgFlMu|Ws}eH!PHYbW4 zeFm;#8`!(OYmU5wEirre2N4}hBTgKB=Eb^*`Jh;x77g;0Q zBjD&~P^QB$NMh2_KjE+K{I>a8kcG$z_M9^r96ps8fSp`?ZmAO%Sq0dl_CymORzdc# z3Q9N{ay>EF_S_)*k<)K7KiJRg76oQQre-GXf%(}jgxtFc9B~qqs0%~+8BHUx<~wI+ zbGY~{ku9;wv%r(&6N?G>+STU}UuIowSCCb#g3KvUk8!u0?fwaS;n*%LRBQa|==0nK zBe#dA8Tsw&n45q$#$lX&43l8wjL@FyCkjn&Ipnlob|eCF!N$7Zk?zJtJ$4cgwYptE zDk7)#4p@}%K&(Cy#&+zYYQVdR?L<*(LZUa>m?O_VV~a$4iwxx3i`&?uu(U7?w(lQ+ z)#{dflQGzig|Ibezei*G$jOZABCAHNMCB!2*h#A5Dm9mFgdvQIy_-GJbh=@QdQm#|j4#I({Std%Y?t#k=%rAtgJUBX)F64OeTxK_GE zwbEsWR=PyB(q)%cy6n+PmpxkP64OeT9a`xU*GiYyYo(Xu@RGwz4sQpCworG%`dFdq3am zzGZL2q;0|O?!UEe67=}&mTQmzp2{be$F(9e@(Z&70w~?Q;s5fN_*7(0%#WNnQDYF;B&?}utuO@)c1>BjR8f|^`~i^Za@(yCvCodWwbZlb&8 z;Dxs5iZCx&omto7c24EMD%<=0B=#JIX|}i4Vyg$Y7OdhVl^&TIcA4BlRmPnfH#Ylv z8OD9^wX^reQZLzJwa{WxOe0-b~TCjCX}gup?Yz-Qe=tPOzq;^CP>#><0IBgEbYMAK4LR zM;Pr0>&q0K^^2l2J42t9><+U#%dx-t;a)JF z`>%d?-C0fD+5JvWzTEGjJFBTX`y+H`by#;+e_nT1W4f~%)}7Uu?yQD&XEmlft6|+) zjp@#6Sa()qy0aSBoz|h$!WEqlWNR}bg*Q_sL7*=5y@HyH9BAE4^&F=<0iJlT!83#e{ZB|!bU)zU7 z_zSCQ1TVH73&1X8d! z0XDZ`Mh+r%kt~GY8H;i7^ALkTr?3_*pNw%7cmXe_&M`D!aIZ~l^7yp>NL>5Q4+6GO zJyMI>JKn0#KUPY9;B!Wf4U>_G{p1;Ylc7|$*rZhxL@FvtVR@+P$(f3UQ!QIo1g<&y zD%cJ-07UrOll^%_Gv*eXA&+%I;u$%n)puQJBjZkzVj#GJMCXI;EC}h#`AY$ zJQ4p%4fuU*d@Jk!yKBH(YQR6E_l%9Hx`2(#ROLgk4O& zo;T_I=r!pkiFHKdCL9bg6CdIXhU<{s&b|(`a#-t4xdV=&5tAHEPYiNKKfMOm>ie70 zXv&y91t1ZCi`~iZum9Vcw1csOWw< zbpIF0&a4;fj^zMZSJt_43H*|g<4IlccA_sfRTkWSbT=D{q7 z+JG5Y-F_yShb|5HO=2f^!L^92U055gVl@>uM$BW?@EUAMEQhFemRf}f4c5pV8C)Pt z&?2}qQF#`&lAN;$%0eZ1kQ@TiLkwdry6h4}_0ok4!)qATD)+TW1|SL=fG5nfSp|`V ziinZp`|EBHU>gDewx4bOxADe*3pM@Qc*DPin*D9O(cj)ok-Cj{np?2T++rQ(_S){U zry}(uJIw4b_jQ;(6{#QDWoDNd?K1nz6si4-A~n0s|5x2+|Ce`jXUCZx=il9NM*JuB zac;Tqq>t;VkNbFEeOym{+*IP%AJ@bBxE|BT^|(H+NA+=ihd!=H^>KZd zKCbW4$Mrq>xE|BT^&R@S9@oe9m+RyDA=!&$FOt28vlst(PBItwF(-48%*C+Jynwa% z=Pb@xFkVm%d%qc$!kP;b&fL(qt-AhV7og2}@JTVG`%E7N+vJ?gD3}vS9LFC8t*wG% z8FN5(6G#B-APSMER>>py6VdM~(cbpBz)NVsK%~xYcYrbW2DO{tJC?ghJY*#H1~2ZE zj4W8)D*TPUM~!dss*60OO@_rUS3zLOFT{^cn2RD=7{8}YJAdJ%{9^V)co$i9f|S$#rvD^1$ZsB)>WGE ztD^eSn6o-Ok3N$tBpzeWAQs#mxDK$>B*>!WKJu^l&L(Im9$_nv{ZC@Cli%r0I40(V zGcQtU03dL6_8!3gyHq}8FvHCS`oNaR><5X*<`Im)`$~}kz=z0AN3kwy0LHTjkjW>+ z7S@+6fiJI8l}#tN4Ltg!fWz4>0ZZ0hQzn@o!~Nkn$v;E@*#`o9BYS{RRe^(SHxF`x zR1I_U^Ak^OPRPte0HPN5HoLvqJ0!&~0AxVXnCC+<1AON|K^BSOSS&V%RgnFNw6;fx z^35_TDgwL-`vKUoy^=VF2uVk9^i{jbZ>!{0?EEGSAZv}6!82J-p$@{vgk|IW?B2l} zC0SGKoO@&jx>Sz%ARc6v52Pl0Y*0}irEm z^0DboEykz_bWPM^Hjd)sR1Ich%!%+kjM+S^_}UqRb#M!`NQ=cDeB@mKPr8z$bcMix zs05fjss&@|R$nh>!y*HHnN&lYs2S)!EWeQTW^3v0JB3)cd)W&u_QMFQ*bhGn zDSn~}gK*;Kq2o~EXR|d3BYqw_4k3P4q=WF`=b`VUy8SGZ2l1=VLnGJ~QG6J;;_%mD zR#U2OKN7b}+-e_gHKpqIBeAQ*uA|-&QZR{P%N8E%p{#{zvzpTK@aJU_AF<{pMQ!$HJwS- zwET~FnOgq$*7CECL!{gE<68a)B{E9BO;IiXBm9h#a8p#v|A5y<$+#)1<$qM2gIfN_ z;p1BVhocW_`5%V|wEWNHJ*wq@{ve>`e65~iF4 z_HHaoaVsXuVI79nVvpo9usmW39?4wM#5Eren5lLA!o8h^cd(slXq~p$ntgxIAMu|E zaZ)6loW&KZ&x~Q|i+if=&2#YaTVuQVF|@1r8R!@I0doZ&05(qKAYR@Cy&!rK+ia}` zP1L=YtosKKIEatRIbo`f!s*zXJh5A8!0}Wp6Z8dSl($2i3U0po7sxsx5Gv1F>Kr3>?+8+Ra2~y zAhoc+#Cw}hA`?-W3{2IBe{FtU?w6G{#&`0u-4q`upRDdRWDLB?@O0va!~u)A2cH@8 z30aPH`Gj0{LJIQ`oG||^lrWFO2y+NRn8)FRIRqWd|N3|LuMz)A z?cRNCe0z2a{oS>DCAE7W@2lM_solGehkL6z!$_vg2 zqDv+M(;^RoY<7v{V8u7dgTy*4^eAuzQE`(on>QSMY(y`6ik*?r?g_tQ2s4qNOf>n7 zk#TO)TN^e`mwXgY;uFrMtVi>!pQI79Hn8}$$eUyV&OD3#(maw+Eo;lF8HO*&1X*v9 z`R9I(v%mxHSHDOLZ2Py+(pJA~vdl?ve#T>OF%)>rp2e5v<1I2tHV2=@PHYFB=BqOnO#DS>@wcOE};f?8E;;fH&c);SiThs5ZW2&iR`gmU*Q%xPyeLUQYq_p2%$5d0tbidQL(=pZ5G5rxb zraG)+sz0w|sxci?4eOX{OvhBiI;I-aG1ah+sm63nHLPQ*F&$Hl>zHa($5eOdm}*qV zRCno^>K+|a-J@fwF&$Igp<}9X9aDY1j%iIqJ`wpuTA}QAn~i9 z@CPaK?WyOJ&w;(+1H?@tr@q0dN)N}H^E{}%vt{-<<62|~EX5!Y=DYe8fk5c9$(8nI z4sc_^qp(4c(b{^+xsDikj>|iCxeNN1rO)`bO_vz@COA9$k zmS;SCV(-`?KAqk6X<(^Xs$lZe6&D$~y&G!v-_C+eaF4W>h8$omM?VAOA->vMrxf{{ zeVn!@0CkR_*hDp|7kgt5_KAg0zIGaSiPp5zx_FN&?~75}Gs%6>8X#q1Y4~x9}o9} z@ldvqD!8NHP@C3Ln|8m`x6`Jz)TaFr+O#&TO=~}|O=~f2S_^B_T1=bP!rHVJ)26ks zHm$|9X)UZxYcXwFi)+(bRGZdzXwzC$o7Q$|)7lcE9VUWEGEV%% zI%8~^&!wktf>&?CHIUQ004=L{xuHr#2<~_D8K!~aiR3HsfCwi@B^~o3IT7#Sf7(*4 zlAKipZ$C(bM$|Msl)B>RE5a2mR&ht&ug=`sv)%aI&F7Y8d6m3ow!}D@bFM}9B;Or< zoE9%Z;1A+SAcC9w8HfdTLYrxf3HJ-EReX)WSE!(vTYKA#;Pb4DL2g*xOOkmYzS>?3liLZNPIk3D4}khu!S3TUj7oUA zCNYZnA!1--%p{ovi(+LL;i`y2#`jep1LFj`AwS?R#yWA#>c3TQC1bE6n_BxCi^$*K z9)wlfn{0#y!D|juy>DvmYR`bU)Hv81*1P%|k>Sq*?phTpm^v%62t#v~ii2vxcvUi9 z^|iBiRcUQZ7Nt74x>a+2duP;9Z1Uve!5^tkS)-$HZJg&SoFmbds)TVG=gp{yqSy@8 z&E_k9lDv&yFsrQfNf^?T@PkBP>;#*!SvvaNQHkI|)GS0E@)QvR8?(0oo&C4OWO@Xv z-Czm1qGV($ptIEWtmaj!wySVH2T>cGr8+)6f%8Z1CW^AYlK}Zd03b)Kw@8Gyy*jE} z0u_Q`(!|my|FaV?+=jry?Pr0)Z5$-rLIB}54i0W1U~n4;1-Ca-!fxZJ)D}dfwip_< zy%ve;sf2w--bAAkjf$aBJ(aK@iAW_P6-A`_%apMFixM`GsYIp{nM!0Tk*WVCGS&a( z-PVatB|7zYqf-(8N!|T@Y*I74hwi?o?*8L_b@x4W_xJH|FBp#m#NStU-&1#gztfX1 z_j~B>d+P502;F@j*4_7?*WLG+?!Je0_dTY&?_u42kLm7vSa;uJy89m1-S?R8zQ=X< zJ*vC!J9PIws=M#IboYIa?!NEQ-S?R8zVFc8_qgu9zgl-c9S+HKCexWr=hHGHo|7!+ zeay*nCd)bOGyi*r^YbjuZrb~_XpV&QSi}YmRbp*rpAvdOq88o*i(p*o)$NoS1)s;O zj0xL(My=!IuP}2&o-Tbe9()kK2b_5phKvYi`|*$sCqD-Gp~@MKa+QOOXAx$Fm}wjp z$gp6Gv|3#KD10Hg(%vX`_WL?Z>;-coW*8@0+@_43t!~j4{}o|my~qey7Ewn~ORO8O zrQRU3&=Okg!Ip_1#Dkk(ebTH7oXSxZ@Ig;bunh5FS!Xc zg%`*wjDZ+Ir6gD^%p6QAtP|dW-)Xfu zOH}R>r>WeSReMt)PzF_KiN&Muyq-ZBtNcGb&ip`__?#KDea6J!tqM5%@l=Tl&REsN z>X4&u?kV`-N$O94nppu?$%Mpvd&eOasniJgdy$F}o98NI&YP@S{gxG*P+$JL=dwxcYU2xeyjx+$3{d3e$!esXjc?=@EA36+= z-5ZE8XzYIIFf4Yjvc@2>`=M{7I=`2GW0=hS&;TA|QG67OvBO`7!%V3<|41w*v6y{W z%#^D0kHljVkBQ#} z@1wbXtX^ua@8>LX#f$sf@2a_ecC@LvzTXSRbN|)vt+{?KTxza;x!*x^{fw8XxqfTS zwXNe2ku?3Z=K2Zqj}l5#P;>nZKcmFb6x3WlA)`@(X$oqtpH=6W=K6W~u;%*d=wq7e z=i%d;Yfs*Tnrr{TxaQgu&7kJme-P1JYgioCTGhiH zIeEV1`I6_`!Sl_@@g>KX9ABufnP0;1&H8RtX%p}~R)AehKsbqMFad_&61!+ah$qYw zh|c{kZU3c{&)h1kfH4-}$p^P+V-347H?u@? z)`4!-_R*3(lvq!L8OX4-QTNZ;mBiXZ;1g^gcmu1s`Cs~SqSPj+(kiGj4H{mE-`Kk| z85KG7=yr4zdI-A&j&+EvCwJOF&+-ochZZ;6Y1Zq4cB>wXX>)%Ff4zEac) zw$D%V*`6hm86(*JNMih_hefRU`x|iWO|(=si{Il#cs1^n6~XecK--r^m>sGeV{HVz zC*u<*PJ)$l-J7zEv)eQF54J%@=KNR-YkCo$hFM`97>+qVhtnw;WfwglN_J-=k zuWs*!2Ce7rsHmmJ!J|zHQQbR;LbGtaAd$9P+7o)(3AW5bK+F8IAj>=su*@NFWgZ7s z<`Aedj{_?6n<;kZ@s55DcJp(rlb>JP#g|mOJpcySjC}hu*WK-t*&q^`0g5p7-%^FBlK0 zl)^y@y5CFhSyJzLztfX1_j~9)OX@xU2)$<+)_azp*L#+j-m`@Do+YODEMdK8iRnE{ zSnpY4de0KpdzP5qv&8kDC93x@ zx$Rr~NhLrZFKC?M>a(vAC?|8ZiAQpGWXwe(A2x1&BmM`HL2l(+RvA>l-owc~(vr_^ z>l{x`*LSXheHuH62Ma2L7Xl7}`P!}$Qfb((HFDi5BPUK%LEYrOr~%A_ZoZn#Eod)i zu;Zzk$i?gK)_56ei=@rq?YPF zwyRs{duXX@YNOLZR)_k!`Mku+-J_+d zd$d$FrlqPov{W^&rK+#jQmu*UC#Ij6{tirkO*}vG{KWG^ea-q3EPoXopAi{aLo6a< zU){#5SeAW@wN|&jv#f?$8L@qG+XoW_TO`ign`vlm1mE7Ivm}a=Yb;mdmmpqU>;k{P z`6>aNfYVw|l$=Z7$^Z7mt&FD&wunvH`?8wPJN8}$iXZ~n+f6`~o3A;)ZDM!!9v8tD zd6NB?{+{tS_k%^C5!+z^tQcF{{4T%%>?w0W0Szx){8~g@AQtB86A6o0)%Q0Wfg%*C zNr*%CmN0OXlaG*D!sCe|2J=+6DBEG6xDOGxxKq}b9CDKyz}{d+BP_@zW5b(IvdhFK z`wtN30G5cC_FTKP{Pqqj>W$TH@2YhUk>lp~LZ<4>CTbAAc3>7JHba zN$=ui{EE618>2=dzq8_COH?w{T4X;33a9~Wp9Jid_FwkdU@s2xq45g98u$xqI{7Eq zZIkN4vLdJwAckaPR(Ta1+TL}>NF?I&3HJ^zZW)q@1cXv#HfH~e^-_Htg)_Pd_)6uo z2z$Zo*}IX}-Jr)h1bD1J3wEsIK*t&aIo5H2V-0~D>o~BnzL`pH9q+8yU{}4yI_mYc z-E>Qp+%qm`N1YvYtfOwJlKaT6I=kvL2gp;a)JF`>%d?{bNi0|krQWNMPBNv0;$ z*K99gX*OYKF4Ezh<*9djFAeuZ+$%mq_~KQNPit7@+a?XpRbT+~;H%pR-m^-_jHhbn z%534Ow*J`r=A$xu+@1AVCiomp7MYhdqRYQYrw;OG&-8Pr%;D5 zWUcKjK8$LKMcD548*#a2ItYY{`RM&cWl+A4MCK{E)EoJvG0WU?-Cl1ykYEf^u6&wdx!FpIk4!1$f zj%-LIr^7u+uVnEG-t+9%j_-Wth@Al7HU$1{KMVYAd6`@t@SiKW6T|bn!iP@gMK2i|?t6zmJD|!FWh}gg@>G zll!f7@jZ3%_d7lLa=(WzzNaq!kI=>UVO@Oxd0l*u>Ee4>7vE#L_#W29_n0oehjsBi zri<@kU3`z};(J^d-=n(tzC#z^qq_LMOBdhw=;HexU3`z};`PSQiu)-!Y10(Q4a+@r~2rj0uhOQ*AhVWmUep6&i4%2@|YTs^rr z;D6+6#zx%6cEI&c&BsY&#rV0p?IzUxji%(ISIETcUZzZT$-@jiUcZ-q&*U2`TGKP@f)S6?0K zv{g`(tJG;&3wOugRpL7F&!9e{_2Sp!m`xZKvjl1qJO#VOwu$AduZ2~2_p?#&8Q?&^ z2IRwrLC?kVVKJ-J9v3-t6MH6(s#btAz&qNT8ihxrW-!$P*+zVjIuKNhdKjw)kvEGK zWQ)jc`xRk_l6%>mjH>k{_l{+rrLtYb7pShr)mY;U5N;dAWSv=`!uRtW;uaSY?9nmGDg74clFWr)&(j8fYhBslpT9yE$F z=I&Qym974|_#I86(x8JN!dMm-#@XI4ySdGG>A!$LsW+K(+i?w_t!^Q<&zbaSwyWMr z?v$v`y;BuR&xnN|pSf}$Y&ac8Aj9eKqj2FTQZNV=ejYjw6Mi;QgAn28q2uu2XSF#9 z4SpW_PHOtk5_k}s`aCp(OA*C~F)0pz9Ue8Mn*Jj(sl=rAVNz47=|2*eN?a<6OHHp* z)7zO6pK`BAd@Av&#HSLU`tRdY)4%LZpBPnQRDU-{74e_c;NQn4vF)uhhmf9%N=2Izmo?4v2dxu_vL;I4gMourUw7LHTbOK5TQ2x zxCZ}0cZ?EiQ&fZh2tT6)+Z5H{KcKTwqHT(5@E=v@pa%bO__zlD;pl@J{Kw$|4gNEE zk81FrKL}{>pNVEvga7BY~&jbYd3VF$Nv?y*Z21CwJ0?2d$;B{vx>eDIOjTbe;iSbZWZ7@<@hVBlmW zd&4X7ySbkcDebM%)ELz*mRLIru26)nu=r0fiU9hkj zA_r(ccS_zr$9(ep{!**7@I(u68bB}Rmi4mTz%F8qlBr=IfF0~z%h);dL#={s^X=;M z3|0i=z(`i9Jh{p&m95n?H}?gyF-O{8qQuq5L!>+id_g^9DhgtSSmRlA2GqU8v965x z*=>(V4}Qk1PRi(azjrL3O2Kvy!DBK|}L6EHuBF z{(2tACFUR|F~{(T`L$R?N&WRRPb40Zcti}3D5<~xNK7Izi6|yfUZ%e;U-Z|BO(Zsv z*u;Myn<)RX|8?RMiBJ69_(a5iQhR$J8{c9P_f`7cwYMd;w;%7Ty)CJ|y^n``!FcY! z`rWm+CAGKrJ3aYwzlZj=r1tiY(B76|?QQva?QMx^Z%bHvTVmSV64u_9nD(}WwYMdv zy)9wwZHZ}bOI&+fqT1WCLwj4I+S{^Adt3HsZ_6I-ZHZ}b%MR^riED4m>$SH_a$U)F zCD*ls>spfMN}eluu25gIyoBRggx_LSZ3W0&XSWORL0v=8;4SFs-*Nksv?pXh+p*;0 zbFYmRYhI+wB#vPPtiNHitmNUFkIufHcpiKhKF3u~(qUsSTt(k)O9N$1mcS2JY4kSf zjM zzL+0YjcCE#S}a-oj+8qf>k)@;f-f@zaBqyncGM8W#rDyf-D{W)fPyCRUbEIO8LaPa zhnJyNc=_2jco}bjmr(n=jJLi^sO??GTi)f(bcM@!&$R^mttHlLEwAmfYU&CRim1zxgzRAYvTBc<0p>41IJ$z!%qx9G5kbSOBudS#SlrQ+_L%9VFu- zsOT)&hw)JD;7_*4LXp)Z!m-1{;`3$<3o9!)HBp3SvrFD*Hn7`8xCz58SR-Lc3_Lsd z+>-l<9ArSA`nMb{v$P1BNG)OBPpdAgKrAtAmCSH+E1e}H+xwsJ9nczy9PknLu0kT; z{VEo>K*_18uo+>OxLx_Sl}hI#XTS$n zsY*EBAakOt)Pq(To%}AW)|>q*_I9+*tqA+Xf9)NBPj34GoLkq%sG8rY?fpOo`of zzM0N+9mlEGAV#&u@Tv8+*i=iM=||#IiBIjrr&{VvKN6!#j4FyzwU_Bk+ZUZ_VpWM% zC03PKRbo}Y7gp8&MVp^^RpM2DH(nL-pVa2x$Huq!`+5&;eoJls$NOsYTWa&~{eYwnv-aV%q$+Lz~~?+WhuFI#fxb%bOFW!} zSAb)HQzTAe_10ntQf27j=C)wnA?G0zJCKtCpdR#hYA_4gJBz(*wK8hb;an@&puFpOX_8u&vh1@$x6*14a z3^Lu~9$;6gJ|1cYd(+_TR%!Ocj1d)9AC)mIf)3L3k%>-X16`t>;m8+X!JDA#I?sm2 zFMjWMDs3$GvwY(hn&brIgS!7^HOWobp}ixK?0NIMo|x|xw>o>%;P$YJNJRL~tl<|}o$V^b zj1eEmu@|@PCKVLXgL%LQsauM0+EagsSV=;MBVYKJCVp6%gubi3t9;sZGWPzAfScWIJE zscx_wDt|0|^Oa>zW;y31fDFelV?-*hIEznlPCVVXGiJ5=U31PRJZ2FVjJdi9c5c;; zcq<4Z*xn-9^+v5OQPC=Y;p6zN@}BmlQ{oKvBN2?6nfMQ;TvlFn|hQO-rXMw719HiPp0M#}QPHiDzY8wZowl`CPZ{w)Q7DPn07#gy@776L8 z1pi1hB+-z4Xh=^b_(viliHJlIk^V9zc>k&dPh=#KkwixRa%80ci|#nlkwi!SZgeE# zKdC$R^?4`VaZlax$NTDzd+LtwFNs5{60T@Z%^p3`Q1ikDEW%D0g8~mneN9^2JRR8E-h|>}V( z+;vHsv+x_F7}67GD}suUd`V9ynLYYIO5-Zn`9)@cL`m683IeAwK!Ts1?EwW1hc0dhmEr#$xbeG1M2wHR#9{_1)E^LpOgU=&))+%`K?zRJ zQp5(VR8Z`#%|D*=0-o)kvk1qA=gDppH?cLMgzYOLu@uhcDjdd5a7#m9Sq;fnM8zgB1Ec3x zG)marBJG&%qJw9EvSN4Ad^J%s*a#&b5i>5r2-0@3R@?>SM@K@|v-fL~%Q!RffHfxq zpM8XM_O`#s4b1B1kCqKovpXe-Yg7AXs1#{snvjO$76A>xGXBhDQXoY_R$rtr8(v zuOc&G@sik2l~sK_w8mso)`E%!RD+#PY%dVuQ@i-CK?GRE;`cI%ZDSk8@)B7mw?oU_ z)JTfxoP4&cvK8`ekvwax%E7JO*cR?Z*kV@4_{HKQJPF8fk&MK;V8hJeMPS8?u#(&n zGrR;N&M*9(@a~)+odQ?6NNt0!5s_A@Yyl#Qa0ZN@Bf-Ka!P`LKtiB+=X&u{rm8}XA zC7i*c*uW&$#TxNhtWJFdAFMv}rXIuB812PBC!!KdSAk=%5(5q4W+Z~!aU|6~dBzxA zqA_vf=yTO&%(F1@WPz)&!i@YPSR>dcGh=V_o&2tE0vj7BLOo_kvnkD{{_)Fq1|8Mb^>AQwHF_^?)5`zi(&sPmKYeJ1h6=?5-5P=seIMXcC zD`7$OPzW`ty;vXdnD5Vd(78~BV=q)i_B@w(6=$=jHW#-+o+V&zn#5{yjY`&t3Z`6U zJYtnZKVqG|!D4dnq4Kupw9eu&tPJb6xNXv(axYecvTiq@4WcMx__Vd?>V4Hv+jE?F zyHtkE79vxNHPj=5G1&7LC%*%%in^Cxmh%wBIP*=l%=9(VS#0vefyx4@L>NPpYJ!0N#zN6=w-J{6iROXCxm6&Mt)X8m=zPU(`V9&_y z@IBE`n_7|*Okfxd-&bjxSZ;e|M)f6QFh^N>LZofcERd-CbMND;~y zkm6c_hAUrvfiNK)g2z=?)m2goVF0wfH(#J4g*GAKDy52rsOkp8sA!k$K{bL60SVWX z))EJ?5-cu$e=MA9sIe}4+W6}BY1Yf7$&_?()aFzYcozAOihK2APLhvLl8;T74PGKq zja#x)|2}k*P?bNV%RPQ7@kZ%cfr}{>TG&v_YP`#@>~&I z@FY+4VNUu?so{l0GxGQ9za{2;o-G_NRYQFi=%tD+H?c~4Mbg3lCrIEWcnqoWCZ!!q zWRI88W>mM(v$Qc?B=}6N7DWVdpfoG5nN+5PhLBQFTfW78!XD`Zn4!pNe!mu&0f(6Q z$&aC-qIt%Tt32Rk?VOZ_XNgkw*irFgINS7$SUbt0X;eeakv~fsO(6~SRf*qciQ@d6gYx5yVqVHs^Vp`%|5>#>J}Ctn@I zA?Uv)F94!22HRPHYY9`x9NI2AQY{#&M+|5_4`dmDBKWOYm`);-*#`U~_CW1HZo0+n z{udTWG9VxsSst4t9uuW(e@I4!MP2-U$x*i7gfKpvdQ)|)vo|$fe4eQWnJatiGO_LE zw#~hRDKpNlt0{;M_DLSFW}KSp=3`@2jD$F3&%-ai;#CkP01A8=t2SG`_?W3=uy%X1 zsc=B#)sxsiSd`VDGAFhx9Ct)L$!N)AtJ{g~{UtHM_|&7H)Am%UKA(6Td5MaBk?3c8 zYEAwtcnEuo=hf%`EL<{K8ZOpsl{mBbykSwMU?8G0W&wp*U)%9;^ZDey@Sq|r7!?ZD z4f%PI2k!B#lXM&>!RbHq{7!IY9s*|Op9N*+aX@Acfid$q5Hp8Bn0Xw4ncqywJC7p( zbFllLW1au}+OEH(lJ_G!|Lpwtb^axlydT;9XZOFa`!6q3@|G`3-b4Ws1^8P~fbv~W znn*w*0f_{J{3rFKzLM{xCoQQbeV*<8^rR*Ar1xVescybNzq_8aq@L6#|DE)tCH16# zgr2kv>q*Pc>q$#YPg=ry(h}2?mav|*#Pp;ktS2ooJ!uK+NlQ#mTH<=r64jHI9eUCd z)svQ8deX8-Pg?fqNlQ#mT6XA3OI%M{Uau!zl2uApDOsf*tkRN-+a!lg0vq64cf%UW3Bn}D;F^N742<# zg2%F|pt$U`xTShnG7l_Fqm|YMuu4S?9B6ALpb@k5yMJ)d=e($Uf@dke-BT#|RP68=eRRg*p zh{#214113qd}9CEUVgT4Qsn1+BAQS=tsn^{CIM zH@_o(Yw!NKxYZMlHbI8$nQ8tfN31?hBIn$FgqkIRVTxev+`HuknyI7DCoP_J=NF%W zv!Jwi05f2FI4m+(v(GJOW=-)+pc-Pn#Y<)Yc87LSqOYO-T!n~Brarh2O@h)AnXZD# zgRYaIs4KK$X_9L!qHyncD)V#y_Ol|2*!nNb5x#!(G1LBA6qI)UC@nKyV7pJSUc@j~ zYVuXU<~PAp!OD5F5p0<;N}!?NaFj(@Evkr{WNNA}tm32?(#_Az9MY;EN)b9akix)<5~gZbn#54;64w453``HV9CTK zd;1i>6|DazpL3^V3FBz^EA_=yphtV()xqugCjM(XpWI{~&c0H3+(~@!CR_+L1=;2z zwm}ZDcjCcIQl%3uS$*P+*al!KSHX)f0yiC{hNq6@?rax?>TCCDT{{7pbqI`Ee-?;Y z$3d7i1i-B0;L92UUe;9Rf;gdu#}9e-aNP zX4w0Lj=tiI8S4V*VxGAQu?;)92y$uI306b}a&_ynw?ke1%*?jkub_|22CH)xOTa2< z(pd{@b>TaNiCl$2B##l*tPW((i7V=5VtcE25YdrZg*?Doz+w=O@w-`a3-OzHPkg!w zO3rzRd7K9TWD}$t4BePAET1)9+!8JVSQPdT;0yO3m{l~*OxLJ zn}17=wP+?a4mMys#QLzYNF4vZn~w3UR2CAQEFv9zZb8>30hF-(t7JT^k#)4adB}d` zaI9AK1!}|VXW60WCcbYSMDuymTBZvNVHpbVCff>&inS0kxt8@) z_!Jg?bo(UY5ov#UL!fvK{z&hzN;OARq{p$mFuU(q&J~ZNA|_v)gn2(`B`X~+UT~7? zcow#A6F!Hi&TJfHy(WnRWFqpEA>#YN#%%~_+Yl|US+iOv*o|@>7M6wde+J|KI)I@(Inw4nQJ~XSpOcUL|XrdFnRR ztwgmF)p|cvtN+VB(TQv&vh{Z(TM_?Bz5m_T-cIk|Q}6#g+xzMLd+Pn~#{eeWe1U#< zy?;-=zfb-<>HT}^{r?EPe;?NS_n+7M_n6+lhxPtFruXk*y?>AC{d-vN-(!0J9@hK! znBKp~_5MAo_wPIO{ynPq@4NK=eUIM1@6r4BnBKqd(EIne-oL+G?_Undk|s-wFp7R2B^q;dhGip(~yVdZ9MQoha15>3FwY`t#*!8}n_cSJ0 zgzdhAHvlRyyLeT1|FAqLumrK)7_#cCYVRNPH|7g+l>8^ zl`?!8d$_p$5V5Eqn15;&P#KWOo3K2F|B+#7hp+xC&To9s;+A=obphv~O0m2wTo1DZ z)L{Fh0SL@{o8od9X^6|=N1Nf#I(V=V{ycQN3H~e-1{>hdL&uxn&nP+%S9VzZDrOSLooZ1*+& zi+(CQu37KXpHn`tg1AQ;)he^;7rjN)r9e^;3_9OZ}AJ z#arm79`Q2uQ}3;xVjYLz;_1irQx7n26gHls`l(0w8HJChsDA3v5{|;iQ&d0os5%Gr zQ;);P^-~W=AJk7h4iD(3p2>SuKlS`UKtJ_NG^6^d=MO^qDG7_?`YHL*xPIyZ5saev zQ(Qmgh`>0SKfPW*H7A;%XnvykJJ9?&k^DsR6UpC!tyb`4a z8C(=$rkB0nZ3Tj>5j8H)Ag*?-*uz@G7CoF}*XRrm;N z1Nqg_?cESNBCGh&O)xf|dN()+Zv!dW#JVJ|1CrU>1*v@SJXVwJERhT=!dkc%$Om>v zzPrl#xzmH}?LeNfY)izw_*Gazd;xIoCRp<#sJbEA*h!I@0j;_Coa1resbqX?)x1V_ z6k*P9G7{zioE4kFN62zibX{@k?(>P=k{>4FUqG=9B|o}t6H^VTy8jlW)}A#N?uIyL zm@%j@HjMqi6Ocu*&x@~!?PdcEf*l@wY|JNsgYi=rzfM_Qq}}VSDg#>prlPvtQAoE}zV9pSruwDs?gbaun;bT{ooTAh+6Eb}zf3 zym<)5n|~I6kt6sud^%B#nm$+8FM78Q=hgQ8rwd!S;R=w=es+T=l z^%B#nmmOO564$Di*K5_6?(n%yGUi!&R^F}m%f2u8G_gnG8PT%J`r~0>@611A;OfRE ztUd<1Vb(&=3G$Ce8hS4XtgWx`9auMU{;a&tmTK zK{y3$qsgd>aKOwDX8_FGB;wlJ@J@aP;5saDk(QZQI0=7dmT-%C_%D2!MD(+;F!(9; z7#?(%T*@7B?_DxLk@YoLfXYgM1%SXN{5>{|_p!eA#!;yu?fq&;zplMC?cn1yCQ@J- z^7$B5 zjH9N``Xh0U#5wli9Q9>7>-t4!op?v$9f^1RX?REdt`SbmBQcM}JVO4H8sYogznw<7 zrbhUAw)fKr*VG8#k0HI?e1U#m`1qn z&4F5Ob60l8dN_mr*kG01%R#K~D3)Szh`d~U%!{DJ))`A= zvYdPHPso^LL#&lX%=VT5d!TWvK3byeO*(bk1%x}AW485uHy0v``58Hd`KNIfPJ#Jk zu9ydHS8cDPo6iH^g8ve$$bi@+mVlqw`zh~Nxk^*a|C=yA*#Bkr8B>nwDhPEE1mz&i zg6;UydKVQ@*x}~m zVHK<@!>2aCcWjdCi+kbQt1#Kh_!z#=%=4ERNiLNXs* zS(s!cpO_1yr-Is|^KKMQ=U z#kd>Q$Mo9 z&JKHDhuvPLPHkV*so7~~r~S%KyZy`Fso8C3xBYi_+Y$dsUF3as-%c0VQWyC=+xzJv zTk0b3$I#&1e1U#{iFri*N0U1W>t zB3oD&*^+mW;F+&Kk%Men3ALT0Xc;jPLs08P95YIdyg8C;N*i2dzb0a?TV_*-qXfkkjTl$R;4Asik}*~ z$?P>Bxj_>rKLb@I*?*P_huHwSTZH3SpP)x1%KXCFk&7mu|5ai_7n=u{pM{6OAMO2< zc={6=dW^O%eg=CV?A5K8ENa*^V7IpEok$B0TF+e8KjUq1tCfh#15i zpc1Zi|JGQ%tNRO|oRxc)Pt0?vpNm@swglK>JElxNk|x#ZMQTyo;e&7Qb4a8;3D{-t z8ij=0v&wf8Ji-(G!Y@HpFv1m6*Gj2H-@#B5N-*uFiI?XmfbR9JZWL3lT- zTDf0lUO{oeXiW`p@w)(LCI54NLu8B3qyf)#2eVtkO;}Nj+pMqT$A|CifWo#R7;O7l z2y7dNzqSzcwT;7GTL|*n#^J8*%@nfRINq`av6d}{vuv-$Sb8dCKN4q2oMj)*(o-S( zkyuM&E&H&R{xXGZ|Duph%q20G#9R_{c|GRRziXuvcS+nOahH()q*nSqmv5()?x~f2 zp6&g#(ml1(_hU!~H(#LNT`S#FEA5m2PFm@nTIoMRE8T~+(*5VP(mke??qRKTk7=cQ zSS#IQTIn9vO81ynx`(yWJ*JiJajkTZYNh)Qt#prSrTZ?ebl;B}eCU4!_+j2RP#m655*?=UXFC)IytyOl7jf-@Skh?fYm zt#6X#?;<$1#s8aoCv9&LG|RA8kb~=E4j+vz(HC?O&I!cc-mba&UBKs2=h&_ucnsbk z_~I%^13tvxvoLVjq;iM0Uke^a)L;E`8|UQnU>R0{sLhXugCO>>F8np#Q5aBoubX58 zV5cUSH5mqu=^*Rd1S2u5`RM+FwVZ`D@gO3Wr6vuadmCq-Dfm*Oi<vYR&vE z-a>2kh?l7~dvC27>o^2rPd~0Tdq9k%VD=Q%nmxkLD5yO}wPue-brjs5qFS>@)j6m& zdmKKlHG4Svpw{ehctC6ROx~kfv*!;2TC-=O8P%FSe-P4|Nmv}$n#qsGwPp|CVw78$ z;#xCD1jadr>GfK(IXQ;p7?NYy!7Fe|Tc^LwJ(vxs`~*#gli z!VS;@kYDKAusCb7?#Hw5fi?PPw=bgiQF>fMsuy2#^F^L>S45X=QvD2P;Uusc+lAo% zKi~(rq`g}VyOxfectgW-6U+yJ zd&jpN$ zZ^kOp_Tu+VaE_BeTunFvJA*`{gW%NE55PREHKSz=V8@`3_^a;cV0%hj-8ML<`Siud zP=t@53IdxXS5iM<8$?9x>LhH7p^U_^gUWJ`NfT6eppMqhj|=q znBPoEH;;F_bFkB$V_ok2+77p*lI|nB-0X7qb-5*#bRXI2W~aNa(=9Jk(v`1Dy6kxW z$d0#s*9m6Vn_X{qy&?ZeouJ#%JLv>V>I9!>dq16ENuA*R7)q_1FVOF<6D+9{^vQoG zonT3w;2)tAEWEU(+QRxI>8dx36|IE1eat`l0iuZWe0<@BzuzVNwOz9 z*puZY%*i6G3BE#PW9*y}o8^gfX6q#Q4J*t&b-_h9!I@7IrB}h#u_IQd2@+>-Mp}J_ zn0wZobtCTGB$DI7_NJEGV?2?$_`U-HF@SEKe)=Gtw4uaAcyMxTge*@6lu?0HVN>8? zL|PC=Y@eAlPo*WiJ=XPc*OndVp{0?uH`aiY2|i1;fQONZ@Z(7kH9CGQ+K>#cc=OTX zyY^iE?5k=7#7Le>F$4nB* zE>ime`!TB^BFw)5f!KqvKg_D}ivV?0iJWusRUm_t~7eXp=N#g*+zXCZ_<}g zgT9P6=S!$DU&fpA<<0bT%Xn9~1Uted)(tMN?F4J;={~X>%x-XBH&|0o_mLf8c7*#n z!um2jUHzh```bIi`Y-#_Wp|j};osdIM*JsrXLmb#JKb4L-P!YO@25MfsXMzLLqUG? z1^V4}XEk+aKKbvYJFBTX`y+H`by#;+e_nT1W4f~%)}7Uu?yQD&XEmlft6|+)jp@#6 zSa()qy0aSBoz|h$!WEqlWNS0v-%dozLVOWJ-pqR&wcwV*(U{D0_vCKl;zOREd3&eH>3FvW&W^{7J zSDUOsb~E%|W*ut+$=7$fFvpw|{1HnBB_u{+gTM5biuBcfg#5XW?vBunMkaOb2mVn2U?xG(c`Qv43y~avUpVEE3H)qoSe^B$}t>nE^x3 zo3G|9oCx`Z)npy94Uiso7Xa|HJp&e>E30srD`~X3F9Q|;3eG-zmaq7hs5ZNOVijaX z@)9`BQ6jFfiP$IA0yO|R1kb`wX8%h)!+KpMo0*T30R+doQu|5txC(z@@e)+{;&+X0 z*jj8pwoOLT1^xsM1lh-%$bOe#B>v7wk^#(qutuWL**`xCXJ_wlA|4*yUzlfO6~PXr z>OKgoLCoR&L^EnaY{TAxL>2QyuOD@d;d8Tl4KV?qy2%Ksyv#Ch?kQBc#9=B%e1u3s z6~hRXCuIh#Dv@dnue=E3V()EY23T2q1RvyA^fG6^;$d;iw<;PRCpK2O%E>(in}L_G z8i6qo@u(2sw>o~Z#hJd|w9MoGw zfZjR|=B;n0S6#=^q&0{ntuYj7eJz62Qm^`vC{m(G`%t8odex6ak`hVUha|O^=~deo zy=o##i6|wal!#IyN-;#K{fo{$QKdwc{%%w$;ye+tBXsUD*gb=iXvE_ZHW=x2Vp&?a;ZmsLs9Z(z&-iI`_6m=iXvE_qIdl-r_p<_IjQBmJDSw zl*v%;U?{g_CzG8_c5(+hxxIv$+=P{6=I|1%fNVvSUZfcTeOtsoz=sTxmg2t!@9F!y z(^ysVspX&|_KS_2d@dECdn+x_>1#^Vg!P0Ni z-B!WjfoH(IF2YLMelx;xDmSx<=P~o(bHrZmx(ZTt6h`Cw)$uc8704Vdp0&gL3b;jB zB4!e+ze;~^4P*0pu7bdl7wo-!g2{0_SK)Jf!rtE|D4nf~@;2TkZ=n`>8*h)dP;0!6x5e9=DMq*PzHAHjWLvBs+g{s?^;C?0 zWIvYu*uH+Or(*OYd$R1w_Vr}_Ws1@MMKSu{@6GzZyxThav+U3Q?*1&|KdHUC&)?f= zuX<{)o@aYM?Nv|h)%_S!+RYc}ch_F^)L!}IzmxW=r}pZP&|dXn?N$GI?NyIyuX!1(_;i|h!2<&tZ- zoBJFS0qEE+-S6JOfScPjacLGiB}RdNfzw`c2L^7*%@L6XhWJBVu;Z^t?F_~s<_3`Kv@%A1pq7?Qeahs^f-7WH5JV@9gI5U+1 z&*0CBvCH$*<_%Z(7<;!C(FKp;uJ6~qYNR>%9L|E<5*6?^R_7o&g6F)kfrISEVBCbT zDm(?w?g#c{Ju!p$L|!2K^X=-E&fIb>7!7N^fsrKYSR)Byaq_Y8tzqWi%iPf>V}N;* zYZVh>2S;V7Hiuwk6sDf7?V-p4~eJPV4m3Yu%+93Fb|IVX}`BsR~&tPuweQYR4Y zZ2XH~#b7_y7j#M>l(PUDhH2qzL^rZc@mZx3rsBQI4k36P{;rXccyGDr{y#Cwyk2rC zqas?{+Xsu!EhFbn55oH}V|WdI3Uk0!Y6LC*CoccOa>^W`iDW$N z>tH+fkWtTmMe5a)f?Cu;!UNod>*9(;emFiNE%~KL^)yQdM6R(eM(Y}^lylNAU}?nC zgIg^55eosl2OP7xVl`P2;s6zB^ZD7Nid>|gvRYmEXye|q8MFN`W?$KZ#66e<{&`$dFVT-P(MrHL4@k_&{e9~3@7KNg0{!NC{Kvwj9^dccE%f-0 zc$s?q_txXHjzhHC^y7N`2k9|NuT4=s{v-U1(ri;ykN<$qM(MUGs>gp+or8M($Km68 z{D-3t>hT|k2lV*QFPuE%#o zV4U@wUa!ZWll4s2Gg;3atmmAJXEL72cBjIC z+gAq95DT@~A{N1X*xLeUKeM4hv`*3@v9|Q7Ab=;y5m@L+x>%ZfJOhA)*vOd|iG+;A z_V2+8j&93`Z{xSI5#KJp@|)mTC*fDPN7kGOM59Lz#lP)+n44P=bI#cq6_E+p#@_UZ zosvmGzv+)@61hhKPV6mlpq#UN7`4Pz&`gj&J}0&xCHfLOxeMlvnYqgPHetCe-!U`A z$H@#IsyPZw5#wWE506Ja*6 z9L7UE06V)1%ytxeK1f8V%IOM|N;D#ORYAwJ|o2CIeWe3Hx)9+=!R)<~(cw3#1k>SmWm7pM*KUa;TqYiGkF#mM1wI{tmdr zx>IEweI2RWZ(?1<4S=Sj)Gzc4thJ3$cq{Te@tHan6p%`UH};XYtLPZ;BPuNNKQ?a_ z1koFA?&fQ8l1hR2jGx+0UHBlYBRq|%8CcoLKY^t-Mwy7GfYQlFNS-IE5Y33p_J&g8 zC-LO$$KQmN!Lw$8!0pYtm)#)MJOoh9KMPLHx)ZNUtD(R zi%V2rTz2V;%N~7k*`qHmF@15_p)W3ReQ|lczIaJ?E!nkX*LJXLOEPQ8tR=IygIQZ% z!m2I8sL`ey|3NmP(`B}>DNrAoGq?w1wodL<<{uot`mE?XCh3xikOngdn!QQX#e(oc zY>>u>D-!F7T3p50ui`e+#FK2V4vAfcW|6xE>*T%w7z|nI8Bt%*E<6NmX!Ch)#AK;q#+Z4xr)0Zv)B5>{mZC z*@pLn>P|;gI9N3nPWHD5y7(+%ft=IU7yAJ&xcXY0gkLZQ`sDXT3?}v)$B8wrK8B-Q z@gn%~^5j_~G3Yy^XYYk2GYH(c2=l_{WK{gZa%^+EvOTz%tD}33?X-6P{~(dac6_RS zkH9k6JTr*}u96L~TfFHkpb*jEB=)BD0+G$CbRyn;B-9rtsjh7oJ5~gr>TcVcSRIj# zx=Ck@bs@uVg4o$RoXKEarOBxZ@BFw1KZn3@{rk3?Y-h1rL~)YLeCBodQI%swQhzD(m>zi6Bjkx4`*5t&3} zej1Uf|Dv-_R3=fGzZ;c__)qGr-4@8xw&tnbIrG~9fFes`U9O`Ww* z{yXWcYwE232%U8u)>+q|*ICz?&bo$m)-|THu3?>Zjp?jwSZ7^hI_nzNS=X4(y2f?Z zHLA0&J9O4Hsxy=3>2 z-P^(LtuJBrR$=v4fflY3pK0ImKik!ZvBN+R0cb|B;?3;>bmt~{0c4PPWp8s81lZnf zEAhuX8{|%UO~4OpZJL~)&xzI2_2M7qCFC+tB{&<_R?tJT6*fBw_O9=zog{t$u8>KI z7Q}r1;@`GI3Eyt=+k=l`7Iw;5lk3Ae9uc?-xT4vCF>p@X1!VOz-S*CsSV*mc zADf@ee!RV_Qur{c9sG|PhRi<64oFq;jH4gVS`b&jM{VDv%|BTs23XcU`gJeD-A)3k zb-7b44Me1C<#UsB68SDZw^WiA`#C=-PVqU1ktKWBj#5WoDJl(n8)bKkItsf4G7iSm z1v&o2iXt)SJEN!gG%$$e5Jn<^gS}H4kWzBK@o~%pHq6X}cnRvZiX|JXB5P!KMExv^ z1S)*XEf@c5ngFT;@+#H^(;zGxdwZ3IvPIv=@>Nj6y z0~NWi=4ZqE&NADdEaXn0Y#jp0)}IB))^Tub4FO~8I4HJ;0I_u(3|rq!XT6T2F>4Ts zSz{>7`dS30rOx^zQJ6$w_MtE>b=Dt=#3T~44~c0n(^y|p}`!O`aH(#LNU1!}=XYG^!PCDzB zI_p0|XWfQ%*6rtY)-9&9Zeg8ui|MReSZCd0I_nnJS+|(Zx`lPtEvB<>ah-LG>a5!i zopp=qtlKV~b=#w}ZhLgrEvB<>J9O49uCs2h*I94L@Fl~S4BrlhZ%cMB*}Y`$!}{!fibPk*j22N?3Bjv~3I~}z zut+d1W`-*Q(%8FCi_Z_3nPKwMHX67ho<#g$6+WYP#2UVHD`ahUbF#N83I@Pju|o-C z276}(uTsO{@x~m3HDWmzp8-$-=F_lrY5-vzkFv{4SI*+-zcMV7GiZzvOpzQyEF`C2 z1q{1L^d+mXItIdtuU7$__@oO<%^LA{mHGk1nH)XKTmc&3aYQxZ5Ejc_7;-6=c99B) zGs71e3wRMbKlloAm9qdBXSM3$pV*sFsTRmB#D2MJ&U_VE07!)Vz|yO;k7*BkSbNxG+QS~#9`>mAu~+QYs>d)VXJ!~SyZ z;d)T6g)Wkyy?6>B;M3EQbqS{wdXz#}>DdiKmCQ*v)px)cmNa=r?UJ_Wov8>w9;mx1 z46P3kriY4~Uf2pr!P>yN>3<{ zY7m?icE=Jil@95Q%3aV?x^?*H# zh`{y+IYD$_AYobh(>5a`_>SkZR`#wk#(@7-9}jrDz5PqtnI^m_%^hd3cV!Vj1Y0}_ zvOS9>5(8|Xkmj~ytS{MQa_b;A*lrBnEfj48iiES+H5SJi3@kaiE#R-jo||B-Aeb~+ zWM1pn1*PY=td3n>b_+1uT;$B;8bMTT7YoT9=7m-MCk9ZTNPElYSP?nS_WHoT@pz8k ze9rAHaW`KV5J#9Z(?$qJLPR9vFb|XHPK@m%I)Yem7YCmW%La?v0ICR3V|zzp^)cH# zOLYg*!whf2wc48uh10ejW|~-3^>u6l{(aiXzBYM1jI_w>A=nz?-tE8Bk4^ugvC5t-d$PZ~CyV%xXsndMC(mK6_v_%r zw%W3`jDm65tW$mAZTEGf8nO4--{;0^8=|CGuIW8Rd&P`0bL0keIMj03izykXI#_KX z&KV)zk1ERc52W@(KyJ>Bi-CUM-}6_0guhT?XC6;O*H^T3+Onx^m~2je$nm*(R? z?udT>_si;;R+{{~y8TgapdP~?Zen5F8LAN5nUl&I0RWZn#k~SwG6i7u^&!WZ;!&d8 zB-bULs;05Yx-oxvvc+6#1Ns0gYjGc=vL-IuUX}P5U4rPd=xI>9m~Y>YCu{R9c1MiH zW9d}PF7AI#+Jj)A`b>UWS-6t@|GvtDxdgh7)lG?8L!@SfD8ZfExetjn!|iO6Y$hp+ z&{}knz6Z;{M!X3`QSL8)e?=Hv!5Nm}I-6WMOQptBT~gmRqKlw1V&i!Xs~ zx=Gq*IhrpqsR$+7Bum4!NNkvHllF_!dX>k+ZaYdTQCi`Bv&1~?ki2DDXz7q_XIU~( z@g*k0=`#&fm=>GKUZSH$&c=;b$>>&f^DVswQzTssy^?j$Of?HlABp|Xeid>jCPdXu zmcU$Xmu#v2Oxr~~x%hH0Hq0B3vyS%c3(BZ$FWcsGLcXL%v8N!G$AX4qr|PW^Qd(R@ z9%rQmp^@p4MWdjyf)@Nz%vN zaPl;&y5h*6g_Wm}>gsWL0A8L#s;kH00hoCTsjeP}kE^a8b?Bh#>T&qE>gwU{gQ}~? z;Q`gvGo6pBuAV;#sIHz#XH<3d{6R={CBboAbtOLNo-vb_C9x9lIkN5b>qyAXhOTcu|ExQ!W4qkoe?(bgs_ZSm+}hLa!j*hByb&Ay zg#)VYsYG$x{XnnF+!BL}``l4LHG7bcQJwtTvp{Rum_3Pp^t&d;pQXyG694QCG=O}{ zRS6429*1GUzo^-WB6tdC=3c;{Ssm7eXv)Y>0^D#*+F&_0$}5LJg#z- zSZ;fQ;G4xQ3VS0n69??ALf}KJ$knfFyF69DE>#?UO-2H?BAyv&WH(+W=LTRkrx-`Kt{WoO1t5g=tSb%B}#! zKg8p+yz)htmmPa{?7w5jUcM_g zvun?;J-hah|Duu}D>q9_xmm)>%@R{?mauZO#FU#QtlTUynpg5>;-N z9m>rTRc@AD%FVJzxmoroH%m;pS#~HlOI*2GUa#C-k`qc!C^?}WoY0bdQ1U^^2kqd4 zmX~lri|{~(OVcKt+&Xl(fRorG4Y$4ZfZT!aa`$w5)h)%|VnkC8umP^ue8sQ`>ypV4 zL}T$V!%>;<*?&vyGAIRBhR*>uXlL$Yvp4U_Xzl$T6Y;_di$MAFPg;*k-6WAL~7FlVMcn)sMjB&qbY5KG#!H29qnfxmD zwlayM#C&QAe2)8qA38}J2)5e=BPMcV;~c|zXe5cUc)z{f3=1Y>3gW_?kO3#DUOufT zV(Z^`0U?@p!H$V`%rlXrOYG;~?Ts7M50Vq9g2+zf4SOG>G}_Dzvvif%R)jgD>a&+z zV7*6Q<%^&@RcZq=%qF}QD@*=iP2p2)i~Q)ga=W_9{pF7!VZ(KqhUhLZ5ZFw zcag2KTZz?^%rmn@{OfKr_6APnYny*Uq+)KV4E4=mRKJ{=nuL0ctHX0OiOpofE*v6% zu?j{--ZKliU!}@8uTo9n*JKsqz18s8|G`&B@j}a}SGmgSmIf?C#bGa3U`2?BjE#6p z6~~zG*Rl+J^fTi@^JzCAvkZYT%g+Ka%Qy(LgaDXj9DG?qz{@fYx-4&|0A0qr{w3J) zFR^Zad2Od(Qvv#s-F|la`?~#_3eb=2__O2R*YVevDM0HN1!#8u+4=v;oqzq8JwUVj z&+h;4?*1eGlS3b+iYbr_aM;_f=-$_YY zQ%U*+u3ZDdE0G^4})AP~J;AeDoSj0h)XMCS13i50|B)NlzWtG{b(O|xLhZufLjx!I# z_W6~>w@E;YN&Mbg51M|w6ZoXK9g&-OzW*v#W0-TO*Ia*PD2VM(wDu9_!2^J5m@DPs zuqJz-*6jDfOv1^*C!GXIrYgXnY|j?K_HKf=SFt{8DybZ#(qOg?Aro}Lc4z=CrNvu( z&OwCDCumNa+Ygy#l09d@HjJxdmzCmUXc9}vbmaGw#Kldr!73h!EnS3x!-^OQGeiAD z6l5a9*Ymk?I_Kz*~i67ZRW)Hcq zhis`&{K!5s`^bHLWP6!Dv3=1eWVsUSwdTXhA z`*>f~TT9j3{kkk!@jHDF)mux|+x^I+o9jEN-dd{O{vg#`8&aE39Z!M~NYdchLEvkBJyHsy&kLs=MQN6X8>aFci zy|uXNt-W6Lwk2bcj72gQI~a>C*@|QUa_U<2y_QZ3yZZ3yi? z(F2>pLdgp>DfXV5)&1rmIGRNgEP8c+I?1<;hcnZL;CWaUnGswH?A>-7AOjxUhnOit zWxJn&h|LIR$w!RJ-h_nTl*d{j=p@A>};r;bl!$z6RW|@B|G4q zcm^54VjlA;e1`!r5AsGMF>6z<3L6}h`ry` zii96ACIU!I(CNlAIuEM==PWe8FFUc{zay(tTKMrd`+2o{I?3+p({QKi?m8~H_Y|o zmXAI2Ti%#uTqC&A)kn^lxktS3D7DH>W*%!H1KVy8WN)eNtX^IGe~>WhMsR=T1T65Z z*@fH!44+%2!`Os9SOkW*egyEFuJG)uiRYfAXCeMmw^ylZXJNKj z*(O}%Ro0IDWuFkK7PoVvG#Q!5Z10NWnCcdSr!a5$oz+&%=J(6~EK>Q04bj z<=>Ayy1BlSD!->H{|{2-_hD6j|9Mq@kE!x|Se4&ns{9^S<@cB>zlT-%J*LX@Y%URfwzDf?XXx6)uE(zxn+V znXps5c@{3vc8ehzt!{(FZM@cYMiP&)Cb79iGulbGAKFse59aDC0<2;?`p`XJeB@+d z;+c(V^YtR5UB%bABJhl{l8ax<-bP3xytpSF1v#g8Z-SFjGgz+=NYi~?;Dmr}j2m11 z>h?ZKA|*JbH0dS^lmv|9GVFl+512&xy^`*m5L!hPysWC1W}C?6z(D zFkSp}qNcIepfv}d4aN*$cG5`Dedg`Wkc*7@;E1 zIDHmejo;c1TPL>)01zS)Srm`3eA0a$4B8Z2$||LskLo0R_UD)*arQs(n5&P3IDnm8 zBqvk%nuTCLqSYX7utwxS_Q%2wZT_h^m@D$9AeXEok(@e+Ie|?9O~=m9QUjAC7zwLM zXJNeF)qiE|NOfB!j^QuH=rBTJFSXL__l4D2b*+2__4C#3f#1Tx(9hfA<*%4=w_J+dg=BH=WnX&q+Q41E#}bk2HHD zE^%16rK{Mvy$QDaJk!gdRImz*N<^#zA7l=h=Po&y-6p0Dyv?hyBdY5F$>eIieZJpI+kQ^bE#LGO0-Mhbdcy;RWOk9ju*{i9z`1^xYR@jHDB z1^r|BQbF(L`bG-+N9;@m{hy$qXEle2v+2hb^bcBNlt7!J3i?MV8YR-EsDl0hj*Sv( zQ&d6!s6z)8^pC^G74#2xA5_pk4i6~kpXq#5LI3(dI^r>3VQj` zxPtxxmX7k7Q(Qss7{NHNIlW#%KPRu5yk_#6J1~klInBk7OinX7&2i6p1)n(!muV4L z8idcbC~~e}uzI|W=&`tsT!g17(rz%XHq#)VXP-H;5|&j3!v~LDWfvfO?`-$q+D>TQ zuTH~7biE0NJPXrSg&8#ngh+Gs|A{?aEY98oeDJ#?8(Op%TL9oWNDjh&$y1xOV+YCp zT+4W`Dzo)FF@~=TJ66a|lEmPxjlaF~7W>I%rviL;I6W|Jj6il04ux!^RnL}fM zIDT?3w0*7wceF}I03;%ZMQe$mM?p}4h?GmKf{$LLN#{;M{?Ec`*?vX$aavTS5#D@V zKu2uHt&?9144O4PJsbR;4evbE?9M;i=+5I!?i^}x=kext4mGy(cvCySnM!mX@2cit zM>WT~srj{?R7sWSM|M-$P3`NZN~%PkW6O>zJE~YmRbHkNEnifk|J%;0d{;tcca_~$ zc2^<)NhQ?%e|}3Ac?%^}NhQ?B`zoPIDxvPzWyy-)>3b-lN-Cl5M;_f=-$@BoQVI13 zDWS@+5~}>X5~{?MP$jH{DlsKg2`iyWObJ!ON~jW3LY1%*s>GB~C9Z@jQ6*H_p@b?? zB~;m^gerTKP-Tx2s>GB~Wrq@~#FbFx^-8EEvHQgC6T9Dm-7ksTCvKm({SMrIc?o8} z2wvX=gXLU21J2yrv$NfOf@kdyVuRKV-{*!WXwTAFayFU>?wEFiw#eQ*MkkHE-)9tb z&)^fhaC7U!=ZLh7|0MZ~S;wEqK25w6U}F+C0Z-L;00NWXRagzSNh4;@j|)tKrC|Hm z0-4b;Q;GT3ph*@p&_!A;jrPPsAPs!i-jr5-28dXO^W*n$90#{(?$n;Lz4#1UD@P0f z<^i@5BwXjp?v%T`_VP1qg;?e07Gm#9lZpc7i#mk(#~83@ z&S`J6n|(akHn|jQVQkF*QF9T%!c|5-yA=@uPU49~Wqa2mF;QX;01hj1mS_FVgO0wk z<^^I)ivYLwE;_tbe#@Lwtxy-(drDamB3|?Pr_w&j4hpO<*`6q8=OLd^8xuohhZbX? zo^{Ypm}MD)SeBoKSC(;TWeLG5%Q&R6gy58A97H-`sy^@6Wyy-)>3gU?YpOo)M;_f=-%0gZQ}y`=sXptl>a+g5 z>a)gFpEa!dtTEMR4XZwDO!ZmAs?Qozeb%t*v&K}PHLm)sQPpSNq57;*)o0zM`mB3Y zpLLJwv&K}Pb%*M+##Nv7^{US`8KY#3k}=xB7_G?`C0mqi(GIp~eF;;v3QI)1B`#gW zra;!Ph$`MNi+%A4jXsFC-LcH;COHK!XGV#T{Lh*Y;j4fgG;1e8P+3pI*l9hm6gpZ# zvfsfJf#r_z4n-^?vnWXzk) zId^Jr(81RQhd&FKMvGSkQNZVjUhH6jzk*&Co5U{+4CBb|*TsskWMUp* z#VXN`HKK0W1UDj6SyPY20%%bG9DK!RiC(s6$>Qs4QCWD(O_&2BgZYl|7g#Lu1dBRL zex};QwlA8ExjV_9*aI;RaHGmDAZE9c0nWiV_tyH!?kl8TYqo_i!S8!y6d zxnJ@_^|`fr7^rpenSpl$MrCGZ0iCG&7Kvs>{wD@vE!1`P);n^$@W))Y2-a@9#Z*6A z7v#@)Ku|ieH}ik=IU%!Ah2k|-V9$ehUKumAK zdm4Wu$mmfzDdV=un$2gJ*@nv@N5C*(4^6TxwWP(O#pn4X03&q-RVpA}7p@Z~477ET zzRYk_dKscL`2wF6$Psv(yQ4S!g@GgMkqs}tYQ#qB9kL8IW5mJ}@Z1U3twTWF`m-S2 zIu6jSA#iRT2j73DB?efOa zLV?~=f&THn3iOr=^!s&Lvf_989t!l93iSJtM>p4ZQlPg~p#MP%^fs(OZ$GayE6`h1f!=l~&|6f2-gYU_+a3ja+oM2l zF$H?tp+IkO1$ukE0)0!~F?q-29WReDM?5DvM?W$-$K)KxJ?9mC<0f3AG7S{-j29q* zI7Y5vCAp`oSZ)_DIm;X@!sqd;Nw^I>)%GUAQ;GH*e-m$`Ihx##Y{#4C>%&!u0S)Wm zbFi-JS3e7;RWzDmmBQgMv(}djX9ng7ZbZJb#*k|r+*%DKy!hvn05fIhp%z zf~(tm69uca>O!z$S(jqpq2oUqq$F2s8qCk%_QZd6~!Yi@4s zRS~0elU_DeqmsV z39PtS(I!!Xy6GsKpk1O|yRVHiLK3LsHNL^ipzcat49+W(Fk%-#mTKuYrR)d&N z<+Tb&MXbI^H?)fX;&=F??mY`IibEHl`N&GjC3on37pdOsuW{fW)s&I9X=A$1^%vVs<{Dseji6nx} zbvKN;4MCXO&%&46ICQy%V9RYBvfM&&Wr>%4%@T>3C1#eG*{_&c z#DDUsh5P^fmNk5frxtoXwea!2Pc8I(YTr*i#EV{M15^J+;uoPc8J=Qwu%()IyIvwb0{FE%fM9 z3w_5^3qAVOLf`e&Lf`Y$Lf`Y$LXSPQ(04qw(Bn@n^p`)iupN?-C6gy3OPzJ`t0yD- zKYLEHv3_K-vB}1cd(I1(*niIAEUe`kX5!}eWGi!WKVUx_+v7`mM8j7VZK7MKGh$&!qXh}iu6%r-TK?U@FQbnr9J!aVV6DG8epDOo6H+=y$LRB`$Az+ zAXoxfP|2(UCUj91fSUsaF#jCMyjk=Bi)RLAw|3i)kx!UsfJ0(1F#)ft%^N6$KTf_Dw&xz;hRlOu&)l8V3s@2MX$(4ddh@G*SW_X}8^wipF-C#8 z!sfARnYSi2(JEY|?X5NW%oK^GT-UB5nc28`V)E7Pp-C+OO2<{KzU{tt_U3k}EKGyK zY6@dC2^(OzY4LH|4q>zVh`~)4p8?C0f+_N??fpiS!vFg9D4e!VFqER&qLoyf&N)o4dNc3hej|DqWCc0 z!QrpNI;K>heGE(Cti#ecb;h_L11fACG-Z-_^v4 zeo`6rl^|u0nv=oI#X0l{HQ|*)x?j($JN9S zcOO&}KMoJ5iJ$3wR89Q+K|oFXOgf`#;^z-SYGMhF<7#60(YTuU0ojeRYExWI>=?l~ zyEeUEO*|*Nmh4)xYdhGrIhnO&){v|Cc*>>-F=AB1vU>wT*%tZPoHO5u$$o3$*A8&j0NX}th4uX}!l7dojb;Ew{ z_d*0E+F_-}Ns|-qf2s8B?cZc4ns-o;F0(3rw+dKj91ZoDqAx_pi`&LYuqb>J%Ypy1 z$_Kn2J14F;|Kudxo>ixk!Kf#(NxTMI1$H26F0#ISz6s1p?ltUcagQ+D<7`*IizbY? zWnEUe`@MrFQ6sQV6y9z7xDd062HF z!hcsMT)ry}vm4HCIJ@DH|D@8;SLU6Rh9#ATAMdL)EU7fSUza5-ey8uDG%Tq!ydQaV zbA2bJVM(RoAEY!a!%D;Q^Gd@KQyP}A(y+voh9#^tEHR~F2`ddtOlercO2ZOU8kV@y zutb%HWrxzRM3shRm(sB8Q5u##O2ZOU8kQYO!xC2-me(r{m*iTKYe}wU2iLMB&yqY# z@+>=emgOZJ%c5_OoPFiNDsAtD`#ceEVF>K4R}z^Gv!jzEo?uPb2!25SclIM$Rs53P z)FPYA%^czkmjAFb0eJ`JgB)tnyZHLkvKcN-WG3bd?nQjFH)hcs(HP$RNNmU6YA7+^ z@PB3)Zw6@>%VL&@^H<@VG$Sl>W_w>67R_u6B8^WNqrnW{+}k(CXP1c|HwsLomeh50Cz)#n*;$RMjBpn z@ma0%_bgx-?K$($I&#bXCmyQ}}Q z_gr>(+2Q@&9bUwLQW19lpWhNc-a-*pQxW#@zKXD#im>~2S+e4H`W}j~nu@Udkw-Vz zcT$AaRD}IOim*DY2&+G@2&*wgSPd(}YD^JU!-}vPQ-sy9BCN&~VKuA>t1(4bjVr=x zR1sEpD8gz~5mt98!s;GHSly!tt1(4b-JuApaYa~ty&`N){vi2-ynB3}#Y+$goA;dkNx&~hXc%UI-&S(~h z@MJph7(*(_1^27id!@jou72bqvu@wse4ML{3X}*B*u?hfM_FOA7*Ffc`Wd2&)zk85 zn{)MJRza%q&Wj+@%z(Yy1`i{85o2kuy88rC*Kqr*U(3*SVHSvR#H~$i|030ed2080 zHWmYVTZ!V*xQ-#w#jF5lE&GhqhQTE=}v^B1;&P19ng^?Ej+QrqS5_xVkGNp2&lcZmHR^*=lV`E3Z zE_X!!Bvuf|s5?HhP$c62!l(j;abJv_h~3?~PQopm#Hwv1+%?svL`%i;jS*q~Wfu{} z?D1Jv$3SJyPmCqnFiYAU+-K5isOm==ze#Lg{dhbMIQcBBm2y9mR2Em6lSz1Pv(mHM z71amO93DZX2AIZm@mV^fS^323-@@sXgA}se+bI6+FG@{hlgl`BcIE zx)Q|S>8XO2PZivcJi58Q(^Ca4pDOr+o+@a=PZhMEf2yFxo+@bJrwUr^se%@Ms-VT5 zDrn)S3R>)`f);+Npv9glXz`~CTJ))cw&SUS7JaIq?Ru)9?Rl!8?Rl!8#hxl?JDw_N z@uv#f>z^vvl3`7TH5t~+W6TlHNp{tbOm;Qd)p5^x1+%*8PDFAaoXg%-2Gc{6vWf)} ztEGFhW(4$@ITHksX5=P+LGGF`BIX~0t`j-2P;GFq6s!hYpe-`~^&s}enqwD|H7s)6 z+&Tn9Ktv6hMgo@^36j10^D^10pV#jj$>JRVPsgcB8{#4vU+f1;pZ zwO7gDwAfr1t26#ZK&d8~9e<@pA|g_;U~kk6U>?S65ETSzI7;iiNlqt(ExjWzdS*?=lxD@;f88Uzd$aw9rftN4sPeHDLKV3W(5gZ3m{gB zPDXJE7H;FL{+Bs4s^Q}6HA_Xz81Qtm-sha}1RJ*@pmFyuG3#L~Gss|}k)*5kJ)VKrE7u1hBkJVR{9D(RkC2^vO=95-L*CZ0s5UWIG1j-Om9 zyqaaAqkp@}JmXat!8ff*Jh{ac;e^iOZR8Q|g6e{`;3|fDF1~_z5>~;To}|k+td1FG zw3Dy9MTqYALIyW)kc?yRSBCehK4w;-%g$G}Qy)zz-!dNjtoR%%mw%NCgug^A;41(p zBA>kzTG%DqJq%z8-^0!&u3+0oL6Ei9BIg+LkJa6LY{dI25zFEwsOtT16Eu|Zz-yl6 zw>Bqdw+GI^Y)k?uUZr8jW-Ln-Us+-p2tFB-)g)74=Tw-sha1-3eT|3=MR0R|W%GPL zCpnPX&nmjB|B8ymAQS;Li!cOa0Kf{MN6TH^?fKK@BT@1f7E%zqs#Q0B#J%6#{)v88 zi)z-z(=TqNSg%D_!NrMe^$+Jr%~ihcE~13lRufPB8Wbz$x7(rI|VFtfnn)PP61 zE_EWzDe;PEU&T&tVqFJ8E1U4^v-DG4e5VSaj;E~B2a)fZLf6v2Fe-B8BpyetaS#~L z_P~?;Yb+so2hXC5l)EG5letc!%-||Tz&+~_1zl#GO$diiMa4cSuOCKWyngsm2=B9d zAB68d4;_c@KAW3C*zWVtameno_8WxjJ`a5-ef?)aI*1p29vZ=lh~mRI5r@AHBbriQ z|B*OR;zav!qAB(D&#@&|lvq&=E1F)VueUQLX5_1$m{DRzi5Vqk^q(VT;zo%ZC2sU9 zZWQsKRIlIv=eLrne{=P^tzN3v@5j8Gdi~LDr+WSVxA>jDg?jz5e5qb{bA2QA`XhFx zdi_sOud|v%wAb|G>h%XHF-m_;QT6&G6phkgQ&heFfVM{Iuqmouf7GFa>h;Ir(6vPs$PHoAfR4If8g~kX@c=k?hT#)jdGp zz^bejEjv-vxT3Sz^3lDA88saK;$y(?i8)oW;Z2ZsW?HiY`|8j~g38%j#BXjL#AI7r zfg*^0n=p3xO_630+>mvfrTb@W25+2vRl)F&f}%5i?hcT~BEjlM+Ab+XFXlwJ2J#fq zkvaiPPFYE7&Df0!`vps5uN?pqVii0e&=eyfcX01lpC!Z9tB;Vn#XJmD0RJNrAKd2* zQGX&65gYx^0byyhtL#sO9~K!eGTAr4@T#+zP!-fZtU0rv1^Qx5=tN;W=7mOBc@ z)`S7HnHPYf3c^HnVEg->-2Uxd)XXhl3-{8*x~M^z8Llo|50R=#HE!$$SzYFtiVp7v z=ryEJV4NyYE0v+`9C+Ccq|8Gg%KWnc$~+F9%pu@p9tTb45MVNogC+BuX@}?WZha1R z>T|41pI_Udm(&h_WS5>@`o1o`q;~i@w(QiiQ;&7(M&W9eZ}{zhTE-{zbW& zU3+%ze|Og&@t;&~-v8&fR3~qt+$^cw{CHpGW=ZAd{kkk!@jHDF?`W{D{`OIW#CV#>`DR&JJoyQUB^s#rI+*&ZW!_$VL*s|3SgUe$ax42wR-#{Hca zn59`e3-&%~W^8Uj#vyfIJy2zfL*1>cOQy!Zi62-^69@zlf_$+GkYn~Mo&=rBwaX>`F()QBcf+G{vj<%w=jo* z62)hOx@9@-ZmyT1#(MeLrg|A~sFzSPy^J@~OQ?xn#vAD6&D4C$cn7xxySF9Qxh=2l z+G?u#KC*Mm&TU`kR#VOQk=cPYH; z9)(xkqwuORg;(97@TzfzSAD(0YfYXYd4l8#cJKsiasirR))`U*L1fxLC*CJTGkkDes|;) zY?JxHLM<=QsFI@(VxcryWEq;TtKTo}81J4sOLK?CoFseFAd`6yf?=rla2|WF4Alkf z&e`vU`iJ;u$i(EcL<3IS2x5x|)2>cpZ$u7$Ywt8-w3Cm&3Z!Ih^2KL^xXZ7=9HQs9C&)LSCFY-c z>?$5dJwX1!dQTG3v0DQ=xKj{ttd1qOv}}Y9=1z{#B$;uH94Nn zT;Xx}yX{Cp>@Q*)^a#}U%s;btKLfeN-t5=hKB)o#HD|dlt6Aloj2SS;-ibxLqSlbu zXt0%n!C-sE$6&D+jPu}k%^2+6V62X05CCRA#|H3X1JH=W60gWC_Fgg89oSnU3H3kO z*mfh4%7uBrLN3DUGIIRIKrrGto=CjH_E@!p&n=N3EE7O%5=P}BESgnJ(hIPsN|hBq zNv^5FmNG)SBYeO6JhM7@s6{O-jo&UlW~+eLjJi94xOE7GTYnaSTgSn- zH3Yn^uV97mTJ(CM0pbB*@yD9RD(XpmPk(` zJu#%Gy-W?-zNkSH@kzud5uZeS{xrm={flxuQJ+M8{%+JK;y#}6U@AN&C<1Llr_al#PuJ5EAZ>b#rgOuZKSUKK)UOC=k%JCLfj<=X{ zyoHtHEv6iAVdZ#>DaTt_Io@K*@fKH(x2STw?NE-lsB*mRQjWJh%JH^GIo@K*@wP)b z-r~yf_Il;`mYia8ipeSN;1svy6O&I&K5+-1xV?l++=NHOyKR-o5kv+MPA%`5^)f0%d%qlA4l4*Fp{0gdd%BZ@Lu9P_Sl6VqUBUfi`gTR0lL877@I}jy!lGo zt~SN*v`Cu?fMoA#BL)aAh)>gba}|&S04HOJnGG^EQTgZ|U<|9kMPwYjACIKn26dp< zXRc0CnN&e2ZRU^eZJ*IJV$Hv>MXbK?0>&d8d^O1`!~^n)=O&9=3Nmia(O!jkT2unOs5s zB$}?04=ocCF=oFa{I0#Bkt|ewHf$Y*Edcjwk}Zw9xgSsdKL`jq$%@Q^N#oIQ2?k^m zGbg_y9?JY%G&s419E5Q@35pMI#o4U-{e^GX0l92LaLe|yP|G$Bvuq)VWgCZAwh*+k zjl(M2n`wl%@xFcw_Vine`G(O{rtXuzNbd`IkxQSv!{>s^!;TT;r>M< zoV|Va_V3->_wQ=Z?C-O`&;CB-KdA=2|1azR9%|5@YS54ORfG0agWj*pk`=$x_fUiO zRD<4+Ji58QlNz+A8uSlRgZ5!HX#aUNXpgBudsq$HV`|VIR)hAK8nlPipgpDr?O`=& zkEua>Tn*ZzYS6wz4cen>(7sCz+V`kI`yMrDkEucX4mD_xt3ms#)u8j?pzP7b^QZOx z)SDD&WPa&G>E#Kh_7tP!;e+5f6oz0=U_%s%T@o3!DwPNsmAZpE-SE4Ehk9yeF;LaDQCt~OtbRT43^40|1bYJuU<8G_c4OhMDAu&lqWoGdqV>qUAadmq>4mSdeTB?M!xeqXi|LiLnwZ?~E~#e;KGZyJBbimyJmwu6Bb zPBa9IVCvjEqv`?F`qOiqIWlBTJme%jECt*}#?6zntIT5;D?BOwefHI*JTe@D)mr?X zjg11y5{scShk1j$;moU`zlx60OM>-u!SxseWf|4Dp|irx8cr`L2rI<1;nvjfxiDzP z<Nj6a^3ozz968NA4kU~@Jh)YxhmsXnw~$p_qex76il>J2?m&WqdZ-gS-ddEP#*gw?nMp%-z?Qb82N}DkvnJ{e{xI4FNnHLfM-^@2@k}Wi`D|< z3*z?0=a%`jy)xm>NSl?uP~t4vXTW z=!PBsI%H$|s*O!_BhigSH$vW%2*>@CL^u-R2>Hz`P>$(~DmIahL^=}b_|uS%>AO-m z(T+qr672~2&;R+d>oUST)SgsP_H>$baQb`}apovBGhRZ*v}bTwVYIiiTe>NK$p|7x zX_JY3pjM`If^3(#A3adnp=J^uNW;G%aY!VN^Q;91_x9ci( zB%ZN|@RAzCc4I&LZ>jTm>c#YLJF2Ds`(^d2h&PGfws&>+u~Us(r8@b1*wZg$9{x7> z1fm!@inv3*rGlUW$6m?j_8iFlf1;{IQhLyn`-4^8*c5ZK_&IHrijUuV0qG{lkk)4( zeeO+;y7=*YLLSB^iCkyts;Gm=2Xr*1i(K8)u+U8^vbJOOR4I&sUw!iJnpfdBJr^?)i{GEKNt(xiXaYRR}t(Xw;cjB}?-GL`|w{s9L zvJvMu(JAAnW}khr=!fW*tn-j)hfi%%lg@%d*gH7L6+{e>3VD*8tgKG}Q1MWCAf4@k z?STXA=`{a?Qh1WEM;h1!oVrLsMX)3RX!~@Mhg`5PV1QpX;wRN%8k0{jVG?`1K7pr) z<=O*-7!Jvg#lfH$Ax-Jz=i!|8+7NjZgre78HXvb@JF*8Pr3JOu2Hbqv0U@lFJ^7;9 z#`?Gdb45`kk8pNrhfExQ-A&X?gGymL@@EN~DWVj99v&cWrifDbd3b=pnIcNz=i$Rj z;b$E>rWAf2KCBdey8DFs>B#q%)`#_8&x)!WtZhmBRX?VWsdB zrW@tZrm#|2FoJO|ZF;>@cup=YxwPccc5rEP@@UDUC65;BZswP8XtVHV%p5U!5(@_`#gm8!XAlth>|?MOJMQ zY>!WXeB3i-YGLy^w}*)@AXYKQaEkf07)43V??>VkiBs&uDN1U7 zpO%tXMPd~(zj*~-QNCz?6SGLnA~B2K7qck;vd?eg7KvN@-MB@>e^R}BAIaOPcT1{w zKi*fpTT;Dy9|;aUJYEqm0vWsiEd#MHZGhkCcf z)w|{O>fI$-v1G-P72CmzEy;)_BbJOuoj{s$RzFiNl+pK5&#c` zgE1HbABF$8e@i0(mWu^#f*9!=l23vp@(Fgt+yiOw3BE-}u%?V$fVYY5lZp84BHUY( zEMpz{$v-FO+KWuEN05J_rS!_Pbn5I;ag`Q{4wy#CyrKKpsvvo`hX*<0=2lEosXGzj z$M}l9=b5`WxqXpkCc%7dJd@igF~eRnb9Aeur#HW^eg=#4_w(ECF;pN#l=~<4X4vjC zPb4EQ(nw-&w492!gF*8vY=D}9{VlLJW~>T6fjv-@oP=Sqoims#P!oaKSgE7bLgmRF zM!e`3eyX@H7?w#kAQBMI?qjgsK8T&0j~rNlY-?}Hp1&S%s1jL=$b^TA?G-`i0S;}4 zB|%w^f^kwmz)es?8k#S21t4edO2t}MANg6B=9^YBQe9Y_ZT0>S{j{MMxAOiXzmP>1yj2U2UQXi6$hPum?@3-xaTkC?ukg zh(gGJQt^5p$=fMjYbstp-dFKjQ}KEq2@X9y%>P{!uQe5~_aom_@mf>y`Ufdq>#*Xr z{=DL~#uTqLtaz<4#cK^KUTaM8TEmLh8dJR1u;R7G6t6X|c&$;zYu%xEtx?5m-KBV~ zdlavAkK(n)6t8uM; zma_^vOnpM0vesJ~PebVh+_HBq(lX=CSHBnC?ZX%xVm}@a7E*mAL}k{I+2(9kN1fc> zE`q>w{6Sh~a73~sF?$i9&UQdL%jcYd=tw0%bP@g)Zvt>2THtXux8w&ZD_{p{-mTUG zWDxd|@vvSNBNo3SBB;TKU{uT)&Hn87f?ZA0;M*=8V!fN>VcqkCS`-_ARiSG7^x~aR zz&Zp2tUn6@tmEzf8fyL5@wR^rwfyUNyT87fE^;03H`idVxyJg;^|d`_OI_qMzGt7A zeP*oBY^jU<$X+vh&1kRLUZ#s|Uv!b#bN;{WIoo&jT=t#WcV^!i@}E@C-AD3v>baKc zxsUf%&$U#~-A95$PY?5d7xi3A_1yi)H&xHIRL}iE>bW+oo@+m^o@+7nTnnq`T1-9H z!s@veQ_r=qdalLPb1kf%Yccg)i>v2aR6W;rsOMT#J=b=r=h`0iT-&3bYccg)+o7Io zarIn#y?Sm-RwG%BWHolM8e1|N$!H{_5$bNXm#`U|?(o3fDDE=3E!z{)#1>{^a{D3% z5@&ep)G>roZoeY@0x&d*`Nn+U2Lec7gSH<9oC>`-qdL0>aE2nB4Y7_m$;cN$4=wVu zZp2Ig39=QI(tNc6V5(R*W1!K)kHK>733#kktPkwXfFD{;^6cU>Oh3&T=)C!s=#3@P zigv+pIsbb4dQLK?*{rm&+#QW4Q3w2h3~ruE6;Z`|@C+a&Y@@n|S?$4nvA*}w;_-$` z&;FN@Z-Pn80{l!e|KJCFYww+sDrgm60E@DnCGg9WTRWB5QF3k(Zly@vB_5FVn3*ET zxPf7ecJozM7)-edVu0=IPcTjDL$4sYYF@b+fPvTeK< z+k$=A7VE*b*Y;mMm1Q5u%AJ$){EbCu)-1{%~WBt48Dtof* z$+9O4`A@2@d|uy4b=6aK_3^%{tDdT>`$%wT32pD8y6UOAx*z$bs;i!=t3OC})rVDA z{pVFzJ*K+qVbxWSsjhlhb=704s~%Qe^_c3ahgDZSrn>5J)m4wGuKEtuRgbE!`YzQ~ z-=n(fdsJ6Frn>4oR98K&y6P`iT}_8X{1fp{#6OPs|KmA{_TN8Av_H}QVV`*c(*Ms{ z9ObVP&8%-*d|tT&A_LcBeJt0oCX3%C*$Q8|36^fpgM*_<)}Te=Jsh+Q#4es{^IJLn#i&`cf6x^YlPCSlZc-A!i*gJ}SfH6w3sIx%m0X z(Oj2#U~hpD>~ zU^C8OaY%Cut4TECPOI1?6_l(X7!`jFS%F)@<~a`$_v~|mPmv+X^;CUi7=S}QH-w2h z0^FE=b?~)|fQxug69(-jUQe_kLSq%!8}n?e8I>LxxcCg)+hYEI_TDYaah*xloJtHq zBnW~SMh`*P_cQ;O-l5MWx6JHQ4QHvMHuLwFSg|4~3IzOWW&o*9FFr!6>jd|og_p4! z>=uijzwnae99h#QoDtr{d=f)|iL7?QTOV$F2C$I3HeWC7pZm~R5Iw4}BlhkuYTAoG zBYr`pKz)eSnMHvMO8w8t6A!T~Lpo=-I~1Q>QiUvUp}IIv7H06 z_#JpsI*WVR3+_#)5nyjR{V1sS-OmpKdf%6hgL&WW&LEKYed#!e_gxbX0(jq-9!V?u zU8oKsNZ*%6&?BPwFmlA@pF@qN)QWy3a+Ju?KICXht?1iQ52w4#Y3 zC5n_NQldzSBE=$TB1wrPC6e?jk`(cuRJgl+9Z2DBtCtG*=V!5z;x_v)SGd3W?^L)y z|31CU{~!wY*Yc&p{W-#;DcoPNGZpTCgTkHF93sM|A6K})Xo^unY>Fz}U!iD}7@MLB z_ZQ?fN{~%ah5M@x9aOl#E+1F8zubLL;r_Zjpm2Yu^HGKS`vU=m`#b53D%{^62r1kp zIF2jac`d4>C&JZ18f$y4s&Dd*%UlcP+IGSuD7AK@ow zeM4IJXCn?HNAvQ=CYaqeHR}zfpD*Ywc64?z)WSvMvD8B-;FzYxChWc0cKdMCG1ES zZjbrANSpvMybJPAgt#bXKD%ua!})2b6%3+4Amlq^&Z@60^9I&AX+1#Qa`D+?1sMtX zuE}T(cDlKZ)9c&H@?H27_?d7S_Kq~+u2%V8awTw=d6F;%V5xSV5b>CnRH)a(Ds0(ZAOdP3T6HiIa1m>(uWs$k1}g<;L{&f>Vy!QN zcVETtCaDlu3#yBUR4-gY$Ai8P}=ShjE7q@WBx81KN23{pU0KCjnj~MXDXk{dt`7h!@)+ww$4{9^Sx+3fw zegtMoM_`ebd4Bj`s1=E0*gRDdo(|f_c#OH9{d*a?isN{gr4)q9OaxkdmtHx1}T^l88vmZ$5#Fl;7VS zpU6leBZ-Xsha)59PbG4qBZ-bAIui1qR3bk|ayTV&NhR{vah1p=mB`PLNO^lCC2~n6 z^7G1rDv?Vnk^dqkav4@4m!DT6mzWZ{gq6r8rbI4bC31-=kxN*KTw+S(5>_IYm=d|f zmB=NkL@qm&$R(;oF1wV-WsefM>`@|@m=d|{P$HMO61jX{iM%BDmfTx%Z#%fRC3&~x z-I8|;bvMgLIJZUkHfu(71tiM=5`c}{e3KnEfBHq@2Jw^G-Q-*cR*Y!B30H(g%!10% z5n>&5kVG3|KC#ipF#EdUABM_Gv%`Ohfre3^ zhKRWOok1oT3A0z;U3biquVhWFs=*oo&#*M=B8h^`C#z4)Fx;G(7rYzjfck`y z<4t%FYXKZ#z~Rj;#7>u*+@7&pBJNdiQvkCf_J;r3JTLA$iJ7GbhM0qt3&@+Z1~*P=V2k7Wqd5Dn2USPbR7d_r>c~2*j;uegj;t|tWDTn$YfK$k!|KQyQ%BaYI1b|6Y6f(kFYnZFgJ^MRTtplET9E51SZrZcfc+f%R>CbrijLZ02x9~Pb^3o^QTaR zS=P<3C*E3KBQD`9WLsMQhuh91?2f&A5NjfD^7rD;WeEJ{s|_BCCow|nj4$##)_rq7 zpnt_KemUDfcnaor5v-nQ%-jN~Sft@ovZwzpjUjQxFnq4p9C7lMvXc@XzB*@#f4o_d zrv?KhqR`x7zkCbLGHU^_v+>-T4OClN*a7-RT^sUU^%Dxc=+!{fGayO0)!ur zXup3KcG5!#|N8&Ijy0)0umLigA^6p2(pW<{l;-wk(M~E2Lz*S>+4&9B3_JzT&TPy4 zGw1l4z1tJ-#zO@&Hc(}9OEb^HR`KHZEWL6CR(+D#e-T8D>$!3hCIerqQsdc)OyX-i z9l%bPijkTe>+KTp>@BatNpL;$KuuxqiQL>W`7ZJjFUummWZvQ3j< zXD8_(v3<}f?#w9*oUFjex#v|pbrHKG2iY6;zzv(<^CaJ5nUpMm6=N3?rLj0Hoj#lF z2B*@rxjVZBO~S8$OP&Oor5&TsZqmBiTLd3Io|AHKWOiYIh})}jkiro%Z;Z#-fxG+D zSz{P0C>C;(c_4CwpE8p~7gph-h~4b#4we9xif_#lv#~eeA3N&;pQDAp_&09yjCl54 zvKZgXjM-@-QhV@3c7}>@b#{`6;M(@?I)P&gZSzscomIX{@%rmP)CdZ?TkDn^T-n}W@mhpY$5Mqn?J1a#jW#slg*y47} z>=CQGc;7?rY1J~I>GK*QHa&&LLn4)(Q8fF1sV`QAjHt_mahn8*w~l6W%e1$8o?ds` z2@q{V;L!H7z|b}h3T+`kXd4HEwh$1sje|hj!L+*DI0~@^5r{2@K5U;w9(rnZzY={& z^kEPcQR7iqf{H()M}fL6x>Wm9~G8(zXvPZTrtFZF@{<+rvuR z9#h)(u+p~2l(s#rwCypaZ4WDLdrWED<4W5eRoeC)O4}Y)+V)*a+rCF>+xIAKdrWED zcPMRpTxr`suC$#`$#o^ym0VYx>-xuYlIME411bBf zTMhBt&hg+%Srg{T-k@0A9?ud4XNZ)C1k2{IqtZwhjndO~p>}h}D5%AiZ zTPXf#Z=?g$I{8|$wimH$dpnwR^F(GoWpAD%may{pI*~^DTD-?RW0E`EU(fiC6RgYX zw$BU$e$c*gb_)5?-XTf;+T05#xdV}A5iSZ32C6ZLMVKBtsfLyoCPe_4Sx`4JwdG%; z@7XTo(wkL-Gp`?!<`We8LK%2Tu(o)AbY`zqX704Rgk?x(I}8TMHOVP7IhTRo}vn} zR~kCq&8*>zw2G3&?EPcazun>r*0}oE46CO}mo}ePou|G^He{UC0~Rgr{_Nxp^4&wS zznwJ!$aHfnviGX3?lr_PnqMkF^2uGW{aG+q)|6~R8-5nN)^b|)F@M|S&Q^LJYNO|$ zZK3D!_IVDq&hvQNJcnB5dAwbo52pW`$NRN8*sIO4K5hPNk5*Fu_0A31r)8fO>(ff= zzrM0p%U&(otCf%Gzshg=uYY^bR{m6PW#5*4TlQ@s|4H@Mb0mjTZaCLMt>={oRd1D4Z~aB;tun0MDnGB@Dlzp|39GkCOubdY>a7w}ZC9K{mG4)o7tG7y2y;XLow@OsKRd%Vj${zJr*`wYnG4)p2q24NS^;Y@3dTU8m zAX$NA1$M9kOELn<2qYsA>TZ^gumOuO0YoIwX`Y+-0QPs6b+9){VB@qct6L~DL{k9X zYnVAv6rTWPU40FkU}xM7Uta`^wx$D|krlrBdNy5iY2p|^o^%&DVU-BU`hzp$jaug^0*-X zJQop#yt4@ow@Twl^rnHeX6@>hTLnMkCozM#LL8#K#R~CSe1aU!3>aj^`m)w!+q+vG zqrJ|j-2LfQeNk6f+`>Yh&rV%Ii^@vbxdg?3Vx>(+b(3n1Xhbcv zNvvfIw9Hrzb`H=*&S93g@*&yG*7WSNL6)#=CfVO0H_6waN@Q)?e8Ziw5MTkRo$#rf zK#$ZdR*?z-i5G($-vt6B&#>0^Rwc$sTn932zG`+-!o}~*`ZlRT@eWR$;9LPBrM?%7 zwF8T)f@)(?jDJ;IC1U^zl99l%zpz;afZYp!CSW~Hp!>@!JcbdxB@j2W;d5FGLUB-IU{Dsl(o zbENL$Zd5cyIBwo)W?&r^O?59Ii>*R3*x4^y=i=|wk7W6quLAaCZ*rrz!rvc0Z`|i9 z|6Qc_q(W!Lh$^da^!Ks^Wb^qL3bY1+wlnod-3%^Pt9d z9@Oy8gBsg;P{TV9YHa604evatv7HAszVo0)cOKLoI}d7f=Rw`I^Puk8c~JN4JgBjq z2X)8JgBss?P(Q!(U`@_7IoIS|cW|z2@~w31$+sroI_xu_;96JVS+5d>u>FUiyJx|5 ztgE~D+#8%weYWU{L8r`eL8tKsv03_Hng}d{s7}nZb7hF7H22uAaE%s?iCQ=J1A9l8 zFreVxO}Hyy13GWk(9r2ONE4aOKY0qn!^p7sJ?npVzp2u!@fW-SKQ4k-5rIG+LFw?_ zo1j_53_F`ge2Z*i{35l4pbmJdeIsq-?5oVDunMvX9159^)tQ8G(6%Y9cuK~pKbEj@dkelHTUayW50%) z`gOdaUk|3vzv@|lkH>b-S(S$ zH@nLJZdcj$fcuLSaBWxt*M43B*J28|7FNKum;$ba6>u%4fNNm|T#G5-T37+sVhXqx zSHQKX0BwnqWiVhXsnLjl*~3b^)p1>BarMe-KOTkPO1w&X05 zvq;V&)ZJ_!;VU-bDs*=;HcMWx6CRi$taWm$Bvudu%~E*cyU(AU9Dx9UMgm=Mf`3W-5mG~l=Vv)Aa5dO{Y%=40K?8JtLf0mA)=tAsd)xL9g z#7chQUs#KW&n;_h;0;zNSSsx+~>HDSr-wP zn8D1jvM0AR=8$Ww!nwbE@zo&PK6|Ma9)cQ^L$1O}%~IR2n;-a%Il)uxBm?3u`AUF5 zjK~~GvEHW6U5kt0F3Qt!HaDixY$CV#WoIDY$32>8wV=3gDLyA@lJUQcF9|; zL*72y9rslBePxH79rC^oxu>%4E4$?ElA~R6|Cq9`|EBEAZaKT<|H@LbW6q8_JLX?I z=7|5KV(~eW!zmVfDi*(vt61!*SbUBIhn`;Me-y=HPsQT%%7ZEvdny+HBE@1KRxI|P zS1k6JVzGx6i#?`T>|w=Xk0};=Sh3h+ip3sQEcTdUvBwpQJ*rsjI~0pOs#xs16pMY2 zVzKX0EcTdUvF}hU_PAoPe_XLxPRYk4ACr7coR9g(bCQdB{w2AX<^w#;KX-8s zW|oy-?^6-NX}q0#~pm_!&G3C@4*qzQu_C70)vw=Cj z7k0_sAh)`;*t-g)&1VjcgOD>k_&Zs}-bzI*)GCNPBMm#u5wHVx_-#dz$nxhYBh(K~ zuzq7eSAS||l`0eroe`3AP6A94e;!hSP-og1EaXqAhp||y z7x$DdYzLnuN;j#$=v;_bHyJ1OKalN1n6D!Iqg}uGiW`q95t#9lOM$4FJz_rgz}m5n zcoS$V_5dqG-OGAm1H=b=uONPU@jIVo9;$d5^KTJJW`>IWB-ss{yh@In1*Ws?gE#Tt zbuaK$P9vaKIsGW$_1)_Zf?eO2jssoat-v72^?m6$!1Y}(4T4+WmmW#w`d!2gqATB* zMvxVv_%N!%<)1@Trc}9ltWQ)WQI$|{H>Jw;E0L8%R-(wt^eL6A-6;{4=eH!nk_by8 zEFVNzrvJ-Xu8FcF%JQF$vPAqRmCZLOJ`B`kFxXu2{mC>)>G?mfMzfUjo zKZr8=wS1|Jeva^H%IH_@Ol9=npp0fUhe)F7$Cc492!E6;nxe|+S11}Kji#tF`UMA# zl1Eci8U3n52bIyU%g2?`FLxhQM!zl(D5Kx$d{i0z{y;z({Z2Zg%INn8Lds|fj^oN` z`OvsB`UMY;a(7c)8SNOsIEOcVUKu?nhnE~)a(Fv9ygB*1Iu?|NSZrl)d%s=HG6JRP!sjGfX7!ODh6k6zTZ! z24h^n{N>wMnMpeDBDVaHF&kEkKjHVnx#H{ijp6W%kM<_86W;<_#_AhZcXG?6`?q(P zF-x1wDp9Tb+!DQDhMJ&*#(SOpNjE__F2agg#up@imJBdS8_v4G4$Q(?-ULRn8i2Ks ztZK-=085+3Ds1)UX!_R!*+uo0$mU^U-99*NPvu%Ds>z{0Ig<1YgAE@GMZl)ZIRYGbNptFV}VG8n#3 z456+el3e^*V8MaTnpD3aqd-ZlwLwzkSo$4uFW)QcYo}6S6~Y@(4LyXpGnSf6AvHFu zvq?NOj(_s8p-8YwhiCxIOf(Zq=69+^EY04DN`$=n$W5(+cgWbR!s6MajBlj&Sznn z$mvwRJnuu8dh_Mxb2W=<=PYri2!~D`TBL6Jj%GU{#CZrloPQQNoX26qIRqKb<8a{| zf(qwxm~cLr#(W;fspcR?HOKI&`LozmNsakC1|>d~_*4v^DycDlTS{V7iBZM;<`Xzo z`TZp2#HtdjN~|ies>G`PRajN|Q>~wPRpM2NSB3m1)%tGBM^fvTRO^2oSFK-Ct^XVe z4n4ih|0rtxl4||ul?PSpmsIQjMQZ&rtky3-uhuUywSEb!^-D~xU&3nr5>xA!uv)*w z)cPf?)-N%&eu=B~OH{32cBu7BRIOijsrAbqwSL*7)-N%&e%YbcFLAYg`Mg?xNj6kC zsANNv4ITHKWI~^RktXowfyAz@LC9 zP69=MC)ue`cb_x9g=k5R!!xiTLzs(Ox1oEqTI4<&rHk8zv2n~jUQQdr2=Ox_2R;gK z_wco~_sY`p2sUo3L^sd%SR(cX_9rljWrT~&jI@)6)e&h0ZvzR#0}Qt#CX@ZOv!^Ab zsRX+sGp=sG_<{A@WKyyfD_DJIKqr|Wp3#^s!Ki5uxdYz|qIQ;g;I3>4nP?HOs&4fs z8La|WL_5$0-dRw5*vWu zEY`wS6t|*HU_5FAc%>$|voXibXO(NP1VFVS$T&R6NpKqD&avvVTMOBeO37+Dsf7%S z=bDS#301))$h%>stgO_T#traXH}{mYutf$a(lg*VWh5IDchlpPhZQv#%f1IM?4a&e`E-hyV9< z`1Ma^XmB;Q*03_P#+0EotPHI&WoQj6Lu*VKTEoiF8dHYWxH7axm7#Tq zGPFjOp>>xswC+)c);-G58dHYW9m>!eSBBQlD?``hkdi}64rvF6v?hO){892pq3&k= z2zRs!Z*&r*dJ*KtW}P^E_wjN*239r;Q^HPqMON&r3D%kBi$3__;|7u93=lmtPrNHMU=0pbk*Eli-rr>>9#U*I)SvK`JeSFFq<`%O>|TyuV1)xycBL zH?)vdP8XoV#`dw$t03*<7p&MkhFK+s3uek4h>@%{zDR_i0mR!_H60IpN|pB6u3?;; zteqeVKt9%7ukHb0>3kRY_bg~XYt5*ra15DXgv1r$3vRNqSIJggY89gLBzXWEFho&vuI~Rfk{MF=ofOuVZYfI{eD6F}ucS*VsO$ zI&8nG4zqiV&0Kbn*+FIp`D+Im@t;(*xn~?n(biJY_H|rETT4aTb0j$Q^fLdWDB4;o z+MZV)RMFN_(e@W9+S;(9t^K^Bt;G~=Ev#s3F-2PoE81F2(bmF>wiZ*gwXmYC#T0EV zu4rpfMO)jUXlqeLTic~*YkL%JZI7a@#T0FAhoY^;6>aVFincBJiR34epV+}qY{^X| zH<8>#sJq!d!b@y=5(0BTr&!(F01RkeY@P)FB1VA{ohAAa} zp9j{{W{Fi{RIA$&BeDJEo6m;5#ZF?|NnjoTkH^VJ$hw%75yNQQ$cd|a5`U*1BdQa_ zY`-}7VT~Sc33jFg_k8{ZlmeV|7L?ZPkJb_-lzEmF8}~f>DzB2|u@mZq zhkW~45PMMCS)vZ8tF8Xk=T_^YE*Zw~-^JI0$U)UX?6h3OZ0Kr&0Nwp501yl-C#ziD zer|v8I1j1ft^)E|3s1xXzrnWQSp4 z5@YAaS*|iO7q?P-rx(AUe5IQBlvRU^ufC!D#Vy=0X;z{53fgHZQm-=4cHRI#1rKAM z0a=UG2t+WhH+~STuKJzrjb#$G$gWq(ip+_fM!>pAO?a25;2RC+zWKZrftbEAwn!ZR zg&~y=f(nRw&)$eQ$v6dd>yqmx;lftQ0tPo>ZvrA=hpYIA%_QC@5cO4&NY?iuYjpLQ z$BT)L`o^-mSbGs0!{&+4WS=HTCm=W8WUBy_PShgSZ9aZ_nVWPaSK&7d*rrBP<^fLu zAFb{MR2KIBJjwYsd&I_vuMu~{itLS}+*1%@x-dIUMCyE^y73s&i(zAQQbaSeHzE}= zbM>dQT1tru2KnNb;Lc^k(s>t3Qocu8?SQnnXz|cK77u(W|6;}cHwzF zbp=*Rewp{fjN1^zxcw}=xQ#=LTL@O%#v#Qm1Sf9eP~vtljqNs$Woi;>C!>Rszs{Y@ea6Hw2Pu2f(Bslc+GXJBf{(GwapI07K_1{zV{}-wL z`>^W2|GetI$5j74torXU)qfAG{(DUI-@~f^9#j4Iuc7WT|NY~t|K%i%DWwfLlWcYt%#=#g&TV*j@T5N_GoJ-n zBWO4Ii{Z%NN(5f8h32_eQx!ic35`D?wcR~^*e-TTR8UB2Uhd5J1=Xb}GsNKRzuVak z!r0jRd#Gikqa$fPBoXuG8!IrG2da##|4vOodg8fw7Y;K90>dd8_9iR(u_AxDcsi!C zsDcUbRw4Rs65>^7{^aR$mSUWm2zIl-ke=cHy#^Vfa)mgw>(51ly$mpscnNAiyPMt*s{)c9~VMmLgJU|KmBg z-?Rp-7IO^_eG$ZzGS23mm8PtzZgbXqUfk{L2?BQQAZLvXGpbvtW=)fx&esH)9AC9LqRpo(Au_AWNjIPhP33TkXh zRZwI*a|7Rl(>S|r-4zp}Cg-!WkJH*i(PA)5G-$KLf}2$S#u!ZQ6&JzU4Ve}6%`_ma z4rAcT=JtIOy9C2!{1z!FOtB^W?d&75vp$63nFYt7Uqdx8t4@L6rD?Ud%TXMk{2M9d z%@UYr;gM;{zmc|x=X`)K{pT*im12Wnp~MhDJ8yz^UWFqB3BPMhCT=Wl3s}0HJwta$ z#1NRl-gAc4-2Crd_-#8kh5q;tMvcz`lbH4hJ_B2TAHq6j@vZ8%$zSYkWVCpUil-(L zVr%s7620+h>;ju=8VRs;c>c|;fcONGH|wW>SfoNQUak7`8q3w)Z>}iHo$)R4mLM zDEeJ04OSCO7Ocf|W_Q02*W0^2u_CPN?tkgBc03DDVeAZ+{Jh5AV=306Je1ig`B!4U zfqASf`GiV9T5QmE)7lU}PW~*!a?^tdXh8hF3MS5q7zRv+A(!F{tn%u%M1*VNSwvr| zox9-2AgH`k#a79ICp4B&?Npa1)+ssKS zPk=Hz$&8ARyYXDzN67e%TM`!ME_kH93GyoUU)}1Ax8+Hj+dQ?Ny>*goMJ(z*Lf~rZ zoi0iRqJ(i~WPahp@K!w3R*i4G_^5!_>?ApA&xhX`+qQGygaduZm9wy@7g2AS(uLW0 z_%~XfVm63x)Gy+9cox9jN%AR(FR>S}k)9FkneSEZjR^T2|M!7@%V`AgTTVf+um88e zzVAMN5a|29bR6XSZi5B^zVA!N!M*P)aS+)1zVt{M{O{6r5Lx=ZG=eG-#fK3kF8>^w zH2tQ*PedsZr9_ls-jk@3k0(*3M3rLR^9f{W`dx{i=u)Cfi7q9&l<3lKbZPoi5uXTC zB20-eh5Sbp@zuvp1&kEWs`<%n>LE`G0L3W{TkbWFu7$BUF_M# zgRvBPH&&jSgwL8LmfZ1(uipRpZS`z#A@+n9iH8#%=;LovDUer9nM*xVeU3M+&gdhs zT5{~_mP(~bIJZZA!fOqFkg9 zBl+8RH8&3yg7%iwUM0L*p-sZ5Zb)}=EZfX=^?6$aMk3YO5eyMY^=tY5pWnQX%9H`n z84z{&FVTw{jrcxG-ED75dHBFIj$UM&f_1XwA@UOy2KT?qqupPY`9dnF>n|!!1~&yg zAm`nEiiiw+3!57z`9@6CcAruAVW?;KsV3+Uer*|-K5}&rBDdIkop>UttZknlvFPmc ze0iHzICiQcp5QkNR5}YNg{=`9X@N)#c60(Mgg^+q!J}V%*#RvK79x<$z7)0rnL7}A zb$>{8|I@8o4*?O*0%Fo^T%_UQ{sb*jHC|;K^MRTszdv!s0{`N_+x9L@02l<5r)}GO z_L@M3wq;Z1?IhbdzJa2hwAeJNh3CqjrN^d_7XEd4fF_$lTKL!H0lI7oY2ja&k89yy z73iQA{&o4d7XIbvgIf64gFR{y<0zFJW<93ojoU*TTQx z&{4*6ifiE=9T;aWr_XEQ=VUIExlHDA2Xi?mYniNNvX(no%lRXW<*aNaxkES`J3|Zv zXz^#YP47I7#{N6J2!jnf$mW=d2b{{nB|D_22`ufo~b>5+H$6`H%7Kty2pb}A9A91&h& z6|UKQ_Lu?2W~Wdx|0iF&MQ~U=yNE3V?HGFk9)Jg5eB?Jl9ItXhh#k{#^AQqf3|_2$D8*#)VR;%P5T^b*yr(P zeLk4Jbsp~)=U}He$GXJ%vmIhded||tiPk>=qTfeeX%uaD%r&vCwZ!N#;TeD;Q zFXkz`#_SriYy7oqjQCG#)}HsjxTPOMvsO~G=CjKaJ@0l5&00y#+Ve`%$xXiN5Sq1; znl(4k<7w7PYS#V=%~~1Otd*bFtd*E%t%NmeC8k*`Va-~JY1T?uvsPl7wG!5>m6&F& z#5HRrs#z;LG;1ZQSu49VYh{mSt?bdPm6&F&?9i;0xMr<m!p-dt%d#^N06YXFus5qMK3i3G zJTo8UCL*N0F@)L0js&NrAtEDSm9$h%7!k6nW-&(C1--ZTMf0SSTO5(u-WB(dZ(Q9X zh}%svvf`vSrchG_AZ!{k9m?DVec)I=xy(3xyS6_&r<<5$pYlE zv*2nVf}CK$7??4@A@Fvx%r7TeG+%u(yS+V(mA$){;7F|mQQTl~AsF9o-!W@~a92{Dqo&a%hd=f?mrkc{*17Q)j3H4qE!t%PD5 z_Wm^N2MmUY`*5$px-3U+et&8+GM@Si-(}uSO+^;sQ=q4-+cv1rDy$8DVbNUy3ON(Q z&R2PU7H?u@uL7IcSr!k!C$$ap46dsv6HhxO;R zhc%`>tYPh8jcE^SSbJDw+QS;w9@d!lu!gmVHKskRaqVG^Y7grU?O}~-59==NVcnxW ztb4SFHKskRJG6&2u05=u*B-9PxFq9}jLQzjWlgpv*_LEmcCan$N0^pXPd|8$f_MvH zFbP&@?<`@(nBC{!@p^q1kO2nZMp$%lui_f~2`>RzWA!W+Vb^%ia|}d0-gmMH>dQDE zf<^OYBw})xwysN$Yi}aLv+0{Bxw80ETQ0zAo}aQPBCHQjXK#*~+}^qKB*+{XFZeUw z2KKv3ug~?cEawo?yZ*|O(3DlTGNPTWDPtyIFdNTrd`P=@6Y44>t{7q@}4@CAm(UwmwagEF?OTZ^@&WLu&|buR>U*U$d4 zzn_`G1_T*pRG^_&Wp%%v{0NG}JZJ+>e8nE9qwMW=)n^jB1s$=sE}h(R$gsph#*d9L z<|dpdUW_lCh5G<42Ftk%&b~-3%6Jy3ImtgDH+Xs%KP8XxT#Urt-=)B$z;)bh5srbp z2b02VFH(0Ai)O*C@pr0FENYc}!qeT}d3z_|unvI@>(2rW>o~};h5&|j99&pKz`{BX zDy#?753b`~?HcT8*H|~ZezucssULj*p51JAv$1ZrrGD@$JKF4M_jR=GWBS4N`?-GE z*&e#HZGUP2v%AgiHoM!9|D*=+d4Fz5SYXDnn0DX2J?gPir0JhWsKCdLa-sHOu zp#f~E0dx~Ro(8a`2Jo-Y0JdQbVEcIuV2f!0TUZ0wVj92})&RDc2C#)SfGws0Y+(&x zi)jE`Tm#sm8o;(g1K6S(z_v>R*!E}u+a3*Ii)jGc4h>+7YXIBlHGo^PCdry4YqEni z*^)6y#v~b&9gNBL5w>I#riAtZ27)|dW&hRZl}NRU-C3uLHGvg2e?DyCF0F)RrPY1N zAOs@h!~Fn&0bHH6n#cv>{fxoh?lbv)01^!GVpRoCH018&*2L;vB|C#f+xZWxU-M9m z4ZQE2%Odms%Nvyh#sD&5p5X=TO;CdT5&!TTVhmQvJQxSVbAb_(`=s^5qK$t#`#N3) zdLcv66k9_|{Q!bp{GNtei2Z;O+FOpQkFy9OauLpjwJx%bVD+FEJkcyn(oJG8-eYgp zTKqoPFi%I#unOWr&SJI~nHl(zO*pNp7DBv{TyYVGh1$R{8)o?VJD!PM8J5GSXwQjW z#pkw5{RXu5P|k(bm-s|x<6T)ih1soO)>lD;7_+^@>Ez>Qt*JSUhhl!1HzG7~j&EQ6 zdO#IDkEM$384N-`#9H`X>dd+u9N30{f$e8Ofo&WR*g{~yHVy=AArN322LQH%>Gihp z4s;84pIfZ++&r7>tStOk7?_A zTwB+p+Pc0&Ti2u7y1q+W*Y{}a`W|gvk7?`r4sBhJYwP;QwRQEB3`a5?$#BFOj(0`i5Y+Rk#kaPeg-t2PE?a=W!khWniS zKKvJ-HO6iBJK(KUdSq{ESE^9UIeZJFCGHY0sl=+!InjnYP^H*^c@~&aY8xt+ldmbh zzep~!I#cG^W`OF02*zw&+$#7lGY0bth{X5Wd#waBV|`bx?FG3fhZn)-?SzlB+j)P- zw|$^WJ&gb=_4K1)%6A_%2&8;pIu4?ImzjeA%J-$?;K_Fu9t2LlFFleb@w+q_?A*UE zjdblq@!^i0%RkqxPpL`#%8ord_I(}ul$yk^?Ao(y-`BNIpVB1Sow9p(>(B1}-`>4X zf1Z<=9ej51*};eWC$*ezQwP#=+Ulj2)9vLzTFzJBlUmN_6W!#yj-cgyEnjLmpPxOu zj~qhF`HG#Xr%!qXXm2(DZpN=bX$?GDFD>?O=xHWQCFyN>*qGD>Q$E5t@Y!x(ElrPIrE1wOJY7 z`(hnr2n(5i#qhb?!)+E^8jlBx0K1}L;R(q^SIGkU)+S&HkVN`U`r0D4W|+AE4?Gb~ zpJmmP`=9QuH$pDL-JdR|F5zR7nTLO)efKjkKRJpEKj z{nTHfpDM%psq*vssS?vqm9T!Q#Pm}ote+||{Zt9-r%FseRl@qI64OtWxPGcc^;2bs zeyT+EQ)QQas_fBEl|A~Y64OtW9r~#f*H4wt>!+5)^b^xhOn(Qaza*ZYcz)vfJMjGF zBUt_-IQ~sK#gkY%Ed!op>&zO?Zk6l|rs4Nd~z|{3il~!BxS|=w6#t_RC_Mf)zEfU&g6OJ6^>|%odo9<}=QIcA^omiZxu-pBjL~ zcF+?`u(IO!zY0zYk3xnb((u+CX25nQU)-i_?TFj*T&v)%Sag%7kEW9UVu_YJR{yDQ z8)CMN^|-h#122J)-UYZa?<9_L|K~l)^2~$bi?pBRoa$YWvy)Un#3i!O zU7((u+=rU8$qd}&6ahQ?q4<0<66i8C^ zAn-mS|CQ)UOpw{`QdwA(u5Mk^AN>N%hSkQ*faEx06cw_qK8!PSNaiX&=gcHf_eEkC zR$-Mhc7jz)ej%nA!z*1L)!bQNLtE>ITO)Vodl>`sV^t(`Qha^M1y;j8KSh7X9TusY zi5Nxl5uUh74B`G&uMtK_-|4l;)A23F;V}Ofxt`AA{+h9!;Nda^94u+k)M5z*`N|Y*5szj;&_fe|)r#3&4szj<1sS5c|YV+MHkEG47sm=G<<%ynm zJBBvDrZ)e1C56dNzUvU${F>T)H__v1^J{AJ{|aq>9oFX8pV#Ksm^QzLwfQxs&97l? zevN7KYgn6KW7_;0*5=okHowNT`8BG|uRFB)HLA_8yR`Xrk2b&V(dO5fHoxxB=GVA3 zzkXhuza|5k3}`Z-I~dS4+0SG@ll|Pmey$&3K38EqnITXx+8jIMMDRgo{VcP~-wmzp zJ_m+23p!OL?vXFJ0~oS>3vqSxpIs0`G7)pR2<$+v*tO}^%g zoD2fOXsGq-9zg%f_-UqSDi=XcH^KgjFrZ+(toBXr#yn6PT*ZnPX`}ddstE4D8``S! z)69|}yfmBqmsNWRY}4d-kU!qhbriDi%;i>}?YGii*gX zl+|siNex5%uy-NC%n9FQZ;ay^h0|gDR0RM6@SRxZELoBJTtm3X`YW48Jf?1BCTD+A z=5`Ti!t5N|F1`vyvMv?xSyqbt(XuXjlSJinf!_W zQm0Y#T>n^Wm^)_GIAfW4G7Kx&1tEI~>;vd%Z{Q?uNc9D*L{uU2;Ey+9DVYC@RA0cT z)D%<`WHwVp@Vvx??mlAdl8hM-B@R<#69=rb&=@uQf2nIWVR`Wvq8~Gcox?>m;aDwG zFy@DQ2lkH_Q-9rr(W7R;uJAi!47=OOUHBx+!(N>%ny2>p1$c29b|7hI*`@MLb&SzP}RnNYrB= z>d{j7{guc^A|LyZkM=R$cl%BEod`%GAc=td{Rl|=Q&XHMNTMK#f`t4hHO0^S6aAQD zsk;8Xn&Ot4VxL`}h^TaRfBW}pid$-mpI1_t-{iXvp($>uDRvV*o~F2^rueVW6t`hb zar=2qaf@k+TUb-vVw&O>))cpxrnrSQ#Vw{OZedMvi)o5mTvObln&P%YQ{1AO;{hBB0x>6*b%wLa9U|V`7?62Di|0(O$!Wkq;Jq9OVWyh zIy~gO9by}ik1;S07DYCnT05Cu)Vm33`eeJBt zy}Jckv%L8CDynKHj+}i3@p5aZ88dNZ@=;;o*ziplTk{{xMdV`Uflo zj{xfh0;G8-gA-j&K1)P#JB94-cQ#g{`&0AZMNm~fYw#X$9l%@jm9tvZ`LV7NQNn&ROmA?v{W@8_$64ZGQiU@Cnp+cfn0T0d3Bym{zw^JA(%= zBPv#(E7r(Z%d^`97Hbhw@-Vd$abprdk6d<_?m(juGmOQ8&cX~~&s@(4;eN1WJ1uQ< zd&7EX$tmO`yvAw}u}N5ntDv*SRPou1kC{BECt6`$59vA$v1XQp$1*a3$Ts`m8FQCh zY0#hKP^;gGUBpkK;^x=1H-x_v4BUo*!0l&2z-=4=+(O{rHV*u4A<%Cd2mH2!>A1IX z#AyqnO|f zl&I6^QK$Z=c0Q4(M4l3P3i(fJ=b!f{W{_>A(*5^p=X+}BeRg>wB9!FYf3J4Fr*{5% zB`NbJ-*pJ>d{6DXo9OYh^F6ime}#6w4{PW9&uiy!*BVQPs2#i4#p*8DreUaH)+%_#{2$*pfwEQAK3(?hLJ3evqXPgCL z#&3u{d?Pi3A+RvG!oYQjURa_K37ACVth|iP18|Y#O(KE49TV($ zorrZ6TO}S78Cb!a&mP}pbx!d$HGiif6`Txkj@7S{A&C+Oe3H|e&n@|ImFkz;=`Q|G zJUPn@gIiOf@pF~DZKuo$ipF2;UC`Anlc+dJy?|$}QZEoI?EURhTiQH7{E6^)YD-f* z;3-5}W^a`hJp1a~`EU3>vn`O0%`h=-6PrK#Is)JFj8sN7m@|H1W3d*2sIkDS_=53z zpr_=8%`MrU=QOMr$e)netDO}{c@NS|s{(_CMQp9|FD>b%6M8aYjkMMxAL`&1M z5NGi8n}3(-X_!xJm1xQL;)zlZ0?^sFZ@waDzV`b?vt=5yS$5aKdWsC%im6245 zTI4=_*%&_7RJuP#b&}{bNnWdxYq+z$F&Zm6`+xDlO@Lf#Nmkj^4`=`OWjC<7o<=~; z_4K2F<~Nox2xfj?Iu2xhw|avh=J%!J0OofkJP2NXUwWi{0N>^LAbR$FX#_bViVve^ zT>d%4Y|4EA@81(OOVlienoYS6;46`{M9%ghXVa(l0oa`qLGu+&1T7J?M9>mJO9buz zKW`+8mMB`HXuqOp5&y|O4ZZ>g+S6dGmwOuAUJkUU;e|cqo`&ZW-Q>HDu&3d*e7UFL z`PsAk$RYMLykckWX*l+t2G((i{+oV$Ps59x8KnWI=$?jG5E`Wer|6!B7sNM83r^8J z4X+Axa8JYQ^6@TYFrDmi{;Wyvf8s>Y1|mmqqyx@v%t*V{62<-@;mW|R_N?LM=Y&kvqVc{ zM^?9j$2%gu*6ktvaZwbCh{9ili{k#|f(wW=t&o5>7eStggiRtm$fmK6>PckPv(E{c zjQr6_;WEHyFc*~+rRo;*?0tqVjhUQ244v@1%AL7 zSOrjoF6g?QIYurfVu4tI+mpMc+0-|9^IY~mf+XET5ZC-Gvj!Zv`ik3Gh+xcQv+mz}m0FRy)bgHSSHwC?*{NE5%fo#K+g6U&5IBA( zst9LCq@N`7Q{mqQIpZn1fGXs0?5Bvo+||>`{|~=2R(%q-n>bvazvFAH3$xAB5wWQq zj5k<(R_%?{R7Txx!zw1e1smSnlBoiiH?xY1kIGJBV;&}7anp`ep9e!v$)6V=EtWqE zBSo%(=f*pTfv_1()&=f@Rig{An*aV9!%mQD9s;Q5p9QDpabRi=fl~80AT@`;sCgWS znh&N=pU07qIf#PHF$84(Ec#JWpZ@+m5s*YcVhBh{efn3TAc=zPLqW>N^y%d{eR`rH ziH0N^@}GrEN28b7b3 z7`(}M9YSkdQfurcdOWRhNv-i;p*1eUTI2HbTH_Ma8kexvxWu%^C9E|rF|Bb4YmG}x zYh1!w;}X*vm$=rrM773cht{}6wZ>(a*0}7^8kap<;}X*vmmON;64x4+&ufjBWZIHx zOQvlH)3zkbmMmMcY&%%C zsGw%pZ}pY2_ny*mVqdIz2<=>cVG8hCV!NFka`n}~8%~nTunV%AHA(`m*hv+4e-=9l z2d^q__1M%ZD7~!>@gL+s{|h=@-69w{am!AaAWi^;bpJcq8J{pFX?B}!0vcH!f8N26 z^UeL$-a*Yu@zi(#>-!u(*mY56k$OYcooq<8aFQHnp8}w|`gifv(t7trAD=Oe%rOn0dy4 zZ8t$E84or_jR%8kY|HGQ1;8`(2wVq?l{TE*coFny>${uoWvJm^ezw_O#vAP=)MPK? z4fYahu9xw~dO4VOavAUJmS9)6#5%g=v)x=x?c`T>blK7E>*#7~C%>|*%dT!;S64r# zovgoUC;x`-uKu9~%MLF)yzKB|{*ziTx7;IX!D?#3e0C3~1*@qAdtOP2ag*;lgchu( z7R*ibcv`TUTCl%D3s#4#}A30Hh+S?+1_ga20T*QC9)gvgJJAI8aJ^}@NK$Jzy|zj^KUn7TyROA zMc3B6wRG z-(v4QJNrE7a}j}9YvxL4^)A@;B=dZiss`ljE_TBD8dAa&F+ZDI)bh6D*Eik-j_Q*A z!8T~;SK&J>PIn(CS^Ff}idbuBN5Cl2$O|fYl3InaVb#PitCz5IP6eQ1dHC;!Ytn`@ z1JXp>8{yaoFY99GX%In~^M_jqc8G0Ugp;$~>cz))msMj9i!gkKsR++Sgv0)U1Bsxv z7oSKe{74rb(cX?W$D+?KXFRNK)j*hCux%I+YCmHuS;2?fkG(~c{J>KachBxAnqJqey|0Hnk*L%V0Uu|@E8dp{X7Nj*%Y!oNVTfooQ`b9*-%Xxzis z9Y~dDr%Gfz2D30)?o712iNCxVh&OzMZx(;{v-B_2O@LJRDSkvXYar6eR}JqVyW;Ou z3Kyy8?eq@GkoE>ad>o%*`~ox?bA0n}A+B1yr8+zL$azw#2J`E)JR_&OFjw7ep3`-V zGr5b`2s;VuQU&WZ&V(A_4Ku&i2xhAY#Agh~=HG7fua3slzxeDPLucJmXYI555U;?d zZay3TMxAv_o%Qod+N+y<*CBM)Ep^szqQ}!&x71nx6*}uStg~)Eud{A3oplTAtXoWH z-NHKS7Sma`u+F;0bk;4bvu-h+b&Kn)TU2M=cId2IRA=3G>8#rxopsxzvu-h+b=#q{ zZgHJ;`@GJ2OP()zzU29K@O)cxe97@8$G3yy+djhYZOZLkd_-2di8FyZe9nMj$I=VK$#n z1L017|EpLLs3(@s%-GxAs;?ln$}G{sGc$$&QCA4Cz*_T{U#wApG;7eGK(c(`HYjyLv+Vlj6qv`y;%1q)B=C&(u1jHjsV`VTV?n667#sJgzT$j4wG-CP`xQ6Au))%d zqh&sUO+eYZuQJ|bIJzKe+-(Z6q}#72Q3(*soj1vEc&_mlM0nsS0iCcq-cEN@K#Zqg zEvQ0?csIXK7p7+tzJ$nNS!VI^VB51``K;Gn@(U5;Dmloax5PRCY5dn}I@S?L?c}q; z%HnsML~q8x+w%CV0ocMM6Fu*C4DEkU?f>&i zDejJ>{qL#$cN0CH_P?k0|F6*g_hIdS|9S0yk7@sVSo_~&+W#Kb{`Z*nzlXK|J*NHd zVeNm9Y5#j%``@G5|Gq=}-=o_9zDxVx_h|q79_@dRY5)5U?SGGJ|NFnC zn8q2?e>^AIQXfyUrOB3#d(H=#(tqyaEGZF&-tnPmHV9yM>tHT{0e}s<_PY{)h^VlD zKn1KV7DT=S$Fe*H&j;qz ztJsAH<$F)UiGci8iD%47m*>UvjCtjWu6|E!<0g;~@wf^{OUrC*%i^)57ye6(v3Jl4*UtQ0rGYgZo?K7H6c5G=$%(`v<3aF9@+q^#cfka|o7q?1B=ZvW zyP&gHi3xfE0LDnj`}XWIHlm%K9e0!20BZ(W>0-mo2~X5~jd;365Nc+R%z(Aqic7?r z1(LjOK7LkVm6bJCn;b&kyZBRJQKk%#xM&p`W0sfz@@}z$NGUU8Iq>H5f02xFmkefa z(q&z!SIJbxe@=q(7X?xzOMI_jB!>QSG8xP+s|FN9EiJVxeht=+?;8s%eDfkc0w@He zLnX${D4cAZG4(L3qwx@o4I5)l$VJqC*cG!%OaO+u`6_pt*XAUVjq~`+&Z78Ugv*=|=&+@7{h8-21+C z9N7DAeFj0j?@Px4z3<9!5X}3&^hmni6kYGv=2#|KBc?2J0+sz9+HSsB1(xUC888Vl%_w=yH8XpQKdwcLjIGQ z_vigDKI@0jyxZ!f=H2b(K$`bgFP@tB=M&xJyN;lFe=T2X-k+a6yN?_~^ZtsRsd+!P z=ACsMqQj;i*Sx>Ticwl@ifZ0pL1>g7o1&Wc7vwcclTA_0`>O&S)V#kgAJ@FU9DPvp z{<=J%d4DJJQO*1N0|CwZJKcK;=B?KcjXTIJ^6#tbV?VE8|?y81oMW{78k8iJGK-$Xv+|0M2$ z0jvTtU4=U&V&UKReqzBg?ZhptYj)eiR`FLX7964qyNQL6$Fa;JSTO&kGJzYz*R8Ib ze3rP9I~az}2!#b;E&9p79WacO^o(PZ8Ne4{F6>Rf)DpD$!myG($k!I#iC9<&H4k1>p5G@xvUhmy0KTxKN*1P;OtgMtvd_aXKxfIib{2A zH7b4w5{4xUpEXM*a+j(HFvomHKpxh@prO_M!cLQGZjHv8NhQ1q<3=W&h5zDNxC7NM zd0PQm%OjgSmt;k1AL?XNGf4eUWp|dU&A1kcJlLV0)rNNvKaF8J`53GkXB`2x$QrDd zR4!a^=i1?w;>FA`_DTIrT{Fo#Vj<{D_(tl)S?Y^P>V+!323}_G@WxY!7O3-u<)vvT@{01s_!guo!bT|JjY&VZXc5?`>o5!KLIRw+q z;}G3^FeUpujuFj4d}xkgL-S{Gp^{4W_wR`fB{mephDs{gzY-rxd}tp&R6eF;FTbB4 zpEyzCM2Qn6PLw#&J31y-lvq(>MZaQ25&ubjy06KR^yww_={~zW5f#MMz3bnrPcNxY ze_l!Jca!frgg(8bKHW|9c>45``t-j-pI(Ob>E-A3=_RI5FJXOpiRsfzSf5^E`t%ak zreI^(eR_%N)5|V>dfB5-FMIUqC8kd=JM`%#u1_zY*QYPZ zK_&;89OMoTa!LL%`N!lRckqwPN4UpDct>NTx;z0HguCB-c0rZwlp9uN)Rzv24 zu9Qe z4jx=mV!L@ZXfJuH`|}znDtI1|{3dV|D`juP#cybMK^Ct*R~O+>Z^8+6iLc-dlSEUS zZQ(DieP#@jiLjGRqBtV~=P=%cOb3r8dQ5io;WDb8Q@f;F|V~)h(Y0Y77x|&fTq-Hs7)Vb0xN?Ye6N0{ezo+$Dv51 z_~neK*}suo0b|0sTQ;kkkDQEW*JDwF78?V7cYiThwE2oyX1KeB;PvFLi{#a_B9drDfWL6(MSfbRAe=AQswqW?0Lr`J9rQ~0WA!JUBwsL2$v$v(WKeoU`jf75FxZj!i3;wFik{8!N;v6IA35X&_ej-+3%sbBWlm3(y!{c=tH^7BdxkehthA@s{N^~-Le$I~y@)Gz-P`sF&T zU#>r|U#>Czat-U3YfQgf!}{eK(=XSse!0f<%QdWDt}*>`jq8_dRKHwz=$C6$zg&0e zm+Kz=a^0g}t}*>`-JxHuas6`ryncC2PA)mQT3nW9E*(Gc6EOveg?VCibB0LN0 zW$y$P{!JZ6migGW#a816_NC0qtGiOukL{N?e+Y$D$KCohIA z*_kwW)5T|)7~h58#lJ4fr?Mi9S?nAfs0g!j6S$E~$Y-&0td6X1=Vbxct!~M9Js!b| zEE4JQ1>%OiQB^$sE>Isa)nd`v?SVPLk{R1cP&C8jxMvglWKE^+u(NXnaK(SsTJT?@ z2b`Ln8&qB^`^uvD=_HkQk*6k?g4`Ej&8baTO)@s@IG)1UJdBfio_mt{soSwVJIRUM zC3g4_X3gFJPprH7eXPC(Yh-os*~x9gKxisPDmAH4kN7x(-g1cIK~>pFxD7;v3?f2 zXsIdwO8g@6i+%V-OHJ`tVi<{G?87kH$27(5H%)P38Hr^imT@F3qy1lWzKLffp7EcJ zXGHubb-wNsN7DJW)cN}CKHSHSq4RC2^L<`PdvcTSI)u)*rOww)^msbomO9_RLg(9t zb-wNAb-pd8^KD_BZ;R=CTUh7YVmjXz*7>%W&bNhizAdKnZE>A%i|Tya4xMj{>U`TS zop0Nt^KE-{zAdKnZ98T>uItW8bru;FUU-r0jK^D7 zefRma*dX`;Hbq8&NdiMIn)^WYPHsnCT318J$bDe=lH-hFqA#Cb&l0hlUli2=0Fusi_2(~Y=p-Rm|rnWeAaZ9sP zRV3DOGF+KEacTDGrY*}T*-KdI91>U^213`@{8cpfdYcBE9+S-39zJP!r1+MA_aR%ychFm~d){K5^Y+=Uxu?SPD?8`x zocDFkJr$;3**$0XysvxiA5)n2-xQ|VMQ0Zsvz_duvy;wF`qxf6;yPZHYa4q^+t|a}#vao)_OQ0G$Fz+-tZnQuZDWsX8+%mS*mr0fdsN%lcWE2@9&Kaa zqiyUlZDZe|ZR~MvWB<6eaXSe^QzVtxK2t%CXD!nR?38lCbC5Yt(j!^bKl`U9>1wG# zE|P~y2M1ji-K-6U~zLH4Pj89!L{Nf;534Z1tt zYr;LR()$~NL77}V*@3`N%vw?_{$G2~64yxgc#^W0+2#(`H-P91PQrW^*=I?SOAl=C zjG-hC^6<7=qoo3D`Zy^F7L(Y}M{!W)a*ioGR?cqFJZ z9$19Mpcp;Leq^r1nweG59ed*t#q=UiO?Lo3L}Lh^El93mf)vojJ*P@XW=swK#@INY zf-&5Dt!>3`J_AIPyI}eDE-b;o@H*Q!O+*k}g|)!yz)!*K&e8{6g=eO>GLH20n(c_^ ze1Mtx=Pts^2!3n$=iU8)c{Rp@=n=s}{`n@w@L>_@ESXpEIA&{=ecl!W_+DYMjd!Kh zy1TDj1tb7Hwm2+62s#FEx0FJmSz z(Akp+n_Kql}!M$)7%0(BrJfeRamB_|57UZy-) zeI1z-uo=@XY-0ImzmL7UPvAG~L{G4>dO#3!zTN6QvH=!*-P;atr;%28JH^`Ia{6zz z!QU0|U<>?x>3IA5T_6m$zTcOQx4qx-bFk(8zVt|HxbL7o*mHef8tJ!);={cbmw&F$ zntoHmWv`XJR`yyk@5z44tvLIw?6+dx^NF5o`dtn8KiYRqf9R*O_sZTYd#{-Ph<>X1 zD3~ET$MZQNi%qPIsG3cYgf%fDY>+C2`D32W?jJX?1yi@$973 zhkJ%;MQ^ftd?R;TWu3`PcOQdAVKVpZc4ra1y=M2VEhVR7iC4ExERoz}3QoM_?z3ll z`-jgV8SC5jqpSCSep@}uVpm@!BjUv(f2n^Tem(0$XMlWW5-(NF++C`BA_ezBO{-a+ zoKDteJ+C79!H&r^s<1Fo%-yYz8Ja|RK+K|w;~IR4%7HGyw7F8r(ESj7R1bHPKE`?l z)qo&QU~H@>6`F{HrX8!N`l;C`7QF#q&4k!%=@&O-JA#;n-h4ukCfjT2NesFWh;NH8 zP!;z=sA7j}at(=^z(7*LB%b56mbCgkNdTAuL5*NwsY?o1WG{q!#6+eN5ywRe#P^zn zwfNo4nw+m%9$q&|Fp zHEP(iC>)9AvsBuXbkbBI2ygJgyL`(-sz+0jQ%Q)g-L%E0_Zx(}37)CAOP z{JcqjPu;_A6-=dydYtPoQo-`<^p}{B?TaIJRX0?|z}?8}rcB1ichsrB=%={NP12jC z{TEJrjYW?3K%Ag$zyQ{U{|;Ot8DMljTi*QCXFnMW7`Aq z*UA0Nw&QWn=TC}Q5*6P|k<+BD?BeTesp9Dr$XG=BP1$Kj_g?((Bp*9ondPNPr4if@ z8&9JuDz5xl_;?Dbs9u)`VB{&JqIz8(fRm??it2UwxQgmkhYqT!UYC!ns9x?qsG@pZ z9#B!e)A^{1>ivO$it3$oMpabr4}?@y5*)`>RPv#571awa7)A7_xQfa#f^lSj`n-y2 zPGmok{Y3V6Ap3Ko`ibf%s=ou(pFe`=&w}P#BeVL7>25S~5Pn7j#n}_Kd;Q_7M~4b_ z)&zOFNPN>dW-kqZ#7WL(u~R3&_#QqI+uqUKMhuys-8xtetkur25RU}*cnCAWx`Al} zFt7`ftctZRg11ewE83zcIhW=RJn14&Ckz6puiY5;&A+cZNI zB$J+hzw#t#9Ck`{u~TJcU)d_ygJHYi5Ulvw=bTt*CtS$LS$8{6hB!)HAyAOrjaW#u z!wVl`bu_ko`_-THAt&L`l2^%$cDfERxcO%-ze~0vDqy`d?0BT1J49%jS>OWUN6bP_ zZu4AY%{$*qgwRu3sKjW=Ctvp}F$4R@2Q_aLiG?6f#Qu|<#zOq#FE-kDoQ}kTU(PBJ z+}w71E7vCYDC4xvWYo085YX1y=Z#va({tHl`S%M zj3~t2n$Hh0!N5hXk=@W(7qK6kw9TLR5ti`yeQdT-4=cs9&i-A@3{@F(0w_fEU{0(m zUi?!QVWfg6Qc;sF&F`c}#SUkwW9>a}PCF_n{kcEjr=p z#qIMX)i2ngv8Ym4^V7PayRRViD%I>&*dTnT2vTV4Slm{vGAE`HMX3UW{jwd}_`3qk z+it*W9s;Z8p9QMsagb^b0aWuiI5mfWsd*ffnh&OPoX1g-If#hNF*IcUED};u=lGRq zNTMP8(2$Zk$FD?05)s*lh?I}%9LsMy$3#XF8A)X1KNlG(f1c!+=t!a?iH?N)CzZ(0 zYna6YDUnMmk-v_sL@udBewq9cmB=NP$o}(qO5~DC!^iC8k6!VI^{j zDUnN9iCkhzk;@Jxa)~OD%Pu8y*`q`*dz8o}rbI3~ zl*lEnL@u9KA}`6kCHI!x+Yat+N!~4ax8&V+@NUaTIJZUkHsT(3NA!bB!;Xj>_8u76 zk%xE;_!BXoIJvlo{c^Co%qTJNCY%B9;3B60li*b}FU)!ui>AA!6=FuQj_Vt7d*iex zUtyl2$+OVS+k2rFx52ZpaW?^1z%;RFMn21UF2V-U5)vo*X>SZ${ppBa)<{15S?t|H zi`XFZaPi;4rTKl5EM{+TP$q`&y@^+m>4ZPC@$)T$7qTLY{N30MMg?nd^^vp6WJ%gm zEJWYEvI#Qx&^crV#ICM_+usCVJV{(93St$kj=lF%fw!~IPc%;{4+U<17H$%7z)%h0 z9l=g`wF9vYwxtLI2Pk3hVT1$1zwpFKER*#TF2kxgBAjF`eFv$%Q{&+_Mqb4lY1qjs z7};`xCoAZ;{-t@4;hc z47Fvpi8&Id@iK!}q~0bz5aW%9=x%RZW57%C)wH+#2oJal&uTTZ)NJ^dy_pC^kXnoA z)ZAh%laNtm-9ZG;;$`GdDrfQxm>hRD=!t7sg-xDO;x_ORBcZM{Hi#EumvO{k38Do{3@KPXixSjS>3$_r zkVwHkq@bos_bbtYL<{zz1@&Vp-TIqKH&KH`4H7l@uY4tugG3GzIrtShi1<$`Slu3v zq+qS7VEsC-g0-fC^=0x$RIt`mu=>yADOhVNSpOmgYaLdw)}L3f)|i5|h83(ereLjM z1#68dSZi3pT4M^<8dk8@n1Z#&6|6O?V68h8tTn1&t-BPgb&rCz?oqJTn1Z$LP_Wjx zg0+5L!MY|dmAq8)QagC5H94u|q>_``!AY$j;iFdJqKu)z?&QhvIl5AO2u}qmvqnSs z5)xQW&V;DOYx3~=&{=CYXlf|UX!MAwQ zi=6skZ+GJkTn|cA+#ZPvw2;=9KYYd>Vg;-a_EIE%lG*WKz!f+J{0xBSByh-85bTSb zR{`QhuCX3kxFWzLyxiVkck=JGGaIlWo>W>ky)vBY#*Mjw8b(o(;e4nvViBL1!xmZ}; z?4vS1Uhp}5|03L06^;aNqG})(0SQxQVmW-H-3>1bW|dz~3<6}uqKM2g8yAVUc*;%c zd@3^5@h-IteyVUdSzy+`-+h*d%$hAH;d!Yn>8hwP?^35Qe#@9=Uny#G;u!TN)?&SwRQmOrwh*%kjU9`v~v43FnFxoCV9prihk! z-c4{$;}oT#sDH$2P$m54B#87?;=g4jVPc4}aB?(jSd*QhBstFb+LN#OEOyF@ErK)J zDLBpj2@Zxfu!y%^1@*P-v4xAQ^VL@p&jWZ^1#idyn58apoA=ooGS9qWzr>ZZ&&*ly zQ&t4KBOk4TRNI?G@pvNW;oOcFb3y;&C^ zG&>uqyT4%PhKM|Ww^NRU{UK^HOZFa9Y1PRp#*Z>H#43JP8PDpLX;%UVUVO%=XILq4 z9cmck@SaapG23`LaTH6#N{P)6L2V82>pqhgVSi`gQ#geS zU*MW9coIM+-pZWV%ur(sa<*#yL#2luN+bs1!<(4BChXxX^Tub3@M6?&K(hwuQV9!? zLe+#n8tW%`JnMK9%?FWzHO0=2sT4-U;zsis`}6(S*rc5_$Qa}&kkM6g7b|Plb>0o& zY(wD9_OrmvHV)csA;4xE2Wz$vP_vDLG~2<{+1ofuumur&LBxMjsrtNzID8OYUCRPCu${fm^UeORg5e_pBDV@lN?R;u=xQniPb zsy(Ju?O~;Ak117qSgG1$O4S}$s`jW-weL`>_NY>|?^3GvJxbNSN2%IlO4YtYsoLX8 z)&6m%YCk0xm0VPEQE@KnAJ0i1$}Ko~sN|u>J?8@))IWD|{)vVHl$E(56B&ZdJYD^X zFS6R$h~dD3tl8T^L8|%t?6x@zHbYZ(mcQKP^aXo2;pE@NyBMqB$;LMbB1z)|Vr*|- zWXu=$DvPLsV_gM@2O)(i0jb8fy7DM;H$$Ge&*U~moUqvdkYJvR-`_I+^U9N8ROBE# zMTfR)ec5|trGH^kR-bdc%}$IF9t3YAFLz<-0ATFRqs)@5wVkL#_Lp@8X_y41k=lZ)Wwg!SMrW@B&s{N?d?IXQ^4oTQ2@PpRzN8s#qXsu4H5)t^tS7I~Z1qZ41^+1~68o`l^9?lU1nq zKy6l{{!zxsHLofSBfb(tjlQ9oF=!7n6^+6hjx+hGxq z~*u(jrF=y>Mp;s-_3q^ zU%xwjN_S~@%D&g1>u>IRr$1GM+52Yio4s$ye^N#GyoM}z92KFhUaAQFnggi_UmZiL z2%n?6`a&E+Mfh62R1rQ$cr+E^D|V)e@NZBNvYJEC{q*B1!WXbQ3gJ&t72zusjY9cT zR7Ln|&qpEsDXJoT)uDqb!q?^FD#Dk$52^@Xmj_gY?{q$@B7A=!pdx%HolzCx`vV~r zp#;Zq6`_1+Tt)bTYepHBDXt=Pj9{EunLe)~oRe8eW+j=G9n8v{tV*&f$*SyNRpyT{ zDzmUDcd-8LZ_TTeel27f8XY{^ecSVrXDyL!C zIB!0;tgF2tjfgGz&gzG&uMYD}wgqn>9@rZZC%0Bc1?ERoz#F*dstBK;+2&QxYsky^ z9BWYp;j=duUj12!dBkZuaiY6V7(CWxK3T7u|K%>(fLvofy7)};HauzoMh@6Ugs`_{ zQ5{tu;Z-;@BH1bkhrN}G((LUw1du^H4KA|7;^Yk2leCsDYlxo98*yIM3rv^L#KJ+&td3&B2asj&*DEXFIi$ zI=HXw*0NjM*R7S*!F^@NmL1!^j;(x52UmX6!TsAixALcwE4#Ps-m-fO`A;gjp4Sk^ z52WNOspR@Pu9B;ylIvyiM^ti^RC4*x<0-jHD!Kk5C07|%a+RM~a+R2ptAv$YC8p#m zVI^0IDY;5m$yH)Xt`b&qm6(#N#Fbnns^ls=lw2jM`-!* zxRR@UUdgp2H;~*wasxZKfhBo?9^R4C< zL?ox*Weq{lh)%Y5S+FHTV(B39Lb;OI$X;#pZ1N_)jx7jYjg2qz?Th3NniQHW%Qerx zvzH%u0}o)`tiuK~m!F`7%#yu_rnm)h&$}R%cnSF${E?CHL_}utFA?=4+J;RDy4i&p4J5zz+@vCrb#H2;`#~WDn2k*nE$Q!GGa7`*ko=bQ60}hb2sJOTu zE5&lanV4bn2IHsdphCmKXF*#x@nXh9wMosxvzyi3ePziH`c^T%opG{8fEf4!I4+f# zLY2QTYrq%cBY-ega5_ zSbR-c7gkx}bD|T~0ks%0oG}<%$ET{V0@mJzRhonwp&H^Z*f17Fg+-;HodsYWa|P>$ zJ<~&-rF+7UsK|IaW2fknv@(YeDL$)qI*mk$W#sNAoq-1ncy zQ|{MP?*B!~{W`4NuRpKcuQBC*4J-F+Ou1jf%KaKs?$@w#zs8jNHLTpPG39=ZEB9+u zxnFlE_iI$SUw0|@>mKEP-J{&EG39>Uq1>-=<$nFVa(_)uG&#}aM0aqaYx1GVhbAAo zgAZLl!iBEFgBC%;SK(u5$FI`M-i0xu^TSfiZv=5@k6zw*)!EA7!MbH$+Z@d(or69tFD-h$Q#xMqM5(|;% zg}VhKg!O>mGM<>Tf~djpKgp!zGFAg7mU|@+%z_t^J@k|_GBAIKuQZQnzT#B2)TMkopcXaDChKmzJ5?P1 zNFD<;74G&fXdHRT>Imw8DyGSOgjh$-Vr&rB3sy%=o81nvJywb};igw}C5XbnL@>o^Rwh9IDI9R67kro~>z@rN~tJ*+X@Vf`%T&{B*2j){poB<>Ky z9a?I!zY=>$>|r1F&_1TcZog@<6N5+$A~A@cz#!V6>e|F15{F0}BIG}*u627klDf8~ zy7ue1>e`m-+Ly^6QC-_oUF$!Or>e}{s zb?ufcSF&8ma_wNbwq&@H;Yx;U2g9{}gx%VN**Zx!VfBnxAkIkV%8KFp%mntrQvwed z9t#M;3<*LTsPx~1DGF65o& ztKEfv;&dZBCuDVRFtia*!fVNQJj>*Nr+Wr(CktF9Z=MyYn%p+I&n)qOliX(~rAW?Y zeu%(^y58IaXaEhXl{S!kVdw%+dX{G_ZokA)a5bW-dEUvdyhwA(eXu2>mz_u>;1kb6 z9=yn>4DFX_f#uu;W91vMOy<*=QJs0lNtDGSLDXdoU1}bz!rrASxm9xxQ5J0GtZ`TB zH>*8}bK(V5Xf^1c%6|cUS*F6lPzXD;SO@ZiJzU%i@JiOyPC_gG?Zy^RJ8k}1vXh;RB=!7B^UUOTAm(r% zWNWk0vHt|Vcm(?ceiA6GS7Rz?FNyyApmLnS@38Z2adK7Xta$3Mq3Ch z+QxyR?O;0GZ5*lCf+)onLnyY-q7yxJxL=7-Bto$dq3Ef@{YsP~QHp&iMgN!%xBsTY zO|&A>ibN~^U1&xBL$RBPMIsi7Sj7A%6}!IvM^fzeRP25oSFzhuvHLRlBPw=#Dt7(n z@f5o~6}x|tVz&<~cKgpOc6&^*+rx_89#ic0uwu8z6uUjF*zGaJZVxMVdrYz0<`lSPJZG_4T)g0zjg>B@%nD(qxg* zh?Dki$%orDZ3~uom)SK0=;0P>c(O1kmMdAe$?fzemP-~OcaW{BpzHQl!;?Q9IfZzO zU3W5qWHCB*iyVRpS`&J5pEJM)I~Bwmi>u=6)!4)W&<3tN`0d5U$uAI;nNb=`L0#`g&8(*fO)vM%@BdW z$BAu3J6mxYcAk+29RE7U{P`EY4C@spa+9in+LFk`iWt+0zsRSE36^77FCry23>5J2 z6;%Ia3^Ah>Uz&FA7Pcm0_+6~!*5t85dEb|7Og545ZfJN~UIV%Oea}m^>bqBPu zch8C~ku5jLr8i|wid*AVFfi4g9acR=6FeeXTpbgfgPQLm$EuOy_rd^=ZKaMm2IQ?_gPl8R)K64CcdR{sV zGCj-iF@WiL=`gtTtWw5+rRSvwQusbgr!i#Xd1(OEuqZx?XxQbSLo=pS_EYxz)N^`SPZu57}p+=Yn%K>=&DIfO0iZX1Ae+M;?W#&D6Th;v%Fb$EXH`;} z_?6vNc31nltMV~rV);#(_{lD-{Hc)2PAfaD?6gAulM1QlHCW|=6jCJ>QeVeaNR?Db zy-fay3aOF`DgSvqg;Ys})L*2KD#Hq?^79I*5>rT(utKWD6jCLukSZ~SR0%7jN=zYD z!V0MpQ%IG#LaIa+Qe}riszeo1WtT##>`_RSJqoE3Q%IE^3aJuTNR`hkq?W|-6UR>+ ze+Q1gB!-_Deq#7LF#P2s`28Z-Jt+4k7zt6jOPn;HyS>&w@=c25t5*@`dD$H4oqudy#2l0iwV^EaFNo1FNv} zC8Va}N$u@N-ABS5s4<8!%nWTfD*~duN!0-k%2R{!kg2I3m>F_9d3=%CrbZ$^U}M+@ zl^9?iZTolSwzC~xhFam}XWQUqyairD?e8+)`YxficNuSamxF1hmhqlz3HDn{tk+sT z+h^6(OnqgqmA%%!UaO{N>MQ%L?6>yyTlHg_srs8{>VLNHs(+}cviHi~D|@e)|D=lQ zc@0tcKq{)5DypyJs;FwJs9q+2L={y{6_x)yo{Flbis~;?QPp7;RsDGtRgI~rYFI^8 zV=Af|R#DZMimHZHR5hles$msXjj5<=Tt!u*Dyq6eMOC9Js=7->Rrjc<>K+wUjj5>W z4i#06tElSdRa9#t`-$u)vcCh_UlY|&R6kMu9jN~L5k!AgG@mEl{E5N)7I^~RzF^Ho z^LZjhfxAqSt*l=J{cmpF*dVdj-h7}<2XiB!0-t4HEZyfKYY3RJhy}6!yeosXI*UbP zzlKqRvWkz|{$@eT4Yg)f$+L=7b)Pp@9@}S~>33Oed;0~mD$(9{d2WOh&o zvp!k%Nq{1Y!{nNWcom;z%(HtHGikW`=DTx0tH~7JSl#}+^$qdtJ~69vf?ZV7Bd4}N3OGX@`#Py1Z_7|j1}je zAnandTo1PeAZiub$!);ELhSkOHi_NxS#mNnX{*d=FR|#U>?E}Y)&x{@;RI}N|4#W;ed}Ow=3$ADwT-69c%O1Bd*c~Snj&`J@Jbo8P5>AE;B4VkmVR* zgQ%)BHxhHGI3|g8H{taRm2duB!~rshaducQF&~Q+3ncGQFX-E`u7WQDixDgE9qe`! zPq%kBF@AFRLu`rJ7QTuq;~|Wv&4VyKH^ERZQg=*(;4T8tRbg^rVDO-eKy$3QoFZdwR`({wR?-H-CJ1g-ePL^ z7FN5rnA*LC)$T2(c5h*|dyA>vTU_nlqH6cHL+#$8YWKEF?cVmN-P<0udyA>v+YYsR zi>uw+=hg08vX#kJCR@3Kt=y8SOr|oK${kGQ_7RqHQ-%_pgY_i-U;HTz)!N+F;7HD5 z(SQnOj{*tcH#|KJf_0M@zZ;%J+y?vrcf%WKzV3qLFT!$J-dWwot&d#&8y|woo~4h+ zmJQ7mUeJ1d!KH~$_zK7=@q;r(Nv9eO<-=7*hY!So)i`G1je-Qup%XjpRSkf=&5>@vnV&^L3v2$DipBC{{^4HyG zeiKHDykoN=8602?5DWVu1Mpqo_RNxT(!xzNu`VJskpru~Net#GHepZkUHdPwO)3^_ z{vil8m_N3(NqY`5ga?_;fDe)V{-|?iLAqB#MtK%|$KJU191roB3W2yqMpYh~(}V21 zCBet3CmC~5zEjvYEV)a>wM;AVl9@C#sQG+y2O_1h#no4q>X)&Z?@T^FAoZ3}88d(3 z8H?LVe@DjGa}}v+`N^!_g;8dN>Yav!CAA zPxp^0fBWys-|VZiuio8P_dn14&E7hD>+G#V{*x+5x6mW0AbYAHzmBVd?5To$nfwt| zkUdq9{_}V$$et?5zeokyhgFdM=T(qBrh@EY6=aX8AbVH^*<&im9#%p2mWRI#K`wkUkkE$U1E)`_oqk`;vRFFNUg6um~kUg$~>>pP_PN!sUlDSFdCeGaa z<2lLNxCJL`ldR3S=X`*%`R6Xq));nzMcmy+tkEC`ZEkTyY;p(jf%s#91To?6R>Kop zi$D3y(Kwt0zr&i&f^VBGkf(@U__6pX@qCts3lGMA;Y(;wh`omEJwL_%^;udWGB|U> zXYtfo&`BCDMgq!dIi<*V6}M|<#(HJ^jM-r1%me3jJbVtxlK3S}+*x=5L(9oEZ~@Qz zllAxsEOe6&o6M;GYStqoS)^J3C?Y1E1lzN7SI+K9hRGJ6VNg17{*&Y*R+ckx0Ci|u znQgKOP4`0(5wb7T^~LJjF~8Fr^*m7u~>dq|6VNWAvFwEfz^R0*_#N- zB*pJ(oMm(SA&yc>5^?bh@&?a)l`}<(0C?0nz?Q&@#*eTTc;eO9-A;X2{ZpHa%9x4g z@8l4^aS|Uf@4zZxBglAM!(44{KNhFSv|znwzY-rO+7P3ftO7P~=+rw)N20B=nRYUa z;QEYh5u6PBG|os+c17c0DTu(-2q&pR@fQQQ0F0^9@i;Okb45K_eEwJQVrCxR6VJuA zS<{DtS68?8vv@t$NT0%dGD16(O6ns!*GM`Pat(ihslbNuO^f6g_YSLcnm-*iwt>Vq z|J}}jx%<=cU%c43h}mb7%t9WdVtNSJMNB5fn*Uz>+s~5uPtx_6ty1$d&w_v&+|J*r z5-Je--YcU z?(}_W1al&a593W-{yD5^N~Q2u;!TM+?Zcaiuq5f>7Un7i5^EyZ>yJTdcWpCYWi2#o@)B%sII;c zhfveMmM_)x&k-I?P5+9WsiyxM)by<85PdfNxSIY&Zj91sQ&dg=3Pq!I+7wmOzaX+v zT5XD|>0fo|pql=5`M8??I= z9~xKFzaZ05R&$E0=^Y~&XE&$MtLf)tHg{;mv1g5$1_?radvF@9dVvY&GF9i02l)Ctsgg`f0u$ zJJolAGP`$0>}iW=pv0dx@n)ldH zOmgBRxVN?5XZIV{s|YZL-(Q8F=80~S?^sQHhu_Vgh}da-(CmL%-q_v?2D=O9K{O&? z^IxJkGY?|A2}eN8yGsi#1@5>AW?BQ8p zFvMx91;dXeUv=SAK$z^kqXLg~;RWq|q-1Gk?im2lO@%%U)fV;Pr0wB zEFV+LmfzH}*<1d1d&~0Y*|OPRW`CLeWypV04d?cCBsE+~HQd*6)o>-%a4(ZTq8hHG z8qR+nPYqX64fhwR;mWWYuKc_juEf-EC9H-kF*RHXtKmva4OhZyxDr#tm9QGF#ME#l zu7)d7HC)-DhAUAuT-l|DD|^&%Wse%J#ME$QhZ?TL)o|tWYPcoYi)1g7z1YECEXiCX zbCJx&4(4L{2y3zEn*gO(qpdez+m#O(s&6Gl|9Y)3gaU_18L9=17O(O zzd%`v&x)aSWXX$LUl$a*NaKce;KBB`Hby9CIFLzUR#;~sjgxQ{SQh=gwSkO~E>?hw zMdAc`0pP(->UfT%3c7~ZKBV`x9v6(ASn?b#%n-hHl}68YZ1be$_mOltL4x@tE}kW; z+MD6H+u|#0jVd#6^`|!M9V|^CD?E?r1s>1@`QQYSlR!{SDjBd1Msk&PCr20Axz5Y!xHSwAK~w) zU|Csm+DW3~L+XW#JgNOfutOr4a3jwHFL0LQ%+V-u%S9-#aUBq?;`R4BC~B> zkN5}~n4AI_g=JE^0>Rm-7({Ghi@qA>ukBGYI8MrwmidNHCjaSZF_DT>sXoB&3w;P2f3J3sCOHkTn#bNN|7 za~TISmk^M-jDwg<2*6y%!OP`fn%`v{JzIjv*%Cv|md_$)H8sCqiJB#9whuL{srmg% z(b#MJLmFXxf_R2^TI_uI2=8)@@fu_tFlwCRRdnIUa8vwm&l5&4z+;g>W4os;HdEvQbn7x1j_*eA_AY>qNrBz z#GBM9#C%ThI|;T2X35{NZR&j9TWjyLz4`9|-b87u*suPK%(H>$li%$uj9wR*8U2m% z{gaQ%Y9*NgV{W9|(s$lIgxNA^TI);jBUYW{qJt z>t}JBmiqd4Zb4_sk~cQ<=tW`?-o{hx0uSig;m}yrt)ram3ND(yxR_ycZ;gL+b)%N z+oSSsdsN;nrt)q(RNgJF@@}73d2h)SCR3P9;SQ#7OO`NM!ej||u!P%37{X21!K>iI ztjS59gDgPPu}U*VKc_qgn3px~#4gEtG(kjH)`ym-NUXE@AeMq2W9hW=g1}>6L^*QJ zBCHaA1}0CVgx}D=T7%Zy7O-xjG*QlS>%;E={6H^m8ClscVMYy>xVX2`Y+eP0X7-98 z)!4`?2&P63J!3|(1paGQ*4%q8a*C1VM7~#iopaJ?kWb>TmOHwyn(-!r1#><2XJ<(< zljLHFlm>2Hd>zS9UC>)Y^2A5+cmOlQ+p!1oJ~L13kqYV|c4BxtRZw#~xd@cS$v~Fh z$q#}%W4B<6H{ob`3P3os&qfvKU+$!u0y|a4+>qYH@&2vxY#LkPN zDhA#mi!T0Ctzs3Zm65Ree2e9OQHoGul1=Pg+LCXn#+x9W#5&U-oOXjq+Yo@X{VaI2 zjRQwp2sGNp0i!Jh7H#7|(RMH`^EQrDY(bP_iy;)-XVHnCTIR1rC=#LAhfws?GJhpX zktoGJl%ju3%iMp{GACM*XhotG|1Pwm|Ebtb#3B)kL@Yx7lZxHvHDuufDRz4*cE66R z*zKvh&+lLjq{pS_CJ*L?0Va0BbDRz5UvD;&c-5yr# z_LyR~hZVa$rr7Oq#cq!(cKZ&+ZjUN<`!2<9-=o;=dlb7prr7N}6uUjH*zF%z?9M0Q z!^q6{KTk6tW8XaMT2%|Cp?C@@qj~Nn9c&V)$(dkGVB}W03pPYrp@g)1&YsRFIj@45 zfY*SmQ*4rA7AY0!&}`TI>RFvihq?pag~HIVUTT)r6Dz-0LC~$M6n2L~_$C7`8&9Rjh4boN-KI>{DdNp!jxU`bhvneowFc_ z>_gaQ`enWa?0k}b1Ph={1Q)}XDCzFPIp{l5DG>2?v*6jkYmtH&f8*Q1OTa%C;V#Y2 zh=Vu(6tM~P%@DeiUyltCx$fGbP=NBiH(z~vG3L$QkH?<<;%foIsHOQ$crH$aIV+;F z`j}TiMezsh=O(O$HT8l*U~eFX*7b-*%@HQ~AJ6#!5BASpoCCv_?~*l`U0N6v9-yXY zi9C~Ju_{>u#Q;9H3a>j0$1n>fWT(MkBiMEG^&!p>4~R>fAVwF#@0jD;8#ju~g>ntp z4%SUmWBgz7b(^F|$C~WC3OaJ24o;83S0ww>2VbNTV4kriJ6}Y>9?7bFqn>zSr*V)a z$vYRfUqc5szuwLlVr8j7@IpcLVdjVm_BO%0dm9P`fR;&k$4RsNS7CH`TtH@6ew5FQ5( z&UfA3Yr3ytpHCyr`g{sD>eGL#QU9*d2b=WoOUE1Z?-FLPIsd+NyfOcd@PkeH_oYWt zM}DWB!LIQ8(nv>06d&#ex%_jT;Pjh1GP}X-2D2NCc~5qP&#`4km>prLBb+{^jv zXZY)UWOta|VRnbVc83xF5hdE$M??jJ53N$QV&h~BluO7wZcv3l54 z7nOpkJQufRtj3;Is#7e*syiYKqau5W&cS98y$9o8{de@XDyO+i&NlrxF@RVqwV7og ziI&(SUdtV9Y*B;_S=N-}S|NORkn?xe&6Vuogw|>5pC$lQ$>??*hPBNF& z!gfBktix4w^Hw|K&sc}lNYqPs4u7$j(tJ(muJ9S^G`j;4;W=756~@5)QF~zh_Px~0 zc$cin^^f|K{AqpL%~x`h{U20isPIfaK^&j`*|DJ8j;cVEXar4~5|Vb;p^EdFAV_55 zgesD)HCSgiVbTM|C$3Cc$ftM&mH;z2OH*h~H$VJs~-JgQyPg_GI&1XsEt4Lr?kwxLfEM_PR9 zKD|69`Pg<*cE6H5M5RKuxJzeDg-?8Cs!b?GAAt=^FJ`+gr3-I@5LmrE$%4ub4LaS6 z^wWG7W=Y*cHAnqy`!1+>SVZy7RsL?~Dtj!?B1T$7VYf<;!#Hsb{LwP88tsnd`$dCx z7J$R#&?G#*AffoZxbH5vZuOGit=e`iUkOh18*|5~|R{2EkmG{-lwX!Ev{ zFWo~@9e<&cE)S^B-YI-kefIu9Kz;U3H>2va_Xk4iGYO01>NEM!xcck`VvO<(Q(S%KxWG8y zFnwNqHYeYZd_(dLJNSk)c>Q8G|$+4HHd`R zDcK6l_90j<5y_BkV$sd*%icr9Iv1Zm>1`Fp+J1>`uH2_KhzaKyh~a?842#+>uwW za%XTatmrPQZ;*>rCfuQFtupya*@;Dh;n|!0$kGBaVz=Z9!?2kX#`*9&8<$D6l#Ilx z84Ss2rE>ICmcdAZ71}SXYjYcz z1im$Y+}vx3#;Y)oH{lS7q7T9NiHEReSg&pFJj*xIU(mmB4OtqSl$wGWxC;|PWquK! z)XpQ}FJy%0->r5#yPf0F*Y^o3FSg7g1HVtc3RYBx=80jydt04eaJgR zNa=m-967w6TJ`SNT%=F2uIl+a-aShdX;Rn7;~3GY-Wv7HJfyi=jXb}E$cPK6TNsZhc@6-sQULW%EG zDAAn?Wyem165Xj#cI{Lsdv+?6Jv$XjY^Ormu~VVMcPf<6?^IZlg-sSVS=b#c?2-&@ zGO&VSCj&d~IiFx(7hzsOUl}{dpuIDcz7r3aeI>D3Y#%0oCx%S~v$gk%V%L+e05Q1= zT5G6j@wLKl@OW@hyn$%R@5%#RgvBu?Z*$ME_xp)AC^lQd*wS$Br+y~+)8UH{Jp(WWs&v8-tgniy@5GrW?(3rAml`J zSmcW|>GsY^vDjNM6DhmI)7kr?iP^-w$!*5?U9gagTP)A`5M2V*g}r5tx=TPQ;wZL9 zK2^-0+={0tA8B>t*=HDEV0BCbA#uq3ORy#Ug3Kr@oS23Q@sPA7Pl4ym(H*G*$LMyLr~4~voOsv4$&+jcxD-gW|j~vvy4MB z%fS@c%Qz;m1o40+h6OC2#Q|z6vcD1wNGxC<7En`>{grq?;sN{cfch~-cKuC}owz{a z0{^+VK>b5`n%F>M1Bng9{3n&C&v90_&|@f1YbsB_j;lPasXTq&p}IjHLwQ0hBdt;5RG`t!=u8dILuu=2FVl&3YUJgqV1X$>n+YfO1s!^+bdQ=Zni z^0Y>kr*((&v__Sub(iwA?opoBJ<8J>Q=Zlx%F`NGp4QJRPuFCdl5I-1X$RZ1CexHm zQ!-6En5Ok3EYm6s6Hx`bf(#2KZZ}^6<3Hr* zCf;Lg!QFkuPL=6Co`*!gB2kET#<(lt0*IoE04J;-->7enBwAo)C*eZ)USq0wy0hB| z(R-4dZr!b()UnEH2|!}!w_N-u@n(_CNc=arrMi_d24eL|_#x(j7LP_1B$PSC1`SW1 zefE}jxBZI2JP~hCrNtw@o`tK!gYC>5Jx$@_*IT@#GP%91{>4fbX@Mt+g_Z%%{weYf zam(URb2~H)@A>UunZ)&*L`Qq;tT2U^4e{gRpM?iugyiMB!~Zm3d?~sxW$!)F#-f@v_1VSq^0NwHhq`EHDQbfuyKZA5xD|=>T&Qg}UJDH_2BQ z!OM+n5sn!JfK@to_Z_U4dXJG4tKls!Qp+@1BmA9AVV=&KE^dvSxq?sG`(?@GSQH~6 zukxg`f0j8hwywC3@LYJARaLNltIrtR74ytf8&F0x25O_uBDQn4&95P%QX^PK5EjxP zwb|_)%fCxiXwWqs1XT~;MFhsSSHAp8pMj$ z7*4c)79(n@O8!cmC~=~FI8jSg@>gO-i52a`irU9i$?Z2)a$-h_86{?vm{DRz|KE`^ zaiheI5;yu4H;VXAD%PLlB=1Ny|8G~Uw^Xcu9apj5QnCKLLv@2ZhGM;?V*UBwyWj0d ziuIO?^}j-~-i8(H?dKKiEv8s+Va0ljDb`z9vEE{e^%hpFx0qtRg%#^9rdV%r#d?b> z*4qxndW$O7+b+d=+oM=-dlc&}rdV$~6zeUnSZ|+KtZ&IgCKH)VLzRrzDs;FnBn<54G0ki9GK^! zks;m^!||9R>qev{Hkvn+JEXw@;|04U9@M?9loSKNo_T_rEzi@Z70I70G* zAeCe^;-xi%%s&}$m3vad%>H!7TJaZYdoO}kQZo>f?Eb{dtIwppzfh1_nq_;ZD1a7z zjK>4;Y;KJYL0OE`o!!D&qeU1>J7uT)GZO8nM(q49=BM~m5H$_I5q#9%z|3si{8`8$ zb~+YzvbnW`mynmwGJd=OaEleUoK9?}s;ROHwC!9;gueNl+nZ5=8>uwN16TslODZVi zxmUL_Tf62na}^6D62Vn>sV%Fpy!M_^L8Km%IZfrT_?j9FLVmz&WCc&c8S!-Xw$z(j zJNOnkfmJ5jRH@A@3Y~lo?IfYI+@H996}ysn!ph!doY+6>OTMyd;_i3531eZfDD}eZ z-}`NEk;txWDRJp0Sq>{A=IiXu?=13$qy&_mrCufaty0}km(h>doOl1by)kt1C&d#D zmAr`k03jEj0U`ia_YmC)@zcO#Vce{a5JrM0vOeqP-a!tsPDHYay?I!;CDw)KB|BUt zwh*Pe#Q#MgaEo26!rhA3=E`ynJ=E%>#U@w5 zmB~}4J>uzRp8*5)Pi~pSYAOLp4Cd2L#-om&e7#J&Bi$J@e32N7H4=ZYD7zb66VFbj zpc^2D2&>MV7>7>1(OZ!8-N_;Evt$p}b|Cq|Y|E97}oGWpz#JLjZN}TI& zz`6P#I|CByN~|lfu9*Mi&Vc7Qsc@tN`M2*3=(#iC>$p1udhQH(-l4id9%E-f&z%9! z|K9y>N7@=&_vvJ-joZ z$94wv_|AYH-5Jn#>zs8fO1OqG}+T+ zPvh+AKc17!>2qw!oF;P`K^6Y-oDZ<3|J=nHQ<$3~y)4B%yuw+SR9YT81B!M@dQCgg z1WU)t9{xLXWBzycS%GP@x6(3;M1CUD$*qqlM|64!vtpdbAdE5kt2hPDqVT?d6X|L@4yV6_JvSGRS93FsWS)Qd%0LNr?&OXCf z`dRoDq9*ymkbkTm2!t59h}|(};38T%iSwLiV=+b$IM8WZN8upJr!=9ohjs=U>&qNc zu`K?KRj^mSkyW zlKWU$gV`Rwnub>1-RiDVA>0(BEpE5OB#ZRTEyP&Hv&{e5XPb=2vl#Mv@%wCom4Z7{ zZ#;x`wsWn>GgLv{XUPDQMJz-ZO6m|Q8Dm>`3ZOv&BJdPE!Wi_k&)8L~Ahd-VLetD=z7q_2>Ak)l76UGY9?Esc(t)Jl!lz z%td(8RiZle{3LbCT`C2vluDI(v+Qv8YffS(*gU>qXDVW)*dA5YRj$ALj5Vp2jX$~h zT3>|ur4~C25O$tr;zhHs5=d%Hk@S zqDWj?B%2$%f-R9vn2qP0lf~?uPq-S!Lsh|;Sp{lgI!F9M_$8_>gEvq9EY{5tH>d>g zcf6JA{^GNZ?eRpcZ`09=jz`gA;}P+Tv)|u(aB5Xi*tEJAmMo_cNV1%M6ps8xA_k$z z?@PyF$nQpN5Q6-^bR2&Cu44zG$L~vzv}54AxE{p5zAug7UPSR>%!|uEhj&f6W8fX% z6Z1;UD~5SZxntlfaj(R^_TgUBr*;h3of7|gjv?`{#J>{%O8o1u$G@gOb`m58mKa!K zU@`y6odiCk2ii$stCu?oo_9XlPJ$P5kUI(7AP=#V;I(kMlfdtGpq&J-sF^znj=htB zbsVDYrXSx)@FG=4>ANYqli(GEMrph$x|84q&5hD|Q*!OpyX%POB%}HqTQaK2sD@C5`6F!VEKDkMfL+@;LUe)H9T^1sCHs&C zKs5#DG<0h7`NPUU8|^G3L2(RJARBHz({Oc$(}KkEy~K0Lq!#yXZaZMw_$#sQCf73_ zS|Q_BB`Y=YC%nYE&%1jGIhS~Y{mv4lXsuJ4RZ);n8#s;`CzKydA!e^gFWsX z>u=}J_O>Ne!(Z9oW`Db{zb&a6{>mOVd)$3JZuyvMxcsIX&R+L#>vhW?3c>7mv)|2r zH|9U75PXi4SSMA;zg;0%QX%;Ey5lJXODY7Pcc^ZV$505CR0ux*d-uB?Ng-HLA^2A) z1k12Ou>8D2u*4LCC9DuEF@<0WD+EhSAy~o+!4gvlmasyw#1w)ht`ICyg<#pC5G+xJ zVA-V*EPE7!WsgFz#1w*MheEK#6@umS3c)2Alw?qnLD|8eEXkfEdy?$Q4)$dE2y?Os zYl5{hb6sMuy^XW^YM7@!+^dLYMPP=9Jmp;wT|2iydOLfgDf5B<30}&&S@U)C`L?qQ zn9d5en1sJ#q1|Vgvq#vqze)_icWHiU?rs7vEz%6yn*wrS-8s}{*5+=n~kEyPa4 zg7L+R--pTyFE_ZW`bf@_XAA^b+*-(U zFMQe$v5;70@2zC6F76$0N!STKXm1{V_&UNpQ8U1pP?-S2kq-eGZc>N9lGqagDF}*V z=T$t%Np3X%<$K{QiIm+}6Ik&qTn{ysF%8wN{d=}|0t?F!sIdGjps%PvleoXgQ zf7AVC2YZYTw*GnEUv{zC#by^9@}E@m`79nu%~w;+_jOz~UrjaN^A6Pw@)&Bqnrgo1 zfA4;`BdPgns`>s3HD4W8^VOeM^VOJ|uZGopHKyjPVKrZksrhPH%~xY;z8Y5Z)tH*E z#?^c^s^+UZ)Oi}B53Pgb&k+ZOU zaJRd76`o=5JGuB;S)OXX+Kb?8STsIld#0POfMK(%uN(2kPBQ?1y1FG^1kB(Lp#8*N zqOR=-Z$3gBKepD~c4(1UGv1VANVTAG_$5)Dc8@nK@m;I158MYYBnROo`c5$N1y?Fc zyXg!pJ|`!^Dwt20Ei#?OEv~t{)#LX~7#7>Je)5?-3mRXgb!F|yl2jCUNfG3nUHJB9 zGq{Z6ccvbouHfB8*svjm*fWq7{D{msYYn$zJMx)lnZ1W_VBCkb!1AdaIKP4lgz=mu z=fbcs9##RXCSwqr@hL_^mB_a@sc?v$)^wBKr9Rvx~SMKCRU^V=ljf3B&Wl+xYOY#kqN;Q*!f<~Jh4-Jh5F#Ga}8 zm~G2o#H;S}e3tqXuVj6ztlCL(;3gayRtJh^@0JwAs|vSaI2>z)U)UY5u4JuQ zJ39>p?+|dzcnoav>|+BvwDT~U+q|C7a~AH*qLZ+SU21Qhnw28U*m)#p|NSDo2VH|P z;y3?0h$&f#7{dJ9+uhD?&#yPy?SQ=2A-HS(S*U9rhq=}e#I=sYTWbi~TE}6n^8BxmBdyO zTiK7Tv_BNkiLWHSlK4u@e^LSc9A|Z_Ifeqdr2_ivxC-c&3h3t@svG1n6woad(9i$g z{ccB6K(|yt{}l@8HmrbdKd*ppF$HuBE1+9U0o}q1=oV8zx3B`b#T3vjtblGY1$2um zpj%V{-F7ITTT}tvb}69S9tCvUqkwKP1$5h?fNpUGbo;yldP~MG8M|ccb})8ZvUSPU zC0nv*I!O~lE&+q<3rad&TH#c1?E63NA2rsOzI z+PI6=5NS8TnPDjCbj=DRYvUi_mGt7QD0WATA#O8fJ4r?ufvQ|7bJcuZHUW5mow)N= zR+beZV`9bDku#q}8b;N9RLrL`l&l&#%VOKbX9;_^H=Gf}1luTr4UoU=-F3xh(zs0K zO;|T#0JG60_t|>|-yZTtgm3=TWIC!K>M^{NRVaelkoE8pFmbNI*RhH&NKccxg6K6# zMg{~RZ@}7~g@+@8Vq+H9Tg=0iHCu&6!ZM5C?9?r+0xQl8*xM8ZHo^98QXi6quJS26 zEs8p!`-%h6@fXgaq241uGjBi{wGBZ~+t0#J+c@;Jgpnwiw2-eHP#7sY-rFtHd}G4Cc*oy{cl1A$!ijk#=8>33%zsiT{2XU>n>vP4xTjM1>$pnco=V~8 z9jY7TF_gkRmBP>e-u-SzQVRD}3jY;K;XbSs?mw>-?lGls4=aUxOex&MO5q+;3iq&5 zxW|;jJ**V&F{N;iD}{ShDcpA`g?m&f+;=I3`yQom-=h@nF{Nx8oALg@4j=PBu zZGt7RMvH<#tKWe*z0SVYV19POihxqg138OqPV6Tek^w<9jr*hqAj53_DVSQ2ZpOeo zFVfO3ikRZ@n_I#rpc+?_udzKl5rmoqOAdOx@?Z8wNkMjb(z{?YtP3_kMj~r9sRvm7 z`3;Y~>z0RG@=fL(oQ9{Kq+T^{kBlMQ5VZ=QDkrxAkSFjVLx8ZrtK0J?D|iwp!`>o^ z7c^h%lVsGUAS+(L>Tmvy#@4YetKZp93F___rVP0HNQ~bl@~%E(RG!4Ehv0ws_*uAi z;}gZgjmcKfW^?Q18vKIs*!f+o{^ZxgyHN>ajjWx$i&W|(W8aA?Fdx-_x09fVH+8A)@l$e}F$1jQV=thzoJPQ;<@BRK(svIz z2qJx7Iu0Oxm)L{g(f6g}z|nUFG6))dUwS0X?{`@=h+2GK8bK_G;=^bKmwyham{Rlm zm1sqx75mVNDK)=eiC83Ju@AABKBf7!J0)`Aev-&VA{YN&g_XVnq5;0R$z5A*?2i3c;%g5EbFGn9#@4hY%sCVBf zd{n*r{y;#z`%X8b>fQGTLh4-!i{t8D`Ovs}_XV&8+nUZ@^|x?h~w?u~tMrY4pfA zpqAuWyU*k{t~ei61gr|p=2_UsE-fuFa@*v2$;%J7AH!HVpF?XNz%Ak4m_urSuBXrt z?eOoj+rTDI1p5n@v{&SJLOdo0V}V36K)9>hJXK{;w0-e0^VG~UE4Ye<5W}c~h*(??Pf1L*Q)gI_$!C}h z!%ATxdX5v<*!d;b*KF?u1m+*kn<`4idk2n8wsPUi2oBsJ=>dSe&>zsof z=N#)c=g)SUCDoT-*==UGxv$$SslNQmjx#&XeH~}{nEJB(roPP1^MAJUEPtryvir>L zGrP~2|D<}(E&WL9xsvL+uj8ucN~-6ccc^ZV$579eRL?#Cd-uB?Nj+CmJ@;3r=gP2p zuKc`uuEf-HC9Iw+G4)&ttLI8gJy*i&xe`;)m9ToQ#ME;ouAVDV^<3GZo-0xHT-l|b zD|^&)WsiEU#MEbWKPjN~(t&)C6dEXidgmyuk?4lZN)2#>J{hhee$ z>Z?&?9hmhdm@3|O6)R)6`dOaRY@z$Cfb`B6zk|KEjfjmO(3+9gSXC_a;eLRn7`!3l zF>H>w^l%%m(u{xxh3_|RE^8Dbc3AtOG4+wxp^Koca-;wAGSJJHF2#2fM>(TLUI1Oo63ThqJS zz(v}|haji)`n=nzNMmd0Ct2_6>xgIb6l5Io2v{?ofnD8%FTk5Gg3PlP%$Om9*f6Lb z+#4(!>msb1)lLFa@zk53IQB+6?1!13{Qh=Q2f2cbNqr*r&rc$Xp_SA>&rdaBg{=Lj zhLIJwGa-m-GPn5AD%d0_5qtX0Yc9Tya5VjG6_H5s%bVw#-+2>OkNU^n*|xfEGpnq{ zNuUfOH!y;og0lGhY=Y(!6NtyN_!K_K3gRjD7Pr}-_bSMl<&(Rwpl01o@VqL~z^t0Q zDo`a=2_8-6)T+$5BqHbLGXNj-kaelT@oi$OWJ0PEvM5zL6=0RW@L!&qNC+>6&k|c0 z8_@DaDvKhusQDn4w)uKB$y&2ir}o}BMz#18QTI|Y-6TF!i5Qba7b9Lq{NcnK?ri7J zC~MyQ8fNJ#Ph=I1GS|)p9WH=Q56&EJ3_viD4znXK|96+Rv}VN)jvChn3XSetsohl6c8J zyrh0i`&oa}ekN{`xJlwBiJSaa(IT;v#7+`B`4u~f_)jXApW}S~Jd$#`rgHh~xXR_4 z%H`)BsvG1nl*=`h%g_Jb{ccB6F4t5p{}syRI;>o-Kd)S_G39a%E0=3bxm?4_b%+)L%KUD$t)5MC5oy7(gzuw-dh%E`vauv%Y zlCe4$;Y1fKR`MEgg{F8FD2N8U3Np&f+x!zvc~VyV>@&dXTcqq_57ZCJfD)6W@i*j^ zSt61#1FYKf8{vbgD2OOnJ20VTHfDJJ{YjYz1st$OSUSBk;~_6mEf~~y_itph1}Us= zA(Lc3d(R~Hj}?Iu3B;jqp`$t_D`GR;$IeH({XUw)RTT?2b&%2z7Dpf zp7blb*z98Wb+PSZdeZiro;17J<8`y`50zhbwAs;SM;r5>RQWx}iCs&b@o!i8wN&|i z9arVoQswu&Lv@2ZhRUy{%J2E#yWj0dD!-O0zrRA|*M?Po?dMf~EvE8oVU=Htsr*`4 z<=0{=zZO>cwV2AUg;jnnrt)iXm0ydh{MrtcUyG{z+Aft}+oSSpdsKccrt)h$RDLb4 z@@t=0`EALOBuA1Q$qtTWOMWEzk>p2q@FUwtxRFiI*=X(`hHX{%2AT_yAw%L;c~&sB zhg%A#XYj087RZ+Y3CwPF>jP6O>fc0|v#$p03Hr^N;9-WxUEMZ`$@ZozESK@0-5!Yz z*zZ}c1f6~eT!9VZuk6~#Qi#U(KC0PAc$Lg@6GW;DVr*~2!cO@{tPK2-EPVC3#eS_D zzW6mf5t$mS(^v_{1NcEDK$g@w7kraD+@*=T$e8gV))ZKU$cN`u;Y2opi^yW+;z^KM zW*gp!@vy#z&oaZzKhJpb5t`*gL2ytAh-Q27`KfBaa#z4+r|O7 zEd;)8_ppk*$5iA! ztRn9*6?qS<$a_ph-s39r9#xU|9V+r3Rgw2yD)PQZMc((Q$a_ph-gl_Tdt61{KdvIL zr{olqQ%p`V&ME%mImstJ$Ci9z@`({t;UCZW0GIgBU7SZ`%?(!<&m-@^J)8D-UDzPY)Mx)j@?Dqu!7?40>*6EF(m`NZWwKA`O=kaCp)xzO zaA15p&tBF8)Nub^%;q8*qnrw=2bdSbbxNSi$0! zV3`mUb`xt6xPx_)(dol*gQGkMEn46Es z{7zT_>M`S(sJCx!GxnA~su!$%bE{@F!>)wsr*3b;C)&AQatD+L)LNY7#hV&! z4sUKV*LRPw4=Smr5tyW&eiS14?v4iGk?%{#p^@+6aS#^yzH}TC`Od9_aLD(iN7D9w zC;Y*F{QJ^KFHRI6?!&qKb3OQ!+TO41!?O?H*N0E3?fuGLJbUqdz4-JgZLi%ad-CU% z*^~b-_TCxO|RNy_`AzcPlP!^-^*9yz|i%m#=On6_;+1hfrL; z7A_T+ezyZDE?-eI6_>|WT(XWsRKoP*ipv+!J4z``QN`se2#rz;Q&e&Jf(u3|hAFDJ zeAS+Vip$sKr<+m5<@*C6#ifMBamA&4Xk2mm zf{#WSo++-lbX;JZ>6t#SxSW&eNv0>6o*hijoGeeWJjwFxV0q?`Fg&xq&+zK@jz=4k z40_BO3NK=Bm;>vk2@*EQcGZ*J-cKAEnWFu8Bq*eC5eu5^~TV4bfFGUUC8X;^Ll)y__U3@H^Rr z+)A7vc5afXv3EoJW}mT1av3vL#JUarA{voNsb_>UvvEFuH~d%dbM9uR6x@Bij8|)Z zH~zvrGXu=_U6?a_<0Uby_;{$4$lVXYpe@EQZ#1(2R1)DpH&3!UR2tYnc)QhXcYjjW z#onj~c*flr10F9iPnk|z1rX4iJp02vgjjnN>co%vuutPxL?0{~hT6 zlE{A||B3wXK>nAHp#F;>{)U}lakMa#TMaYK%yn69{%$}5GeHJnH6+W}F8iDR4j4er zvem=$Xqv8KS&M&*A?M5-es=bip^>r1MDpDt2&Q>t^Yy<;4&oW@ja7VObsIbjO20~b zXwkd){E%5}A2aNTpirR4mJ6Qa0aY|qTzrlUi^WYchqs&99qYxFcOL_&EQP`Uyj;t3s6g%v0fkYI0_Y~_z*d8$j!~~MvTYCj8UV8WSrDFQWx19t^^~7t9;>Kvd@M7s1%bu2h(|Qc{0%!oe(j95LAV zPAW;sjjTA9gQweDqo{wXTcf@EZu0Lkh=$lT`*T_JJG;MgC|N=v$ubU*ECf670^GSZBU`wkxlx%lpdCJUjD!oq0`N z-dA?#*`4p}&g;i?dG$A4UUuo(rT<&H^!kS?GduO{)U#8M`A@1cpW}S~Jd!H2rYiI6 zxT?&Ws?6sdsvG1nRGBqZna}^;{ccB6W!6+>{uQdsI;_g9Kd;KHF;!*_t1@d$m0828 z%ob4~6ixu4{Ic5pvy@;=G?B=56>_gO!}`K-eC!0v$bu{+!tl#AT`>^_9;6D17) z!gB9!YgiUfxd@(UR&(*EC$56TnlI9=;zKw8_E~+pxaAsJzWH|%C-^M(LY!ng7vV5K zbnU%3WH+Mp!{>xdXEU?-vsbx)QC@_3xcJENA+tL{B<;N^#h-|FtVz$!yb%`-IucHc z%w-v$$S;f(`R@C(5zA1vg}Jpe9;iLAV(ILyewf_}haGIf-Z87poAEC+u-F^_1)&t%Ghbk>yN~B4sNq%6R-VGx zyTwPlNG!D2Q+$o=B#g!Vg1kYMXzw?=xQ!7DjniR1g{g(bBEB=h%qpG=HtQ?8bEROS)!&gHWA1If8i-E zJ}PG3&i|k~IQy*Hi7}F0vA|hiAN(4NrRFi9aoG)DtV7Vn`m?abIu2Q^A-G~4hbq<( zOtFqb6zjosk?VMmyaxN@HP#!ipY4lV>LTB$u9qmdeEE9jY7TF_eid zm5I;)-u-SzQYN-kCjJ%5#5Sx_Oqtli%ET5^CbqCLvBi{$Ev!sz zF=b+lD-&B(nb>wH6I)c7*mfxs+a6_N+oMcuF=b-gp-gOXWn%lhGI2}xCE1r`Uv{uB zTQV=nyd?9ogL&CL!n$n2xR5(&8L%~bKhWLBZtv8=2F3RARP2{LVt*mKkyGR}hO>0Z zhPq$;8(Dewc|RmJ8oE>cFT~z1?Hkr)d(g3QGA{_$<|AAsx)PtUzIAq+r8%;G^zJKv zk##m~7IeD0w_z!U08c(wVDg}r_z=6~d1n$oWPXTn_NFgv zeD*n^+h*oj$Fsy;q8HhaIK;f2Z~k9qX%Z~$5sduG<^UrZT0opAJ_d_$%o3Sl^D#H6 zulOuAfH6`sC!GF41!Z?5a$^I{=h@x`#VS-;ujl-4!n2Tz_$)EiSO!5jX!*Gtf6-GV zus!Mo*axc?i181=H5025LN!YMqzh3v;Tu^c!QeuAvPagxWVh3Ty-943$U)g(S@4c`0 z?x}qI%Kkh1?|uDu|CsWz|E7G*K0N#IpXAIi$?#j_XBUOeVMsjPgCv$};ILs{8V zS^0HbWo1ug|tePk0~pASXtR)%E}&AR`!^(vd5K`J*uqiJCv0@s;un0l$Cvtva;_{R`!^(vhPq< z_PDaLe_UC)o`l_@U}=JeTLlg7NVbOsp*FvHBA^r^l~^ANs!Eoof|lxl?&~IqyuGJk z_U|IdZ;a~Ucc!C+)i_B)VGrn4P&tY$l8d1(-4h~}_(O0Hdk+lVJx?n95dDE+x;Ia+ z)F31m;|!Fo0YzCQc`ZI#dpm-3>mY+vM)U;6xPY3GlsErLS7ulkwb80({`E)Qw0|E%X@pk3ZFkg zhgcnO>n=q?m3d=UDIpjM#SC4p**Vrr%}Dt_`A8Tc1;Zpoh?Z4+7sVL1aTWXoOSWCx zJl);zz-MWm@QziQ07HJRK0?}>NjQ_6-0d#2gn!Z1JL>Ynrm7T6_?PW%mx2m^paFLj3D2{YS7r`z;=f9EOeZ8ofXcUyvC zH2xg6fhz1w#xLjtb6l2gBKHF$&{<)PJP?gS=M?HR=P_aP-Rqhk^>%8eP+6R>LTz6o?`F3 zy7)61d_=@N`%ml2iO$kwvUcqKzX?WfZ%n($ED56kU&73j)j%6=5fa_Y6DjM4}*C1Iv=4m9V$!J;!5J+~y-cE80pP;Jcbw zB~{VZ|5!398LZ8qfroN<6?{nID0qW|=)ISkp^ME+QV7 z0);!v2#p`0+QAEi8KTa)M!1T9yz7_qZ-`ieN)nH$XU>wH0II3pt(I%<1$NGg)a~|` zK1L2CReY`heaRjtQC2Z~29|SY;dAfe#oULeZ*O1hZjH>3u@mz5v*4P*iKYNL`$}1j zARI2w!l#VgZ$5JBJ+i&Nr*Reygw==G5BRIF{&)(rL`=|X&UAi~wa9PQ_mN?!e#yFG zd%SDVIT%Gf^%-@%e1I*uz;2^mCed#!`{9UaLg38~Q9!abIT|y3`n%|d35KZ#uFq+BbpF=XI z-?Zw9W+s}MXlA0B|8_KU`hAx`BASV4CZd^$=D!@#oIbTb!|s&G=JRJFn~7|G9NC=y zJl#9d%|tg7-Ar`ze+}J?L@wX`^N`u)-gu>FfkEu|2%qpU>)S z$qU#B8hEO0>!w%@s{gB7!C7iYt4yxG{*1Xvy^c>?uZqXqe693d9T(XNLhi$>sJU&A zrXWZ<{z=w~u@QZV=+s)PDE7O|Fx@@RMO4Oih{skNT-_>(b2q8NEshdVh`}d$QpR6= z46Gedhgr4$kU78lU$As~PF9VYkm{L8v+c;3|K~R}k%~Zlk{tPvzt~QK)qTL;FM%%+ zeX7q2afeEQDu5ZX9*Q+2hc#bYeEuSpf{Eej?$2&ni(F~7M)Uc@a?N(CufRpN%g{G< zK>#+{y@*^Nl#3Wm&raXXeQX~FGw^U5XZ`Jzhvs$!3c>eYWao32d`V?pq>H2jS;f-1 zvd9_{n+%}@XX?IQVl){`kmjpa)?}2j0}b*WSEK}z5TGXI;Yq;1 zvlLrr4H6Uz%}whp6H9^w_O{0)dCJoP_R>06I6g9X@m)Elpr`1$q#2? zetv0Ra6Mc=Qafq5=vd1q5=!rpt$r`V z^BrSNdTXoF=*3wkYKZ0wVdsJ{Jn76XQssB42B;p$3AV{dFcYd?e2|)qDK&Nl9|UUv z6(Gy4evO$NRp9K7Ll0v}`6>=Fxl_<1E`o0H)YO`G5(d4>+3!PjK%BANX&3)S;y>Av zDhBh|B%^Lpll{VD{INUR5Om@dReSe!p*keTQb91c7J=z9$psI0le?fG~twps+h_754gb^UY4==;?TYsfPIoXNOO0W zX{Z9G(yUQ_*~`s{hyo;YoCvWHP=AruOk2E@0NcbKJ#2--6ob))xNGYb!UcJ}l0ZGLa+N<}v ze0;Cot5Y1@tM|Hme6QXsPz~ff_fGVqd-dKQ2<_FAus*(5 zPd+rhSMNn1jH+6u_+CB7Psi0Q)93f<&8colb&FPo)Rn1jk@lnN!)4$`jUnqiw}89U zX2zidToBKRuXsEyKXxsw#a-~Ki}<&l>ne1%cib{|hTiq~9dZV1*Zn5T*?vR!M%RJ^^~N*_gxv84usicm$EfvzZz4 zm?fyuw;HsVF9TCp4ppu`La%S84zOWx$!Sr?){bM^4~ zv7@k99pPW?9B1Lms5XgDtlC+sN~`}tPqAU?r^sN|SuAeJb{-;CG4Y$~diB*|-t5GC z; zn4QWCsdAB@)mKDM^<+&=V<43(vBJKK2vhu7>_j=L9wEfK)bR8UM7FDP`FFP&Q-HDh zcYj9mAzdoKrX7cNcblYsBzsf8Y(m_T>+Z5TR9FDKL;yQ?k7};_*o?9xN)yxY>&fqI zC)P=QH_Neb)Pq#AH>u`|*y=^>jgu>F4A1)mlJo35-7Nmd%xILuQ#PUC@M3BK)}3r< z?|``ZH?HEdrjH`hN(3w7%UIe)AaV0bJnrF^@Q{8=Pd>iMY#Ymjr!2dH<#`BHo_`il zp2xxDIRqrn;~?@J0+8o%@OVDhp1gS+y_|!{u7vmAmDt|965e}PVtemOc<)__?Y%4Ey>}(H_pZeE z-j(RyyRu{NU5W0!E4%jIl|6g!%AUPW{t8gL4b`Tqc*CG1=7hru&^7SHFgS-z@Z!EJk>86t5 zK6f7pC=r#9okaU)j3V>(i$3AzBeCjYb4#&0Q&2kNtIlpa?pJE{!u6Jo&wl4st}%qgKyj?@RVd2 zP*vsxxRUyfj7?o*RW~bzNAq85t-IS>)q0pKyFahhM0o4jN5y??41x+TQX??uXQ=|H z=RwfHq_J=yHEInil!w$i7pW|4-ms{fkBa+LwNK&MF4~7Sw>mtuOO2xyvS}NDKv{*e zuOq8=mG$Co#>$G1Q{@pASp{-?>ANAsWe7f8eik}h#$m%H1Q{;laN!by3YT%1a5>m6 zt7ROgT7nqW62qsK&tg+GcUgTUK9%@X;#0@Mr)uu9`bvx{F{;FWunG&Q!L zriS;^)YyKS8s1M+WBX}pd_PT%?x(3c_S4kpeww;#KTX}UpQi5FPg7(2Y3h#sG&R1T zrha}u&6;|J)GKIJNL`tF1sQGX75-g%g*CMbsZ|gkPOU;}75?p7h4mvkg;g{P*x*U> zP7$WWY7eYT;0|n!9I*+YYupk!7aR`o;o?t>AJ{pZ0w5SSC%i2Y#c(O?NMPWTz={?# zn9<2swTtS4xJyI=(#2X?Xxe~ayxwR4r@P3;m?3zdeLPpf5o*}cJ-BySzRc3%s+0WJ2h#G@$BuY^) zSq>3~hYVn+Hji(pBca`8OHLbV5ryt-p_0h zUC3#M3wF18=87Cu#gdr;q9Bz5Gh={{aED!3`zAG{X%!Ul6$s1f93ljf_~9$Ur+8{= zKRXYVwYc~^*r|}BmcerD#8$W?qNB__mcNF$p!FBUP8D#HJZ4-qHbYgyiUSfdGk5ow zNo)`QV#e?bTdCEbn!FACNF71%V7+G(Um)IZzIN1QWISpFDk(c@neU>OX5FP5wK`U+ zHnO7iv)rfo-B#&6??SEMJB;ulnD->MXR4>ky{3ts7g=9o2vJdIk}kkuLog$4akK-`%B0qtnN8 ziKV8hVxBK+xrW?lJ+f3H#8@&2)gm6Pp01}= zTQ5`Go@c3{tWy@X0Z|B|!JcSx`{z{JNzjQ!dh;&P)flQbDE%uo!t)x1NCizrNo}?I z>ezY1;t{hb5tvn~U1PcFC5fx7vVikeYcrp8Fq7Lk)<{;u_ORIR)!zxKuS0HxxjmOH_guPDkp{1@!GY{Ppl+t2U0Y_UC;ExhNl#r9mb@Se*S+jH5%doEjS&t(hmxoojL zmo2{MvPJh?wjFyeTXfH5+qLJi?b&nL_UyTAu|1b<$DYd;-*eeMzvpsG1y3q?v?`>o zxPO5kQE$W@^Bg&mkR6EuJ z6Q3^bbHpB2{w!$vBn%c7L}dE5*~kc#@yBY4)FEJ0%=cBI=_1SxK%H5Eph1HRcBNy3O(fAIY!u1cIJ;T(g%M_fPUpBcDl-q^?x$S4cxNRJW+d?4RHV(jT zA@FS*2i~@W?b+JKk)JJy`fM@8XZtML({s<(S0X-%_$1Ia)aO{J zPyg7St^V7dt^XbLr~k3%BN3oPfD!>p1n7Sc0g6Pf-1G4qGoG4zJ|?&B|EWD6J@x#z>3BKLg!+@6n~dp>f{$G>3DM<3qv(SLr=N006K z=;1vdJ+|kghxdH+*q)Cb-t*C8dp>%2&qt5#`RMUIA3eI~qwm=B(W84l`mQ}6{r_d} z-F6#EmMra8$wy$EBQ6__Mq|)}-ScB(Fqefmkd46rJq>JNp8qfLTaqnGq!i9#DWxpC z5i+G<(8Jx1YnfTx)AKRi)AKQv^?Xcs^n6U^Js;D{&-iS zDm1t8co`dYjMFD4Qnb6qnu#V{hKZrX`j2s@0(q;#=~I` zU_2Z?6)b+jiFN|TPnYfoiJy|WodEIErTf9*r-*AOF#L4scj`%c3Ilf{lTVkHppy8{ z-H0TYKMswovM1?BB9e(nCL;O05XmZgl71vAnW$uOChS#p1Ei9 zzqcf!D(#tjhJ5#yMpUIebI+OL&YrpF%lG%pJsYZ>J#){O7xc`%1b=&b=3YKf&@=bq z==b)_y?mgkXU@#}{+>De(EgseX9{3%WlB}vGZ*;j{tA`q@jY{OR;Xl!ibsXSm06); ztIZ0PuT`N^XLU+er1gohQ;J>k z-Olx+6U17Tv5kr}#yCCnfHUM|T9ZLOi^qqDRm@->7Rgdf(mn6m3#@CgXl1bPmP7c8m$(&;pOqXfW)1x4G*i>V2jV5j2T$Xw=U+LSUDVp=KJ=s@}qIkL<0Dw z$)Yl!e#$wb2SVepeE9c6Je{B$1LJ{Euw+>4%|IAp7*IWI7(0LuM7oG8h|u^wG7X5N zDZH#7oOO#65rc$GHm0wA?4+!97uOKYI*2|RItyg3XcI(}6YOIjh?)d=54KujPUFxN z;ahY{EW}=kPs2)`Vs9s7^A=+YiMMXZiaY5pLuOX&%;%)VzK}(kJ6S&6_@t z#C{U{N$e-FpPz^Qlvu9p^Ej^=dCWc!_I!=sJigDP$v%&lea$|P&+GGOvd<#~Ap1N% zug{~&K95j}?DP1%K945*JhIQ@3-oz3yZbzv&+qeS%KAK-;y#b2tk0t^h5n7(iO zVo@7XaWE^y{u6JmmcQd62g`bh0mqk$B-z_1Pru_SeGQx;K4JiM=KEme^ZjZ$A%vE3sVJ=X7549OsaIPJeEnQUQ@zb)Vno)Rpx)b;W&7 zU0I(~SKQ~+mGwDw#eGg)S)Wr^+~?Gl^*MFreNJ6zpHp{7pHo-b=hWTR=hWTP=hWTP z=hT(;IdymRId$cIPTk}CocgT2$l42!3W+PT_QF=1wHIHj_M*?ai>$ja9nQLoth@N? zbr=0ZYA$-Kw*b6EmX+pXrB5LXu*~=`P8&=MTf*)t;^M5j&<0gn0CXJVQ{0pLa5DI4 zkSDy7Fn-RVjnl*a1DkOE{FQq;6grxX0nNh4;cI|e8)K5Nud;a{f&ecT$8sO63s!-s z4697-g<>s>NdzFkbz((`_qNyv*wV(ZOneS9c(Mq#Ggbt-W9M~EZR>1eSJ97yp@8CW zuzY<;J*SBjBM)dNR-`WCtNM%T4q)TXqHDBAK8<)7c-x>Auu_5a2At#NX7k&?apJ_V z5Pj$gFj{Z<0(;Jt$PB;1f)cTCrsAnA=E0ANX)&x(_a{o>4t^q7nl;u*yoZhFTNL-2 zoog+MW8d)AM~f0!GqLDm-V8e}hTWoZ&7(D2wOGW+3XufCn}B0@twTs7oqIn!7a((yXC^wZm<1_S9Ui_5Bpx1ywUITTK_*eeeOMbsC9Is&uj4-W zSVhoya;$;H4zrPCWR6@ZXqvnpuHYCF`y?TE0{XDd<#ByaXSDb40a(zZG*O0wjFZ-Ik zT%Xs=HDoVW2tf97eO@oukiA@?6xqx5dA(di_Htz}*B9vJ8g}<`4WHl3HI(&o4aL1& zLs>7^P~6Kkl=X5A#l2iZSufX6+{-nT^>Pj6y<9_SFV}EKFV|4o%Qf89%Qf87%Qf87 z%Qcksat(L%at-CZT*KpgxyG#a$Z8Ld3W+PT+QU|x)gE7~+GEU0kF4}C9nMORtn~Qm zl^)|msys%o@GvZmNa|Dw=Z-DuLpHDwNVkwkY$Q*|+E^9eRmW!qD)V$mh1qy8OQefEA(lYu zuunvo#HiR>MUU8wDRxhcsc}kN$v$B3Pgbcj8W6>Cn7)}UFcr&zhF zc8vMKUp=j%M3cR8Mt%>8;wMpwkrn6{UUxPBBfpA2#Ll7JPD&W{ft8S)PjPCSq4J$o z)WBtdnj_DR)qb!NNsh-mtLY9hi61bUf-IvpkI`Ao$y2Lh#OMfBMDSTwGKYj?TUwI@ z^i-3v@eIIvTgZ~gE2PvcgLp_H2(p_Y{!KJQ>`4SC&rd$Wnuk~?nJ;miG97;J=sQn@ zHFF>3nt}$6@ozMpykj)p0}F`-#?ykntA1&YZ<(#?3B4w-(f2`#}+8g_x6HWuxwMvJKG5Id$i24nc;6Zx(#B%gQ!uTfcD zg;#bR>`d81dHm^aaC_VZY>%G{YLEK??Xd{V9`^&;V-biw?gy~PZ`LO_?nh9^LiBVj zLr%xXqNY>!$^A&=G?CLpPQMp&I%S{Sk3>%sJx%oVd!eV(!}{c=*L`w{q9%%(DC##w zQKvUOh>4^olA1_rBB?(QNiDHl*@GA-nLUV~(StZ;58}(dW)I@$^&n2!gBSvkJ&2#z zgE(amVkkxSAbwsC;*>pz*@O56dJw1GJ&4oi_aIJXJ&03r58_nTgE$rUAWmgHh*NP7 z;#AgyI2HFGPGvoaQ+W^KRN8|$-O+OS0MR?=i8%}=SM`Q2t^70vlRSO=tv`)3u+9H*RB zG+9OSMXG3iw^R>x-L!sDj$sn-6 z6uY$;kHYsNQvk!jtD7;5L^XI-?nA^fTO1xX)3MxeXP4!Z_qo7mc1H@>xu3r14cBfybb-pPVg*(p7^V2%wqA9 z>Qt}+oFh+7qzBg6#?BLQ5iyPy(c!Q7cWbAEmDTL(I@X}6-9wxjr!Q}e9%6~D{sb?r zYA}n&6<;**y^ZlsWGhe>su)@9OshES&SO!&#ZFVTD6o7@>>k+%XS5jFjaJGs**OX% zG`{m>+1%6Kme?Jy^Kl8s8-V+gXR-5&Y)vY}aF4N{2h&9PoGN61NR=oCzby{fpA?DW zOq-BKr&-uxO5*>;Vp_5`G>B_P^C6ST8Mm zQ=Ii+L=9e%h_$vV5wuuQ2DuXWI^VK{jtGD~m^`nsHte(8YB2y+oGF?}7JzQ5(#Eo+ z#z1351P1CNhl^G9k=FnSPo|;G3*P^1+tEr*^~M{s^QO`KRa3gF_%43Kr3A;aCx*u|Xieq=e z?N66}r;f>|;Cd(C`*dju){Fn#jq`H(<1pSTJ0@SOSmL~i^Cr&wJ#gMCJ0^c5)|*&w zV!huB>#ZKuF{wKx=6k+pV!ny_Cg%HTm~Zu_zcX>)#C;R@P2BhA;l3r7EBiaoYqrzQ z{?0$Ozf*FT{hjA~p1(2sJ3pbn^BE`0{?1T@?C<=9{?2E?%l^*uU&l~{?C<uK3`tY-}w^!?d|V;`9MK`=ZmA?+u!-}fujCSGwb{NJMBaJ`#YbB zmA&;oRe67B;HUfReyYd!ch*_=lXX8H6%tow-H)v{>wdmg-A|o0KUwo*I-E5>S@ZMN zYkum7)ce#{>%&g?%xxjxYwRDe=)qVJbdhI8Q(NO{P9`bXc~WM;3h=Prd@d0nXUI;A zN#|t1pJtO9v#gatu+rT%?u>=TI>E+2U`F$w{6^p; zs4&19(qgzZ8Ylh=4`xiJ{LC8r44Fe5q1X~8^Avl+Usc;Mhb-wgz^ClIks+G7j=ev` z`jMQ;{GLEmqMz z&uEz!QDkos>&bXR#s6(w(-@h?KG$}C-|t{ zT?E6{`ytr+oAvzF`!T?}5dW*ou)q4TxL=b!e?JoYOYASPzwd?pHQDp`Bk{k){}TWE zUie@0u%5r>RnK4IfQbYCOdPOz(+8GVU}AxZ1tu2w^RU1Y%awg#A-~xN_8EO(P4}&RceO@0}lYL+z0NDrjd3|6__JM^`WFOe)^?^0n2bO(cU!V`H+1&@$e10ETQ`QI8 z6!(EOWqn{xaUWPy)(6%U_klHKePB&-A6Qe?2iBDLfinF6f8i&+~6!53ta)!4$Je(_oB* zo_7v;7hr|s+bX72dq!-lRGC|?uO?)paCr;K}WbQD=IpV2+Ua`dF2xL0F zX$o4244_TyGrOcJE}|H&JjGrO7ALZP&3i`1>iG7>5Oie|T|B$?e+wDbq+Zwq<1>+v z#UNQU@nrs%UE+Ga3rWC_0bQ=fpLk7FWi*jjW#Az<yB{uXzgf>#yC1J>3$ePk z45w=!i_vx2v-Kl!y2R-cr~6(wU6(yuKN71;tS+&-?}gQM59`_LUiEAxW|x>i)n$KG_E&v@{;FN*ud)ENCNk#~jusaYA;@|yaSgHbW{jqE2>n1Fh?Zd@jo~BGKx$R# z(#EOPw&%|HBTIM{#U92HYX0jGdjjVp>$rqW61@`x1F`p(HL&xFLa~lS;6%k+?3L;Y z42(aTm%#oZy~vp42b33EJI7y<6QU_5PIG6x4KWfDOFTKgz~?VDQbdw-+y|NWiUOhx z&#>4-?ytCj_>FzDXjWMX@nIV~jI63k2;y7Xa<|gP(m7@Y(MNJ^LcSv)>PP_TQ{K zs^5>c^@T`VUxu>vk44yq?2h`8C|jaziL!k!lx@iFs2_>6CDN8i+xJ4+hKF@W4X?VR z5^?*hAa28(-ljy|5_L<|Em60hhq{$muIz0(ubGS({n$cFvbX8+y-h>*Hofd?_BMT9 zZ_|*yO(6i;+w^(8O+)rJg;Hd1)93Xz4cXh2y-i=Bw`thj+cbQBZ_`lL+cXsSHVtLH zO+#^S(@@siG!*wX4Q0JeLve4@P}bWtl=n6brM*qV9lcFMX>ZeTS8vmBPjAz3PjAyu z*4s4P(c3hX_cjfW?`;~h>LRNyJSrrv%&H4pZB|`;t*VPLD=xC)!gM$*F0$g{t5;l% z52>~otigv2T1xsLzv!<@PjYs2=Xe`zkdkzdDTR6mbaUW_D@K??n3dWv8HrZz& zUREw$AqF_cK4X=S7P-kvaR<(tJ9n{@nlS1d&Jy2?H^$3}hcTE1@P|A24CK~;8m6u) zW;5Vxdt>3iI9VJ2#{aXEViSq+ut0U}Cm;{!3kZf)mTf-7cS%YuC#sCYai4!My~9c= zYGP+NI|Cj?8t~K>Z4yh9FAz_XO(;so`f_I?f3wq?U5d@Nx)gjhk#lWvfo9wSJR+s$ zpOJY^fp`I#2Nn}vj@B3xNTeVx>lnM|`2stS{o${k>#>JqE5s%|Dc{035`!!jLmpmm z;%6AM@r)1aN7R6(psiiVGjSFg$~SJt^y5RsKoTABjKm#=f_Jt*a0O5Hr^L#8RTa_o zWHFScDIY@4<)6*!!V=3W;^o$m>dmB7EXNqH0B9>`G&Z%j^JK*)uR`J`!7fYNnSchji zjX}zjRikMhxZANlPJ!484aMquw1V|e6_Z7FVpN)V(#bO1#-cpV9eEhc&H$KC#&O|8 z`7GQE5shL%qcd3NVqm_eP2;J7?v3D`EH6G;jhyrRC$nh>&-cwTJDpp<#6y=E3|^x$ zR%$Se0{v2j5;~4do_~)$sVz>|T<0bvUo;BO#ZzFPkp%W1=_Q^uFNvLD|G`)q_nuWq z7f~&~zA_)mzqyZUfJ|rczdR$91X6S|M2p?n49!3qxgJYJJfPaGQ|vaL5t&iEWca|i z-c5XryGW1ma|w@eKiM%B5gp@xl4C3)IL7_t#`w*88OQzT`dEmpk7cO(_*g`J%3j7F ziK-{6o~ZiwLe;12W&DxIdLrwItbZ?LeR^0gPsP2Cy#E>GpX%hSVqm#0Hk zS!I=#M}>x1W|dV|S$)AOtKV%_R#=_ygLOcvxPMky&2h?EVU-nDU!=n7cboNq>Z;%G zVwF{gIAJlN_{};b6iar&z~ZBk9S1%+RrZyno1HKV$F3g@(*lS%7!Zr~oy>xQTH(1= z@zBMpX2bc2Cr5*U@y^_Ve`5uaCQS`Dyc|E<7!!uYQp`5Q$@A30+Ii9`Gyo5-N&CjS z5_NROd*A^^ zG)|nI$F5_gR*U2XD$a5JYOxHSyf(CZvzT0Oj=*Cd;@=0WVH!OqMCuHm79)>l5zT_* zT6F|F&mE9VEC4nb{c;Q*$#+`;TC5r-Kt;z<%Ex%)zh&vWT&0%Q8(_&qTL=4MU#UZ~TrelZEM9X?qlgG0k;uP?`+194G)oNYH1IU&5c2$&;TdnaMp86>k zz7G(d4tv1h>F}vQ@Dm2K69j&`bUy(6l&I|lf1fVh5BxqwQ#(Q5r%S(6Pv=vJw-a@I zy0ipw#DDHa8@c>(NMn^foj($7Otdl4#_xqTR@u|}BN4|$920T;UWjA$sGd&UDUrvJ zsze_DTF7Jdrq?ae$3!0!eN6Q6=b?`!mMeSRVi&X5?Gt+4BzM{CcD|>1>+E&=Q+wT> z(VFaa3q{CYw@>JGdltOxbvyqxd)+>(*X`NUX0KcJy8X;vH{@_vc|-N-y>8Fs^WHLt zs8EjYG<$8^W_D-ZZE;#-d?wt z4;1vey*T>4y>2fbDC%`Hv%bIA%|5ih*XTb

S$*PB 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 >j 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�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�VD~b_wjp$Gl0EQY^hpKUSd9K%n3Zd&KWX7PL&5&Ih1q!ezD(NjL!08 zLDm5(l{dxhXGazbd5jh?-z=QVvDVS#Q#|wf92B;0729G5Q3;~WuQO4{YQqBRu4ign zsfrf(DlGs$TL2jop-$o)pi8V0yC7naFp3B8EtE>|Q0X4#y4SWl3Ri-Ua7vokUsMZc z0e4;ZZrE(u_sxRdNH3Ds8rtejJ@=>F~Id3k&-M1Kq9jkfB>1zCyN2H z7$A!QvKZk1dojR{&HfGL06S0lpalUtZ{j5ZezTb09-`|m*#GOdEOs)m-jkt0-E?ya zIaOq~k0-N-7mN6dWI+pphp`V;tcKFZ%r|6i;`iH-dgNMqi1X2e4B|nwhQQHJoZZ?Y z?4uPhbmkMG)e5s$O3X#}(K_s)S#MnvhPFoYbs_tBKv+2tL2nk1a|UVv)3H{)=@_Jf z)lkx+rOGIUbBaA`&F`o!j{>KbdX6VI@tesQGTlSODL}iJzp2Eh>(it&=6IT-4OOh?Y%(wUkKN>~d6WR0JH@Bi zJ3o)Yymr#j)5@Y@hM*W5iKKB-lyZj8WwAKjDLTfk;cb*=pYg#*BUQmWO1`?pjv)Wa zMKSa(+yt&SuUwa-fz*tz>W#484CCM_t4zfrnX9ofi$yyxX2En(T^}poTVzAtCDM-O zH2Lf;4No{7c`!~(Hz$I)r&!6+tqlkQ{ew(eEKvy5{22LRpcPA;Xbo3#5=TQHx>3H5 zF)EEP`>cW!^M7@Hp`}bT_SVR4V{s&;RM|3SO_cS7E}G&~BKOg6?7nfCy`6D9OWhw| zgoIQcQ$^<>|E9y)WxV9VP_t5Em;=u->*;I4S(q&fry>gT3yB(S7Nt~D4R#H066A6n zUl|(h&GXiIWVU!4cHVWbHa5tj%E$oG53SfsRQVjI_-MlSSjERt54_^v{``xEd<%MU zkI^_F825%AQ;d6ImjjYwa%q1Am-ZIRolUkv*0RY~Hre{_nrt1M`)sv!{p%Ft zv(;9%+WL-KZ5=TW*>LOnOca8-bJ=h!8*Y6U4Y!UCezx6;jn1}P*>>x@YrA!X^t1U^ zHs8wTTR%?ot$jUkDp|hRZN&9EC(IX5yK)^3e?#JY@w7wN(eO7U&=*g;bsY^q?%8z| zt3Bx4bu|3Af7g+zIOyVaH2g^~uS56qsH4~62cGoxI)u7M-MtP!@U+L*6T^Dk>Fddd zj{AKbB@3LbVJKej{dLUXpRZ*ozF{A*^&j)+N0wR3fUzpW#APi*)-q%*L)J26Eko8a zysKJ<7n_}R4A*Z&O0tdtiOf0%B6c>PtYgSJhOA@AI)*>6j^V{-e^m{`%Tqpl{ld$e zc7Z$V#T)j3a`8{Qq${+zHlt!#z0SM_Aqf6OV{I`9Wju1q(bj9MtumY#&#HosL9$cGq-+;^w8c7r z9V+7~(UiiHXgDk$#2_b&S(y)x|Ah`lawd-tu=41B&b!fotDzXhI@VZ$)gnu)(?RCz zEtXEPnMKmmF0niA@riXtO0nBxybH4hO(@yOu$~Cd+P=~39^Q#EY`2gH;WEAv8Ae)= zH=gY0s}8wkRh416#dDBP#jn6hoC55sMJlgy04@@bVZJH|@R=Iw!f zIHwo$LS)-bUzKL_TidnK=0oI-xE7uk^46F>#6l_a0MxU@OcY^YNAQE2*xAM657-w~ z#ci<;U|#wDbNq(qDCW7vGY7Lrm3bAL#gGTfkp{tuX7?Oiq=GfU3Rq^UzL9S)Lq0*2 zi+dz%Jd+jsOu)XC-uz<1pHrJ(Mm?c5|MK&nU#B(y{pY{^{P+L(`P213fBM(Io*+1b z+jy1SjGgzj#-8|`gVbrRJ zj$p~EC99UKTC!@%swJzItlA&Js=dW>XGgH>{P9|Cw%HLZJA!>@9l>tSeRc%9{&kA+ z*%2%|f_;}A!ETv{>U?#wH`wj)H>A*4Cwqh44u3-`eRZ-o*zNE$ zy}@pywy*XEyB&U}H`uMwc(pg!?eJ5*!R{Q<*L#EAec)7YushKEdT+4151i}`_F!Vq z^agwQ(3##~w`l`ss~M`d^ai`<^3PW_RA1X0?0?4fpI;tUXFUT3s|+)j^$c0hko62% z&ye*DS#Sn9ek1acRSd{tRxuE-v-xBdLsl_l6+>1r{Qs_ExV6@AuU)wP z{Ku?VxP1q&Q{W7tS6sf37v;xtUXdO2sDZ@5QWu~klp%+8ToFp(|WxBJlZ!9cB zWVNh&PL=26d1e-LfO63|XJ|y^t_=A??>dQ%Osy79SKuA})W=EEJ6h7mY9xsCYa361 z7U7v_GUd#pv(0NDXpfZ;CC-|d)g3Iqn)&nX^4X0~Lo1^>8q4EF=ar`6T8ozG{`f9d zhI6@EUBG1P3F-47}!db+@KXK}pPn^&xi& zOCp<(G}_$w6wmB9kWHl=x*{$d?WJ*Cvsjm(dhfakb=@W z#+WDX0*AcV3F2(xzcWLTP*{>B-j21>dzs~|Y#%R1dnx^DjuqzT!A`Lx#MV$%A?8K) z=5fofpX0AWaE6H4FZp?GNWM;-p=^9oJmt=if^ui^pE%24TkN65Z+nZBs$K>!3Z!Q8 zEIW+Gv-ib^<0LBesg5^N_I?{{RT#2X7Pz60(zJcy_;(A*0euk3Y3*G&>7&K3deif* zd1K0+=d7Ut%pa2HXW#CqM{x<$A&uKNku_xE#Gd@1I)jag!N`5Q(t>m|o-%5Tf`K{!) z{s?~SoXyS-T-W*Io!V@(16Ow7`W`xPJ)ZdNy>=g4Qjt=Qu1x0U_2zPEl`JGeeOZDpse?6md6blQ5*0I#H| zH+$W+evdTu=2;)Doq?y))thI%vvvlaN?UK9^~>5Bc-SdxC$75RBWq{iVRx(@6~EsX zYiHnbN31>f@Sqpg-q7PNSbHG!p#Rn0&}W^m_Kn?P&#V36huyAr2>I8u|C?7kTPp#f&fefN zOktET7s}iM8(n{c51?E<@=+|By%-OveC9Sj+gKh+V_BX2zOulCVv!yVw8$ogMS+Gb zjGi*X*Dz3k3o)g{l1!<4W+^@usvR7;T2%rOH%vrj1`QyC8C)!<3KPxTh|LiRDh!vhXgH^N+!AV&-^Iz`)9kzivC?y@()R!rb}2RLZGl zh51ww-=&N$aCRLg5x@dmosG+7WxPg1*&kE<%wA)(fpVqGZ4pnHJpw<+Z-5o0fdzpY zyexJBkZVCMwGcpfcbkSB`{&N@D}Gtx7t;)zsQNNjItrC zm@R((VgQg`27u$E65tp;uiF5=?ta3J008o)>^^T{P_(pI_G+FOpHdLe@;(X+JU#O2 zfX&8WK4%1HqB0=QoNEJ{;ue|z5PJ$RUo2KTS~!yVD+jlX9RZlHc8-+w&Dm*URplh1 z)4KRZA~F~AfzdW-S6E1%DbCq=J=F!^P8pL(ECbnl@v4+*vVRQ~WH31}%pxV=;yLNxc5nT1N$d-fgt^$KK$+Au$$0 zCiaG|Da~q1AED_8I^x<}=9{~jVs@KYS>9jOGMq7Xg45oH6pHn#LeAI~c2Si%*bHVh znQXBWL>7y9JI{#Id8p%!bO)ztH1wCk{KRkCka*=vv)@h33SBc>2o{^oI#d>cle0O8 z+<qQg16vJ39YcR#`JTN(Qe8wMo06F7H-Gls&=%DRRuS&V#-6a zI4Cw7NkfuBV9b_vP<18igN_5Sv3g_d4w{j(FjyE~JaZZI6tg|X{whNW3u>`mRzr+# z7cyL0jiTbRORO#P=PU?|v!1MyY1Pi6r_zSZ#EFYJ=E)ogQt9XG$}G0FoN?Wi$Z6vI zS}b1}9eh@V3_#F<(pIyM==a6qS^SvCtPISH&SrA%}~}Vfln=yS3K8 z;YRM8&%fi$|0g*`x9{Lt|H#g271phJf~tSFus0|`HFB0O4C-MwlowydsZwmg>djg^ zbCcPS+3>Rh=V%V3iPgq_f^}IXLtCmKaxWNbzs8#~XRtk*qcmI!o>Gw8d_6K+G*7F& z#GZhgh($DJ_mrJO)P--f+`QWJuFPv2Jq2NixpA6#zWn_z-jVU*-pr~fOKgjs;x~ik zA*l-lr;roIyL9m_%6td6^41{pDSkg1jicFOA1sHuG2V`yTFj&Gjiuw1<6p4Xli4Um zs4TyYHxm87gjDOcbo4IYXkMG{6SoYl!6=v2d^dC|$aFPoNVo2GA=|4(15|5|hiG0B z)&QJ>1xEL8h6PIZR=gY`iz>c_(>i+m z(-5WK<18D+F5ndwvA^X*%#ah>8hQd_vYVW~!XlPvT4uZ2UU+u`RdwRCcdcsrZMEUFuAQQF3O7O{_8PzS`aN* zZ{wM)C;GfJ+ zZU-ITvvV6iIk;WtcF^&iI=Ard;3l2hLGQS!)g9VAxW46f(6dWh?t$OoRW0`ezXg@m z-8HpJIxFd{q_dLFN;)g)tfaHvBc0XVHML4gD=Dp{w358+%FlB}c_)yTVGkq`PXPalc_C$L zBW(5r6sT6!oVG3A5A2~PrG{d4O#~8z9&O{Zy3nAAodh4d9aCh8rTBv)F&;y!4g*>+#H5&T`pY82*SVzu~v zXZu*&+Jfvs8H$1pv8uWNfip@J-E5w;U6yICMp4P^6sNUFOeDcTGDI!W;?CkI+ZzGyo5luo0&@z%}^A`Dj zHL<+@jD=7gG_fq~5HV4Y=-2UA*0MH>URdm+GaaX-{V zc`!}CIJ3k_HH@Omd-#?rq)3bbCx-pH#M^O>YddX70u~yHMfa%9*kt>HKZ*aw`f#Sv zOdy*o_NX+=Ml1!CjGut?ddp%psNiX1d`hkT@SqlxZRWPd3QGg=WJC7iMyfZl3enU` z{bSflR5goJ#WbAg*esmDW^t(1aT?%gkWovGVMqO&vt3w-?B;0Lf(#Z)()Z%L@%k(> z!95%^goNOSnT5*C7jHD1t2P-WH5&=S!DO}y!&q=kEjaj=GUi6m$Eg`P3|$DD1PqwY z`eRsnI|6nX0doqr<6@a}jsisBnGeoSVf2TR1^j>v@f?Dgo54MH%I`?ojCxSlPQC@H zFe(h?-`aczgDMy+5e@8b9a5+Mh>SFoD8ORQm~QK-LiThcin%KyWw`4wu?- zZLu$%hcnDoL(%|x$fsP0A$AA3!eM3y6|!NKkS?GH(7?h~7zKCyHcMC0jT~<>^48Q! z7s8l-NDKuoY&0yaE8;+ZV+fBL5EgM9N@E{5N{VQdA(rxO(3yC%XgtHbYUFD%HS8&` z%<=f@l#S^gj2nj1m#89H!$NH$x z8POTk2;0pu1R;Qb!QechjVDhQ2VsS!?Yj`0*>KcgM;NP(xT;Z^DPD2Wy*+ITk<$?X z)qupz=1MHbn2)z5*Cj0|I@FiF*Tua0-quhYD+mGniHub-p63V?jxmPV)@pC9CS+4c zlrFNcn2t9koy|v7v~&$QQKktB4fT#JnL=hA6zi$uyVNts6bLvIWyP8Dj3*hXE%t>y zRUfCf;d*asrCT7`{4$nb-O82_ZBa>6j2}%6sOce#VW}*9Mwer$0#5K^`2Tw^QzhC%f}wvaf1 zEcL%bsaSZ5kkMvGM+67ojul$sTNEV3jcGb41u>5El5Qi1kq_ zBoboBuCO2{QZ$>nQwMcsg8BqOjInw$QIk z1-4j|&gMCPk+C;tr*{WUtschwf5=krp7pfa8F(sNy?fTvYG>f7to80$Pph4Qhdr%! z!m9f{t#$?;_O#m3@cTWjb_O2zwA%9y4|-bd4L$B@wTD3udRpxbeb&=z-_{-WwAvqj z*wbo>Yi5rJ^xyK`rqPH^ZA*dAK7Oqz#LX8O98SJAWH$V z6d+3hvJ~LmlmhJ7>?{Vjjx6HsvKSzX0kRk%ivhA2Ad3OsK{3FN&HfGL06S0lpalUt zZ{j5ZU>4zUa7q_zuf*RfW{zz{(=Y}u0XsREyy&JzFtgb-ooqCsS<%{d9y#JoS3@yw z=Q+XH8O@;$84;;xEcR@X5GB5$SB$%tEU$5fgh)9h?x7>g*dMGe+MTxpQA1s!X|VQl zyjNxP=wgv*tW9fv4VrJVIqUQ=XT!LIKfo7WH+p(YWl9m{$3)89?snUxo zR$CP05PP9pxh;}|bfHh&^h|YbXpgfaEpjF4lqdS&Rv5tq=ti zpcn-R8nny16fquarqs(zyd(QADK1kvoUjg7PNwv>MYY zmBmQW$)JGEVq%pD%oJv+0#KaT&kjdF1u~<6UDT~<(vmld} za`1T{&vA;6CVY=od>r+_EB@`zzi7y}pcnTTjRS&lZ|E__xEFRgAQ|_D9@C6_*zka8 z+#C9y8)fYQ)&s_DZ|F15Y#%`$vS$0kza4KjWE-s)ZJgX$a%ah%C3lwGS#oFZojV({ znbuFqpCx~m{8{p6$)6>E_EGq=;kUNbI(X9e!lMlj?X{9iOD-+BwB*u~OG_>-xwJom zOM8pu&L&&;`TSo^!+iqRwj2L5^u<|zNY`c|hw?1s!ts|tL&9}1oRyN=Iahh-K>w#0r^22T; zuHQLfet6oI>uC5J66c4f9lDN&zafEsc-pP&X!vo@uA^A(LFcZc;m7^Ej!eZt7q6q? zPkMPBx}QfKy$(O{q_5W@)II9%b@+j&J-(h8*5giJPd;?q@9QX8;A{=U@OtmBV+Q|x zEyM5)`+%+gnE&sQ{UvJ|<}jF9%aFAUS<8^M3|Y&NwG8jDmf^)_XC1?JWD#$dbqra@ zkaY}M$B=alS;z3M>KI;Z_E*&~ygcQ@*Dt)hiPtVPrptAKtA*HID6eau!PM; zxnTiy%p#{&Vg5BvWM_#5XbxqagNVT(Mf|?8%uikLY&s9yCH#Uc zArE+4bx4bHVwtD$*~ljv2;I4u1_I3~htnbzyaoQ6;zghd^x_f{qM8+~w|N}wh`bU` zF=*HFrt!hSAiZfyRb3$4oCx$f(Fx{>jz=FmZwf*zVrLcQVC6Ye7MW4Bp^SHLOpDKk zJ7%jjA779fMY6N3a(?l`LAaXvv}_ipOzoJn4I3)QX3WV9BZ_tCp-^f(}*kV1|5iC1`ePN#anuV-E;Zps~U>0?G5%nKSgWbyhK4M;7sRS;df53|YmHRSa3hkW~zS zd=(=-*`G9;DlmX_non>v&psZMJ*csNzhaulPNC#Je+dqwRPjP(L;h9fIvDU%bUH@2flP@y3df3h)kRA8AysJ1c33 zn5gDvp2uv&sM|>-7Fz@2Q>qtIWYsr{7g^Lo1RUC<3c2kpzNcs>64-`ZiP&vpWfV7F z;*APBq2O+0MpzHz3z|T$Rke-2GhKIsp72`_$nS{N zdKmaExU4GsbN!TjR`OZNXC`TFGf8r}h3ht?D=S z8xpS`zipDm7*y|=RW*7wkRYll_Hu3OhP?L#E8>sEH%`hL1@?Hu{+w{@K}0*pPv zvfG@q-&Xe9`l$W3c5r=m+R9E_*=g&C>9qBr0bWT_ulBlY{T^xR)w4cYI|EOpt5?r@ zXYC9;m9}0z>zB1N@UT%+B54&CM5c02Q|5vYexZ35%&r|_aU)$B{pTGY4>DT}I&wqS= zSnX8+MW|Six*~vPcu{YKDOce(5EW+A++EN!acrqN#$ZT6+g*%ALBa#0sxgVg96?}; z)|z96$(2FIu&*%(%qb2n5tEDM_v)q_Gi7o{*F@mGKvWw`;JSgShrqJLp~Ua}Pk-!$>BY6|*TB?U5gYkUBr zR2WIjJ3BbV%JVZ|VYcuJ&td+8JQ!_@vC1=o=^=y~bl zCwXfJeb;yNtZ7wGEb&=|)d(LTR{%*uGi5xP6HO>bHy@R;GW?aO`o$#{m}B8Q-4RBV z)_4ju33F47vWRaHe70aBa9G)pbI1=dVq|qTPa9XDFs7+Dc7fO^VLm+*Jz%@MSilZP zfgMraEgH#U9IOL+Lk!>=Ght6V^K5mFkXy^@Ln=07{(+)ocHrYl!?1>&GXA>6_X4Xo ztJWE8uay;LYY1038ap;y2$lGYoUrS9!lfbu;tF9tESCfgkKfCRjW(af^aIjDAgp=F zK3Dz=63BC^n4vqPt;Kx+$Vi$hajbGdx4fY-3}_?soL?MM+&f&r(kz7{0v3y@EvTwc z?-uhcY{%t}l<{6jFaP4zuTSFjx7Io;04meJx~a}0OsjFFSQO=oa>n|Q8}blvEyY2B z1ICy!JEx$dIjw~7u~pci)pR%38q25Iva;rY@4h!U70N&xq4W@Y{_7&Dt5n*wUzd1u1|0B`S^6?t3k#rku$sNCIp>EHDCfP3w@`GG^N)_J;)GyJm8N%wdYPRX$Q1t0(4- z6)0m*N5gQ+u54o_qoGx_o*2k3zWrjE=?alyLCbjS-VmO6RLgGSQv@7J3&kkB)5QCB zmT^iTPWGv=@tko2AVo+cJ3Clh*7Gnuml9^uaX-3+wL%ZD??OdW%u_XHbL``68O*Ax z0)G=H=A3ex%6JRa1R|ep>^^pgxOi=u5Uiwb2?Zh9nPR`NH^O0thL!Dx_UJ;+E5iXu zg5KA{V$J~Tepai0QpRZ!Yp9^5BXV@<8o$B1bAm)St+DT|c`~dF&u6?UtB|50VxEJ9yT=vO}0B z-eMDL42sk3qG(y8Y?XXqNK$vXdUmHt0UBDm9K^-BXC1Cmpscnj)KHn>CgFI!wfeB>JIv)VlI9oVVXydKtHwz`Qq ztInEtF?LgWcL`Zi{yRPqRuoxk<4qM0VZZ8_p(;z*5uz^WPUH#{;GP0=!`ibiSVexr zdw~s`SXF**Y&V%RyF9z*W}WdGSOE}U9qUYFOx5(}CCJmq4+T|`@YPXOPLw26#e0?J zwJ1V0$2WpykSO#IXsb6{$10(L8}nN^zvz&{WKxxcy!#R|RvA*@jC1yNU$aFIF6KeA zUyb=~s*}V%gY*rv%abcY1~?;|QLkVt)m1=PpG zxf$I7cVb&EOIhD`ZangQ(u4(&r42dhXR zI`KJTbMAs3H{N^K^7!8$F5~&-mruX^%U@5ig;if4-o0~6P#oO2b35qxo}JtH$-(V9 zw}X!F)VYOs2RG^54tmE;t?tm~!SyY-gPvX5au56tuWGp;_${cc=Dw*_(pgDoC7p%o zOFAp*tfaG&&U#mLR&&?XDk-g`w35&!6 zlHN*sE9tGIx02pUdh3s%x6aw@Xlk{Zrz!-G^&VptiKwVK&=#^b*>6+=T*Yp4QoZoJ zHgAWxdTGAI<}m`(K*%F@8_CjT5f+6g1N$Xaz~XLNRL4vOlRAv^eZYVwFix7EPnft4CVck-4E787RIMnesY>HgXD{cLfB)n+9R zleIMqkKR(tVx$@?#F;~G*&Vb(AMf5^k<$e0(W<7@GawP97YhCnj0 z@E`?75~)V&Km>R)b$l1L6kYW>qICYmTT?5Gzj?KQN)0V9JtfsT_DBQVwL!|V)HC^ zjxH4bwo|UiE@*&wBbuEPjJ@aQHU6r`iO8wNY+3)>Vp+($FhmhQtF6}%Z>olINC7Kj z)^|0m*_ux+*}>MfCIhA~<)@i!C>~$ODUkdXy0fK-^xtQ~n9Qdi5!{>yH@fmMj6RthN_*u@;7{D8=ELip<#M?i3#BWX0O z)8oLM(&!gLd@{u>9Y=%D4zWbKpN0c+9fpPtO$3VT&PW8U>aCM4q9PLhfV_>!v6)nOTAS!!ycXop*HVk&DH)2Wyl`2@pi4-M-F%sZ=|bZU`FOx?bdQk#B?JGTdX7!F8+(X zTjDv&Xe0K=cWoho^5hK_5Ca`8R)u0&jms7~y2O~;;!R?j))-&EiAA_+YNZ<$2^dZx z>oUuZtS_HvxBP?*i=GSKVQ8u+% zdlqT6fE9{Fh{mj+dXNqAFVATVm4H*!u^G#TGQ*zO5gaWAV6q^dZZYHSs`yz%F{%_h z;NuArqQD4FS|Fe|jG#l)eG!K*c1cbW;2o926Cf`vkjq=lhF@kQTx9W@5PT)rb@BYp zoI+$q4l^QeG@4q1SrQV!S@#=tA&qkBw)igHhINTK3>FYmq8QG{7ORB2*_!jJTTLu% zu5?37>rn%+KGwFiLs?j$wQ$U`h5V>{;})wlnr-LXF*P7QRt70WhFc3c>SixiX8sM? z>CHh?tA{cFAF|Y&XFaWU2A;}RZ=UtE+8KB%YrT2a(`sknVNa`_u$ z{C-cXoq@+at@gabgPvAqH9pY^obw{?d-t@ei>_O#mJ<6lqyZ(i+b zwM&nmDFSG|x~J8D&%YL*{fYxm_Cz}dPq2Jh%`b9P7==`ul%dP{t8Rd4V@-5}4gU2UV|1r*8)vb!bnSzeD%%rfbae zV*WCk6>I4?%W+aKCU1=7?ONm9iP$(5E8nDw`C}o62b|m)yHgsqiUk`CTjBF6ufPz# z?!cMj9XHbocpv0BbjB7a`OPdjQrBCg=%zq|Ijr&RqSTS_E+qV7Yzn&%vhEE9C=!Cq zyl9=5bj2>Dm#6WB(xP6vC8-X1SdG^q+90IRgv5e9mGi@_Y=u|jNG4-1F2)R9OnO<> z)-(nuV)9%Oeh(Y>a1u!*+YC!?wwofs@vn_R>As}{#YlTQ{)nXQ~a#UaM(Z5Ex_EWNO? zEFks^D_xoA$G^HK8tL6a@^wWK=(~zFDb3cPjhVR^JJ4|#5`}gZ+ih_<A$pk?aB%3QWgICUfAV;WZWBiOf&9b!vmsmZ|Hk&l(h#~4;Zt(q0cz8 zeFS;Pn(Yt&cDz}aZM1$$?ku^p z{8{%~TWTFV>3iYPx`*~!$)zQimRwqLY00G}mzG@GAHk))#d2qpt&odsvXxD?zPlz{ z2j@OpZN>Am)mFCJ`tDk79Wf8taO?W1Io>N9Ze_!*@2KI{(ZSEQTi3sW!cZWF`?Bp; zw%z*RZMTk)em39A=3Ci(>&I!nwXX+GCChiajktd2g!%4iSFWSsZ%CZ)o_6Ru8vcd^ z`tE7BuA||{J-d!#wFjNMj)oui?>aIS2VK05hCk`$b?AN`b@V#?z>~gShfw#ZyVv0d zp7!{9VpxwmeLeZmalfylWP!6a4BhL!zm6IF^R*1!H|ztp{$u|9$UbWsvX&uh84Q|b zEko8aWGzG1GQ7iDh8LTibqv>kEuxck3|YsJbqra@kaY}M$MCM|7+!4lSJg1QJmtgJ zFTA|T&eh=N{|X}*Lcupg%PPYO1jrb47`tSCAKVzfQ6BCTXHgXimJPbO?`-H)+F$IL)I86ySl|0Mc?B;g0OVWIq21LxrisUMoRFGoW<7YAT&*D zer0JszC4c6Rv1KvRi9&qSU)fwI#qeC=uRVrM4E9%(3g%$i;yKEDx1Z@@Q?TwA}wOj zEkmoeJaN`RR{~o!tTx|va(!>>fDFtg+sa;I*N~Yi)<<<4tO+s(jzFTo9efs4!ZWQF zLHP&f)ygvPy@v0^*Us^@)}j`~TeP;|qajw($uZ>!VtI_%(J3>pkStJL4n4#hadMF{ zP{VBXC6ghD&f+A>nnrsV)+XM!O9{b_^n7+ZxOS}VvL(5&}ij{m_K%#+y&w@ zjiFRoKNx+`#3iJicqXFxy8(tS8Vtcti%kFPhx$#M%_FWBvw^ESU#Q! zPFzEBm~&-57H>_O7xD?3MoLSIlgRThN|Wy*!hmj(Hb%=K=MbT$ndR?pA%TPK_+Us` zsaI%S%eRnbV4iENm}q&^$>_ArkhS!76*~*cYb*wcHg3$X@;LM4o+78!qOWKq<@F-- z+uP~QFDCpswfSY#6I$~xKmYl4TJzt3{@c%g|Bs(PUH|i^fBowTf-|^{SINy7dWP7H z0L-hTW(++;Xa-7rmCTHxAEP5!K-X81AhNpmcDf<^P;-;O~WvLo0}$)Y8TmMmJb zXvv}_i}q1iv>`i!{gg~vGHJ=AC6ks+S~6)Lg-IK}z9ZPplfD;5ZFuMimaJN`YRRf4 ztCp-^trVc608tBUn5?JA!3Lu`z||z-5&hx2zLD|C=3N+xGy_`Wk;~@rX$!b($9`y*%2%|g8hgc!CViV zN}C^E=?L~ar_K*2dxPB$e?toWaI!bp?eI6G(hnzlgWV24(;MtIYWr$$u-oBhdV}2> zjaPev-3~w18|=;zeZ4o>-3Lzf2D<~julEMK`@qTGU=JqtOmDD<51r`^cAGYEwwhsh zOK-4yF8_R0!|=7e!Tx7l|EY%!m#k;VdWNiLFnE^r3|Y^R^$c0h@LuW}Zmo4zFY&Y5Hr?Nx-FipS$5p=CLdoJ9-!3(K$?=4Insq3u{Je$V<8re#6tn~f3W zZsdhhHn0Qs*33tU5pIpMVpIrY@D1_lWUtUeb-dALk}w;A!hG;#IVGHI_`})wTiuLn zxOXr*W;H@*HkMUsES%RmP99oZX&}sPh*e!IdNZ3wk%d8SjZx%G<3Xz;!zc!x02b2< zH!)|Sn=y7lXQ2!^=b7x9vZ;$$H{A%1yzzu4J|*P8#QJdNkyYtPWX~{^a@^+lE~KtC zDvdcemNkH`!lv>lPnZjAs{r9Spg*jNI#%39IqajDdh^mkWBW+al*6@!46jCk>E3A0DKdNsi9*|!7K6gJZ$|Op@$oc1TUc@p z`eb#k-jKVZ5a?1gLlbhS>|0J5D~1*V2N{h8W_0>YS!|{aKmoen8fnLx8N$Lk^rkVu zw!FJ4fVNoe!cdaZk*bhkW$Pk)ywMzMB5!(%wNg#f9D9c}Vs%Gj<2grY5A3SEZ?yUv zI|yPD!#~9yfl`IaS=%92mGh!}Qp-q1dPT>x+I%B&V)3rgGEXb_kNK`LR!RQcCB_$) zWy7h#(k-U>Dj|JoCBOAY@LT6>c6Q*peiq3!?=CxV zWe2YBp##_BiO=3!@%-$)mA$vVx87SjtU`9(x_)Yo_sXtY*>&st>AJOZhtsPvSowl;mR(9I@VLEL+XnFUL^ z-dQ^XPo=FF&-!KU3_R?VwG&s}?~%1L@UT19j*8#!i?uWGxFgn{dw9?bYj5ar7py%H zdeHxBZ|JkmSNq29u;9j=?foSD=XD^#o#c*WbbAwT?Hh7mM8#W&(L;nL$_j^4r56 zpNSdlLn<}{#l7)OT3dsntz~WaU0tm0V5e`gxHjvc{7Br9GFBKkEartZVLs+G;LzYb zB5#FpLkh-m64_&Rgg%DxSm2;Ifzoo2|}hvFJ=?emL;CHEvF9 z2f%y@=~B+I@iDxYs?wMtJ7S?&xgZ1z(JgcAJ`&>b4&_V}?lk^D+=ekygjU5g!0zz` z&Y+$8!8FxuQGoVIPT{S!jtT%V`Kjdyjd=mq8b)}U(69> zWjVvDO6p>LCyS-&3@;&17i0I4OGVD=kd@WerL)QaG)46g#6{K{I}eTRtL{M@Lc$7{ z4`ck$6a*GTcW{z96;rH6=@};1r+JnRAz|vBghl#z=3rWY^M+pQjP)Ys#5*d`i?k@94ixsyUgj9IM~L{e15+;poYJ5}0g zF}gt2MD|&10H+9BNL)>Nyo#r>p0fqZS*y)*$w3&Mkw3}-W1W|f5S|IHt&HDZOdAe{ zrPwb{xH13@gL1+Ng?U9^X|)%N5gMFCtf_K%48QUzbP#+s_J+^00%$a4{xGJFH$|R7 z&#D47w%p%WGKN3E^RXXBk#XK-)ryc4=7}D>*lAUjW*L7SjPxjsf6(oiO|0-}CrEkv z%mhS;_BY-Dd&YjLz7#34NUdVetngspXu-z8=oe*t8LB|u6dbeo@nHEVgruNu(1e9q z;>xk+7BkoFx%>>0<~K#GkLR8ZmN^XG0#ED4Tz-#*Lnhe~3&w(4+;Yo*=wnTgF|3Ai zh8T%j|Bf^NPa_u3`X4NaD=9K|>;gF=wnvX(4A-(W0wNLwgk;E6fQSOfP!sLuGv1Y`&pt!;o~-ul{^- zuIBG3hkcB9VGf){{4Cb(hQn*(?Km4~slvzstOO%Ri_)l?%g!!#RkgiX62sVotsASs zN-814I9fiX++@@J&=l&Eu!Kyq?_luNEDX}+_qq2bIm&3Z)2a$|@O2&kHYTgA4|cdP z@f`Nn2l^HxRsUJU>gk*=vHQ|{?D!ZGrSu~hYc#fD89WKu z(kj*yNsxxevjNv|e%TRbVke6n2<$UDT(*WCN6(;tn12@|l`3?7Q?w<%tk4P=7LOB2 zD`H>Nmu87~mk#gZy`(GJkj%|;O+1s5nWzE=>%-d_F1}dO4;GVsS9g&$qwuV8(0##DlO|#Z?Sz@)pHm0xbfb*mdF48a2d}p zzkK@TU;cWEEo}Y|d>!4rb4ySh+_-Z)==h$U+xW@B?K-!Ej_=gDg?9%x>D&%_$4#y7 z(B{GQEw_W7UD|RF{0^^bxgYo~sI2O)sa4WhNoOUUm2_6pSxILlo%J5+tm>|*RZ?0> zX(gqVlvYw&Nogge^&Tm$>NhsEdVI#mr?#qxrdCOBCB2pOR?=HZZza8z^wu9iZ=JK* z(bP%}7!+59^BR8{O-Z)bNh8Puf#g~`!%zE~LK2rK7aG`l*O{p6X0#Rge9Y?|8A zqkGJ9s#Uy2&Lw4iNVK8@oJG(-9yMCcu%JqnnYqoD6UlRKDiuM=9zEV{m+&nOeW2GB zpF}P$v6EOikgi&eu}A1{d`>hvHiYjTVr|imSgOgq&E8_FgGHNVrOo#qZO(;9blW&F zYRye7k+_+~qR~>if`GR$JBh8RT)SA*N%h7SThq6fv9|1vs!Z$nY;WuX>)^%;F8^^Q*PB;pP72ujfy^ zHMQE}NjfoL6niryi?vkabIvZaYeT-&%zlWqs)bZq- zmSpxW{$#~)){t?XCnN>DIK`}l(k`)9V8_;E7FPRzunlL;*hhdWBiO-s|^&Cw&uM7pUw`QI(VXfJv`XQ ztWY)T2VTUHVTPzaAWo?f3d|fRA-eTVAw_FyB}~UOrg&xPE-d2|3oCCB+fl~WU@sJ7w_F(S#UA*S;#SW&V>(zyZM*u+|yu)Wnfl3?r2m_wm+@t3@%CGh)7|p2=~uj0X0O zOqRjoO7gnuco%Yl7Tej{)K_H|tuQ}eFh${wvI@h8>MFw%s*nxk)UbvYol#?d^XfVB zlFvHc=wcDWi^cflKY{VuSbudlL`vD^K6ZgwaXL!#dc{kYF_Xc4R_F|6WW{xYt9QAaY<7cQpmT)zgCRz_o&vGuYRDe6wi69b31chfVeP!goT4b{D z==&i=PrYmT4I14XKfenPJKvdVR9mJh1h6nCM*XYX*yPQHXbti48!gnOxs3V9iuU#` z;02T%@OcR#Lb-0HT)i#kWI+cGknS+G;5;Hf8w${k4Na`-Y)D7xfQzjLt7>)|WvTX5 zOUROt*AzRh9^iF+J2Ix5`09A30<&GnD#~7Wl^H3Zx%wAvYXDqFpJ*3)Wd z;Hj+j>RC^#oq>lvt#-ny`#r681|Igb+R^a)J*{>I9{04`^9~PsTI~%z?rF7$K@WOb z?G1g_(`w(=9rm=^AAZ==YKM=1J^8C2XibQrIcB9RFr2>zt(b;Wit`pH35z89X*9Vosn?x| zXc1z#{02X?iYGX!q*RbCP9eGn-(TyDmV&G_pUZU>dQs_MM#A#${5%^6pt}L_)Veqa zz3CgsM8&4pkZz@=npIRPUla2b=Z?PyrT~$ZaSqV^%)hcV+zdtPW*BB@+O)Af!VAMr zvd*NO>AvhCB+c(b<@snkEPP?fp^Fi4O3-6GR>f9eF`o-L=fs0GE^ePeH%+W0SVk$i z=H;R3d-GCt1sR{MW37Y@k%~J0s)V#9o($sPuZjq5ASI-fG0`4%%v_uwwvj9s`~Zs{sPLnRZ|C>eRrXr4WNE+B zKZ{8Em=`HH!H58{eO^Y0*d(=Xipjp+8QmN`{)4Em}^wJ(rN)%Jh$t1E<(8d0<4V zcmiJF5YMSC-lZ#Vur*kLDI{O|nRNzPBe$FvhYb&i#=W8Mxlz_0U_D^W_J%&=%=QuFA#1ij{M+$nO}5c`(ILs5 zC3lwGS#oE|oh5hn-np|Tn`!-&{8{p6$)6>Emi$@rXCH+>Ykq4>t%E0hFFacF&|WLK zwB*u~OG_>-xwPccl1uv|xU{!e?rgFZ@|#VzvdPwW*JSJ9+-Iw;>%TbeRmDFjt+jd-MY@ul?*BZtxMb#{0_=S^B3`s*>)@2 zZoT8STSrJgn{Q?Ft!%#a<22ve*8``L<(u6`T)%U|eDky`*U|7dB+fTaJ9Hfle?tO& z^R!#n(eUG*T}QFngU($?!;kxS9hr)QE?!5&pY-xNbU%+edL4e?Nnfu+sC(4i>+l0l zdwe}HtjC?co_y%I-`7#Hz}Xsx=JnoR#|-}YT88Eu_5oY}F@Jt!o3#waxnwOv)-q%* zL)J26Eko8ayu(_C7n_}R4A+0Nj$w_R$~uOuW5_y&tYgSJhIduR@M5#Ss)pg^DIdOm z;pI)dcHv_9T-T{u$Xxax3j+>!Ihx~SC^v74pV8BuWxh$PaRR`E$T%z=A$Gpqo=lcf zZy|QH4yOb>g0_}k!7IT6dnCkZipr#K4S5&U4eek&8PbY>%I<(=z{%h~v6aR#gG=S< zTXF#2abeK|PO7XiCm8?QyklMBYkBC(g(KWP#9LqN39RI1X&>^(*+*6nRBS$iUq9TN zeO`?@M&G;F+}StI=I3HTX~8sCo8;Y~NTgNmfFFN|mPIPYDo zu>35;JF*p3tTx}JOl@QvZDZD;F>+5x!K~J1c@jKLd)>!6FmrO_gnZFp=roIftwx8c z+6hVEHA^NYJ5BKoZfO%uyOi5C($Yrizx@2?*J;gv|M_n}|NTFH{&fA%pZ@i)CkW2qHeMw+ zW9S)TGXgNLlA1B}451k)@l`T2hJK8WU;$lUWz%BlIVR1q#JFE%4t zv}DneMN1YfS+r!)-aCudWk;}|l1WP@Et#}r(vnF_ChemzY2DX%1iN|C_rj=k4;{gh zRZCVaS+!)nEq<<5>^A-~xXEIWdI#~s0L&V6^trVc6;!%BiMC@u4GUV=0j#judp=hXS`WN)zB;crNx?@smxyB+?9RQm2@Z?N0pXL^I( zMr~j14R$;HOmDDTqw#8Qu-oCMdV}3LqObP`yZgYY-e7m2_x0XjcON*}8|=Zvp6Lzt z@S!uk!EVzA&Q>#YZ|Mzo&*h)5YUsYUH`xD->p#Cdtj~G|<6W|zA?q2ko+0ZQvYsL9 z8Qx1h!>zT>Du(O7S;er%PGuECRxxB1Lsl_l6~iB2#c*q_-(I_L`}vPqv2gniUZ>ET z*XcYP)Uod8<}_4sI{6u7i?%?gDu*95QH1n~3g-C_-khFEINdlOksa)?U37)2%F7b`VRSIkHFPet^Wnb`Oz_WGiQO`btd|5;A2q+k>!~3E?cwh4_u@7h( zmo9XHl3BnbmMh24TAwB4N)a3M*%Iqk*zU+9F5-K6NAm21o{ISWXoMg;+ZyIojxV?p z-Mq%P>rG7#Tf?NXR;#3?X35As(y%cR$-y~@xxZ;ezi9}(YcjNHuM zYAx!*dP*NwF;W?Y5W7`KU~km3d?t3M3^`H8%^bU_^e7^PWqhL|mb@3p4sB4zH*(&w zn?xO3OPfM|7V|xdDh`bwgNI%};yM5B}ZqPgK z-gO5z_nEG{K~MOt2jq9eYCR167F^bl{keWhJ}ddGm|o-%5V#kKnh?+3f7V zb$uotHQt?J!R)}59k@Pr2d>8xpS`!P{}Q_c0UPqp-dovw>tpxc+F=#4>sD-TcHPRZ zTi;vPt(_yE{kE<%boGLAK-1#6f!4v)X!|1GG5c+0zpeM%Z)*qFXQ!>~w3VHM z4;tW=6!l@RyVmcKranCDqqQ^eRJ!``tasMVz*A}K!?S)_I|C0pW$naO_j_dR3_R?P zwWH$q`(o`3Jno3K=N=yP!rB{p+y!e7gdX(2+8g?;^VPnwJM4M2Km4%U)ea&5diMYD zYKN;`e*8=o!0@$Qt^WDzub+PXumAkVr=q=Fyb1tk1B2jM8YrqYOd@6nv`v&yx6cqg zwx}`&nHU^KY_o`H~^@lLSZbVOj%Upjgb#<`Gifi@ji#mN1XXDyzfvVIIM?Vu<)IpcZS$n9CPa z_JY4HstC9njE?{~ut$PIgj!fno>RuR6y`IGmgl6LBzOA_bFZ&9|W(U3yA`-h=Xu|Y;Z%_W5$Ve76=2hB2mhqGByYAQ5giI z?L`s4S9Fqfz_-V{#+L>(0ZZ#xZTu)Cp)sx!U4iek8rbph5a)%U8`=h~qTC-&A}6ja>)9Ph<4>I(}zl_q=6ITN!G*hKcKSRYOnt^hlt ztOVol6mmtD#(0a#{7>arFR>&1t8ce}qwa|tL%P^CzEQU|0qxOL1o$}bP3#Wm3&<}9 zbBPthapYgzEW)pF6>@zzp-rrCWlkIGQ=8wrS%9xFZJ^K|tJ<5Kqa`eVT6z9s>@PbA zKLKZ;5cXty4ODMq-7e1M%^}sCZsm+HbMyQahT~rx6yhm_o{65AGqD=yAzi(NoYV&Y zJ98I^iD2VOAGyVz;wJiAD4UFLSz=9;ABZGhVhyq5qg6{SW?2+G<=j~)T$O-Ttb?lC z?CdL$y~U^M2MH9v0wZEf67C%`z?vw4ZZ1Bd3)P$SA*BQ)R5^uRU|-rVb3TWbq5?yi zGsbHv&(u&6HnlZw5Vx+ffV8ZI?}2gK%1-S={=^WDv466r$OksYLmYNCoZgvS!kEJx z(yVL~H0cmKcQKm{PU0--PQETyxw6m=nhQ)rSV_`QhYX=9lnXq@6Oak^sWtgywUH0B zA$Wqf7%ZBotZm$9c72Q0P>89G`K%V1h6+%49;C~TcOgT)St<5N=Y-woF&=qc6Kw=HCadpyE0ioV=*jV+WPbsUvDj5E5;Qp zOFSF=Z9$CHJc`EaEiCM#nz}V4WVH&6-cYY}6FY8MEbJOK2A$$rudU&*$|yeNn_vHm zz5qoLpH?OtxC;LS1kYOWjl8u*lsP-S)wtA#1yw&e#`l6>*~CJ*8ASJrKa)l+?j(M`I+6dPkGWb%wP)9+ZC#VT)fvbLBr-k^NN zG4`vo6OGNTEi|gTiVf3CWu9+a`y%EV^BOb=jj#5h?PSykU%tg}Lz z78(Vk40hts2IAcCZOni0EN-uaLrSrXrIEUg2ff?))Mf;xGNsTGRji>_pfJf9VkK3L zY=}peZiwe|YFPitDkWyarf3OOBh?{Yi(%-|P#5S^K1>}_gq-WPSMyYnTh5CDHlmDyxAT{prS&XaxvGl2`y8|FbFC$dLdNG~xFRvx{feC$5fTxXE=wD9}W8|81% z(r>tt{^s+4P~}S%JA*EiB);s}x!FI~yC_1!IVGtG4u6ybO{&nN3-3&caP|JioT=a3T%LP_JUwcx(1WwZU^pl#=c2WK9+`C@qQ( z0>vi-4GF;+PLM`oK21n6X8~Cn9gCSCBimt-07W&iGKRHhV*$LwjQ4UPkx%cAaK_u&;$_XEELgY2L>4BKOj!rNB$YzpN?9gwg)Qf{Ql1Zy4t)8@c(&|a8 zC#{~edeZ7Y60Lp?GesNE#a2ajZ;sOdX5nA#VQ2oT8Z(*=Bs!o=YOn)qtQqp|8fZ12 zs`IELaXpI#5b?ocV=b{5x;SZ!JxA8W{-A@6&(bv&ASPzj#}2DiP#1s2FBO`o;(g^? zvTqMaxSSRz=SaYlsn!Yd; zj~3SzX5jQG&Wf%iGxS$mq@c4WuxseB!fdiGI77Q*F$|yT6j;2NUNuO5V^)s0>&#+H zOR+x0%PfYg7+Dp22YUrt(UoUq$b4z?qn5LCe2S=z7%}r##qWbY9GN0}tL;Ae)uJcj z<(Y{gVqKC&jKI(bbJLZ7ORTCc1ghSmv7!yB8Y*%cj8$&!OjqVd$;UH&wis64%pafa z&3Mji>k6jnON%2QxB&>v;&A-aUWdaF;+j2e0K zGk%>tXSSHCE<@p*b#XqBU->iaE$6_bSQlYz_7-D|EKOfBbG63CzH*+rSXClIc(XjM zH+}^D!Rc3vVon&S1#N+y!8bGgy%=ie35#XWIFe%~Jae=aE{s3Ii)J4uo1t2hf#;g| zc5kgNu9#EHUqL+B+acC)HkrW=h;hYh#rBpV&*&IrwXrA`HWOZ z;-j0VcpAE2IU2@Gk7lXJWf1p1hOF{?d9D4I6@CMs8EsT+J3g}+OcbqDDGrGl*v`Tn za>LdTBqe~D3#5Ph5Ez+g42uOJSscux6NQt3DL|)8kQq|uCKKAnh9Z`1+-i`4;0}PX zGpBSjgNfo&f(B}tZ9?QYAUGIZ%zQFH;rGGl__Xny#gubzM-sR_>DJ+D6o2Q#FonGPh91vW)OUO)Z;e9^UTG(HdnK_oMgYL{4 zVy8S@FIsAgksQO?K(`z)SR0ywoMwgALM zoJb3Wg*6*7`|_HN7Ow|R;7}B?n5Y{3YAH91BM7~6NX_4#4RQHZqOy#L4WDAmY>Z!^ zruZ5j$r1viYm>0@Lx{R}!=B8;;H`DEc}Hh>Ig*aFB@Y-iB%z8m>6{C;sFNZJhMDEX+MElQ$u(AzE-k8|{6zCjqRzrPjoBQO3fr#cqUKD9uxvsw zQ4fU)cwyFZwNSZkpxr_cuvdOx6^BE!#f=zZ=1N+fOppy16zOb}Y zBxr$jHE~Cv))?u*RozTymf!D3os1A-e_5ldud(>W)mFR8X>-# zZ!uaB9_0jqwOL35^oP+95fAdJLstDRXx*lZid|yeJlG)G&XQ0z11Y+f*t`neQd@-# zC?ws+%J3;&1yIGBPaYy{Vs}uq@?b!P{coshD-PQ5K8*R@tJ{iaJ$QEpo~m*yp7r3} z8F;GNt$5ahcW2;X58fS8WWNXR&cMSSygT-3zX$Kmz~dggd$EOs9=v-)k9+X$c>o7J zc=v`r>%qHksSkVb?hilg!Ml^k^m@@?@oEp=-Q=P(#e>CH_u&2S`Pbsp{}!K`&(Hk) z$TCX^Es&QbgjqtEC4^Z*m?eZ+LYO6lSweV(nX-uR`ZVGjoS7;9%_71qBFrMfEF#Pz z!Ym@pBElcCh;Rop{f08aou_=bLc*PQ@KQo_sx%h6Z8#RK!zoc};~HmfF_Bdg9G=>)O!L9~L=*Dkm0P95u6S^Q@*b`(EISEO1zaI*;KXy``eFPw7T#aPG6 z5?q93cq5QI+NiW=jv-^U#SqX#NRHTPu$b*BDIkT(KloQUc|6}@&ctw7b0ibZU0L1| zIHI&qUF;NKC&kwxy{wq!#wq=twe4eH0f)90W5F{3i-G7BBPwHMdW)wirN&~{%u}V7d~Y9; zFN{Bjv9h#?r(E-lJ5TQpTs6rQl! z3J`JPImiIJ01D=;F*i%kVs5$@yo+5>*$x=9h@F}(ve#RrOL?5^;~0{ryQulu?8s>L zu`>;(m?1XU3NDn}XAxQzy;)?>Gd09ewDB%T0{Ve9X9YToZQ?KTF2og7a&10@kccrX z;GMy+xh}jl)GQ7k^jF1q$#1h*A~wrCJS=HtktKW=c~_RU-Ws>1(nez4ee5#U6M0kV z5c5ZK5+N{Lyci1B)xK*;3qGQ*O6H`PenW>StGElfRS7IIVDmwfv)ZG@P8pBvmF6)N z#sCu68d)W++qaN}Z{`TizH00~k8upmf zgT#itp~tBWd*Q}|${Ldqbab_51k!kgeYz{_Xhs zD%<}4l$?EX_Q}~NXP=yXa`wsDCue^iHzjX>eVWA?lDALZK6(4(?UT1p-adKz^Pf!|qc;3Lj68w6k9^!kq3AUGQYXM^B()*$#uab=s} z>%TT8+XQEu;A|88ZrTJNd5YOAIGY7$v*2tN{85?(@9VKsMRwJ0(eUGb!$*ehpzH9_@F%^84}%v+9f%J< z@T3p%p`&rsjri~bPkRzSfd$8%iJyGvxIghxlGWMT$LjT7#mD(i=W8IVZ`ikZ{m1z zk6Hhi^^ZSz{o@N}`l{N;m#2K-y2qDy@S4ZLqBo+zijYKnBK8C?51r>(sQ75$DOG$J z87lv)HmP6Z8__g)SdDqCJh?Us3}01we`s<0d9|7Iz5IsrfrW=5$9D!XH5O4s+tucs zktU{GNZz-NCyyS%GcT_+`-~P;7C!NTC1j?yxKL%e7)U4j9xJ5!0p1AP!YL+xR8DMFm&Gq=nIx>^R@3cm;T{H>tkFH_m1= z7t2Lb-anp=c_hjbvRGwdmYH?)YGUTon>}P5R^Jyx7K(%M8^>;Z7rR`=_adc8z9N=* zGw5~mMc8-cba;*A8ZxFF9P{eHR;&QXms8vu@)bVC|3ez<*eUsTtSWmk#rI-)l$!&p zYC@9Hs9^ctVwe91$44R^271iSK2dyLcC+z8ZG!OdgQ@$t(^U0~>^v^KJrxhOp-<@c16Q5OVxr*;4KB<@z z?`7vjHBlA|X>FB=LN}H?qkZf`a(GilqLG9OyI8l2>2~ZIF@J127{4+d2H42P{p(*(q*es0`f6H53_X)l5uwLd(V z|vZejNfe!;~Tw|J&a=~vxjl^FwP#v@3x2WE$5j%jIVDB zP&R0rJ&d!5arQ8NS3Qhx6<78!zW!@tvWIc@FwP#v@34pQt*4khjI)Pv_At&K#viYT zvFou@1$WIWJ&b?nqPyl~KjYisZz#TNPWCgt9sY(Qyyj#--~)HK5(+1@dHFS)6e+fLudLK-zHq0 zt%Gdd($Dxl7wUXHWb?KCjQ?j`|M}%%ZB{~BtT8Jgvl22ZA+r)PDzk3VAl<1Jcxd)4FZ=RaDl4J9eAmIm%JBn2fSbS#!>@MSeKzmlq1=C6-dfc`D6!Sk0p!4DI7b$R=|}d0(Pl zoHH!^8uNjl#||r(o!>JbLyK4m^om!7c&uZycVv}#FRYemCfljW(JuN7=>^MUv56EJ zA||>hU&auM&Mv#t#BbygqkFFMfb|f2Z=9=W3<7EZo0Rd5tblOP5OV`<^@bf3q4hkJIV7huy`fK`iOYB| zRkK*WxuV=_%m?d%#RDq|m6$iC%-qi2?hSkyw<7QE>gPr&xBW-*v^XBwb4R9IM? zr?xdw_0A=BL`WIrWvi{u%GZ_>0L8=L-a}m{h2W16*eD1m1;JEi8hnG=nDAhlmzYzQ!`<zlo4hz%*Eo;SjN%((ZL zs>kP~BMGMGk%ZEs3-b6a?u3R%>sFTCkLDDogPtU!V-=1{8YNad+PkouMA$5GxUy)Z z>hTQ!$OC3RLp+&hBBhhr4y2BV95d%r6-r3TzYcpKRTD*{l+fBkI(qXoO<`rIXHRsGd76PjL1L&OX8Kt55Kb%E}JG*MDtHb_mW6!Pz1By>tlP@e8vzaP|hy-oV)#_=EHY ze$ZgAl(uzy{eZuHd0Y3a@9)mQQ)O=5vtGYD15cH^bZr}uu zM6qXcM)6}*m(qtJz@Y@Y;eeLL7te+SN8>6`{-yh21U!aNl^8EFC3LTN5#~l&w^htX z6;NAzyK>CI{#%&E)i^eQ2cK2s*n&nFquSK|X2B{}hJc4uy}=Cp-OY^4VsXvd;h8a} zvqiFXM?Da}QKW14{As@Wwjxn2|c(aWa`# z{GPyJ9dfQHzJU#869blrB6#j6XRwLg=Q#o)7VQvQGRLYm252`6N%CamLAi4lpyI5l z;uLNez}Cc`UM%R_8(ZnsQ}Wf=mgsE$kh;px8Y7Xt0?u8}kGn%kMXz zUbm^^4VxZAx_WaQl+9@J2IvKp4i?Hq5|qP+{PZ!a#+WFbWuh|tp1pHTLI{mH17(4K zLwrkVIunJMH$n8bNdz~iXD_)u;|fjV^~Q=J8%TdJ)A5G zi0$C))OHp+tLxe

+_3h0iaz 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�{K7yR^B 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 V;_bt!6K@~B@GSrO|NZY@{ePShtdsx% literal 0 Hc$@ + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __RSA_TESTS_H__ +#define __RSA_TESTS_H__ + +/* Test suite for RSA PKCS#1 algorithms */ +#include "rsa.h" + +typedef enum { + RSA_PKCS1_v1_5_ENC = 0, + RSA_PKCS1_v1_5_SIG = 1, + RSA_OAEP_ENC = 2, + RSA_PSS_SIG = 3, +} rsa_alg_type; + +typedef struct { + const char *name; + rsa_alg_type type; + u32 modbits; + gen_hash_alg_type hash; + const u8 *n; + u16 nlen; + const u8 *d; + u16 dlen; + const u8 *e; + u16 elen; + const u8 *p; + u16 plen; + const u8 *q; + u16 qlen; + const u8 *dP; + u16 dPlen; + const u8 *dQ; + u16 dQlen; + const u8 *qInv; + u16 qInvlen; + const u8 *m; + u32 mlen; + const u8 *res; + u32 reslen; + const u8 *salt; + u32 saltlen; +} rsa_test; + + +ATTRIBUTE_WARN_UNUSED_RET static inline int perform_rsa_tests(const rsa_test **tests, u32 num_tests) +{ + int ret = 0, cmp; + unsigned int i; + + for(i = 0; i < num_tests; i++){ + const rsa_test *t = tests[i]; + u32 modbits = t->modbits; + rsa_pub_key pub; + rsa_priv_key priv; + rsa_priv_key priv_pq; + + /* Import the keys */ + ret = rsa_import_pub_key(&pub, t->n, (u16)t->nlen, t->e, (u16)t->elen); EG(ret, err1); + if(t->dP == NULL){ + const rsa_test *t_ = NULL; + MUST_HAVE((num_tests > 1) && (i < (num_tests - 1)), ret, err); + /* NOTE: we use the "next" CRT test to extract p and q */ + t_ = tests[i + 1]; + MUST_HAVE((t_->dP != NULL), ret, err); + /* Import the RSA_SIMPLE private key with only d and n */ + ret = rsa_import_simple_priv_key(&priv, t->n, (u16)t->nlen, t->d, (u16)t->dlen, NULL, 0, NULL, 0); EG(ret, err1); + /* Import the RSA_SIMPLE_PQ with d, n, p and q */ + ret = rsa_import_simple_priv_key(&priv_pq, t->n, (u16)t->nlen, t->d, (u16)t->dlen, t_->p, (u16)t_->plen, t_->q, (u16)t_->qlen); EG(ret, err1); + } + else{ + /* Import the RSA_CRT CRT key */ + ret = rsa_import_crt_priv_key(&priv, t->p, (u16)t->plen, t->q, (u16)t->qlen, t->dP, (u16)t->dPlen, t->dQ, (u16)t->dQlen, t->qInv, (u16)t->qInvlen, NULL, NULL, 0); EG(ret, err1); + } +#ifdef USE_SIG_BLINDING + /* We using exponent blinding, only RSA_SIMPLE_PQ are usable. We hence overwrite the key */ + ret = local_memcpy(&priv, &priv_pq, sizeof(rsa_priv_key)); EG(ret, err); +#endif + /* Perform our operation */ + switch(t->type){ + case RSA_PKCS1_v1_5_ENC:{ + u8 cipher[NN_USABLE_MAX_BYTE_LEN]; + u32 clen; + if(t->salt != NULL){ + clen = sizeof(cipher); + ret = rsaes_pkcs1_v1_5_encrypt(&pub, t->m, t->mlen, cipher, &clen, modbits, t->salt, t->saltlen); EG(ret, err1); + /* Check the result */ + MUST_HAVE((clen == t->reslen), ret, err1); + ret = are_equal(t->res, cipher, t->reslen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + } + /* Try to decrypt */ + clen = sizeof(cipher); + ret = rsaes_pkcs1_v1_5_decrypt(&priv, t->res, t->reslen, cipher, &clen, modbits); EG(ret, err1); + /* Check the result */ + MUST_HAVE((clen == t->mlen), ret, err1); + ret = are_equal(t->m, cipher, t->mlen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + /* Try to decrypt with the hardened version */ + clen = sizeof(cipher); + ret = rsaes_pkcs1_v1_5_decrypt_hardened(&priv, &pub, t->res, t->reslen, cipher, &clen, modbits); EG(ret, err1); + /* Check the result */ + MUST_HAVE((clen == t->mlen), ret, err1); + ret = are_equal(t->m, cipher, t->mlen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + break; + } + case RSA_OAEP_ENC:{ + u8 cipher[NN_USABLE_MAX_BYTE_LEN]; + u32 clen; + if(t->salt != NULL){ + clen = sizeof(cipher); + ret = rsaes_oaep_encrypt(&pub, t->m, t->mlen, cipher, &clen, modbits, NULL, 0, t->hash, t->hash, t->salt, t->saltlen); EG(ret, err1); + /* Check the result */ + MUST_HAVE((clen == t->reslen), ret, err1); + ret = are_equal(t->res, cipher, t->reslen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + } + /* Try to decrypt */ + clen = sizeof(cipher); + ret = rsaes_oaep_decrypt(&priv, t->res, t->reslen, cipher, &clen, modbits, NULL, 0, t->hash, t->hash); EG(ret, err1); + /* Check the result */ + MUST_HAVE((clen == t->mlen), ret, err1); + ret = are_equal(t->m, cipher, t->mlen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + /* Try to decrypt with the hardened version */ + clen = sizeof(cipher); + ret = rsaes_oaep_decrypt_hardened(&priv, &pub, t->res, t->reslen, cipher, &clen, modbits, NULL, 0, t->hash, t->hash); EG(ret, err1); + /* Check the result */ + MUST_HAVE((clen == t->mlen), ret, err1); + ret = are_equal(t->m, cipher, t->mlen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + break; + } + case RSA_PKCS1_v1_5_SIG:{ + u8 sig[NN_USABLE_MAX_BYTE_LEN]; + u16 siglen = sizeof(sig); + MUST_HAVE((t->reslen) <= 0xffff, ret, err1); + ret = rsassa_pkcs1_v1_5_verify(&pub, t->m, t->mlen, t->res, (u16)(t->reslen), modbits, t->hash); EG(ret, err1); + /* Try to sign */ + ret = rsassa_pkcs1_v1_5_sign(&priv, t->m, t->mlen, sig, &siglen, modbits, t->hash); EG(ret, err1); + /* Check the result */ + MUST_HAVE((siglen == t->reslen), ret, err1); + ret = are_equal(t->res, sig, t->reslen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + /* Try to sign with the hardened version */ + ret = rsassa_pkcs1_v1_5_sign_hardened(&priv, &pub, t->m, t->mlen, sig, &siglen, modbits, t->hash); EG(ret, err1); + /* Check the result */ + MUST_HAVE((siglen == t->reslen), ret, err1); + ret = are_equal(t->res, sig, t->reslen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + break; + } + case RSA_PSS_SIG:{ + if(t->salt == NULL){ + /* In case of NULL salt, default saltlen value is the digest size */ + u8 digestsize, blocksize; + ret = gen_hash_get_hash_sizes(t->hash, &digestsize, &blocksize); EG(ret, err1); + MUST_HAVE((t->reslen) <= 0xffff, ret, err1); + ret = rsassa_pss_verify(&pub, t->m, t->mlen, t->res, (u16)(t->reslen), modbits, t->hash, t->hash, digestsize); EG(ret, err1); + } + else{ + MUST_HAVE((t->reslen) <= 0xffff, ret, err1); + ret = rsassa_pss_verify(&pub, t->m, t->mlen, t->res, (u16)(t->reslen), modbits, t->hash, t->hash, t->saltlen); EG(ret, err1); + } + if(t->salt != NULL){ + /* Try to sign */ + u8 sig[NN_USABLE_MAX_BYTE_LEN]; + u16 siglen = sizeof(sig); + ret = rsassa_pss_sign(&priv, t->m, t->mlen, sig, &siglen, modbits, t->hash, t->hash, t->saltlen, t->salt); EG(ret, err1); + /* Check the result */ + MUST_HAVE((t->reslen) <= 0xffff, ret, err1); + MUST_HAVE((siglen == (u16)(t->reslen)), ret, err1); + ret = are_equal(t->res, sig, t->reslen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + /* Try to sign with the hardened version */ + ret = rsassa_pss_sign_hardened(&priv, &pub, t->m, t->mlen, sig, &siglen, modbits, t->hash, t->hash, t->saltlen, t->salt); EG(ret, err1); + /* Check the result */ + MUST_HAVE((siglen == (u16)(t->reslen)), ret, err1); + ret = are_equal(t->res, sig, t->reslen, &cmp); EG(ret, err1); + MUST_HAVE(cmp, ret, err1); + } + break; + } + default:{ + ret = -1; + break; + } + } +err1: + if(ret){ + ext_printf("[-] Test %s failed (modbits = %" PRIu32 ")\n", t->name, t->modbits); + goto err; + } + else{ + ext_printf("[+] Test %s passed (modbits = %" PRIu32 ")\n", t->name, t->modbits); + } + } + + if(!ret){ + ext_printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\t=== [+] All RSA tests went OK! ===\n"); + } +err: + return ret; +} + +#endif /* __RSA_TESTS_H__ */ diff --git a/crypto/libecc/src/examples/sig/sdsa/Makefile b/crypto/libecc/src/examples/sig/sdsa/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/sdsa/Makefile @@ -0,0 +1,34 @@ +ROOT_DIR=../../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +all: sdsa +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: sdsa_dyn +endif + +libhash: + # Compile the hashes + $(VERBOSE_MAKE)cd ../../hash && EXTRA_CFLAGS="$(CFLAGS)" make libhash.a + +sdsa: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DSDSA sdsa.c ../../hash/hash.c ../dsa/dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) ../../hash/libhash.a $(LIBSIGN) -o sdsa + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +sdsa_dyn: libhash + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DSDSA sdsa.c ../../hash/hash.c ../dsa/dsa.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBEC) -L$(BUILD_DIR) ../../hash/libhash.a -lsign -o sdsa_dyn +endif + + +clean: + @rm -f sdsa + @rm -f sdsa_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sig/sdsa/sdsa.h b/crypto/libecc/src/examples/sig/sdsa/sdsa.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/sdsa/sdsa.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SDSA_H__ +#define __SDSA_H__ + +/* + * NOTE: although we only need libarith for SDSA as we + * manipulate a ring of integers, we include libsig for + * the hash algorithms. + */ +#include + +/* The hash algorithms wrapper */ +#include "../../hash/hash.h" + +/* The DSA include file as we reuse DSA primitives internally */ +#include "../dsa/dsa.h" + +/* We define hereafter the types and functions for SDSA. + */ + +/* SDSA public key, composed of: + * p the SDSA prime modulus + * q the SDSA prime order (prime divisor of (p-1)) + * g the SDSA generator + * y the public key = g^x (p) + * + * NOTE: the SDSA (Schnorr DSA) public key is mapped to a DSA public key + * as the parameters are the same. + */ +typedef dsa_pub_key sdsa_pub_key; + +/* SDSA private key, composed of: + * p the SDSA prime modulus + * q the SDSA prime order (prime divisor of (p-1)) + * g the SDSA generator + * x the secret key + * + * NOTE: the SDSA (Schnorr DSA) private key is mapped to a DSA private key + * as the parameters are the same. + */ +typedef dsa_priv_key sdsa_priv_key; + +ATTRIBUTE_WARN_UNUSED_RET int sdsa_import_priv_key(sdsa_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen); + +ATTRIBUTE_WARN_UNUSED_RET int sdsa_import_pub_key(sdsa_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen); + +ATTRIBUTE_WARN_UNUSED_RET int sdsa_compute_pub_from_priv(sdsa_pub_key *pub, + const sdsa_priv_key *priv); + +ATTRIBUTE_WARN_UNUSED_RET int sdsa_sign(const sdsa_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type sdsa_hash); + +ATTRIBUTE_WARN_UNUSED_RET int sdsa_verify(const sdsa_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type sdsa_hash); + +#endif /* __SDSA_H__ */ diff --git a/crypto/libecc/src/examples/sig/sdsa/sdsa.c b/crypto/libecc/src/examples/sig/sdsa/sdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sig/sdsa/sdsa.c @@ -0,0 +1,467 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "sdsa.h" + + +/* We include the rand external dependency because we have to generate + * some random data for the nonces. + */ +#include +/* We include the printf external dependency for printf output */ +#include +/* We include our common helpers */ +#include "../common/common.h" + +/* + * The purpose of this example is to implement the Schnorr signature + * scheme (aka SDSA for Schnorr DSA) based on libecc arithmetic primitives. + * Many "variants" of Schnorr signature schemes exist, we implement here the + * one corresponding to SDSA as described in the ISO14888-3 standard. + * + * XXX: Please be aware that libecc has been designed for Elliptic + * Curve cryptography, and as so the arithmetic primitives are + * not optimized for big numbers >= 1024 bits usually used for SDSA. + * Additionnaly, a hard limit of our NN values makes it impossible + * to exceed ~5300 bits in the best case (words of size 64 bits). + * + * All in all, please see this as a proof of concept. + * Use it at your own risk! + * + * !! DISCLAIMER !! + * ================ + * + * Althoug some efforts have been made to secure this implementation + * of Schnorr DSA (e.g. by protecting the private key and nonces using constant + * time and blinding WHEN activated with BLINDING=1), please consider this + * code as a proof of concept and use it at your own risk. + * + * All-in-all, this piece of code can be useful in some contexts, or risky to + * use in other sensitive ones where advanced side-channels or fault attacks + * have to be considered. Use this SDSA code knowingly and at your own risk! + * + */ + +/* NOTE: since SDSA is very similar to DSA, we reuse some of our DSA + * primitives to factorize some code. Also, SDSA private and public keys + * have the exact same type as DSA keys. + */ + +/* Import a SDSA private key from buffers */ +int sdsa_import_priv_key(sdsa_priv_key *priv, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *x, u16 xlen) +{ + return dsa_import_priv_key(priv, p, plen, q, qlen, g, glen, x, xlen); +} + +/* Import a SDSA public key from buffers */ +int sdsa_import_pub_key(sdsa_pub_key *pub, const u8 *p, u16 plen, + const u8 *q, u16 qlen, + const u8 *g, u16 glen, + const u8 *y, u16 ylen) +{ + return dsa_import_pub_key(pub, p, plen, q, qlen, g, glen, y, ylen); +} + + + +/* Compute a SDSA public key from a private key. + * The public key is computed using modular exponentiation of the generator + * with the private key. + */ +int sdsa_compute_pub_from_priv(sdsa_pub_key *pub, const sdsa_priv_key *priv) +{ + return dsa_compute_pub_from_priv(pub, priv); +} + +/* Generate a SDSA signature + */ +int sdsa_sign(const sdsa_priv_key *priv, const u8 *msg, u32 msglen, + const u8 *nonce, u16 noncelen, + u8 *sig, u16 siglen, gen_hash_alg_type sdsa_hash) +{ + int ret, iszero; + /* alpha is the bit length of p, beta is the bit length of q */ + bitcnt_t alpha, beta; + /* Length of the hash function (hlen is "gamma") */ + u8 hlen, block_size; + nn_src_t p, q, g, x; + /* The nonce and its protected version */ + nn k, k_; + /* r, s, pi */ + nn r, s; + nn_t pi; + /* This is a bit too much for stack space, but we need it for + * the computation of "pi" I2BS representation ... + */ + u8 pi_buf[NN_USABLE_MAX_BYTE_LEN]; + /* hash context */ + gen_hash_context hash_ctx; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b; + b.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + k.magic = k_.magic = r.magic = s.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((priv != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(pi_buf, 0, sizeof(pi_buf)); EG(ret, err); + + /* Make things more readable */ + p = &(priv->p); + q = &(priv->q); + g = &(priv->g); + x = &(priv->x); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + /* Let alpha be the bit length of p */ + ret = nn_bitlen(p, &alpha); EG(ret, err); + /* Let beta be the bit length of q */ + ret = nn_bitlen(q, &beta); EG(ret, err); + /* Get the hash sizes (8*"gamma") */ + ret = gen_hash_get_hash_sizes(sdsa_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on the signature length: + * the signature is of size hash function plus an integer modulo q + * "gamma" + beta + */ + MUST_HAVE((siglen == (hlen + BYTECEIL(beta))), ret, err); + +restart: + /* If the nonce is imposed, use it. Else get a random modulo q */ + if(nonce != NULL){ + ret = _os2ip(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = nn_get_random_mod(&k, q); EG(ret, err); + } + + /* Fix the MSB of our scalar */ + ret = nn_copy(&k_, &k); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind the scalar */ + ret = _blind_scalar(&k_, q, &k_); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = _fix_scalar_msb(&k_, q, &k_); EG(ret, err); + /* Use r as aliasing for pi to save some space */ + pi = &r; + /* pi = (g**k mod p) */ + ret = nn_init(pi, 0); EG(ret, err); + /* Exponentiation modulo p */ + ret = nn_mod_pow(pi, g, &k_, p); EG(ret, err); + + /* Compute I2BS(alpha, pi) + */ + ret = _i2osp(pi, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + + /* r = h(I2BS(alpha, pi) || M) */ + ret = gen_hash_init(&hash_ctx, sdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, (u16)BYTECEIL(alpha), sdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, msg, msglen, sdsa_hash); EG(ret, err); + /* Export r result of the hash function in sig */ + ret = gen_hash_final(&hash_ctx, sig, sdsa_hash); EG(ret, err); + + /* Import r as an integer modulo q */ + ret = _os2ip(&r, sig, hlen); EG(ret, err); + ret = nn_mod(&r, &r, q); EG(ret, err); + + /* If r is 0, restart the process */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + IGNORE_RET_VAL(local_memset(sig, 0, hlen)); + goto restart; + } + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, r and k are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + /* Blind r with b */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + /* Blind k with b */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); + /* + * In case of blinding, we compute b^-1 with + * little Fermat theorem. This will be used to + * unblind s. + */ + ret = nn_modinv_fermat(&b, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Compute s = (k + r x) mod q */ + ret = nn_mod_mul(&s, &r, x, q); EG(ret, err); + ret = nn_mod_add(&s, &s, &k, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, unblind s */ + ret = nn_mod_mul(&s, &s, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* If s is 0, restart the process */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export s */ + ret = _i2osp(&s, sig + hlen, (u16)(siglen - hlen)); EG(ret, err); + +err: + if(ret && (sig != NULL)){ + IGNORE_RET_VAL(local_memset(sig, 0, siglen)); + } + + nn_uninit(&k); + nn_uninit(&k_); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif + nn_uninit(&r); + nn_uninit(&s); + + PTR_NULLIFY(pi); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(x); + + return ret; +} + + + +/* Verify a SDSA signature + */ +int sdsa_verify(const sdsa_pub_key *pub, const u8 *msg, u32 msglen, + const u8 *sig, u16 siglen, gen_hash_alg_type sdsa_hash) +{ + int ret, iszero, cmp; + /* alpha is the bit length of p, beta is the bit length of q */ + bitcnt_t alpha, beta; + /* Length of the hash function */ + u8 hlen, block_size; + nn_src_t p, q, g, y; + /* r, s */ + nn r, s; + /* u, and pi */ + nn u, pi; + /* This is a bit too much for stack space, but we need it for + * the computation of "pi" I2BS representation ... + */ + u8 pi_buf[NN_USABLE_MAX_BYTE_LEN]; + /* Hash */ + u8 hash[MAX_DIGEST_SIZE]; + /* hash context */ + gen_hash_context hash_ctx; + r.magic = s.magic = u.magic = pi.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((pub != NULL) && (msg != NULL) && (sig != NULL), ret, err); + + ret = local_memset(pi_buf, 0, sizeof(pi_buf)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + p = &(pub->p); + q = &(pub->q); + g = &(pub->g); + y = &(pub->y); + + /* Sanity checks */ + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(g); EG(ret, err); + ret = nn_check_initialized(y); EG(ret, err); + + /* Let alpha be the bit length of p */ + ret = nn_bitlen(p, &alpha); EG(ret, err); + /* Let beta be the bit length of q */ + ret = nn_bitlen(q, &beta); EG(ret, err); + /* Get the hash sizes (8*"gamma") */ + ret = gen_hash_get_hash_sizes(sdsa_hash, &hlen, &block_size); EG(ret, err); + MUST_HAVE((hlen <= MAX_DIGEST_SIZE), ret, err); + + /* Sanity check on the signature length */ + MUST_HAVE((siglen == (hlen + BYTECEIL(beta))), ret, err); + + /* Extract r and s */ + ret = _os2ip(&r, sig, hlen); EG(ret, err); + ret = _os2ip(&s, sig + hlen, (u16)(siglen - hlen)); EG(ret, err); + + /* Return an error if r = 0 or s = 0 */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + /* Check that 0 < s < q */ + ret = nn_cmp(&s, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + /* Take r modulo q */ + ret = nn_mod(&r, &r, q); EG(ret, err); + + /* Initialize internal variables */ + ret = nn_init(&u, 0); EG(ret, err); + ret = nn_init(&pi, 0); EG(ret, err); + + /* NOTE: no need to use a secure exponentiation here as we only + * manipulate public data. + */ + /* Compute (y ** -r) mod (p) */ + ret = nn_sub(&r, q, &r); EG(ret, err); /* compute -r = (q - r) mod q */ + ret = _nn_mod_pow_insecure(&u, y, &r, p); EG(ret, err); + /* Compute (g ** s) mod (p) */ + ret = _nn_mod_pow_insecure(&pi, g, &s, p); EG(ret, err); + /* Compute (y ** -r) * (g ** s) mod (p) */ + ret = nn_mod_mul(&pi, &pi, &u, p); EG(ret, err); + + /* Compute r' */ + /* I2BS(alpha, pi) + */ + ret = _i2osp(&pi, pi_buf, (u16)BYTECEIL(alpha)); EG(ret, err); + /* r' = h(I2BS(alpha, pi) || M) */ + ret = gen_hash_init(&hash_ctx, sdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, pi_buf, (u16)BYTECEIL(alpha), sdsa_hash); EG(ret, err); + ret = gen_hash_update(&hash_ctx, msg, msglen, sdsa_hash); EG(ret, err); + ret = gen_hash_final(&hash_ctx, hash, sdsa_hash); EG(ret, err); + + /* Check that hash values r' == r */ + ret = are_equal(sig, hash, hlen, &cmp); EG(ret, err); + ret = (cmp != 1) ? -1 : 0; + +err: + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&u); + nn_uninit(&pi); + + PTR_NULLIFY(p); + PTR_NULLIFY(q); + PTR_NULLIFY(g); + PTR_NULLIFY(y); + + return ret; +} + +#ifdef SDSA +#include +int main(int argc, char *argv[]) +{ + int ret = 0; + + /* This example is taken from ISO14888-3 SDSA (Appendix F "Numerical examples" */ + const u8 p[] = { + 0x87, 0xA8, 0xE6, 0x1D, 0xB4, 0xB6, 0x66, 0x3C, 0xFF, 0xBB, 0xD1, 0x9C, 0x65, 0x19, 0x59, 0x99, 0x8C, 0xEE, 0xF6, 0x08, 0x66, 0x0D, 0xD0, 0xF2, + 0x5D, 0x2C, 0xEE, 0xD4, 0x43, 0x5E, 0x3B, 0x00, 0xE0, 0x0D, 0xF8, 0xF1, 0xD6, 0x19, 0x57, 0xD4, 0xFA, 0xF7, 0xDF, 0x45, 0x61, 0xB2, 0xAA, 0x30, + 0x16, 0xC3, 0xD9, 0x11, 0x34, 0x09, 0x6F, 0xAA, 0x3B, 0xF4, 0x29, 0x6D, 0x83, 0x0E, 0x9A, 0x7C, 0x20, 0x9E, 0x0C, 0x64, 0x97, 0x51, 0x7A, 0xBD, + 0x5A, 0x8A, 0x9D, 0x30, 0x6B, 0xCF, 0x67, 0xED, 0x91, 0xF9, 0xE6, 0x72, 0x5B, 0x47, 0x58, 0xC0, 0x22, 0xE0, 0xB1, 0xEF, 0x42, 0x75, 0xBF, 0x7B, + 0x6C, 0x5B, 0xFC, 0x11, 0xD4, 0x5F, 0x90, 0x88, 0xB9, 0x41, 0xF5, 0x4E, 0xB1, 0xE5, 0x9B, 0xB8, 0xBC, 0x39, 0xA0, 0xBF, 0x12, 0x30, 0x7F, 0x5C, + 0x4F, 0xDB, 0x70, 0xC5, 0x81, 0xB2, 0x3F, 0x76, 0xB6, 0x3A, 0xCA, 0xE1, 0xCA, 0xA6, 0xB7, 0x90, 0x2D, 0x52, 0x52, 0x67, 0x35, 0x48, 0x8A, 0x0E, + 0xF1, 0x3C, 0x6D, 0x9A, 0x51, 0xBF, 0xA4, 0xAB, 0x3A, 0xD8, 0x34, 0x77, 0x96, 0x52, 0x4D, 0x8E, 0xF6, 0xA1, 0x67, 0xB5, 0xA4, 0x18, 0x25, 0xD9, + 0x67, 0xE1, 0x44, 0xE5, 0x14, 0x05, 0x64, 0x25, 0x1C, 0xCA, 0xCB, 0x83, 0xE6, 0xB4, 0x86, 0xF6, 0xB3, 0xCA, 0x3F, 0x79, 0x71, 0x50, 0x60, 0x26, + 0xC0, 0xB8, 0x57, 0xF6, 0x89, 0x96, 0x28, 0x56, 0xDE, 0xD4, 0x01, 0x0A, 0xBD, 0x0B, 0xE6, 0x21, 0xC3, 0xA3, 0x96, 0x0A, 0x54, 0xE7, 0x10, 0xC3, + 0x75, 0xF2, 0x63, 0x75, 0xD7, 0x01, 0x41, 0x03, 0xA4, 0xB5, 0x43, 0x30, 0xC1, 0x98, 0xAF, 0x12, 0x61, 0x16, 0xD2, 0x27, 0x6E, 0x11, 0x71, 0x5F, + 0x69, 0x38, 0x77, 0xFA, 0xD7, 0xEF, 0x09, 0xCA, 0xDB, 0x09, 0x4A, 0xE9, 0x1E, 0x1A, 0x15, 0x97, + }; + + const u8 q[] = { + 0x8C, 0xF8, 0x36, 0x42, 0xA7, 0x09, 0xA0, 0x97, 0xB4, 0x47, 0x99, 0x76, 0x40, 0x12, 0x9D, 0xA2, 0x99, 0xB1, 0xA4, 0x7D, 0x1E, 0xB3, 0x75, 0x0B, + 0xA3, 0x08, 0xB0, 0xFE, 0x64, 0xF5, 0xFB, 0xD3, + }; + + const u8 g[] = { + 0x3F, 0xB3, 0x2C, 0x9B, 0x73, 0x13, 0x4D, 0x0B, 0x2E, 0x77, 0x50, 0x66, 0x60, 0xED, 0xBD, 0x48, 0x4C, 0xA7, 0xB1, 0x8F, 0x21, 0xEF, 0x20, 0x54, + 0x07, 0xF4, 0x79, 0x3A, 0x1A, 0x0B, 0xA1, 0x25, 0x10, 0xDB, 0xC1, 0x50, 0x77, 0xBE, 0x46, 0x3F, 0xFF, 0x4F, 0xED, 0x4A, 0xAC, 0x0B, 0xB5, 0x55, + 0xBE, 0x3A, 0x6C, 0x1B, 0x0C, 0x6B, 0x47, 0xB1, 0xBC, 0x37, 0x73, 0xBF, 0x7E, 0x8C, 0x6F, 0x62, 0x90, 0x12, 0x28, 0xF8, 0xC2, 0x8C, 0xBB, 0x18, + 0xA5, 0x5A, 0xE3, 0x13, 0x41, 0x00, 0x0A, 0x65, 0x01, 0x96, 0xF9, 0x31, 0xC7, 0x7A, 0x57, 0xF2, 0xDD, 0xF4, 0x63, 0xE5, 0xE9, 0xEC, 0x14, 0x4B, + 0x77, 0x7D, 0xE6, 0x2A, 0xAA, 0xB8, 0xA8, 0x62, 0x8A, 0xC3, 0x76, 0xD2, 0x82, 0xD6, 0xED, 0x38, 0x64, 0xE6, 0x79, 0x82, 0x42, 0x8E, 0xBC, 0x83, + 0x1D, 0x14, 0x34, 0x8F, 0x6F, 0x2F, 0x91, 0x93, 0xB5, 0x04, 0x5A, 0xF2, 0x76, 0x71, 0x64, 0xE1, 0xDF, 0xC9, 0x67, 0xC1, 0xFB, 0x3F, 0x2E, 0x55, + 0xA4, 0xBD, 0x1B, 0xFF, 0xE8, 0x3B, 0x9C, 0x80, 0xD0, 0x52, 0xB9, 0x85, 0xD1, 0x82, 0xEA, 0x0A, 0xDB, 0x2A, 0x3B, 0x73, 0x13, 0xD3, 0xFE, 0x14, + 0xC8, 0x48, 0x4B, 0x1E, 0x05, 0x25, 0x88, 0xB9, 0xB7, 0xD2, 0xBB, 0xD2, 0xDF, 0x01, 0x61, 0x99, 0xEC, 0xD0, 0x6E, 0x15, 0x57, 0xCD, 0x09, 0x15, + 0xB3, 0x35, 0x3B, 0xBB, 0x64, 0xE0, 0xEC, 0x37, 0x7F, 0xD0, 0x28, 0x37, 0x0D, 0xF9, 0x2B, 0x52, 0xC7, 0x89, 0x14, 0x28, 0xCD, 0xC6, 0x7E, 0xB6, + 0x18, 0x4B, 0x52, 0x3D, 0x1D, 0xB2, 0x46, 0xC3, 0x2F, 0x63, 0x07, 0x84, 0x90, 0xF0, 0x0E, 0xF8, 0xD6, 0x47, 0xD1, 0x48, 0xD4, 0x79, 0x54, 0x51, + 0x5E, 0x23, 0x27, 0xCF, 0xEF, 0x98, 0xC5, 0x82, 0x66, 0x4B, 0x4C, 0x0F, 0x6C, 0xC4, 0x16, 0x59, + }; + + const u8 x[] = { + 0x73, 0x01, 0x88, 0x95, 0x20, 0xD4, 0x7A, 0xA0, 0x55, 0x99, 0x5B, 0xA1, 0xD8, 0xFC, 0xD7, 0x01, 0x6E, 0xA6, 0x2E, 0x09, 0x18, 0x89, 0x2E, 0x07, + 0xB7, 0xDC, 0x23, 0xAF, 0x69, 0x00, 0x6B, 0x88, + }; + + const u8 y[] = { + 0x57, 0xA1, 0x72, 0x58, 0xD4, 0xA3, 0xF4, 0x7C, 0x45, 0x45, 0xAD, 0x51, 0xF3, 0x10, 0x9C, 0x5D, 0xB4, 0x1B, 0x78, 0x78, 0x79, 0xFC, 0xFE, 0x53, + 0x8D, 0xC1, 0xDD, 0x5D, 0x35, 0xCE, 0x42, 0xFF, 0x3A, 0x9F, 0x22, 0x5E, 0xDE, 0x65, 0x02, 0x12, 0x64, 0x08, 0xFC, 0xB1, 0x3A, 0xEA, 0x22, 0x31, + 0x80, 0xB1, 0x49, 0xC4, 0x64, 0xE1, 0x76, 0xEB, 0xF0, 0x3B, 0xA6, 0x51, 0x0D, 0x82, 0x06, 0xC9, 0x20, 0xF6, 0xB1, 0xE0, 0x93, 0x92, 0xE6, 0xC8, + 0x40, 0xA0, 0x5B, 0xDB, 0x9D, 0x68, 0x75, 0xAB, 0x3F, 0x48, 0x17, 0xEC, 0x3A, 0x65, 0xA6, 0x65, 0xB7, 0x88, 0xEC, 0xBB, 0x44, 0x71, 0x88, 0xC7, + 0xDF, 0x2E, 0xB4, 0xD3, 0xD9, 0x42, 0x4E, 0x57, 0xD9, 0x64, 0x39, 0x8D, 0xBE, 0x1C, 0x63, 0x62, 0x65, 0x9C, 0x6B, 0xD8, 0x55, 0xC1, 0xD3, 0xE5, + 0x1D, 0x64, 0x79, 0x6C, 0xA5, 0x98, 0x48, 0x0D, 0xFD, 0xD9, 0x58, 0x0E, 0x55, 0x08, 0x53, 0x45, 0xC1, 0x5E, 0x34, 0xD6, 0xA3, 0x3A, 0x2F, 0x43, + 0xE2, 0x22, 0x40, 0x7A, 0xCE, 0x05, 0x89, 0x72, 0xD3, 0x49, 0x52, 0xAE, 0x2B, 0x70, 0x5C, 0x53, 0x22, 0x43, 0xBE, 0x39, 0x4B, 0x22, 0x23, 0x29, + 0x61, 0x61, 0x14, 0x5E, 0xF2, 0x92, 0x7C, 0xDB, 0xC5, 0x5B, 0xBD, 0x56, 0x4A, 0xAE, 0x8D, 0xE4, 0xBA, 0x45, 0x00, 0xA7, 0xFA, 0x43, 0x2F, 0xE7, + 0x8B, 0x0F, 0x06, 0x89, 0x1E, 0x40, 0x80, 0x83, 0x7E, 0x76, 0x10, 0x57, 0xBC, 0x6C, 0xB8, 0xAC, 0x18, 0xFD, 0x43, 0x20, 0x75, 0x82, 0x03, 0x2A, + 0xFB, 0x63, 0xC6, 0x24, 0xF3, 0x2E, 0x66, 0xB0, 0x5F, 0xC3, 0x1C, 0x5D, 0xFF, 0xB2, 0x5F, 0xA9, 0x2D, 0x4D, 0x00, 0xE2, 0xB0, 0xD4, 0xF7, 0x21, + 0xE8, 0x8C, 0x41, 0x7D, 0x2E, 0x57, 0x79, 0x7B, 0x8F, 0x55, 0xA2, 0xFF, 0xC6, 0xEE, 0x4D, 0xDB, + }; + + const u8 msg[] = "abc"; + + const u8 nonce[] = { + 0x2B, 0x73, 0xE8, 0xFF, 0x3A, 0x7C, 0x01, 0x68, 0x6C, 0xA5, 0x56, 0xE0, 0xFA, 0xBF, 0xD7, 0x4A, 0xC8, 0xD1, 0xFD, 0xA4, 0xAD, 0x3D, 0x50, 0x3F, + 0x23, 0xB8, 0xEB, 0x8A, 0xEE, 0xC6, 0x33, 0x05, + }; + + sdsa_priv_key priv; + sdsa_pub_key pub; + sdsa_pub_key pub2; + u8 sig[32*2] = { 0 }; + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Sanity check on size for DSA. + * NOTE: the double parentheses are here to handle -Wunreachable-code + */ + if((NN_USABLE_MAX_BIT_LEN) < (4096)){ + ext_printf("Error: you seem to have compiled libecc with usable NN size < 4096, not suitable for DSA.\n"); + ext_printf(" => Please recompile libecc with EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\"\n"); + ext_printf(" This will increase usable NN for proper DSA up to 4096 bits.\n"); + ext_printf(" Then recompile the current examples with the same EXTRA_CFLAGS=\"-DUSER_NN_BIT_LEN=4096\" flag and execute again!\n"); + /* NOTE: ret = 0 here to pass self tests even if the library is not compatible */ + ret = 0; + goto err; + } + + + ret = sdsa_import_priv_key(&priv, p, sizeof(p), q, sizeof(q), g, sizeof(g), x, sizeof(x)); EG(ret, err); + ret = sdsa_import_pub_key(&pub, p, sizeof(p), q, sizeof(q), g, sizeof(g), y, sizeof(y)); EG(ret, err); + ret = sdsa_compute_pub_from_priv(&pub2, &priv); EG(ret, err); + + nn_print("y", &(pub2.y)); + + ret = sdsa_sign(&priv, msg, sizeof(msg)-1, nonce, sizeof(nonce), sig, sizeof(sig), HASH_SHA256); EG(ret, err); + + buf_print("sig", sig, sizeof(sig)); + + ret = sdsa_verify(&pub, msg, sizeof(msg)-1, sig, sizeof(sig), HASH_SHA256); + ext_printf("Signature result %d\n", ret); + +err: + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/sss/Makefile b/crypto/libecc/src/examples/sss/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sss/Makefile @@ -0,0 +1,44 @@ +ROOT_DIR=../../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +# Remove old includes with bad relative folders +CFLAGS := $(patsubst -I%,,$(CFLAGS)) +# Add proper includes +CFLAGS += -I$(ROOT_DIR)/include/ + +KEEP_SYMBOLS=--keep-global-symbol=sss_generate --keep-global-symbol=sss_combine --keep-global-symbol=sss_regenerate + +all: sss +ifeq ($(WITH_DYNAMIC_LIBS),1) +# If the user asked for dynamic libraries, compile versions of our binaries against them +all: sss_dyn +endif + +sss: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DSSS sss.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBSIGN) -o sss + +sss_lib: + # Compile libsss archive + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(LIB_CFLAGS) -c sss.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c + $(VERBOSE_MAKE)cp $(LIBSIGN) ./ + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(AR) xv libsign.a + # Make unnecessary symbols local + $(VERBOSE_MAKE)for f in `ls *.o`; do objcopy $(KEEP_SYMBOLS) $$f && echo "Processing $$f"; done + # Combine the archives + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(AR) $(AR_FLAGS) libsss.a *.o + @rm -f *.o libsign.a + +# If the user asked for dynamic libraries, compile versions of our binaries against them +ifeq ($(WITH_DYNAMIC_LIBS),1) +sss_dyn: + $(VERBOSE_MAKE)$(CROSS_COMPILE)$(CC) $(BIN_CFLAGS) -DSSS sss.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(BIN_LDFLAGS) $(LIBSIGN) -L$(BUILD_DIR) -lsign -o sss_dyn +endif + + +clean: + @rm -f *.o + @rm -f sss + @rm -f sss_dyn + +.PHONY: all clean 16 32 64 debug debug16 debug32 debug64 force_arch32 force_arch64 diff --git a/crypto/libecc/src/examples/sss/sss.h b/crypto/libecc/src/examples/sss/sss.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sss/sss.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SSS_H__ +#define __SSS_H__ + +/* NOTE: we redefine some attributes if they are not already defined */ +#ifndef ATTRIBUTE_PACKED + #ifdef __GNUC__ + #define ATTRIBUTE_PACKED __attribute__((packed)) + #else + #define ATTRIBUTE_PACKED + #endif +#endif +#ifndef ATTRIBUTE_WARN_UNUSED_RET + #ifdef __GNUC__ + #ifdef USE_WARN_UNUSED_RET + #define ATTRIBUTE_WARN_UNUSED_RET __attribute__((warn_unused_result)) + #else + #define ATTRIBUTE_WARN_UNUSED_RET + #endif + #else + #define ATTRIBUTE_WARN_UNUSED_RET + #endif +#endif + + +typedef enum { SSS_FALSE = 0, SSS_TRUE = 1 } boolean; + +/* The final secret size in bytes, corresponding to the + * size of an element in Fp with ~256 bit prime. + */ +#define SSS_SECRET_SIZE 32 + +/* Secrets and shares typedefs for "raw" SSS */ +typedef struct ATTRIBUTE_PACKED { + unsigned char secret[SSS_SECRET_SIZE]; +} sss_secret; +typedef struct ATTRIBUTE_PACKED { + /* Index x of the share on two byts (a short) */ + unsigned char index[2]; + /* Value of the share */ + unsigned char share[SSS_SECRET_SIZE]; +} _sss_raw_share; + +#define SSS_SESSION_ID_SIZE 16 +/* We use SHA-256 for HMAC, so the size is 32 bytes */ +#define SSS_HMAC_SIZE 32 + +/* Security wrapper for the secret for "secured" SSS */ +typedef struct ATTRIBUTE_PACKED { + _sss_raw_share raw_share; + /* 128 bits session id */ + unsigned char session_id[SSS_SESSION_ID_SIZE]; + unsigned char raw_share_hmac[SSS_HMAC_SIZE]; +} sss_share; + +/* SSS shares and secret generation: + * Inputs: + * - n: is the number of shares to generate + * - k: the quorum of shares to regenerate the secret (of course k <= n) + * - secret: the secret value when input_secret is set to 'true' + * Output: + * - shares: a pointer to the generated n shares + * - secret: the secret value when input_secret is set to 'false', this + * value being randomly generated + */ +ATTRIBUTE_WARN_UNUSED_RET int sss_generate(sss_share *shares, unsigned short k, unsigned short n, sss_secret *secret, boolean input_secret); + +/* SSS shares and secret combination + * Inputs: + * - k: the quorum of shares to regenerate the secret + * - shares: a pointer to the k shares + * Output: + * - secret: the secret value computed from the k shares + */ +ATTRIBUTE_WARN_UNUSED_RET int sss_combine(const sss_share *shares, unsigned short k, sss_secret *secret); + +/* SSS shares regeneration from existing shares + * Inputs: + * - shares: a pointer to the input k shares allowing the regeneration + * - n: is the number of shares to regenerate + * - k: the input shares (of course k <= n) + * Output: + * - shares: a pointer to the generated n shares (among which the k first are + * the ones provided as inputs) + * - secret: the recomputed secret value + */ +ATTRIBUTE_WARN_UNUSED_RET int sss_regenerate(sss_share *shares, unsigned short k, unsigned short n, sss_secret *secret); + +#endif /* __SSS_H__ */ diff --git a/crypto/libecc/src/examples/sss/sss.c b/crypto/libecc/src/examples/sss/sss.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sss/sss.c @@ -0,0 +1,772 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include "sss_private.h" +#include "sss.h" + +/* + * The purpose of this example is to implement the SSS + * (Shamir's Secret Sharing) scheme based on libecc arithmetic + * primitives. The scheme is implemented over a ~256 bit prime + * field. + * + * Secret sharing allows to combine some shares (at least k among n >= k) + * to regenerate a secret. The current code also ensures the integrity + * of the shares using HMAC. A maximum of (2**16 - 1) shares can be + * generated, and beware that the time complexity of generation heavily + * increases with k and n, and the time complexity of shares combination + * increases with k. + * + * Shares regeneration from exisiting ones is also offered although it + * is expensive in CPU cycles (as the Lagrange interpolation polynomials + * have to be evaluated for each existing share before computing new ones). + * + * !! DISCLAIMER !! + * ================ + * Some efforts have been put on providing a clean code and constant time + * as well as some SCA (side-channel attacks) resistance (e.g. blinding some + * operations manipulating secrets). However, no absolute guarantee can be claimed: + * use this code knowingly and at your own risks! + * + * Also, as for all other libecc primitives, beware of randomness sources. By default, + * the library uses the OS random sources (e.g. "/dev/urandom"), but the user + * is encouraged to adapt the ../external_deps/rand.c source file to combine + * multiple sources and add entropy there depending on the context where this + * code is integrated. The security level of all the cryptographic primitives + * heavily relies on random sources quality. + * + */ + +#ifndef GET_UINT16_BE +#define GET_UINT16_BE(n, b, i) \ +do { \ + (n) = (u16)( ((u16) (b)[(i) ]) << 8 ) \ + | (u16)( ((u16) (b)[(i) + 1]) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT16_BE +#define PUT_UINT16_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 1] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* The prime number we use: it is close to (2**256-1) but still stricly less + * than this value, hence a theoretical security of more than 255 bits but less than + * 256 bits. This prime p is used in the prime field of secp256k1, the "bitcoin" + * curve. + * + * This can be modified with another prime, beware however of the size + * of the prime to be in line with the shared secrets sizes, and also + * that all our shares and secret lie in Fp, and hence are < p, + * + * Although bigger primes could be used, beware that SSS shares recombination + * complexity is quadratic in the number of shares, yielding impractical + * computation time when the prime is too big. Also, some elements related to + * the share generation (_sss_derive_seed) must be adapated to keep proper entropy + * if the prime (size) is modified. + */ +static const u8 prime[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, +}; + +ATTRIBUTE_WARN_UNUSED_RET static int _sss_derive_seed(fp_t out, const u8 seed[SSS_SECRET_SIZE], u16 idx) +{ + int ret; + u8 hmac_val[SHA512_DIGEST_SIZE]; + u8 C[2]; + u8 len; + nn nn_val; + + /* Sanity check on sizes to avoid entropy loss through reduction biases */ + MUST_HAVE((SHA512_DIGEST_SIZE >= (2 * SSS_SECRET_SIZE)), ret, err); + + /* out must be initialized with a context */ + ret = fp_check_initialized(out); EG(ret, err); + + ret = local_memset(hmac_val, 0, sizeof(hmac_val)); EG(ret, err); + ret = local_memset(C, 0, sizeof(C)); EG(ret, err); + + /* Export our idx in big endian representation on two bytes */ + PUT_UINT16_BE(idx, C, 0); + + len = sizeof(hmac_val); + ret = hmac(seed, SSS_SECRET_SIZE, SHA512, C, sizeof(C), hmac_val, &len); EG(ret, err); + + ret = nn_init_from_buf(&nn_val, hmac_val, len); EG(ret, err); + /* Since we will put this in Fp, take the modulo */ + ret = nn_mod(&nn_val, &nn_val, &(out->ctx->p)); EG(ret, err); + /* Now import our reduced value in Fp as the result of the derivation */ + ret = fp_set_nn(out, &nn_val); + +err: + /* Cleanup secret data */ + IGNORE_RET_VAL(local_memset(hmac_val, 0, sizeof(hmac_val))); + IGNORE_RET_VAL(local_memset(C, 0, sizeof(C))); + nn_uninit(&nn_val); + + return ret; +} + +/***** Raw versions ***********************/ +/* SSS shares and secret generation */ +ATTRIBUTE_WARN_UNUSED_RET static int _sss_raw_generate(sss_share *shares, u16 k, u16 n, sss_secret *secret, boolean input_secret) +{ + fp_ctx ctx; + nn p; + fp a0, a, s; + fp exp, base, tmp; + fp blind, blind_inv; + u8 secret_seed[SSS_SECRET_SIZE]; + u16 idx_shift, num_shares; + int ret; + unsigned int i, j; + p.magic = WORD(0); + exp.magic = base.magic = tmp.magic = s.magic = a.magic = a0.magic = WORD(0); + blind.magic = blind_inv.magic = WORD(0); + + ret = local_memset(secret_seed, 0, sizeof(secret_seed)); EG(ret, err); + + MUST_HAVE((shares != NULL) && (secret != NULL), ret, err); + /* Sanity checks */ + MUST_HAVE((n <= (u16)(0xffff - 1)), ret, err); + MUST_HAVE((k <= n), ret, err); + MUST_HAVE((k >= 1), ret, err); + MUST_HAVE((SSS_SECRET_SIZE == sizeof(prime)), ret, err); + + /* Import our prime number and create the Fp context */ + ret = nn_init_from_buf(&p, prime, sizeof(prime)); EG(ret, err); + ret = fp_ctx_init_from_p(&ctx, &p); EG(ret, err); + + /* Generate a secret seed of the size of the secret that will be our base to + * generate the plolynomial coefficients. + */ + ret = get_random(secret_seed, sizeof(secret_seed)); EG(ret, err); + /* NOTE: although we could generate all our a[i] coefficients using our randomness + * source, we prefer to derive them from a single secret seed in order to optimize + * the storage space as our share generation algorithm needs to parse these a[i] multiple + * times. This time / memory tradeoff saves a lot of memory space for embedded contexts and + * avoids "malloc" usage (preserving the "no dynamic allocation" philosophy of libecc). + * + * Our secret seed is SSS_SECRET_SIZE long, so on the security side there should be no + * loss of strength/entropy. For each index i, a[i] is computed as follows: + * + * a[i] = HMAC(secret_seed, i) + * where the HMAC is interpreted as a value in Fp (i.e. modulo p), and i is represented + * as a string of 2 elements. The HMAC uses a hash function of at least twice the + * size of the secret to avoid biases in modular reduction. + */ + + /* a0 is either derived from the secret seed or taken from input if + * provided. + */ + ret = fp_init(&a0, &ctx); EG(ret, err); + if(input_secret == SSS_TRUE){ + /* Import the secret the user provides + * XXX: NOTE: the user shared secret MUST be in Fp! Since our prime is < (2**256 - 1), + * some 256 bit strings can be rejected here (namely those >= p and <= (2**256 - 1)). + */ + ret = fp_import_from_buf(&a0, secret->secret, SSS_SECRET_SIZE); EG(ret, err); + } + else{ + /* Generate the secret from our seed */ + ret = _sss_derive_seed(&a0, secret_seed, 0); EG(ret, err); + } + + /* Compute the shares P(x) for x in [idx_shift + 0, ..., idx_shift + n] (or + * [idx_shift + 0, ..., idx_shift + n + 1] to avoid the 0 index), + * with idx_shift a non-zero random index shift to avoid leaking the number of shares. + */ + ret = fp_init(&base, &ctx); EG(ret, err); + ret = fp_init(&exp, &ctx); EG(ret, err); + ret = fp_init(&tmp, &ctx); EG(ret, err); + ret = fp_init(&s, &ctx); EG(ret, err); + ret = fp_init(&a, &ctx); EG(ret, err); + /* Get a random blind mask and invert it */ + ret = fp_get_random(&blind, &ctx); EG(ret, err); + ret = fp_init(&blind_inv, &ctx); EG(ret, err); + ret = fp_inv(&blind_inv, &blind); EG(ret, err); + /* Generate a non-zero random index base for x to avoid leaking + * the number of shares. We could use a static sequence from x = 1 to n + * but this would leak some information to the participants about the number + * of shares (e.g. if a participant gets the share with x = 4, she surely knows + * that n >= 4). To avoid the leak we randomize the base value of the index where + * we begin our x. + */ + idx_shift = 0; + while(idx_shift == 0){ + ret = get_random((u8*)&idx_shift, sizeof(idx_shift)); EG(ret, err); + } + num_shares = 0; + i = 0; + while(num_shares < n){ + _sss_raw_share *cur_share_i = &(shares[num_shares].raw_share); + u16 curr_idx = (u16)(idx_shift + i); + if(curr_idx == 0){ + /* Skip the index 0 specific case */ + i++; + continue; + } + /* Set s[i] to the a[0] as blinded initial value */ + ret = fp_mul(&s, &blind, &a0); EG(ret, err); + /* Get a random base x as u16 for share index */ + ret = fp_set_word_value(&base, (word_t)curr_idx); EG(ret, err); + /* Set the exp to 1 */ + ret = fp_one(&exp); EG(ret, err); + for(j = 1; j < k; j++){ + /* Compute x**j by iterative multiplications */ + ret = fp_mul_monty(&exp, &exp, &base); EG(ret, err); + /* Compute our a[j] coefficient */ + ret = _sss_derive_seed(&a, secret_seed, (u16)j); EG(ret, err); + /* Blind a[j] */ + ret = fp_mul_monty(&a, &a, &blind); EG(ret, err); + /* NOTE1: actually, the real a[j] coefficients are _sss_derive_seed(secret_seed, j) + * multiplied by some power of r^-1 (the Montgomery constant), but this is OK as + * we need any random values (computable from the secret seed) here. We use this "trick" + * to be able to use our more performant redcified versions of Fp multiplication. + * + * NOTE2: this trick makes also this generation not deterministic with the same seed + * on binaries with different WORD sizes (16, 32, 64 bits) as the r Montgomery constant will + * differ depending on this size. However, this is not really an issue per se for our SSS + * as we are in our generation primitive and the a[j] coefficients are expected to be + * random (the only drawback is that deterministic test vectors will not be consistent + * across WORD sizes). + */ + /* Accumulate */ + ret = fp_mul_monty(&tmp, &exp, &a); EG(ret, err); + ret = fp_add(&s, &s, &tmp); EG(ret, err); + } + /* Export the computed share */ + PUT_UINT16_BE(curr_idx, (u8*)&(cur_share_i->index), 0); + /* Unblind */ + ret = fp_mul(&s, &s, &blind_inv); EG(ret, err); + ret = fp_export_to_buf(cur_share_i->share, SSS_SECRET_SIZE, &s); EG(ret, err); + num_shares++; + i++; + } + /* The secret is a[0] */ + ret = fp_export_to_buf(secret->secret, SSS_SECRET_SIZE, &a0); + +err: + /* We can throw away our secret seed now that the shares have + * been generated. + */ + IGNORE_RET_VAL(local_memset(secret_seed, 0, sizeof(secret_seed))); + IGNORE_RET_VAL(local_memset(&ctx, 0, sizeof(ctx))); + nn_uninit(&p); + fp_uninit(&a0); + fp_uninit(&a); + fp_uninit(&s); + fp_uninit(&base); + fp_uninit(&exp); + fp_uninit(&tmp); + fp_uninit(&blind); + fp_uninit(&blind_inv); + + return ret; +} + +/* SSS helper to compute Lagrange interpolation on an input value. + * - k is the number of shares pointed by the shares pointer + * - secret is the computed secret + * - val is the 'index' on which the Lagrange interpolation must be computed, i.e. + * the idea is to have using Lagrage formulas the value f(val) where f is our polynomial. Of course + * the proper value can only be computed if enough shares k are provided (the interpolation + * does not hold in other cases and the result will be an incorrect value) + */ +ATTRIBUTE_WARN_UNUSED_RET static int _sss_raw_lagrange(const sss_share *shares, u16 k, sss_secret *secret, u16 val) +{ + fp_ctx ctx; + nn p; + fp s, x, y; + fp x_i, x_j, tmp, tmp2; + fp blind, blind_inv, r_inv; + int ret; + unsigned int i, j; + p.magic = WORD(0); + x_i.magic = x_j.magic = tmp.magic = tmp2.magic = s.magic = y.magic = x.magic = WORD(0); + blind.magic = blind_inv.magic = r_inv.magic = WORD(0); + + MUST_HAVE((shares != NULL) && (secret != NULL), ret, err); + /* Sanity checks */ + MUST_HAVE((k >= 1), ret, err); + MUST_HAVE((SSS_SECRET_SIZE == sizeof(prime)), ret, err); + + /* Import our prime number and create the Fp context */ + ret = nn_init_from_buf(&p, prime, sizeof(prime)); EG(ret, err); + ret = fp_ctx_init_from_p(&ctx, &p); EG(ret, err); + + /* Recombine our shared secrets */ + ret = fp_init(&s, &ctx); EG(ret, err); + ret = fp_init(&y, &ctx); EG(ret, err); + ret = fp_init(&x_i, &ctx); EG(ret, err); + ret = fp_init(&x_j, &ctx); EG(ret, err); + ret = fp_init(&tmp, &ctx); EG(ret, err); + ret = fp_init(&tmp2, &ctx); EG(ret, err); + if(val != 0){ + /* NOTE: we treat the case 'val = 0' in a specific case for + * optimization. This optimization is of interest since computing + * f(0) (where f(.) is our polynomial) is the formula for getting the + * SSS secret (which happens to be the constant of degree 0 of the + * polynomial). + */ + ret = fp_init(&x, &ctx); EG(ret, err); + ret = fp_set_word_value(&x, (word_t)val); EG(ret, err); + } + /* Get a random blind mask and invert it */ + ret = fp_get_random(&blind, &ctx); EG(ret, err); + ret = fp_init(&blind_inv, &ctx); EG(ret, err); + ret = fp_inv(&blind_inv, &blind); EG(ret, err); + /* Perform the computation of r^-1 to optimize our multiplications using Montgomery + * multiplication in the main loop. + */ + ret = fp_init(&r_inv, &ctx); EG(ret, err); + ret = fp_set_nn(&r_inv, &(ctx.r)); EG(ret, err); + ret = fp_inv(&r_inv, &r_inv); EG(ret, err); + /* Proceed with the interpolation */ + for(i = 0; i < k; i++){ + u16 curr_idx; + const _sss_raw_share *cur_share_i = &(shares[i].raw_share); + /* Import s[i] */ + ret = fp_import_from_buf(&s, cur_share_i->share, SSS_SECRET_SIZE); EG(ret, err); + /* Blind s[i] */ + ret = fp_mul_monty(&s, &s, &blind); EG(ret, err); + /* Get the index */ + GET_UINT16_BE(curr_idx, (const u8*)&(cur_share_i->index), 0); + ret = fp_set_word_value(&x_i, (word_t)(curr_idx)); EG(ret, err); + /* Initialize multiplication with "one" (actually Montgomery r^-1 for multiplication optimization) */ + ret = fp_copy(&tmp2, &r_inv); EG(ret, err); + /* Compute the product for all k other than i + * NOTE: we use fp_mul in its redcified version as the multiplication by r^-1 is + * cancelled by the fraction of (x_j - x) * r^-1 / (x_j - x_i) * r^-1 = (x_j - x) / (x_j - x_i) + */ + for(j = 0; j < k; j++){ + const _sss_raw_share *cur_share_j = &(shares[j].raw_share); + GET_UINT16_BE(curr_idx, (const u8*)&(cur_share_j->index), 0); + ret = fp_set_word_value(&x_j, (word_t)(curr_idx)); EG(ret, err); + if(j != i){ + if(val != 0){ + ret = fp_sub(&tmp, &x_j, &x); EG(ret, err); + ret = fp_mul_monty(&s, &s, &tmp); EG(ret, err); + } + else{ + /* NOTE: we treat the case 'val = 0' in a specific case for + * optimization. This optimization is of interest since computing + * f(0) (where f(.) is our polynomial) is the formula for getting the + * SSS secret (which happens to be the constant of degree 0 of the + * polynomial). + */ + ret = fp_mul_monty(&s, &s, &x_j); EG(ret, err); + } + ret = fp_sub(&tmp, &x_j, &x_i); EG(ret, err); + ret = fp_mul_monty(&tmp2, &tmp2, &tmp); EG(ret, err); + } + } + /* Invert all the (x_j - x_i) poducts */ + ret = fp_inv(&tmp, &tmp2); EG(ret, err); + ret = fp_mul_monty(&s, &s, &tmp); EG(ret, err); + /* Accumulate in secret */ + ret = fp_add(&y, &y, &s); EG(ret, err); + } + /* Unblind y */ + ret = fp_redcify(&y, &y); EG(ret, err); + ret = fp_mul(&y, &y, &blind_inv); EG(ret, err); + /* We should have our secret in y */ + ret = fp_export_to_buf(secret->secret, SSS_SECRET_SIZE, &y); + +err: + IGNORE_RET_VAL(local_memset(&ctx, 0, sizeof(ctx))); + nn_uninit(&p); + fp_uninit(&s); + fp_uninit(&y); + fp_uninit(&x_i); + fp_uninit(&x_j); + fp_uninit(&tmp); + fp_uninit(&tmp2); + fp_uninit(&blind); + fp_uninit(&blind_inv); + fp_uninit(&r_inv); + if(val != 0){ + fp_uninit(&x); + } + + return ret; +} + + +/* SSS shares and secret combination */ +ATTRIBUTE_WARN_UNUSED_RET static int _sss_raw_combine(const sss_share *shares, u16 k, sss_secret *secret) +{ + return _sss_raw_lagrange(shares, k, secret, 0); +} + +/***** Secure versions (public APIs) ***********************/ +/* SSS shares and secret generation: + * Inputs: + * - n: is the number of shares to generate + * - k: the quorum of shares to regenerate the secret (of course k <= n) + * - secret: the secret value when input_secret is set to 'true' + * Output: + * - shares: a pointer to the generated n shares + * - secret: the secret value when input_secret is set to 'false', this + * value being randomly generated + */ +int sss_generate(sss_share *shares, unsigned short k, unsigned short n, sss_secret *secret, boolean input_secret) +{ + int ret; + unsigned int i; + u8 len; + u8 session_id[SSS_SESSION_ID_SIZE]; + + ret = local_memset(session_id, 0, sizeof(session_id)); EG(ret, err); + + /* Generate raw shares */ + ret = _sss_raw_generate(shares, k, n, secret, input_secret); EG(ret, err); + + /* Sanity check */ + MUST_HAVE((SSS_HMAC_SIZE == sizeof(shares[0].raw_share_hmac)), ret, err); + MUST_HAVE((SHA256_DIGEST_SIZE >= sizeof(shares[0].raw_share_hmac)), ret, err); + + /* Generate a random session ID */ + ret = get_random(session_id, sizeof(session_id)); EG(ret, err); + + /* Compute the authenticity seal for each share with HMAC */ + for(i = 0; i < n; i++){ + _sss_raw_share *cur_share = &(shares[i].raw_share); + u8 *cur_id = (u8*)&(shares[i].session_id); + u8 *cur_share_hmac = (u8*)&(shares[i].raw_share_hmac); + /* NOTE: we 'abuse' casts here for shares[i].raw_share to u8*, but this should be OK since + * our structures are packed. + */ + const u8 *inputs[3] = { (const u8*)cur_share, cur_id, NULL }; + const u32 ilens[3] = { sizeof(*cur_share), SSS_SESSION_ID_SIZE, 0 }; + + /* Copy the session ID */ + ret = local_memcpy(cur_id, session_id, SSS_SESSION_ID_SIZE); EG(ret, err); + + len = SSS_HMAC_SIZE; + ret = hmac_scattered((const u8*)secret, SSS_SECRET_SIZE, SHA256, inputs, ilens, cur_share_hmac, &len); EG(ret, err); + } + +err: + IGNORE_RET_VAL(local_memset(session_id, 0, sizeof(session_id))); + + return ret; +} + +/* SSS shares and secret combination + * Inputs: + * - k: the quorum of shares to regenerate the secret + * - shares: a pointer to the k shares + * Output: + * - secret: the secret value computed from the k shares + */ +int sss_combine(const sss_share *shares, unsigned short k, sss_secret *secret) +{ + int ret, cmp; + unsigned int i; + u8 hmac_val[SSS_HMAC_SIZE]; + u8 len; + + ret = local_memset(hmac_val, 0, sizeof(hmac_val)); EG(ret, err); + + /* Recombine raw shares */ + ret = _sss_raw_combine(shares, k, secret); EG(ret, err); + + /* Compute and check the authenticity seal for each HMAC */ + for(i = 0; i < k; i++){ + const _sss_raw_share *cur_share = &(shares[i].raw_share); + const u8 *cur_id = (const u8*)&(shares[i].session_id); + const u8 *cur_id0 = (const u8*)&(shares[0].session_id); + const u8 *cur_share_hmac = (const u8*)&(shares[i].raw_share_hmac); + /* NOTE: we 'abuse' casts here for shares[i].raw_share to u8*, but this should be OK since + * our structures are packed. + */ + const u8 *inputs[3] = { (const u8*)cur_share, cur_id, NULL }; + const u32 ilens[3] = { sizeof(*cur_share), SSS_SESSION_ID_SIZE, 0 }; + + /* Check that all our shares have the same session ID, return an error otherwise */ + ret = are_equal(cur_id, cur_id0, SSS_SESSION_ID_SIZE, &cmp); EG(ret, err); + if(!cmp){ +#ifdef VERBOSE + ext_printf("[-] sss_combine error for share %d / %d: session ID is not OK!\n", i, k); +#endif + ret = -1; + goto err; + } + + len = sizeof(hmac_val); + ret = hmac_scattered((const u8*)secret, SSS_SECRET_SIZE, SHA256, inputs, ilens, hmac_val, &len); EG(ret, err); + + /* Check the HMAC */ + ret = are_equal(hmac_val, cur_share_hmac, len, &cmp); EG(ret, err); + if(!cmp){ +#ifdef VERBOSE + ext_printf("[-] sss_combine error for share %d / %d: HMAC is not OK!\n", i, k); +#endif + ret = -1; + goto err; + } + } + +err: + IGNORE_RET_VAL(local_memset(hmac_val, 0, sizeof(hmac_val))); + + return ret; +} + +/* SSS shares regeneration from existing shares + * Inputs: + * - shares: a pointer to the input k shares allowing the regeneration + * - n: is the number of shares to regenerate + * - k: the input shares (of course k <= n) + * Output: + * - shares: a pointer to the generated n shares (among which the k first are + * the ones provided as inputs) + * - secret: the recomputed secret value + */ +int sss_regenerate(sss_share *shares, unsigned short k, unsigned short n, sss_secret *secret) +{ + int ret, cmp; + unsigned int i; + u16 max_idx, num_shares; + u8 hmac_val[SSS_HMAC_SIZE]; + u8 len; + + /* Sanity check */ + MUST_HAVE((n <= (u16)(0xffff - 1)), ret, err); + MUST_HAVE((n >= k), ret, err); + + ret = local_memset(hmac_val, 0, sizeof(hmac_val)); EG(ret, err); + + /* Compute the secret */ + ret = _sss_raw_lagrange(shares, k, secret, 0); EG(ret, err); + /* Check the authenticity of our shares */ + for(i = 0; i < k; i++){ + _sss_raw_share *cur_share = &(shares[i].raw_share); + u8 *cur_id = (u8*)&(shares[i].session_id); + u8 *cur_id0 = (u8*)&(shares[0].session_id); + u8 *cur_share_hmac = (u8*)&(shares[i].raw_share_hmac); + /* NOTE: we 'abuse' casts here for shares[i].raw_share to u8*, but this should be OK since + * our structures are packed. + */ + const u8 *inputs[3] = { (const u8*)cur_share, cur_id, NULL }; + const u32 ilens[3] = { sizeof(*cur_share), SSS_SESSION_ID_SIZE, 0 }; + + /* Check that all our shares have the same session ID, return an error otherwise */ + ret = are_equal(cur_id, cur_id0, SSS_SESSION_ID_SIZE, &cmp); EG(ret, err); + if(!cmp){ +#ifdef VERBOSE + ext_printf("[-] sss_regenerate error for share %d / %d: session ID is not OK!\n", i, k); +#endif + ret = -1; + goto err; + } + + len = sizeof(hmac_val); + /* NOTE: we 'abuse' cast here for secret to (const u8*), but this should be OK since our + * structures are packed. + */ + ret = hmac_scattered((const u8*)secret, SSS_SECRET_SIZE, SHA256, inputs, ilens, hmac_val, &len); EG(ret, err); + ret = are_equal(hmac_val, cur_share_hmac, len, &cmp); EG(ret, err); + if(!cmp){ +#ifdef VERBOSE + ext_printf("[-] sss_regenerate error for share %d / %d: HMAC is not OK!\n", i, k); +#endif + ret = -1; + goto err; + } + } + + /* Our secret regeneration consists of determining the maximum index, and + * proceed with Lagrange interpolation on new values. + */ + max_idx = 0; + for(i = 0; i < k; i++){ + u16 curr_idx; + GET_UINT16_BE(curr_idx, (u8*)&(shares[i].raw_share.index), 0); + if(curr_idx > max_idx){ + max_idx = curr_idx; + } + } + /* Now regenerate as many shares as we need */ + num_shares = 0; + i = k; + while(num_shares < (n - k)){ + _sss_raw_share *cur_share = &(shares[k + num_shares].raw_share); + u8 *cur_id = (u8*)&(shares[k + num_shares].session_id); + u8 *cur_id0 = (u8*)&(shares[0].session_id); + u8 *cur_share_hmac = (u8*)&(shares[k + num_shares].raw_share_hmac); + u16 curr_idx; + /* NOTE: we 'abuse' casts here for shares[i].raw_share.share to sss_secret*, but this should be OK since + * our shares[i].raw_share.share is a SSS_SECRET_SIZE as the sss_secret.secret type encapsulates and our + * structures are packed. + */ + const u8 *inputs[3] = { (const u8*)cur_share, cur_id, NULL }; + const u32 ilens[3] = { sizeof(*cur_share), SSS_SESSION_ID_SIZE, 0 }; + + /* Skip the index = 0 case */ + curr_idx = (u16)(max_idx + (u16)(i - k + 1)); + if(curr_idx == 0){ + i++; + continue; + } + + /* Copy our session ID */ + ret = local_memcpy(cur_id, cur_id0, SSS_SESSION_ID_SIZE); EG(ret, err); + + ret = _sss_raw_lagrange(shares, k, (sss_secret*)(cur_share->share), curr_idx); EG(ret, err); + PUT_UINT16_BE(curr_idx, (u8*)&(cur_share->index), 0); + + /* Compute the HMAC */ + len = SSS_HMAC_SIZE; + ret = hmac_scattered((const u8*)secret, SSS_SECRET_SIZE, SHA256, inputs, ilens, cur_share_hmac, &len); EG(ret, err); + num_shares++; + i++; + } + +err: + IGNORE_RET_VAL(local_memset(hmac_val, 0, sizeof(hmac_val))); + + return ret; +} + + +/********* main test program for SSS *************/ +#ifdef SSS +#include + +#define K 50 +#define N 150 +#define MAX_N 200 + +int main(int argc, char *argv[]) +{ + int ret = 0; + unsigned int i; + sss_share shares[MAX_N]; + sss_share shares_[MAX_N]; + sss_secret secret; + + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /* Generate N shares for SSS with at least K shares OK among N */ + ext_printf("[+] Generating the secrets %d / %d, call should be OK\n", K, N); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + /* NOTE: 'false' here means that we let the library generate the secret randomly */ + ret = sss_generate(shares, K, N, &secret, SSS_FALSE); + if(ret){ + ext_printf(" [X] Error: sss_generate error\n"); + goto err; + } + else{ + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); EG(ret, err); + } + /* Shuffle shares */ + for(i = 0; i < N; i++){ + shares_[i] = shares[N - 1 - i]; + } + + /* Combine (k-1) shares: this call should trigger an ERROR */ + ext_printf("[+] Combining the secrets with less shares: call should trigger an error\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + ret = sss_combine(shares_, K - 1, &secret); + if (ret) { + ext_printf(" [X] Error: sss_combine error\n"); + } else{ + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + + /* Combine k shares: this call should be OK and recombine the initial + * secret + */ + ext_printf("[+] Combining the secrets with minimum shares: call should be OK\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + ret = sss_combine(shares_, K, &secret); + if (ret) { + ext_printf(" [X] Error: sss_combine error\n"); + goto err; + } else { + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + + /* Combine k shares: this call should be OK and recombine the initial + * secret + */ + ext_printf("[+] Combining the secrets with more shares: call should be OK\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + ret = sss_combine(shares_, K + 1, &secret); + if (ret) { + ext_printf(" [X] Error: sss_combine error\n"); + goto err; + } else { + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + + /* Combine with a corrupted share: call should trigger an error */ + ext_printf("[+] Combining the secrets with more shares but one corrupted: call should trigger an error\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + shares_[K].raw_share.share[0] = 0x00; + ret = sss_combine(shares_, K + 1, &secret); + if (ret) { + ext_printf(" [X] Error: sss_combine error\n"); + } else { + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + + /* Regenerate more shares! call should be OK */ + ext_printf("[+] Regenerating more shares: call should be OK\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + ret = sss_regenerate(shares, K, MAX_N, &secret); EG(ret, err); + if (ret) { + ext_printf(" [X] Error: sss_regenerate error\n"); + goto err; + } else { + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + /* Shuffle shares */ + for(i = 0; i < MAX_N; i++){ + shares_[i] = shares[MAX_N - 1 - i]; + } + + /* Combine newly generated shares: call should be OK */ + ext_printf("[+] Combining the secrets with newly generated shares: call should be OK\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + ret = sss_combine(shares_, K, &secret); + if (ret) { + ext_printf(" [X] Error: sss_combine error\n"); + goto err; + } else { + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + + /* Modify the session ID of one of the shares: call should trigger an error */ + ext_printf("[+] Combining the secrets with newly generated shares and a bad session ID: call should trigger an error\n"); + ret = local_memset(&secret, 0x00, sizeof(secret)); EG(ret, err); + shares_[1].session_id[0] = 0x00; + ret = sss_combine(shares_, K, &secret); + if (ret) { + ext_printf(" [X] Error: sss_combine error\n"); + } else { + buf_print(" secret", (u8*)&secret, SSS_SECRET_SIZE); + } + + ret = 0; + +err: + return ret; +} +#endif diff --git a/crypto/libecc/src/examples/sss/sss_private.h b/crypto/libecc/src/examples/sss/sss_private.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/examples/sss/sss_private.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __SSS_PRIVATE_H__ +#define __SSS_PRIVATE_H__ + +/* NOTE: this is a header that is private to SSS + * and should not be included elsewhare to avoid exposing + * unnecessary APIs and symbols when only using SSS. + */ + +/* NOTE: we need the arithmetic library for SSS as all + * operations will take place in Fp with p a public known + * prime number. + */ +#include +#include +/* We use HMAC */ +#include +/* We generate random */ +#include + +#endif /* __SSS_PRIVATE_H__ */ diff --git a/crypto/libecc/src/external_deps/meson.build b/crypto/libecc/src/external_deps/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/external_deps/meson.build @@ -0,0 +1,5 @@ +external_deps_src = files( + 'print.c', + 'rand.c', + 'time.c', +) diff --git a/crypto/libecc/src/external_deps/print.c b/crypto/libecc/src/external_deps/print.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/external_deps/print.c @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#ifdef WITH_STDLIB +#include +#include +void ext_printf(const char *format, ...) +{ + va_list arglist; + + va_start(arglist, format); + vprintf(format, arglist); + va_end(arglist); +} +#else +#error "print.c: you have to implement ext_printf" +#endif diff --git a/crypto/libecc/src/external_deps/rand.c b/crypto/libecc/src/external_deps/rand.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/external_deps/rand.c @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* Unix and compatible case (including macOS) */ +#if defined(WITH_STDLIB) && (defined(__unix__) || defined(__APPLE__)) +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* + * Copy file content to buffer. Return 0 on success, i.e. if the request + * size has been read and copied to buffer and -1 otherwise. + */ +ATTRIBUTE_WARN_UNUSED_RET static int fimport(unsigned char *buf, u16 buflen, + const char *path) +{ + u16 rem = buflen, copied = 0; + ssize_t ret; + int fd; + + if ((buf == NULL) || (path == NULL)) { + ret = -1; + goto err; + } + + fd = open(path, O_RDONLY); + if (fd == -1) { + printf("Unable to open input file %s\n", path); + ret = -1; + goto err; + } + + while (rem) { + ret = (int)read(fd, buf + copied, rem); + if (ret <= 0) { + break; + } else { + rem = (u16)(rem - ret); + copied = (u16)(copied + ret); + } + } + + if (close(fd)) { + printf("Unable to close input file %s\n", path); + ret = -1; + goto err; + } + + ret = (copied == buflen) ? 0 : -1; + +err: + return (int)ret; +} + +int get_random(unsigned char *buf, u16 len) +{ + return fimport(buf, len, "/dev/urandom"); +} + +/* Windows case */ +#elif defined(WITH_STDLIB) && defined(__WIN32__) +#include +#include + +int get_random(unsigned char *buf, u16 len) +{ + int ret; + HCRYPTPROV hCryptProv = 0; + + if (CryptAcquireContext(&hCryptProv, NULL, NULL, + PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) == FALSE) { + ret = -1; + goto err; + } + + if (CryptGenRandom(hCryptProv, len, buf) == FALSE) { + CryptReleaseContext(hCryptProv, 0); + ret = -1; + goto err; + } + CryptReleaseContext(hCryptProv, 0); + ret = 0; + +err: + return ret; +} + +/* No platform detected, the user must provide an implementation! */ +#else +/* WARNING: when providing/implementing the get_random function, one must: + * - Use a proper entropy source with a TRNG (True Random Number Generator) + * basis and clean PRNG (Pseudo-Random Number Generator) post-processing + * when needed. + * - Use a non-leaking generator in contexts where attackers that have access + * to side channels are a plausible threat (a process in an OS sharing memory + * and caches with other possibly malicious processes, a microcontroller + * that can be observed using EM probes or power consumtion, ...). + */ +#error "rand.c: you have to implement get_random with a proper entropy source!" +#endif diff --git a/crypto/libecc/src/external_deps/time.c b/crypto/libecc/src/external_deps/time.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/external_deps/time.c @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#include + +/* Unix and compatible case (including macOS) */ +#if defined(WITH_STDLIB) && (defined(__unix__) || defined(__APPLE__)) +#include +#include + +int get_ms_time(u64 *time) +{ + struct timeval tv; + int ret; + + if (time == NULL) { + ret = -1; + goto err; + } + + ret = gettimeofday(&tv, NULL); + if (ret < 0) { + ret = -1; + goto err; + } + + (*time) = (u64)(((tv.tv_sec) * 1000) + ((tv.tv_usec) / 1000)); + ret = 0; + +err: + return ret; +} + +/* Windows case */ +#elif defined(WITH_STDLIB) && defined(__WIN32__) +#include +#include +int get_ms_time(u64 *time) +{ + int ret; + SYSTEMTIME st; + + if (time == NULL) { + ret = -1; + goto err; + } + + GetSystemTime(&st); + (*time) = (u64)((((st.wMinute * 60) + st.wSecond) * 1000) + st.wMilliseconds); + ret = 0; + +err: + return ret; +} + +/* No platform detected, the used must provide an implementation! */ +#else +#error "time.c: you have to implement get_ms_time()" +#endif diff --git a/crypto/libecc/src/fp/fp.c b/crypto/libecc/src/fp/fp.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp.c @@ -0,0 +1,470 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include +/* Include the "internal" header as we use non public API here */ +#include "../nn/nn_div.h" + +#define FP_CTX_MAGIC ((word_t)(0x114366fc34955125ULL)) + +/* + * Verify given Fp context has been correctly initialized, by checking + * given pointer is valid and structure's magic has expected value. + * Returns 0 on success, -1 on error. + */ +int fp_ctx_check_initialized(fp_ctx_src_t ctx) +{ + int ret = 0; + + MUST_HAVE(((ctx != NULL) && (ctx->magic == FP_CTX_MAGIC)), ret, err); + +err: + return ret; +} + +/* + * Initialize pointed Fp context structure from given parameters: + * - p: pointer to the prime defining Fp + * - p_bitlen: the bit length of p + * - r, r_square, mpinv: pointers to the Montgomery parameters r, + * (2^|p|) mod p), r^2 mod p and -p^-1 mod B (where B is the + * size in bits of words, as defined for the project, 16, 32 + * or 64). + * - p_shift, p_normalized and p_reciprocal are precomputed + * division parameters (see ec_params_external.h for details). + * + * Returns 0 on success, -1 on error. + */ +int fp_ctx_init(fp_ctx_t ctx, nn_src_t p, bitcnt_t p_bitlen, + nn_src_t r, nn_src_t r_square, + word_t mpinv, + bitcnt_t p_shift, nn_src_t p_normalized, word_t p_reciprocal) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + ret = nn_check_initialized(p); EG(ret, err); + ret = nn_check_initialized(r); EG(ret, err); + ret = nn_check_initialized(r_square); EG(ret, err); + ret = nn_check_initialized(p_normalized); EG(ret, err); + + ret = nn_copy(&(ctx->p), p); EG(ret, err); + ctx->p_bitlen = p_bitlen; + ctx->mpinv = mpinv; + ctx->p_shift = p_shift; + ctx->p_reciprocal = p_reciprocal; + ret = nn_copy(&(ctx->p_normalized), p_normalized); EG(ret, err); + ret = nn_copy(&(ctx->r), r); EG(ret, err); + ret = nn_copy(&(ctx->r_square), r_square); EG(ret, err); + ctx->magic = FP_CTX_MAGIC; + +err: + return ret; +} + +/* + * Initialize pointed Fp context structure only from the prime p. + * The Montgomery related parameters are dynamically computed + * using our redc1 helpers from the NN layer. Returns 0 on success, + * -1 on error. + */ +int fp_ctx_init_from_p(fp_ctx_t ctx, nn_src_t p_in) +{ + nn p, r, r_square, p_normalized; + word_t mpinv, p_shift, p_reciprocal; + bitcnt_t p_bitlen; + int ret; + p.magic = r.magic = r_square.magic = p_normalized.magic = WORD(0); + + MUST_HAVE((ctx != NULL), ret, err); + ret = nn_check_initialized(p_in); EG(ret, err); + + ret = nn_init(&p, 0); EG(ret, err); + ret = nn_copy(&p, p_in); EG(ret, err); + ret = nn_init(&r, 0); EG(ret, err); + ret = nn_init(&r_square, 0); EG(ret, err); + ret = nn_init(&p_normalized, 0); EG(ret, err); + + /* + * In order for our reciprocal division routines to work, it is + * expected that the bit length (including leading zeroes) of + * input prime p is >= 2 * wlen where wlen is the number of bits + * of a word size. + */ + if (p.wlen < 2) { + ret = nn_set_wlen(&p, 2); EG(ret, err); + } + + ret = nn_compute_redc1_coefs(&r, &r_square, &p, &mpinv); EG(ret, err); + ret = nn_compute_div_coefs(&p_normalized, &p_shift, &p_reciprocal, &p); EG(ret, err); + ret = nn_bitlen(p_in, &p_bitlen); EG(ret, err); + ret = fp_ctx_init(ctx, &p, p_bitlen, &r, &r_square, + mpinv, (bitcnt_t)p_shift, &p_normalized, p_reciprocal); + +err: + nn_uninit(&p); + nn_uninit(&r); + nn_uninit(&r_square); + nn_uninit(&p_normalized); + + return ret; +} + +#define FP_MAGIC ((word_t)(0x14e96c8ab28221efULL)) + +/* + * Verify given Fp element has been correctly intialized, by checking + * given pointer is valid and structure magic has expected value. + * Returns 0 on success, -1 on error. + */ +int fp_check_initialized(fp_src_t in) +{ + int ret = 0; + + MUST_HAVE(((in != NULL) && (in->magic == FP_MAGIC) && (in->ctx != NULL) && (in->ctx->magic == FP_CTX_MAGIC)), ret, err); + +err: + return ret; +} + +/* + * Initialilize pointed Fp element structure with given Fp context. Initial + * value of Fp element is set to 0.Returns 0 on success, -1 on error. + */ +int fp_init(fp_t in, fp_ctx_src_t fpctx) +{ + int ret; + + MUST_HAVE((in != NULL), ret, err); + + ret = fp_ctx_check_initialized(fpctx); EG(ret, err); + ret = nn_init(&(in->fp_val), (u16)((fpctx->p.wlen) * WORD_BYTES)); EG(ret, err); + + in->ctx = fpctx; + in->magic = FP_MAGIC; + +err: + return ret; +} + +/* + * Same as above but providing the element an initial value given by 'buf' + * content (in big endian order) of size 'buflen'. Content of 'buf' must + * be less than p. Returns 0 on success, -1 on error. + */ +int fp_init_from_buf(fp_t in, fp_ctx_src_t fpctx, const u8 *buf, u16 buflen) +{ + int ret; + + ret = fp_ctx_check_initialized(fpctx); EG(ret, err); + ret = fp_init(in, fpctx); EG(ret, err); + ret = fp_import_from_buf(in, buf, buflen); + +err: + return ret; +} + +/* + * Uninitialize pointed Fp element to prevent further use (magic field + * in the structure is zeroized) and zeroize associated storage space. + * Note that the Fp context pointed to by Fp element (passed during + * init) is left untouched. + */ +void fp_uninit(fp_t in) +{ + if((in != NULL) && (in->magic == FP_MAGIC) && (in->ctx != NULL)){ + nn_uninit(&in->fp_val); + + in->ctx = NULL; + in->magic = WORD(0); + } + + return; +} + +/* + * Set value of given Fp element to that of given nn. The value of + * given nn must be less than that of p, i.e. no reduction modulo + * p is performed by the function. Returns 0 on success, -1 on error. + */ +int fp_set_nn(fp_t out, nn_src_t in) +{ + int ret, cmp; + + ret = fp_check_initialized(out); EG(ret, err); + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_copy(&(out->fp_val), in); EG(ret, err); + ret = nn_cmp(&(out->fp_val), &(out->ctx->p), &cmp); EG(ret, err); + + MUST_HAVE((cmp < 0), ret, err); + + /* Set the wlen to the length of p */ + ret = nn_set_wlen(&(out->fp_val), out->ctx->p.wlen); + +err: + return ret; +} + +/* + * Set 'out' to the element 0 of Fp (neutral element for addition). Returns 0 + * on success, -1 on error. + */ +int fp_zero(fp_t out) +{ + int ret; + + ret = fp_check_initialized(out); EG(ret, err); + ret = nn_set_word_value(&(out->fp_val), 0); EG(ret, err); + /* Set the wlen to the length of p */ + ret = nn_set_wlen(&(out->fp_val), out->ctx->p.wlen); + +err: + return ret; +} + +/* + * Set out to the element 1 of Fp (neutral element for multiplication). Returns + * 0 on success, -1 on error. + */ +int fp_one(fp_t out) +{ + int ret, isone; + word_t val; + + ret = fp_check_initialized(out); EG(ret, err); + /* One is indeed 1 except if p = 1 where it is 0 */ + ret = nn_isone(&(out->ctx->p), &isone); EG(ret, err); + + val = isone ? WORD(0) : WORD(1); + + ret = nn_set_word_value(&(out->fp_val), val); EG(ret, err); + + /* Set the wlen to the length of p */ + ret = nn_set_wlen(&(out->fp_val), out->ctx->p.wlen); + +err: + return ret; +} + +/* Set out to the asked word: the value must be < p */ +int fp_set_word_value(fp_t out, word_t val) +{ + int ret, cmp; + + ret = fp_check_initialized(out); EG(ret, err); + + /* Check that our value is indeed < p */ + ret = nn_cmp_word(&(out->ctx->p), val, &cmp); EG(ret, err); + MUST_HAVE((cmp > 0), ret, err); + + /* Set the word in the NN layer */ + ret = nn_set_word_value(&(out->fp_val), val); EG(ret, err); + + /* Set the wlen to the length of p */ + ret = nn_set_wlen(&(out->fp_val), out->ctx->p.wlen); + +err: + return ret; +} + + +/* + * Compare given Fp elements. The function returns -1 if the value of in1 is + * less than that of in2, 0 if they are equal and 1 if the value of in2 is + * more than that of in1. Obviously, both parameters must be initialized and + * belong to the same field (i.e. must have been initialized from the same + * context). Returns 0 on success, -1 on error. + */ +int fp_cmp(fp_src_t in1, fp_src_t in2, int *cmp) +{ + int ret; + + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + + MUST_HAVE((in1->ctx == in2->ctx), ret, err); + + ret = nn_cmp(&(in1->fp_val), &(in2->fp_val), cmp); + +err: + return ret; +} + +/* Check if given Fp element has value 0. Returns 0 on success, -1 on error. */ +int fp_iszero(fp_src_t in, int *iszero) +{ + int ret; + + ret = fp_check_initialized(in); EG(ret, err); + ret = nn_iszero(&(in->fp_val), iszero); + +err: + return ret; +} + + +/* + * Copy value of pointed Fp element (in) into pointed Fp element (out). If + * output is already initialized, check that the Fp contexts are consistent. + * Else, output is initialized with the same field context as input. Returns 0 + * on success, -1 on error. + * + * Aliasing of input and output is supported. + */ +int fp_copy(fp_t out, fp_src_t in) +{ + int ret; + + ret = fp_check_initialized(in); EG(ret, err); + + MUST_HAVE((out != NULL), ret, err); + + if ((out->magic == FP_MAGIC) && (out->ctx != NULL)) { + MUST_HAVE((out->ctx == in->ctx), ret, err); + } else { + ret = fp_init(out, in->ctx); EG(ret, err); + } + + ret = nn_copy(&(out->fp_val), &(in->fp_val)); + +err: + return ret; +} + + +/* + * Given a table 'tab' pointing to a set of 'tabsize' Fp elements, the + * function copies the value of element at position idx (idx < tabsize) + * in 'out' parameters. Masking is used to avoid leaking which element + * was copied. + * + * Note that the main copying loop is done on the |p| bits for all + * Fp elements and not based on the specific effective size of each + * Fp elements in 'tab' + * + * Returns 0 on success, -1 on error. + * + * Aliasing of out and the selected element inside the tab is NOT supported. + * + */ +int fp_tabselect(fp_t out, u8 idx, fp_src_t *tab, u8 tabsize) +{ + u8 i, k, p_wlen; + word_t mask; + nn_src_t p; + int ret; + + /* Basic sanity checks */ + MUST_HAVE(((tab != NULL) && (idx < tabsize)), ret, err); + + ret = fp_check_initialized(out); EG(ret, err); + + /* Make things more readable */ + p = &(out->ctx->p); + MUST_HAVE((p != NULL), ret, err); + p_wlen = p->wlen; + + /* Zeroize out and enforce its size. */ + ret = nn_zero(&(out->fp_val)); EG(ret, err); + out->fp_val.wlen = p_wlen; + + for (k = 0; k < tabsize; k++) { + /* Check current element is initialized and from Fp */ + ret = fp_check_initialized(tab[k]); EG(ret, err); + + MUST_HAVE(((&(tab[k]->ctx->p)) == p), ret, err); + + mask = WORD_MASK_IFNOTZERO(idx == k); + + for (i = 0; i < p_wlen; i++) { + out->fp_val.val[i] |= (tab[k]->fp_val.val[i] & mask); + } + } + +err: + return ret; +} + +/* + * The function tests if in1 and in2 parameters are equal or opposite in + * Fp. In that case, 'eq_or_opp' out parameter is set to 1. When in1 and + * in2 are not equal or opposite, 'eq_or_opp' is set to 0. The function + * returns 0 on success and -1 on error. 'eq_or_opp' is only meaningful + * on success, i.e. if the return value is 0. + * + * Aliasing of inputs is supported. + */ +int fp_eq_or_opp(fp_src_t in1, fp_src_t in2, int *eq_or_opp) +{ + int ret, cmp_eq, cmp_opp; + fp opp; + opp.magic = WORD(0); + + MUST_HAVE((eq_or_opp != NULL), ret, err); + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + MUST_HAVE((in1->ctx == in2->ctx), ret, err); + + ret = fp_init(&opp, in1->ctx); EG(ret, err); + ret = fp_neg(&opp, in2); EG(ret, err); + ret = nn_cmp(&(in1->fp_val), &(in2->fp_val), &cmp_eq); EG(ret, err); + ret = nn_cmp(&(in1->fp_val), &(opp.fp_val), &cmp_opp); EG(ret, err); + + (*eq_or_opp) = ((cmp_eq == 0) | (cmp_opp == 0)); + +err: + fp_uninit(&opp); + + return ret; +} + +/* + * Import given buffer of length buflen as a value for out_fp. Buffer is + * expected to be in big endian format. out_fp is expected to be already + * initialized w/ a proper Fp context, providing a value for p. The value + * in buf is also expected to be less than the one of p. The function + * returns 0 on success and -1 on error. + */ +int fp_import_from_buf(fp_t out_fp, const u8 *buf, u16 buflen) +{ + int ret, cmp; + + ret = fp_check_initialized(out_fp); EG(ret, err); + ret = nn_init_from_buf(&(out_fp->fp_val), buf, buflen); EG(ret, err); + ret = nn_cmp(&(out_fp->fp_val), &(out_fp->ctx->p), &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + +err: + return ret; +} + +/* + * Export an element from Fp to a buffer using the underlying NN export + * primitive. The function returns 0 on sucess, -1 on error. + */ +int fp_export_to_buf(u8 *buf, u16 buflen, fp_src_t in_fp) +{ + int ret; + + ret = fp_check_initialized(in_fp); EG(ret, err); + ret = nn_export_to_buf(buf, buflen, &(in_fp->fp_val)); + +err: + return ret; +} diff --git a/crypto/libecc/src/fp/fp_add.c b/crypto/libecc/src/fp/fp_add.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_add.c @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* + * Compute out = in1 + in2 mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_add(fp_t out, fp_src_t in1, fp_src_t in2) +{ + int ret, cmp; + + ret = fp_check_initialized(out); EG(ret, err); + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + + MUST_HAVE(((&(in1->ctx->p)) == (&(in2->ctx->p))), ret, err); + MUST_HAVE(((&(in1->ctx->p)) == (&(out->ctx->p))), ret, err); + FORCE_USED_VAR(cmp); /* silence warning when macro results in nothing */ + SHOULD_HAVE(!nn_cmp(&in1->fp_val, &(in1->ctx->p), &cmp) && (cmp < 0), ret, err); + SHOULD_HAVE(!nn_cmp(&in2->fp_val, &(in2->ctx->p), &cmp) && (cmp < 0), ret, err); + + ret = nn_mod_add(&(out->fp_val), &(in1->fp_val), + &(in2->fp_val), &(in1->ctx->p)); + +err: + return ret; +} + +/* + * Compute out = in + 1 mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_inc(fp_t out, fp_src_t in) +{ + int ret, cmp; + + ret = fp_check_initialized(in); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE(((&(in->ctx->p)) == (&(out->ctx->p))), ret, err); + FORCE_USED_VAR(cmp); /* silence warning when macro results in nothing */ + SHOULD_HAVE(!nn_cmp(&in->fp_val, &(in->ctx->p), &cmp) && (cmp < 0), ret, err); + + ret = nn_mod_inc(&(out->fp_val), &(in->fp_val), &(in->ctx->p)); + +err: + return ret; +} + +/* + * Compute out = in1 - in2 mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_sub(fp_t out, fp_src_t in1, fp_src_t in2) +{ + int ret, cmp; + + ret = fp_check_initialized(out); EG(ret, err); + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + + MUST_HAVE(((&(in1->ctx->p)) == (&(in2->ctx->p))), ret, err); + MUST_HAVE(((&(in1->ctx->p)) == (&(out->ctx->p))), ret, err); + FORCE_USED_VAR(cmp); /* silence warning when macro results in nothing */ + SHOULD_HAVE(!nn_cmp(&in1->fp_val, &(in1->ctx->p), &cmp) && (cmp < 0), ret, err); + SHOULD_HAVE(!nn_cmp(&in2->fp_val, &(in2->ctx->p), &cmp) && (cmp < 0), ret, err); + + ret = nn_mod_sub(&(out->fp_val), &(in1->fp_val), + &(in2->fp_val), &(in1->ctx->p)); + +err: + return ret; +} + +/* + * Compute out = in - 1 mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_dec(fp_t out, fp_src_t in) +{ + int ret, cmp; + + ret = fp_check_initialized(out); EG(ret, err); + ret = fp_check_initialized(in); EG(ret, err); + + MUST_HAVE(((&(in->ctx->p)) == (&(out->ctx->p))), ret, err); + FORCE_USED_VAR(cmp); /* silence warning when macro results in nothing */ + SHOULD_HAVE(!nn_cmp(&in->fp_val, &(in->ctx->p), &cmp) && (cmp < 0), ret, err); + + ret = nn_mod_dec(&(out->fp_val), &(in->fp_val), &(in->ctx->p)); + +err: + return ret; +} + +/* + * Compute out = -in mod p = (p - in) mod p. 'out' parameter must have been + * initialized by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_neg(fp_t out, fp_src_t in) +{ + int ret, cmp; + + ret = fp_check_initialized(in); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE(((&(in->ctx->p)) == (&(out->ctx->p))), ret, err); + FORCE_USED_VAR(cmp); /* silence warning when macro results in nothing */ + SHOULD_HAVE(!nn_cmp(&in->fp_val, &(in->ctx->p), &cmp) && (cmp < 0), ret, err); + + ret = nn_sub(&(out->fp_val), &(in->ctx->p), &(in->fp_val)); + +err: + return ret; +} diff --git a/crypto/libecc/src/fp/fp_montgomery.c b/crypto/libecc/src/fp/fp_montgomery.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_montgomery.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include + +/* Compute out = in1 + in2 mod p in the Montgomery form. + * Inputs and outputs are in their Montgomery form. + * Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_add_monty(fp_t out, fp_src_t in1, fp_src_t in2) +{ + return fp_add(out, in1, in2); +} + +/* Compute out = in1 - in2 mod p in the Montgomery form. + * Inputs and outputs are in their Montgomery form. + * Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_sub_monty(fp_t out, fp_src_t in1, fp_src_t in2) +{ + return fp_sub(out, in1, in2); +} + +/* Compute out = in1 * in2 mod p in the Montgomery form. + * Inputs and outputs are in their Montgomery form. + * Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_mul_monty(fp_t out, fp_src_t in1, fp_src_t in2) +{ + return fp_mul_redc1(out, in1, in2); +} + +/* Compute out = in * in mod p in the Montgomery form. + * Inputs and outputs are in their Montgomery form. + * Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_sqr_monty(fp_t out, fp_src_t in) +{ + return fp_sqr_redc1(out, in); +} + +/* + * Compute out such that in1 = out * in2 mod p in the Montgomery form. + * Inputs and outputs are in their Montgomery form. + * Returns 0 on success, -1 on error. out must be initialized by the caller. + * + * Aliasing is supported. + */ +int fp_div_monty(fp_t out, fp_src_t in1, fp_src_t in2) +{ + int ret, iszero; + + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE((out->ctx == in1->ctx), ret, err); + MUST_HAVE((out->ctx == in2->ctx), ret, err); + FORCE_USED_VAR(iszero); /* silence warning when macro results in nothing */ + MUST_HAVE(!fp_iszero(in2, &iszero) && (!iszero), ret, err); + + ret = fp_div(out, in1, in2); EG(ret, err); + ret = fp_redcify(out, out); + +err: + return ret; +} diff --git a/crypto/libecc/src/fp/fp_mul.c b/crypto/libecc/src/fp/fp_mul.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_mul.c @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include +/* Include the "internal" header as we use non public API here */ +#include "../nn/nn_div.h" + +/* + * Compute out = in1 * in2 mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_mul(fp_t out, fp_src_t in1, fp_src_t in2) +{ + int ret; + + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE(out->ctx == in1->ctx, ret, err); + MUST_HAVE(out->ctx == in2->ctx, ret, err); + + ret = nn_mul(&(out->fp_val), &(in1->fp_val), &(in2->fp_val)); EG(ret, err); + ret = nn_mod_unshifted(&(out->fp_val), &(out->fp_val), &(in1->ctx->p_normalized), + in1->ctx->p_reciprocal, in1->ctx->p_shift); + +err: + return ret; +} + +/* + * Compute out = in * in mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_sqr(fp_t out, fp_src_t in) +{ + return fp_mul(out, in, in); +} + +/* We use Fermat's little theorem for our inversion in Fp: + * x^(p-1) = 1 mod (p) means that x^(p-2) mod(p) is the modular + * inverse of x mod (p) + * + * Aliasing is supported. + */ +int fp_inv(fp_t out, fp_src_t in) +{ + /* Use our lower layer Fermat modular inversion with precomputed + * Montgomery coefficients. + */ + int ret; + + ret = fp_check_initialized(in); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE(out->ctx == in->ctx, ret, err); + + /* We can use the Fermat inversion as p is surely prime here */ + ret = nn_modinv_fermat_redc(&(out->fp_val), &(in->fp_val), &(in->ctx->p), &(in->ctx->r), &(in->ctx->r_square), in->ctx->mpinv); + +err: + return ret; +} + +/* + * Compute out = w^-1 mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + */ +int fp_inv_word(fp_t out, word_t w) +{ + int ret; + + ret = fp_check_initialized(out); EG(ret, err); + + ret = nn_modinv_word(&(out->fp_val), w, &(out->ctx->p)); + +err: + return ret; +} + +/* + * Compute out such that num = out * den mod p. 'out' parameter must have been initialized + * by the caller. Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_div(fp_t out, fp_src_t num, fp_src_t den) +{ + int ret; + + ret = fp_check_initialized(num); EG(ret, err); + ret = fp_check_initialized(den); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE(out->ctx == num->ctx, ret, err); + MUST_HAVE(out->ctx == den->ctx, ret, err); + + if(out == num){ + /* Handle aliasing of out and num */ + fp _num; + _num.magic = WORD(0); + + ret = fp_copy(&_num, num); EG(ret, err1); + ret = fp_inv(out, den); EG(ret, err1); + ret = fp_mul(out, &_num, out); + +err1: + fp_uninit(&_num); + EG(ret, err); + } + else{ + ret = fp_inv(out, den); EG(ret, err); + ret = fp_mul(out, num, out); + } + +err: + return ret; +} diff --git a/crypto/libecc/src/fp/fp_mul_redc1.c b/crypto/libecc/src/fp/fp_mul_redc1.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_mul_redc1.c @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* + * Internal helper performing Montgomery multiplication. The function returns + * 0 on success, -1 on error. + * + * CAUTION: the function does not check input parameters. Those checks MUST be + * performed by the caller. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _fp_mul_redc1(nn_t out, nn_src_t in1, nn_src_t in2, + fp_ctx_src_t ctx) +{ + return nn_mul_redc1(out, in1, in2, &(ctx->p), ctx->mpinv); +} + +/* + * Compute out = in1 * in2 mod (p) in redcified form. + * + * Exported version based on previous one, that sanity checks input parameters. + * The function returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_mul_redc1(fp_t out, fp_src_t in1, fp_src_t in2) +{ + int ret; + + ret = fp_check_initialized(in1); EG(ret, err); + ret = fp_check_initialized(in2); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE((out->ctx == in1->ctx), ret, err); + MUST_HAVE((out->ctx == in2->ctx), ret, err); + + ret = _fp_mul_redc1(&(out->fp_val), &(in1->fp_val), &(in2->fp_val), + out->ctx); + +err: + return ret; +} + +/* + * Compute out = in * in mod (p) in redcified form. + * + * Aliasing is supported. + */ +int fp_sqr_redc1(fp_t out, fp_src_t in) +{ + return fp_mul_redc1(out, in, in); +} + +/* + * Compute out = redcified form of in. + * redcify could be done by shifting and division by p. The function returns 0 + * on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_redcify(fp_t out, fp_src_t in) +{ + int ret; + + ret = fp_check_initialized(in); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + + MUST_HAVE((out->ctx == in->ctx), ret, err); + + ret = _fp_mul_redc1(&(out->fp_val), &(in->fp_val), &(out->ctx->r_square), + out->ctx); + +err: + return ret; +} + +/* + * Compute out = unredcified form of in. + * The function returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int fp_unredcify(fp_t out, fp_src_t in) +{ + int ret; + nn one; + one.magic = WORD(0); + + ret = fp_check_initialized(in); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + ret = nn_init(&one, 0); EG(ret, err); + ret = nn_one(&one); EG(ret, err); + ret = _fp_mul_redc1(&(out->fp_val), &(in->fp_val), &one, out->ctx); + +err: + nn_uninit(&one); + + return ret; +} diff --git a/crypto/libecc/src/fp/fp_pow.c b/crypto/libecc/src/fp/fp_pow.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_pow.c @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include + +/* + * NOT constant time with regard to the bitlength of exp. + * Aliasing not supported. Expects caller to check parameters + * have been initialized. This is an internal helper. + * + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _fp_pow(fp_t out, fp_src_t base, nn_src_t exp) +{ + /* Use the lower layer modular exponentiation */ + return nn_mod_pow_redc(&(out->fp_val), &(base->fp_val), exp, &(out->ctx->p), &(out->ctx->r), &(out->ctx->r_square), out->ctx->mpinv); +} + +/* + * Same purpose as above but handles aliasing of 'base' and 'out', i.e. + * base is passed via 'out'. Expects caller to check parameters + * have been initialized. This is an internal helper. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _fp_pow_aliased(fp_t out, nn_src_t exp) +{ + fp base; + int ret; + base.magic = WORD(0); + + ret = fp_init(&base, out->ctx); EG(ret, err); + ret = fp_copy(&base, out); EG(ret, err); + ret = _fp_pow(out, &base, exp); EG(ret, err); + +err: + fp_uninit(&base); + + return ret; +} + +/* + * Compute out = base^exp (p). 'base', 'exp' and 'out' are supposed to be initialized. + * Aliased version of previous one. + * + * Aliasing is supported. + */ +int fp_pow(fp_t out, fp_src_t base, nn_src_t exp) +{ + int ret; + + ret = fp_check_initialized(base); EG(ret, err); + ret = nn_check_initialized(exp); EG(ret, err); + ret = fp_check_initialized(out); EG(ret, err); + MUST_HAVE(((&(out->ctx->p)) == (&(base->ctx->p))), ret, err); + + /* Handle output aliasing */ + if (out == base) { + ret = _fp_pow_aliased(out, exp); + } else { + ret = _fp_pow(out, base, exp); + } + +err: + return ret; +} diff --git a/crypto/libecc/src/fp/fp_rand.c b/crypto/libecc/src/fp/fp_rand.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_rand.c @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#include +#include + +/* + * Initialize given Fp element in 'out' storage space to a Fp value chosen + * uniformly at random in [1, p-1] where p is provided by 'ctx'. The function + * returns 0 on success, -1 on error. + */ +int fp_get_random(fp_t out, fp_ctx_src_t ctx) +{ + int ret; + + ret = fp_init(out, ctx); EG(ret, err); + ret = nn_get_random_mod(&(out->fp_val), &(ctx->p)); + +err: + return ret; +} diff --git a/crypto/libecc/src/fp/fp_sqrt.c b/crypto/libecc/src/fp/fp_sqrt.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/fp_sqrt.c @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include + +/* + * Compute the legendre symbol of an element of Fp: + * + * Legendre(a) = a^((p-1)/2) (p) = { -1, 0, 1 } + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int legendre(fp_src_t a) +{ + int ret, iszero, cmp; + fp pow; /* The result if the exponentiation is in Fp */ + fp one; /* The element 1 in the field */ + nn exp; /* The power exponent is in NN */ + pow.magic = one.magic = WORD(0); + exp.magic = WORD(0); + + /* Initialize elements */ + ret = fp_check_initialized(a); EG(ret, err); + ret = fp_init(&pow, a->ctx); EG(ret, err); + ret = fp_init(&one, a->ctx); EG(ret, err); + ret = nn_init(&exp, 0); EG(ret, err); + + /* Initialize our variables from the Fp context of the + * input a. + */ + ret = fp_init(&pow, a->ctx); EG(ret, err); + ret = fp_init(&one, a->ctx); EG(ret, err); + ret = nn_init(&exp, 0); EG(ret, err); + + /* one = 1 in Fp */ + ret = fp_one(&one); EG(ret, err); + + /* Compute the exponent (p-1)/2 + * The computation is done in NN, and the division by 2 + * is performed using a right shift by one + */ + ret = nn_dec(&exp, &(a->ctx->p)); EG(ret, err); + ret = nn_rshift(&exp, &exp, 1); EG(ret, err); + + /* Compute a^((p-1)/2) in Fp using our fp_pow + * API. + */ + ret = fp_pow(&pow, a, &exp); EG(ret, err); + + ret = fp_iszero(&pow, &iszero); EG(ret, err); + ret = fp_cmp(&pow, &one, &cmp); EG(ret, err); + if (iszero) { + ret = 0; + } else if (cmp == 0) { + ret = 1; + } else { + ret = -1; + } + +err: + /* Cleaning */ + fp_uninit(&pow); + fp_uninit(&one); + nn_uninit(&exp); + + return ret; +} + +/* + * We implement the Tonelli-Shanks algorithm for finding + * square roots (quadratic residues) modulo a prime number, + * i.e. solving the equation: + * x^2 = n (p) + * where p is a prime number. This can be seen as an equation + * over the finite field Fp where a and x are elements of + * this finite field. + * Source: https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm + * All ≡ are taken to mean (mod p) unless stated otherwise. + * Input : p an odd prime, and an integer n . + * Step 0. Check that n is indeed a square : (n | p) must be ≡ 1 + * Step 1. [Factors out powers of 2 from p-1] Define q -odd- and s such as p-1 = q * 2^s + * - if s = 1 , i.e p ≡ 3 (mod 4) , output the two solutions r ≡ +/- n^((p+1)/4) . + * Step 2. Select a non-square z such as (z | p) = -1 , and set c ≡ z^q . + * Step 3. Set r ≡ n ^((q+1)/2) , t ≡ n^q, m = s . + * Step 4. Loop. + * - if t ≡ 1 output r, p-r . + * - Otherwise find, by repeated squaring, the lowest i , 0 < i < m , such as t^(2^i) ≡ 1 + * - Let b ≡ c^(2^(m-i-1)), and set r ≡ r*b, t ≡ t*b^2 , c ≡ b^2 and m = i. + * + * NOTE: the algorithm is NOT constant time. + * + * The outputs, sqrt1 and sqrt2 ARE initialized by the function. + * The function returns 0 on success, -1 on error (in which case values of sqrt1 and sqrt2 + * must not be considered). + * + * Aliasing is supported. + * + */ +int fp_sqrt(fp_t sqrt1, fp_t sqrt2, fp_src_t n) +{ + int ret, iszero, cmp, isodd; + nn q, s, one_nn, two_nn, m, i, tmp_nn; + fp z, t, b, r, c, one_fp, tmp_fp, __n; + fp_t _n = &__n; + q.magic = s.magic = one_nn.magic = two_nn.magic = m.magic = WORD(0); + i.magic = tmp_nn.magic = z.magic = t.magic = b.magic = WORD(0); + r.magic = c.magic = one_fp.magic = tmp_fp.magic = __n.magic = WORD(0); + + ret = nn_init(&q, 0); EG(ret, err); + ret = nn_init(&s, 0); EG(ret, err); + ret = nn_init(&tmp_nn, 0); EG(ret, err); + ret = nn_init(&one_nn, 0); EG(ret, err); + ret = nn_init(&two_nn, 0); EG(ret, err); + ret = nn_init(&m, 0); EG(ret, err); + ret = nn_init(&i, 0); EG(ret, err); + ret = fp_init(&z, n->ctx); EG(ret, err); + ret = fp_init(&t, n->ctx); EG(ret, err); + ret = fp_init(&b, n->ctx); EG(ret, err); + ret = fp_init(&r, n->ctx); EG(ret, err); + ret = fp_init(&c, n->ctx); EG(ret, err); + ret = fp_init(&one_fp, n->ctx); EG(ret, err); + ret = fp_init(&tmp_fp, n->ctx); EG(ret, err); + + /* Handle input aliasing */ + ret = fp_copy(_n, n); EG(ret, err); + + /* Initialize outputs */ + ret = fp_init(sqrt1, _n->ctx); EG(ret, err); + ret = fp_init(sqrt2, _n->ctx); EG(ret, err); + + /* one_nn = 1 in NN */ + ret = nn_one(&one_nn); EG(ret, err); + /* two_nn = 2 in NN */ + ret = nn_set_word_value(&two_nn, WORD(2)); EG(ret, err); + + /* If our p prime of Fp is 2, then return the input as square roots */ + ret = nn_cmp(&(_n->ctx->p), &two_nn, &cmp); EG(ret, err); + if (cmp == 0) { + ret = fp_copy(sqrt1, _n); EG(ret, err); + ret = fp_copy(sqrt2, _n); EG(ret, err); + ret = 0; + goto err; + } + + /* Square root of 0 is 0 */ + ret = fp_iszero(_n, &iszero); EG(ret, err); + if (iszero) { + ret = fp_zero(sqrt1); EG(ret, err); + ret = fp_zero(sqrt2); EG(ret, err); + ret = 0; + goto err; + } + /* Step 0. Check that n is indeed a square : (n | p) must be ≡ 1 */ + if (legendre(_n) != 1) { + /* a is not a square */ + ret = -1; + goto err; + } + /* Step 1. [Factors out powers of 2 from p-1] Define q -odd- and s such as p-1 = q * 2^s */ + /* s = 0 */ + ret = nn_zero(&s); EG(ret, err); + /* q = p - 1 */ + ret = nn_copy(&q, &(_n->ctx->p)); EG(ret, err); + ret = nn_dec(&q, &q); EG(ret, err); + while (1) { + /* i is used as a temporary unused variable here */ + ret = nn_divrem(&tmp_nn, &i, &q, &two_nn); EG(ret, err); + ret = nn_inc(&s, &s); EG(ret, err); + ret = nn_copy(&q, &tmp_nn); EG(ret, err); + /* If r is odd, we have finished our division */ + ret = nn_isodd(&q, &isodd); EG(ret, err); + if (isodd) { + break; + } + } + /* - if s = 1 , i.e p ≡ 3 (mod 4) , output the two solutions r ≡ +/- n^((p+1)/4) . */ + ret = nn_cmp(&s, &one_nn, &cmp); EG(ret, err); + if (cmp == 0) { + ret = nn_inc(&tmp_nn, &(_n->ctx->p)); EG(ret, err); + ret = nn_rshift(&tmp_nn, &tmp_nn, 2); EG(ret, err); + ret = fp_pow(sqrt1, _n, &tmp_nn); EG(ret, err); + ret = fp_neg(sqrt2, sqrt1); EG(ret, err); + ret = 0; + goto err; + } + /* Step 2. Select a non-square z such as (z | p) = -1 , and set c ≡ z^q . */ + ret = fp_zero(&z); EG(ret, err); + while (legendre(&z) != -1) { + ret = fp_inc(&z, &z); EG(ret, err); + } + ret = fp_pow(&c, &z, &q); EG(ret, err); + /* Step 3. Set r ≡ n ^((q+1)/2) , t ≡ n^q, m = s . */ + ret = nn_inc(&tmp_nn, &q); EG(ret, err); + ret = nn_rshift(&tmp_nn, &tmp_nn, 1); EG(ret, err); + ret = fp_pow(&r, _n, &tmp_nn); EG(ret, err); + ret = fp_pow(&t, _n, &q); EG(ret, err); + ret = nn_copy(&m, &s); EG(ret, err); + ret = fp_one(&one_fp); EG(ret, err); + + /* Step 4. Loop. */ + while (1) { + /* - if t ≡ 1 output r, p-r . */ + ret = fp_cmp(&t, &one_fp, &cmp); EG(ret, err); + if (cmp == 0) { + ret = fp_copy(sqrt1, &r); EG(ret, err); + ret = fp_neg(sqrt2, sqrt1); EG(ret, err); + ret = 0; + goto err; + } + /* - Otherwise find, by repeated squaring, the lowest i , 0 < i < m , such as t^(2^i) ≡ 1 */ + ret = nn_one(&i); EG(ret, err); + ret = fp_copy(&tmp_fp, &t); EG(ret, err); + while (1) { + ret = fp_sqr(&tmp_fp, &tmp_fp); EG(ret, err); + ret = fp_cmp(&tmp_fp, &one_fp, &cmp); EG(ret, err); + if (cmp == 0) { + break; + } + ret = nn_inc(&i, &i); EG(ret, err); + ret = nn_cmp(&i, &m, &cmp); EG(ret, err); + if (cmp == 0) { + /* i has reached m, that should not happen ... */ + ret = -2; + goto err; + } + } + /* - Let b ≡ c^(2^(m-i-1)), and set r ≡ r*b, t ≡ t*b^2 , c ≡ b^2 and m = i. */ + ret = nn_sub(&tmp_nn, &m, &i); EG(ret, err); + ret = nn_dec(&tmp_nn, &tmp_nn); EG(ret, err); + ret = fp_copy(&b, &c); EG(ret, err); + ret = nn_iszero(&tmp_nn, &iszero); EG(ret, err); + while (!iszero) { + ret = fp_sqr(&b, &b); EG(ret, err); + ret = nn_dec(&tmp_nn, &tmp_nn); EG(ret, err); + ret = nn_iszero(&tmp_nn, &iszero); EG(ret, err); + } + /* r ≡ r*b */ + ret = fp_mul(&r, &r, &b); EG(ret, err); + /* c ≡ b^2 */ + ret = fp_sqr(&c, &b); EG(ret, err); + /* t ≡ t*b^2 */ + ret = fp_mul(&t, &t, &c); EG(ret, err); + /* m = i */ + ret = nn_copy(&m, &i); EG(ret, err); + } + + err: + /* Uninitialize local variables */ + nn_uninit(&q); + nn_uninit(&s); + nn_uninit(&tmp_nn); + nn_uninit(&one_nn); + nn_uninit(&two_nn); + nn_uninit(&m); + nn_uninit(&i); + fp_uninit(&z); + fp_uninit(&t); + fp_uninit(&b); + fp_uninit(&r); + fp_uninit(&c); + fp_uninit(&one_fp); + fp_uninit(&tmp_fp); + fp_uninit(&__n); + + PTR_NULLIFY(_n); + + return ret; +} diff --git a/crypto/libecc/src/fp/meson.build b/crypto/libecc/src/fp/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/fp/meson.build @@ -0,0 +1,10 @@ +fp_mod_src = files( + 'fp_add.c', + 'fp.c', + 'fp_montgomery.c', + 'fp_mul.c', + 'fp_mul_redc1.c', + 'fp_pow.c', + 'fp_rand.c', + 'fp_sqrt.c', + ) diff --git a/crypto/libecc/src/hash/bash.c b/crypto/libecc/src/hash/bash.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/bash.c @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#if defined(WITH_HASH_BASH224) || defined(WITH_HASH_BASH256) || defined(WITH_HASH_BASH384) || defined(WITH_HASH_BASH512) +#include +#include + +/* + * This is an implementation of the BASH hash functions family (for sizes 224, 256, 384 and 512) + * following the standard STB 34.101.77-2020 (http://apmi.bsu.by/assets/files/std/bash-spec24.pdf). + * An english version of the specifications exist here: https://eprint.iacr.org/2016/587.pdf + */ + +int _bash_init(bash_context *ctx, u8 digest_size) +{ + int ret; + u8 *state = NULL; + + /* + * Check given inpur digest size: we only consider BASH versions + * mapped on instances (224, 256, 384, 512). + */ + MUST_HAVE(((digest_size == (224/8)) || (digest_size == (256/8)) || + (digest_size == (384/8)) || (digest_size == (512/8))), ret, err); + MUST_HAVE((ctx != NULL), ret, err); + + state = (u8*)(ctx->bash_state); + + /* Zeroize the internal state */ + ret = local_memset(state, 0, sizeof(ctx->bash_state)); EG(ret, err); + + ctx->bash_total = 0; + ctx->bash_digest_size = digest_size; + ctx->bash_block_size = (u8)((BASH_SLICES_X * BASH_SLICES_Y * sizeof(u64)) - (u8)(2 * digest_size)); + + /* Put 64 at the end of the state */ + state[(BASH_SLICES_X * BASH_SLICES_Y * sizeof(u64)) - sizeof(u64)] = (u8)digest_size; + + /* Detect endianness */ + ctx->bash_endian = arch_is_big_endian() ? BASH_BIG : BASH_LITTLE; + + ret = 0; + +err: + return ret; +} + +int _bash_update(bash_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + u8 *state = NULL; + + MUST_HAVE(((ctx != NULL) && ((input != NULL) || (ilen == 0))), ret, err); + + state = (u8*)(ctx->bash_state); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (u8)(ctx->bash_total % ctx->bash_block_size); + fill = (u16)(ctx->bash_block_size - left); + + ctx->bash_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(state + left, data_ptr, fill); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + BASHF(ctx->bash_state, ctx->bash_endian); + } + while (remain_ilen >= ctx->bash_block_size) { + ret = local_memcpy(state, data_ptr, ctx->bash_block_size); EG(ret, err); + BASHF(ctx->bash_state, ctx->bash_endian); + data_ptr += ctx->bash_block_size; + remain_ilen -= ctx->bash_block_size; + } + if (remain_ilen > 0) { + ret = local_memcpy(state + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int _bash_finalize(bash_context *ctx, u8 *output) +{ + u8 pos; + int ret; + u8 *state = NULL; + + MUST_HAVE((ctx != NULL) && (output != NULL), ret, err); + + state = (u8*)(ctx->bash_state); + + /* Handle the padding */ + pos = (u8)(ctx->bash_total % ctx->bash_block_size); + + ret = local_memset(state + pos, 0, (u8)((ctx->bash_block_size) - pos)); EG(ret, err); + state[pos] = 0x40; + + BASHF(ctx->bash_state, ctx->bash_endian); + + /* Output the digest */ + ret = local_memcpy(output, state, ctx->bash_digest_size); EG(ret, err); + + ret = 0; +err: + return ret; +} + +#else +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif diff --git a/crypto/libecc/src/hash/bash224.c b/crypto/libecc/src/hash/bash224.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/bash224.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH224 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int bash224_init(bash224_context *ctx) +{ + int ret; + + ret = _bash_init(ctx, BASH224_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = BASH224_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int bash224_update(bash224_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + BASH224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_update((bash_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int bash224_final(bash224_context *ctx, u8 output[BASH224_DIGEST_SIZE]) +{ + int ret; + + BASH224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_finalize((bash_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int bash224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH224_DIGEST_SIZE]) +{ + bash224_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = bash224_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = bash224_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = bash224_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int bash224(const u8 *input, u32 ilen, u8 output[BASH224_DIGEST_SIZE]) +{ + bash224_context ctx; + int ret; + + ret = bash224_init(&ctx); EG(ret, err); + ret = bash224_update(&ctx, input, ilen); EG(ret, err); + ret = bash224_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_BASH224 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_BASH224 */ diff --git a/crypto/libecc/src/hash/bash256.c b/crypto/libecc/src/hash/bash256.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/bash256.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH256 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int bash256_init(bash256_context *ctx) +{ + int ret; + + ret = _bash_init(ctx, BASH256_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = BASH256_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int bash256_update(bash256_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + BASH256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_update((bash_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int bash256_final(bash256_context *ctx, u8 output[BASH256_DIGEST_SIZE]) +{ + int ret; + + BASH256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_finalize((bash_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int bash256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH256_DIGEST_SIZE]) +{ + bash256_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = bash256_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = bash256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = bash256_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int bash256(const u8 *input, u32 ilen, u8 output[BASH256_DIGEST_SIZE]) +{ + bash256_context ctx; + int ret; + + ret = bash256_init(&ctx); EG(ret, err); + ret = bash256_update(&ctx, input, ilen); EG(ret, err); + ret = bash256_final(&ctx, output); EG(ret, err); + +err: + return ret; +} + +#else /* WITH_HASH_BASH256 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_BASH256 */ diff --git a/crypto/libecc/src/hash/bash384.c b/crypto/libecc/src/hash/bash384.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/bash384.c @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH384 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int bash384_init(bash384_context *ctx) +{ + int ret; + + ret = _bash_init(ctx, BASH384_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = BASH384_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int bash384_update(bash384_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + BASH384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_update((bash_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int bash384_final(bash384_context *ctx, u8 output[BASH384_DIGEST_SIZE]) +{ + int ret; + + BASH384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_finalize((bash_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int bash384_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH384_DIGEST_SIZE]) +{ + bash384_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = bash384_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + const u8 *buf = inputs[pos]; + u32 buflen = ilens[pos]; + + ret = bash384_update(&ctx, buf, buflen); EG(ret, err); + + pos += 1; + } + + ret = bash384_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int bash384(const u8 *input, u32 ilen, u8 output[BASH384_DIGEST_SIZE]) +{ + bash384_context ctx; + int ret; + + ret = bash384_init(&ctx); EG(ret, err); + ret = bash384_update(&ctx, input, ilen); EG(ret, err); + ret = bash384_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_BASH384 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_BASH384 */ diff --git a/crypto/libecc/src/hash/bash512.c b/crypto/libecc/src/hash/bash512.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/bash512.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BASH512 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int bash512_init(bash512_context *ctx) +{ + int ret; + + ret = _bash_init(ctx, BASH512_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = BASH512_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int bash512_update(bash512_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + BASH512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_update((bash_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int bash512_final(bash512_context *ctx, u8 output[BASH512_DIGEST_SIZE]) +{ + int ret; + + BASH512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _bash_finalize((bash_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int bash512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BASH512_DIGEST_SIZE]) +{ + bash512_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = bash512_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = bash512_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = bash512_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int bash512(const u8 *input, u32 ilen, u8 output[BASH512_DIGEST_SIZE]) +{ + bash512_context ctx; + int ret; + + ret = bash512_init(&ctx); EG(ret, err); + ret = bash512_update(&ctx, input, ilen); EG(ret, err); + ret = bash512_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_BASH512 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_BASH512 */ diff --git a/crypto/libecc/src/hash/belt-hash.c b/crypto/libecc/src/hash/belt-hash.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/belt-hash.c @@ -0,0 +1,471 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_BELT_HASH + +#include + +/* + * This is an implementation of the BELT-HASH hash function as + * defined int STB 34.101.31. + */ + + +/* + * The BELT-HASH function uses an underlying BELT block cipher + * defined in STB 34.101.31. This is a simple and straitforward + * implementation. + */ +#define ROTL_BELT(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +#define SWAP_BELT(x, y) do { \ + u32 z; \ + z = (x); \ + (x) = (y); \ + (y) = z; \ +} while(0) + +/* The S-Box */ +static u8 S[256] = +{ + 0xB1, 0x94, 0xBA, 0xC8, 0x0A, 0x08, 0xF5, 0x3B, 0x36, 0x6D, 0x00, 0x8E, 0x58, 0x4A, 0x5D, 0xE4, + 0x85, 0x04, 0xFA, 0x9D, 0x1B, 0xB6, 0xC7, 0xAC, 0x25, 0x2E, 0x72, 0xC2, 0x02, 0xFD, 0xCE, 0x0D, + 0x5B, 0xE3, 0xD6, 0x12, 0x17, 0xB9, 0x61, 0x81, 0xFE, 0x67, 0x86, 0xAD, 0x71, 0x6B, 0x89, 0x0B, + 0x5C, 0xB0, 0xC0, 0xFF, 0x33, 0xC3, 0x56, 0xB8, 0x35, 0xC4, 0x05, 0xAE, 0xD8, 0xE0, 0x7F, 0x99, + 0xE1, 0x2B, 0xDC, 0x1A, 0xE2, 0x82, 0x57, 0xEC, 0x70, 0x3F, 0xCC, 0xF0, 0x95, 0xEE, 0x8D, 0xF1, + 0xC1, 0xAB, 0x76, 0x38, 0x9F, 0xE6, 0x78, 0xCA, 0xF7, 0xC6, 0xF8, 0x60, 0xD5, 0xBB, 0x9C, 0x4F, + 0xF3, 0x3C, 0x65, 0x7B, 0x63, 0x7C, 0x30, 0x6A, 0xDD, 0x4E, 0xA7, 0x79, 0x9E, 0xB2, 0x3D, 0x31, + 0x3E, 0x98, 0xB5, 0x6E, 0x27, 0xD3, 0xBC, 0xCF, 0x59, 0x1E, 0x18, 0x1F, 0x4C, 0x5A, 0xB7, 0x93, + 0xE9, 0xDE, 0xE7, 0x2C, 0x8F, 0x0C, 0x0F, 0xA6, 0x2D, 0xDB, 0x49, 0xF4, 0x6F, 0x73, 0x96, 0x47, + 0x06, 0x07, 0x53, 0x16, 0xED, 0x24, 0x7A, 0x37, 0x39, 0xCB, 0xA3, 0x83, 0x03, 0xA9, 0x8B, 0xF6, + 0x92, 0xBD, 0x9B, 0x1C, 0xE5, 0xD1, 0x41, 0x01, 0x54, 0x45, 0xFB, 0xC9, 0x5E, 0x4D, 0x0E, 0xF2, + 0x68, 0x20, 0x80, 0xAA, 0x22, 0x7D, 0x64, 0x2F, 0x26, 0x87, 0xF9, 0x34, 0x90, 0x40, 0x55, 0x11, + 0xBE, 0x32, 0x97, 0x13, 0x43, 0xFC, 0x9A, 0x48, 0xA0, 0x2A, 0x88, 0x5F, 0x19, 0x4B, 0x09, 0xA1, + 0x7E, 0xCD, 0xA4, 0xD0, 0x15, 0x44, 0xAF, 0x8C, 0xA5, 0x84, 0x50, 0xBF, 0x66, 0xD2, 0xE8, 0x8A, + 0xA2, 0xD7, 0x46, 0x52, 0x42, 0xA8, 0xDF, 0xB3, 0x69, 0x74, 0xC5, 0x51, 0xEB, 0x23, 0x29, 0x21, + 0xD4, 0xEF, 0xD9, 0xB4, 0x3A, 0x62, 0x28, 0x75, 0x91, 0x14, 0x10, 0xEA, 0x77, 0x6C, 0xDA, 0x1D, +}; + +/* */ +#define GET_BYTE(x, a) ( ((x) >> (a)) & 0xff ) +#define PUT_BYTE(x, a) ( (u32)(x) << (a) ) +#define SB(x, a) PUT_BYTE( S[GET_BYTE((x), (a))], (a) ) + +#define G(x, r) ROTL_BELT( SB((x), 24) | SB((x), 16) | SB((x), 8) | SB((x), 0), (r) ) + +static u32 KIdx[8][7] = +{ + { 0, 1, 2, 3, 4, 5, 6 }, + { 7, 0, 1, 2, 3, 4, 5 }, + { 6, 7, 0, 1, 2, 3, 4 }, + { 5, 6, 7, 0, 1, 2, 3 }, + { 4, 5, 6, 7, 0, 1, 2 }, + { 3, 4, 5, 6, 7, 0, 1 }, + { 2, 3, 4, 5, 6, 7, 0 }, + { 1, 2, 3, 4, 5, 6, 7 }, +}; + +int belt_init(const u8 *k, u32 k_len, u8 ks[BELT_KEY_SCHED_LEN]) +{ + int ret = -1; + unsigned int i; + + switch(k_len){ + case 16:{ + for(i = 0; i < 16; i++){ + ks[i] = k[i]; + ks[i + 16] = k[i]; + } + break; + } + case 24:{ + for(i = 0; i < 24; i++){ + ks[i] = k[i]; + } + for(i = 24; i < 32; i++){ + ks[i] = k[i - 24] ^ k[i - 20] ^ k[i - 16]; + } + break; + } + case 32:{ + for(i = 0; i < 32; i++){ + ks[i] = k[i]; + } + break; + } + default:{ + ret = -1; + goto err; + } + + + } + + ret = 0; +err: + return ret; +} + +void belt_encrypt(const u8 in[BELT_BLOCK_LEN], u8 out[BELT_BLOCK_LEN], const u8 ks[BELT_KEY_SCHED_LEN]) +{ + u32 a, b, c, d, e; + u32 i; + + GET_UINT32_LE(a, in, 0); + GET_UINT32_LE(b, in, 4); + GET_UINT32_LE(c, in, 8); + GET_UINT32_LE(d, in, 12); + + for(i = 0; i < 8; i++){ + u32 key; + GET_UINT32_LE(key, ks, 4*KIdx[i][0]); + b ^= G(a + key, 5); + GET_UINT32_LE(key, ks, 4*KIdx[i][1]); + c ^= G(d + key, 21); + GET_UINT32_LE(key, ks, 4*KIdx[i][2]); + a = (u32)(a - G(b + key, 13)); + GET_UINT32_LE(key, ks, 4*KIdx[i][3]); + e = G(b + c + key, 21) ^ (i + 1); + b += e; + c = (u32)(c - e); + GET_UINT32_LE(key, ks, 4*KIdx[i][4]); + d += G(c + key, 13); + GET_UINT32_LE(key, ks, 4*KIdx[i][5]); + b ^= G(a + key, 21); + GET_UINT32_LE(key, ks, 4*KIdx[i][6]); + c ^= G(d + key, 5); + SWAP_BELT(a, b); + SWAP_BELT(c, d); + SWAP_BELT(b, c); + } + + PUT_UINT32_LE(b, out, 0); + PUT_UINT32_LE(d, out, 4); + PUT_UINT32_LE(a, out, 8); + PUT_UINT32_LE(c, out, 12); + + return; +} + +void belt_decrypt(const u8 in[BELT_BLOCK_LEN], u8 out[BELT_BLOCK_LEN], const u8 ks[BELT_KEY_SCHED_LEN]) +{ + u32 a, b, c, d, e; + u32 i; + + GET_UINT32_LE(a, in, 0); + GET_UINT32_LE(b, in, 4); + GET_UINT32_LE(c, in, 8); + GET_UINT32_LE(d, in, 12); + + for(i = 0; i < 8; i++){ + u32 key; + u32 j = (7 - i); + GET_UINT32_LE(key, ks, 4*KIdx[i][6]); + b ^= G(a + key, 5); + GET_UINT32_LE(key, ks, 4*KIdx[i][5]); + c ^= G(d + key, 21); + GET_UINT32_LE(key, ks, 4*KIdx[i][4]); + a = (u32)(a - G(b + key, 13)); + GET_UINT32_LE(key, ks, 4*KIdx[i][3]); + e = G(b + c + key, 21) ^ (j + 1); + b += e; + c = (u32)(c - e); + GET_UINT32_LE(key, ks, 4*KIdx[i][2]); + d += G(c + key, 13); + GET_UINT32_LE(key, ks, 4*KIdx[i][1]); + b ^= G(a + key, 21); + GET_UINT32_LE(key, ks, 4*KIdx[i][0]); + c ^= G(d + key, 5); + SWAP_BELT(a, b); + SWAP_BELT(c, d); + SWAP_BELT(a, d); + } + + PUT_UINT32_LE(c, out, 0); + PUT_UINT32_LE(a, out, 4); + PUT_UINT32_LE(d, out, 8); + PUT_UINT32_LE(b, out, 12); + + return; +} + +/* BELT-HASH primitives */ +static void sigma1_xor(const u8 x[2 * BELT_BLOCK_LEN], const u8 h[2 * BELT_BLOCK_LEN], u8 s[BELT_BLOCK_LEN], u8 use_xor){ + u8 tmp1[BELT_BLOCK_LEN]; + unsigned int i; + + for(i = 0; i < (BELT_BLOCK_LEN / 2); i++){ + tmp1[i] = (h[i] ^ h[i + BELT_BLOCK_LEN]); + tmp1[i + (BELT_BLOCK_LEN / 2)] = (h[i + (BELT_BLOCK_LEN / 2)] ^ h[i + BELT_BLOCK_LEN + (BELT_BLOCK_LEN / 2)]); + } + + if(use_xor){ + u8 tmp2[BELT_BLOCK_LEN]; + + belt_encrypt(tmp1, tmp2, x); + + for(i = 0; i < (BELT_BLOCK_LEN / 2); i++){ + s[i] ^= (tmp1[i] ^ tmp2[i]); + s[i + (BELT_BLOCK_LEN / 2)] ^= (tmp1[i + (BELT_BLOCK_LEN / 2)] ^ tmp2[i + (BELT_BLOCK_LEN / 2)]); + } + } + else{ + belt_encrypt(tmp1, s, x); + for(i = 0; i < (BELT_BLOCK_LEN / 2); i++){ + s[i] ^= tmp1[i]; + s[i + (BELT_BLOCK_LEN / 2)] ^= tmp1[i + (BELT_BLOCK_LEN / 2)]; + } + } + + return; +} + +static void sigma2(const u8 x[2 * BELT_BLOCK_LEN], u8 const h[2 * BELT_BLOCK_LEN], u8 result[2 * BELT_BLOCK_LEN]) +{ + u8 teta[BELT_KEY_SCHED_LEN]; + u8 tmp[BELT_BLOCK_LEN]; + unsigned int i; + + /* Copy the beginning of h for later in case it is lost */ + IGNORE_RET_VAL(local_memcpy(&tmp[0], &h[0], BELT_BLOCK_LEN)); + + sigma1_xor(x, h, teta, 0); + IGNORE_RET_VAL(local_memcpy(&teta[BELT_BLOCK_LEN], &h[BELT_BLOCK_LEN], BELT_BLOCK_LEN)); + + belt_encrypt(x, result, teta); + for(i = 0; i < BELT_BLOCK_LEN; i++){ + result[i] ^= x[i]; + teta[i] ^= 0xff; + teta[i + BELT_BLOCK_LEN] = tmp[i]; + } + + belt_encrypt(&x[BELT_BLOCK_LEN], &result[BELT_BLOCK_LEN], teta); + + for(i = 0; i < (BELT_BLOCK_LEN / 2); i++){ + result[i + BELT_BLOCK_LEN] ^= x[i + BELT_BLOCK_LEN]; + result[i + BELT_BLOCK_LEN + (BELT_BLOCK_LEN / 2)] ^= x[i + BELT_BLOCK_LEN + (BELT_BLOCK_LEN / 2)]; + } + + return; +} + +static void _belt_hash_process(const u8 x[2 * BELT_BLOCK_LEN], u8 h[2 * BELT_BLOCK_LEN], u8 s[BELT_BLOCK_LEN]) +{ + sigma1_xor(x, h, s, 1); + + sigma2(x, h, h); + + return; +} + +ATTRIBUTE_WARN_UNUSED_RET static int belt_hash_process(belt_hash_context *ctx, const u8 data[BELT_HASH_BLOCK_SIZE]) +{ + _belt_hash_process(data, ctx->belt_hash_h, &(ctx->belt_hash_state[BELT_BLOCK_LEN])); + + return 0; +} + +ATTRIBUTE_WARN_UNUSED_RET static int belt_hash_finalize(const u8 s[2 * BELT_BLOCK_LEN], const u8 h[2 * BELT_BLOCK_LEN], u8 res[2 * BELT_BLOCK_LEN]) +{ + sigma2(s, h, res); + + return 0; +} + +static void belt_update_ctr(belt_hash_context *ctx, u8 len_bytes) +{ + /* Perform a simple addition on 128 bits on the first part of the state */ + u64 a0, a1, b, c; + + GET_UINT64_LE(a0, (const u8*)(ctx->belt_hash_state), 0); + GET_UINT64_LE(a1, (const u8*)(ctx->belt_hash_state), 8); + + b = (u64)(len_bytes << 3); + + c = (a0 + b); + if(c < b){ + /* Handle carry */ + a1 += 1; + } + + /* Store the result */ + PUT_UINT64_LE(c, (u8*)(ctx->belt_hash_state), 0); + PUT_UINT64_LE(a1, (u8*)(ctx->belt_hash_state), 8); + + return; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +int belt_hash_init(belt_hash_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->belt_hash_total = 0; + + ret = local_memset(ctx->belt_hash_state, 0, sizeof(ctx->belt_hash_state)); EG(ret, err); + + PUT_UINT64_LE(0x3bf5080ac8ba94b1ULL, ctx->belt_hash_h, 0); + PUT_UINT64_LE(0xe45d4a588e006d36ULL, ctx->belt_hash_h, 8); + PUT_UINT64_LE(0xacc7b61b9dfa0485ULL, ctx->belt_hash_h, 16); + PUT_UINT64_LE(0x0dcefd02c2722e25ULL, ctx->belt_hash_h, 24); + + /* Tell that we are initialized */ + ctx->magic = BELT_HASH_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int belt_hash_update(belt_hash_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + BELT_HASH_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->belt_hash_total & (BELT_HASH_BLOCK_SIZE - 1)); + fill = (u16)(BELT_HASH_BLOCK_SIZE - left); + + ctx->belt_hash_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->belt_hash_buffer + left, data_ptr, fill); EG(ret, err); + /* Update the counter with one full block */ + belt_update_ctr(ctx, BELT_HASH_BLOCK_SIZE); + /* Process */ + ret = belt_hash_process(ctx, ctx->belt_hash_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= BELT_HASH_BLOCK_SIZE) { + /* Update the counter with one full block */ + belt_update_ctr(ctx, BELT_HASH_BLOCK_SIZE); + /* Process */ + ret = belt_hash_process(ctx, data_ptr); EG(ret, err); + data_ptr += BELT_HASH_BLOCK_SIZE; + remain_ilen -= BELT_HASH_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->belt_hash_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +int belt_hash_final(belt_hash_context *ctx, u8 output[BELT_HASH_DIGEST_SIZE]) +{ + int ret; + unsigned int i; + + MUST_HAVE((output != NULL), ret, err); + BELT_HASH_HASH_CHECK_INITIALIZED(ctx, ret, err); + + if((ctx->belt_hash_total % BELT_HASH_BLOCK_SIZE) != 0){ + /* Pad our last block with zeroes */ + for(i = (ctx->belt_hash_total % BELT_HASH_BLOCK_SIZE); i < BELT_HASH_BLOCK_SIZE; i++){ + ctx->belt_hash_buffer[i] = 0; + } + + /* Update the counter with the remaining data */ + belt_update_ctr(ctx, (u8)(ctx->belt_hash_total % BELT_HASH_BLOCK_SIZE)); + + /* Process the last block */ + ret = belt_hash_process(ctx, ctx->belt_hash_buffer); EG(ret, err); + } + + /* Finalize and output the result */ + ret = belt_hash_finalize(ctx->belt_hash_state, ctx->belt_hash_h, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int belt_hash_scattered(const u8 **inputs, const u32 *ilens, + u8 output[BELT_HASH_DIGEST_SIZE]) +{ + belt_hash_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = belt_hash_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = belt_hash_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = belt_hash_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int belt_hash(const u8 *input, u32 ilen, u8 output[BELT_HASH_DIGEST_SIZE]) +{ + belt_hash_context ctx; + int ret; + + ret = belt_hash_init(&ctx); EG(ret, err); + ret = belt_hash_update(&ctx, input, ilen); EG(ret, err); + ret = belt_hash_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_BELT_HASH */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; + +#endif /* WITH_HASH_BELT_HASH */ diff --git a/crypto/libecc/src/hash/hash_algs.c b/crypto/libecc/src/hash/hash_algs.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/hash_algs.c @@ -0,0 +1,429 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* + * Return the hash mapping entry 'hm' associated with given hash name + * 'hash_name'. The function returns 0 on success, -1 on error. 'hm' + * is only meaningful on success. + */ +ATTRIBUTE_WARN_UNUSED_RET int get_hash_by_name(const char *hash_name, const hash_mapping **hm) +{ + const hash_mapping *_hm = NULL; + int ret, check; + u8 i; + + MUST_HAVE(((hash_name != NULL) && (hm != NULL)), ret, err); + + ret = -1; + for (i = 0, _hm = &hash_maps[i]; _hm->type != UNKNOWN_HASH_ALG; + _hm = &hash_maps[++i]) { + const char *exp_name = (const char *)_hm->name; + + if ((!are_str_equal(hash_name, exp_name, &check)) && check) { + (*hm) = _hm; + ret = 0; + break; + } + } + +err: + return ret; +} + +/* + * Return the hash mapping entry 'hm' associated with given hash type value. + * The function returns 0 on success, -1 on error. 'hm' is not meaningfull + * on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int get_hash_by_type(hash_alg_type hash_type, const hash_mapping **hm) +{ + const hash_mapping *_hm = NULL; + int ret; + u8 i; + + MUST_HAVE((hm != NULL), ret, err); + + ret = -1; + for (i = 0, _hm = &hash_maps[i]; _hm->type != UNKNOWN_HASH_ALG; + _hm = &hash_maps[++i]) { + if (_hm->type == hash_type) { + (*hm) = _hm; + ret = 0; + break; + } + } + +err: + return ret; +} + +/* + * Returns respectively in digest_size and block_size param the digest size + * and block size for given hash function, if return value of the function is 0. + * If return value is -1, then the hash algorithm is not known and output + * parameters are not modified. + */ +ATTRIBUTE_WARN_UNUSED_RET int get_hash_sizes(hash_alg_type hash_type, u8 *digest_size, u8 *block_size) +{ + const hash_mapping *m; + int ret; + u8 i; + + ret = -1; + for (i = 0, m = &hash_maps[i]; m->type != UNKNOWN_HASH_ALG; + m = &hash_maps[++i]) { + if (m->type == hash_type) { + if (digest_size != NULL) { + (*digest_size) = m->digest_size; + } + if (block_size != NULL) { + (*block_size) = m->block_size; + } + ret = 0; + break; + } + } + + return ret; +} + +/* + * Helper that sanity checks the provided hash mapping against our + * constant ones. Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET int hash_mapping_callbacks_sanity_check(const hash_mapping *h) +{ + const hash_mapping *m; + int ret = -1, check; + u8 i; + + MUST_HAVE((h != NULL), ret, err); + + /* We just check is our mapping is indeed + * one of the registered mappings. + */ + for (i = 0, m = &hash_maps[i]; m->type != UNKNOWN_HASH_ALG; + m = &hash_maps[++i]) { + if (m->type == h->type) { + if ((!are_str_equal_nlen(m->name, h->name, MAX_HASH_ALG_NAME_LEN, &check)) && (!check)){ + goto err; + } else if (m->digest_size != h->digest_size) { + goto err; + } else if(m->block_size != h->block_size) { + goto err; + } else if(m->hfunc_init != h->hfunc_init) { + goto err; + } else if(m->hfunc_update != h->hfunc_update) { + goto err; + } else if(m->hfunc_finalize != h->hfunc_finalize) { + goto err; + } else if(m->hfunc_scattered != h->hfunc_scattered) { + goto err; + } else{ + ret = 0; + } + } + } + +err: + return ret; +} + +/*****************************************/ +/* Trampolines to each specific function to + * handle typing of our generic union structure. + */ +#ifdef WITH_HASH_SHA224 +ATTRIBUTE_WARN_UNUSED_RET int _sha224_init(hash_context * hctx) +{ + return sha224_init((sha224_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha224_update((sha224_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha224_final(hash_context * hctx, unsigned char *output) +{ + return sha224_final((sha224_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA256 +ATTRIBUTE_WARN_UNUSED_RET int _sha256_init(hash_context * hctx) +{ + return sha256_init((sha256_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha256_update((sha256_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha256_final(hash_context * hctx, unsigned char *output) +{ + return sha256_final((sha256_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA384 +ATTRIBUTE_WARN_UNUSED_RET int _sha384_init(hash_context * hctx) +{ + return sha384_init((sha384_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha384_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha384_update((sha384_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha384_final(hash_context * hctx, unsigned char *output) +{ + return sha384_final((sha384_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA512 +ATTRIBUTE_WARN_UNUSED_RET int _sha512_init(hash_context * hctx) +{ + return sha512_init((sha512_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha512_update((sha512_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha512_final(hash_context * hctx, unsigned char *output) +{ + return sha512_final((sha512_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA512_224 +ATTRIBUTE_WARN_UNUSED_RET int _sha512_224_init(hash_context * hctx) +{ + return sha512_224_init((sha512_224_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha512_224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha512_224_update((sha512_224_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha512_224_final(hash_context * hctx, unsigned char *output) +{ + return sha512_224_final((sha512_224_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA512_256 +ATTRIBUTE_WARN_UNUSED_RET int _sha512_256_init(hash_context * hctx) +{ + return sha512_256_init((sha512_256_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha512_256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha512_256_update((sha512_256_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha512_256_final(hash_context * hctx, unsigned char *output) +{ + return sha512_256_final((sha512_256_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA3_224 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_224_init(hash_context * hctx) +{ + return sha3_224_init((sha3_224_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha3_224_update((sha3_224_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_224_final(hash_context * hctx, unsigned char *output) +{ + return sha3_224_final((sha3_224_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA3_256 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_256_init(hash_context * hctx) +{ + return sha3_256_init((sha3_256_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha3_256_update((sha3_256_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_256_final(hash_context * hctx, unsigned char *output) +{ + return sha3_256_final((sha3_256_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA3_384 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_384_init(hash_context * hctx) +{ + return sha3_384_init((sha3_384_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_384_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha3_384_update((sha3_384_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_384_final(hash_context * hctx, unsigned char *output) +{ + return sha3_384_final((sha3_384_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHA3_512 +ATTRIBUTE_WARN_UNUSED_RET int _sha3_512_init(hash_context * hctx) +{ + return sha3_512_init((sha3_512_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sha3_512_update((sha3_512_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sha3_512_final(hash_context * hctx, unsigned char *output) +{ + return sha3_512_final((sha3_512_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SM3 +ATTRIBUTE_WARN_UNUSED_RET int _sm3_init(hash_context * hctx) +{ + return sm3_init((sm3_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _sm3_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return sm3_update((sm3_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _sm3_final(hash_context * hctx, unsigned char *output) +{ + return sm3_final((sm3_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_SHAKE256 +ATTRIBUTE_WARN_UNUSED_RET int _shake256_init(hash_context * hctx) +{ + return shake256_init((shake256_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _shake256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return shake256_update((shake256_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _shake256_final(hash_context * hctx, unsigned char *output) +{ + return shake256_final((shake256_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_STREEBOG256 +ATTRIBUTE_WARN_UNUSED_RET int _streebog256_init(hash_context * hctx) +{ + return streebog256_init((streebog256_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _streebog256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return streebog256_update((streebog256_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _streebog256_final(hash_context * hctx, unsigned char *output) +{ + return streebog256_final((streebog256_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_STREEBOG512 +ATTRIBUTE_WARN_UNUSED_RET int _streebog512_init(hash_context * hctx) +{ + return streebog512_init((streebog512_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _streebog512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return streebog512_update((streebog512_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _streebog512_final(hash_context * hctx, unsigned char *output) +{ + return streebog512_final((streebog512_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_RIPEMD160 +ATTRIBUTE_WARN_UNUSED_RET int _ripemd160_init(hash_context * hctx) +{ + return ripemd160_init((ripemd160_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _ripemd160_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return ripemd160_update((ripemd160_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _ripemd160_final(hash_context * hctx, unsigned char *output) +{ + return ripemd160_final((ripemd160_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_BELT_HASH +ATTRIBUTE_WARN_UNUSED_RET int _belt_hash_init(hash_context * hctx) +{ + return belt_hash_init((belt_hash_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _belt_hash_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return belt_hash_update((belt_hash_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _belt_hash_final(hash_context * hctx, unsigned char *output) +{ + return belt_hash_final((belt_hash_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_BASH224 +ATTRIBUTE_WARN_UNUSED_RET int _bash224_init(hash_context * hctx) +{ + return bash224_init((bash224_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash224_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return bash224_update((bash224_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash224_final(hash_context * hctx, unsigned char *output) +{ + return bash224_final((bash224_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_BASH256 +ATTRIBUTE_WARN_UNUSED_RET int _bash256_init(hash_context * hctx) +{ + return bash256_init((bash256_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash256_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return bash256_update((bash256_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash256_final(hash_context * hctx, unsigned char *output) +{ + return bash256_final((bash256_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_BASH384 +ATTRIBUTE_WARN_UNUSED_RET int _bash384_init(hash_context * hctx) +{ + return bash384_init((bash384_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash384_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return bash384_update((bash384_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash384_final(hash_context * hctx, unsigned char *output) +{ + return bash384_final((bash384_context*)hctx, output); +} +#endif +#ifdef WITH_HASH_BASH512 +ATTRIBUTE_WARN_UNUSED_RET int _bash512_init(hash_context * hctx) +{ + return bash512_init((bash512_context*)hctx); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash512_update(hash_context * hctx, const unsigned char *chunk, u32 chunklen) +{ + return bash512_update((bash512_context*)hctx, chunk, chunklen); +} +ATTRIBUTE_WARN_UNUSED_RET int _bash512_final(hash_context * hctx, unsigned char *output) +{ + return bash512_final((bash512_context*)hctx, output); +} +#endif diff --git a/crypto/libecc/src/hash/hmac.c b/crypto/libecc/src/hash/hmac.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/hmac.c @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HMAC + +#include + +int hmac_init(hmac_context *ctx, const u8 *hmackey, u32 hmackey_len, + hash_alg_type hash_type) +{ + u8 ipad[MAX_BLOCK_SIZE]; + u8 opad[MAX_BLOCK_SIZE]; + u8 local_hmac_key[MAX_BLOCK_SIZE]; + unsigned int i, local_hmac_key_len; + int ret; + const hash_mapping *h; + + MUST_HAVE((ctx != NULL) && (hmackey != NULL), ret, err); + + ret = local_memset(local_hmac_key, 0, sizeof(local_hmac_key)); EG(ret, err); + /* Set ipad and opad to appropriate values */ + ret = local_memset(ipad, 0x36, sizeof(ipad)); EG(ret, err); + ret = local_memset(opad, 0x5c, sizeof(opad)); EG(ret, err); + + /* Get the hash mapping of the current asked hash function */ + ret = get_hash_by_type(hash_type, &(ctx->hash)); EG(ret, err); + MUST_HAVE((ctx->hash != NULL), ret, err); + + /* Make things more readable */ + h = ctx->hash; + + if(hmackey_len <= ctx->hash->block_size){ + /* The key size is less than the hash function block size */ + ret = local_memcpy(local_hmac_key, hmackey, hmackey_len); EG(ret, err); + local_hmac_key_len = hmackey_len; + } + else{ + /* The key size is greater than the hash function block size. + * We hash it to shorten it. + */ + hash_context tmp_ctx; + /* Check our callback */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_init(&tmp_ctx); EG(ret, err); + ret = h->hfunc_update(&tmp_ctx, hmackey, hmackey_len); EG(ret, err); + ret = h->hfunc_finalize(&tmp_ctx, local_hmac_key); EG(ret, err); + local_hmac_key_len = h->digest_size; + } + + /* Initialize our input and output hash contexts */ + /* Check our callback */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_init(&(ctx->in_ctx)); EG(ret, err); + /* Check our callback */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_init(&(ctx->out_ctx)); EG(ret, err); + + /* Update our input context with K^ipad */ + for(i = 0; i < local_hmac_key_len; i++){ + ipad[i] ^= local_hmac_key[i]; + } + ret = h->hfunc_update(&(ctx->in_ctx), ipad, h->block_size); EG(ret, err); + /* Update our output context with K^opad */ + for(i = 0; i < local_hmac_key_len; i++){ + opad[i] ^= local_hmac_key[i]; + } + ret = h->hfunc_update(&(ctx->out_ctx), opad, h->block_size); EG(ret, err); + + /* Initialize our magic */ + ctx->magic = HMAC_MAGIC; + +err: + return ret; +} + +int hmac_update(hmac_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + const hash_mapping *h; + + HMAC_CHECK_INITIALIZED(ctx, ret, err); + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + + /* Make things more readable */ + h = ctx->hash; + /* Check our callback */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_update(&(ctx->in_ctx), input, ilen); EG(ret, err); + +err: + return ret; +} + +int hmac_finalize(hmac_context *ctx, u8 *output, u8 *outlen) +{ + int ret; + u8 in_hash[MAX_DIGEST_SIZE]; + const hash_mapping *h; + + HMAC_CHECK_INITIALIZED(ctx, ret, err); + MUST_HAVE((output != NULL) && (outlen != NULL), ret, err); + + /* Make things more readable */ + h = ctx->hash; + + MUST_HAVE(((*outlen) >= h->digest_size), ret, err); + + /* Check our callback */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_finalize(&(ctx->in_ctx), in_hash); EG(ret, err); + ret = h->hfunc_update(&(ctx->out_ctx), in_hash, h->digest_size); EG(ret, err); + ret = h->hfunc_finalize(&(ctx->out_ctx), output); EG(ret, err); + (*outlen) = h->digest_size; + +err: + if(ctx != NULL){ + /* Clear the hash contexts that could contain sensitive data */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(hmac_context))); + /* Uninitialize the context */ + ctx->magic = WORD(0); + } + if(ret && (outlen != NULL)){ + (*outlen) = 0; + } + return ret; +} + +int hmac(const u8 *hmackey, u32 hmackey_len, hash_alg_type hash_type, + const u8 *input, u32 ilen, u8 *output, u8 *outlen) +{ + int ret; + hmac_context ctx; + + ret = hmac_init(&ctx, hmackey, hmackey_len, hash_type); EG(ret, err); + ret = hmac_update(&ctx, input, ilen); EG(ret, err); + ret = hmac_finalize(&ctx, output, outlen); + +err: + /* Clean our context as it can contain sensitive data */ + IGNORE_RET_VAL(local_memset(&ctx, 0, sizeof(hmac_context))); + + return ret; +} + +/* Scattered version */ +int hmac_scattered(const u8 *hmackey, u32 hmackey_len, hash_alg_type hash_type, + const u8 **inputs, const u32 *ilens, u8 *output, u8 *outlen) +{ + int ret, pos = 0; + hmac_context ctx; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = hmac_init(&ctx, hmackey, hmackey_len, hash_type); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = hmac_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = hmac_finalize(&ctx, output, outlen); + +err: + /* Clean our context as it can contain sensitive data */ + IGNORE_RET_VAL(local_memset(&ctx, 0, sizeof(hmac_context))); + + return ret; +} + + +#else /* WITH_HMAC */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HMAC */ diff --git a/crypto/libecc/src/hash/meson.build b/crypto/libecc/src/hash/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/meson.build @@ -0,0 +1,27 @@ +hash_mod_src = files( + 'hash_algs.c', + 'sm3.c', + 'streebog.c', + 'ripemd160.c', + 'belt-hash.c', + 'hmac.c', + 'bash224.c', + 'bash256.c', + 'bash384.c', + 'bash512.c', + 'bash.c', + 'sha224.c', + 'sha256.c', + 'sha3-224.c', + 'sha3-256.c', + 'sha3-384.c', + 'sha3-512.c', + 'sha384.c', + 'sha3.c', + 'sha512-224.c', + 'sha512-256.c', + 'sha512.c', + 'sha512_core.c', + 'shake256.c', + 'shake.c', +) diff --git a/crypto/libecc/src/hash/ripemd160.c b/crypto/libecc/src/hash/ripemd160.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/ripemd160.c @@ -0,0 +1,348 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_RIPEMD160 + +#include + +/****************************************************/ +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros (big endian) + */ +#ifndef PUT_UINT64_LE +#define PUT_UINT64_LE(n,b,i) \ +do { \ + (b)[(i) + 7] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_LE */ + +/* Elements related to RIPEMD160 */ +#define ROTL_RIPEMD160(x, n) ((((u32)(x)) << (n)) | (((u32)(x)) >> (32-(n)))) + +#define F1_RIPEMD160(x, y, z) ((x) ^ (y) ^ (z)) +#define F2_RIPEMD160(x, y, z) (((x) & (y)) | ((~(x)) & (z))) +#define F3_RIPEMD160(x, y, z) (((x) | (~(y))) ^ (z)) +#define F4_RIPEMD160(x, y, z) (((x) & (z)) | ((y) & (~(z)))) +#define F5_RIPEMD160(x, y, z) ((x) ^ ((y) | (~(z)))) + +/* Left constants */ +static const u32 KL_RIPEMD160[5] = { + 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e +}; +/* Right constants */ +static const u32 KR_RIPEMD160[5] = { + 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000 +}; + +/* Left line */ +static const u8 RL_RIPEMD160[5][16] = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 }, + { 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 }, + { 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 }, + { 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 } +}; +static const u8 SL_RIPEMD160[5][16] = { + { 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 }, + { 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 }, + { 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 }, + { 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 }, + { 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 } +}; + +/* Right line */ +static const u8 RR_RIPEMD160[5][16] = { + { 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 }, + { 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 }, + { 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 }, + { 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 }, + { 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 } +}; +static const u8 SR_RIPEMD160[5][16] = { + { 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 }, + { 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 }, + { 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 }, + { 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 }, + { 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 } +}; + +#define RIPEMD160_CORE(a, b, c, d, e, round, idx, w, F, S, R, K) do { \ + u32 t = ROTL_RIPEMD160(a + F(b, c, d) + w[R[round][idx]] + K[round], S[round][idx]) + e;\ + a = e; e = d; d = ROTL_RIPEMD160(c, 10); c = b; b = t; \ +} while(0) + +/* RIPEMD160 core processing */ +ATTRIBUTE_WARN_UNUSED_RET static int ripemd160_process(ripemd160_context *ctx, + const u8 data[RIPEMD160_BLOCK_SIZE]) +{ + /* Left line */ + u32 al, bl, cl, dl, el; + /* Right line */ + u32 ar, br, cr, dr, er; + /* Temporary data */ + u32 tt; + /* Data */ + u32 W[16]; + unsigned int i; + int ret; + + MUST_HAVE((data != NULL), ret, err); + RIPEMD160_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + al = ar = ctx->ripemd160_state[0]; + bl = br = ctx->ripemd160_state[1]; + cl = cr = ctx->ripemd160_state[2]; + dl = dr = ctx->ripemd160_state[3]; + el = er = ctx->ripemd160_state[4]; + + /* Load data */ + for (i = 0; i < 16; i++) { + GET_UINT32_LE(W[i], data, (4 * i)); + } + + /* Round 1 */ + for(i = 0; i < 16; i++){ + RIPEMD160_CORE(al, bl, cl, dl, el, 0, i, W, F1_RIPEMD160, SL_RIPEMD160, RL_RIPEMD160, KL_RIPEMD160); + RIPEMD160_CORE(ar, br, cr, dr, er, 0, i, W, F5_RIPEMD160, SR_RIPEMD160, RR_RIPEMD160, KR_RIPEMD160); + } + /* Round 2 */ + for(i = 0; i < 16; i++){ + RIPEMD160_CORE(al, bl, cl, dl, el, 1, i, W, F2_RIPEMD160, SL_RIPEMD160, RL_RIPEMD160, KL_RIPEMD160); + RIPEMD160_CORE(ar, br, cr, dr, er, 1, i, W, F4_RIPEMD160, SR_RIPEMD160, RR_RIPEMD160, KR_RIPEMD160); + } + /* Round 3 */ + for(i = 0; i < 16; i++){ + RIPEMD160_CORE(al, bl, cl, dl, el, 2, i, W, F3_RIPEMD160, SL_RIPEMD160, RL_RIPEMD160, KL_RIPEMD160); + RIPEMD160_CORE(ar, br, cr, dr, er, 2, i, W, F3_RIPEMD160, SR_RIPEMD160, RR_RIPEMD160, KR_RIPEMD160); + } + /* Round 4 */ + for(i = 0; i < 16; i++){ + RIPEMD160_CORE(al, bl, cl, dl, el, 3, i, W, F4_RIPEMD160, SL_RIPEMD160, RL_RIPEMD160, KL_RIPEMD160); + RIPEMD160_CORE(ar, br, cr, dr, er, 3, i, W, F2_RIPEMD160, SR_RIPEMD160, RR_RIPEMD160, KR_RIPEMD160); + } + /* Round 5 */ + for(i = 0; i < 16; i++){ + RIPEMD160_CORE(al, bl, cl, dl, el, 4, i, W, F5_RIPEMD160, SL_RIPEMD160, RL_RIPEMD160, KL_RIPEMD160); + RIPEMD160_CORE(ar, br, cr, dr, er, 4, i, W, F1_RIPEMD160, SR_RIPEMD160, RR_RIPEMD160, KR_RIPEMD160); + } + + /* Mix the lines and update state */ + tt = (ctx->ripemd160_state[1] + cl + dr); + ctx->ripemd160_state[1] = (ctx->ripemd160_state[2] + dl + er); + ctx->ripemd160_state[2] = (ctx->ripemd160_state[3] + el + ar); + ctx->ripemd160_state[3] = (ctx->ripemd160_state[4] + al + br); + ctx->ripemd160_state[4] = (ctx->ripemd160_state[0] + bl + cr); + ctx->ripemd160_state[0] = tt; + + ret = 0; + +err: + return ret; +} + +/* Init hash function */ +int ripemd160_init(ripemd160_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->ripemd160_total = 0; + ctx->ripemd160_state[0] = 0x67452301; + ctx->ripemd160_state[1] = 0xefcdab89; + ctx->ripemd160_state[2] = 0x98badcfe; + ctx->ripemd160_state[3] = 0x10325476; + ctx->ripemd160_state[4] = 0xc3d2e1f0; + + /* Tell that we are initialized */ + ctx->magic = RIPEMD160_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Update hash function */ +int ripemd160_update(ripemd160_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + RIPEMD160_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->ripemd160_total & 0x3F); + fill = (u16)(RIPEMD160_BLOCK_SIZE - left); + + ctx->ripemd160_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->ripemd160_buffer + left, data_ptr, fill); EG(ret, err); + ret = ripemd160_process(ctx, ctx->ripemd160_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= RIPEMD160_BLOCK_SIZE) { + ret = ripemd160_process(ctx, data_ptr); EG(ret, err); + data_ptr += RIPEMD160_BLOCK_SIZE; + remain_ilen -= RIPEMD160_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->ripemd160_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize */ +int ripemd160_final(ripemd160_context *ctx, u8 output[RIPEMD160_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * RIPEMD160_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + RIPEMD160_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = (ctx->ripemd160_total % RIPEMD160_BLOCK_SIZE); + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->ripemd160_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (RIPEMD160_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_LE(8 * ctx->ripemd160_total, last_padded_block, + (2 * RIPEMD160_BLOCK_SIZE) - sizeof(u64)); + ret = ripemd160_process(ctx, last_padded_block); EG(ret, err); + ret = ripemd160_process(ctx, last_padded_block + RIPEMD160_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_LE(8 * ctx->ripemd160_total, last_padded_block, + RIPEMD160_BLOCK_SIZE - sizeof(u64)); + ret = ripemd160_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_LE(ctx->ripemd160_state[0], output, 0); + PUT_UINT32_LE(ctx->ripemd160_state[1], output, 4); + PUT_UINT32_LE(ctx->ripemd160_state[2], output, 8); + PUT_UINT32_LE(ctx->ripemd160_state[3], output, 12); + PUT_UINT32_LE(ctx->ripemd160_state[4], output, 16); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +int ripemd160_scattered(const u8 **inputs, const u32 *ilens, + u8 output[RIPEMD160_DIGEST_SIZE]) +{ + ripemd160_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = ripemd160_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = ripemd160_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = ripemd160_final(&ctx, output); + +err: + return ret; +} + +int ripemd160(const u8 *input, u32 ilen, u8 output[RIPEMD160_DIGEST_SIZE]) +{ + ripemd160_context ctx; + int ret; + + ret = ripemd160_init(&ctx); EG(ret, err); + ret = ripemd160_update(&ctx, input, ilen); EG(ret, err); + ret = ripemd160_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_RIPEMD160 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_RIPEMD160 */ diff --git a/crypto/libecc/src/hash/sha224.c b/crypto/libecc/src/hash/sha224.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha224.c @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA224 + +#include + +/* SHA-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static int sha224_process(sha224_context *ctx, + const u8 data[SHA224_BLOCK_SIZE]) +{ + u32 a, b, c, d, e, f, g, h; + u32 W[64]; + unsigned int i; + int ret; + + MUST_HAVE((data != NULL), ret, err); + SHA224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + a = ctx->sha224_state[0]; + b = ctx->sha224_state[1]; + c = ctx->sha224_state[2]; + d = ctx->sha224_state[3]; + e = ctx->sha224_state[4]; + f = ctx->sha224_state[5]; + g = ctx->sha224_state[6]; + h = ctx->sha224_state[7]; + + for (i = 0; i < 16; i++) { + GET_UINT32_BE(W[i], data, 4 * i); + SHA2CORE_SHA256(a, b, c, d, e, f, g, h, W[i], K_SHA256[i]); + } + + for (i = 16; i < 64; i++) { + SHA2CORE_SHA256(a, b, c, d, e, f, g, h, UPDATEW_SHA256(W, i), + K_SHA256[i]); + } + + /* Update state */ + ctx->sha224_state[0] += a; + ctx->sha224_state[1] += b; + ctx->sha224_state[2] += c; + ctx->sha224_state[3] += d; + ctx->sha224_state[4] += e; + ctx->sha224_state[5] += f; + ctx->sha224_state[6] += g; + ctx->sha224_state[7] += h; + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha224_init(sha224_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->sha224_total = 0; + ctx->sha224_state[0] = 0xC1059ED8; + ctx->sha224_state[1] = 0x367CD507; + ctx->sha224_state[2] = 0x3070DD17; + ctx->sha224_state[3] = 0xF70E5939; + ctx->sha224_state[4] = 0xFFC00B31; + ctx->sha224_state[5] = 0x68581511; + ctx->sha224_state[6] = 0x64F98FA7; + ctx->sha224_state[7] = 0xBEFA4FA4; + + /* Tell that we are initialized */ + ctx->magic = SHA224_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha224_update(sha224_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + SHA224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->sha224_total & 0x3F); + fill = (u16)(SHA224_BLOCK_SIZE - left); + + ctx->sha224_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sha224_buffer + left, data_ptr, fill); EG(ret, err); + ret = sha224_process(ctx, ctx->sha224_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SHA224_BLOCK_SIZE) { + ret = sha224_process(ctx, data_ptr); EG(ret, err); + data_ptr += SHA224_BLOCK_SIZE; + remain_ilen -= SHA224_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sha224_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize. Returns 0 on success, -1 on error.*/ +int sha224_final(sha224_context *ctx, u8 output[SHA224_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SHA224_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + SHA224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = ctx->sha224_total % SHA224_BLOCK_SIZE; + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sha224_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SHA224_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_BE(8 * ctx->sha224_total, last_padded_block, + (2 * SHA224_BLOCK_SIZE) - sizeof(u64)); + ret = sha224_process(ctx, last_padded_block); EG(ret, err); + ret = sha224_process(ctx, last_padded_block + SHA224_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_BE(8 * ctx->sha224_total, last_padded_block, + SHA224_BLOCK_SIZE - sizeof(u64)); + ret = sha224_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_BE(ctx->sha224_state[0], output, 0); + PUT_UINT32_BE(ctx->sha224_state[1], output, 4); + PUT_UINT32_BE(ctx->sha224_state[2], output, 8); + PUT_UINT32_BE(ctx->sha224_state[3], output, 12); + PUT_UINT32_BE(ctx->sha224_state[4], output, 16); + PUT_UINT32_BE(ctx->sha224_state[5], output, 20); + PUT_UINT32_BE(ctx->sha224_state[6], output, 24); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA224_DIGEST_SIZE]) +{ + sha224_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha224_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha224_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha224_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int sha224(const u8 *input, u32 ilen, u8 output[SHA224_DIGEST_SIZE]) +{ + sha224_context ctx; + int ret; + + ret = sha224_init(&ctx); EG(ret, err); + ret = sha224_update(&ctx, input, ilen); EG(ret, err); + ret = sha224_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA224 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA224 */ diff --git a/crypto/libecc/src/hash/sha256.c b/crypto/libecc/src/hash/sha256.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha256.c @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA256 + +#include + +/* SHA-2 core processing */ +ATTRIBUTE_WARN_UNUSED_RET static int sha256_process(sha256_context *ctx, + const u8 data[SHA256_BLOCK_SIZE]) +{ + u32 a, b, c, d, e, f, g, h; + u32 W[64]; + unsigned int i; + int ret; + + MUST_HAVE((data != NULL), ret, err); + SHA256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + a = ctx->sha256_state[0]; + b = ctx->sha256_state[1]; + c = ctx->sha256_state[2]; + d = ctx->sha256_state[3]; + e = ctx->sha256_state[4]; + f = ctx->sha256_state[5]; + g = ctx->sha256_state[6]; + h = ctx->sha256_state[7]; + + for (i = 0; i < 16; i++) { + GET_UINT32_BE(W[i], data, 4 * i); + SHA2CORE_SHA256(a, b, c, d, e, f, g, h, W[i], K_SHA256[i]); + } + + for (i = 16; i < 64; i++) { + SHA2CORE_SHA256(a, b, c, d, e, f, g, h, UPDATEW_SHA256(W, i), + K_SHA256[i]); + } + + /* Update state */ + ctx->sha256_state[0] += a; + ctx->sha256_state[1] += b; + ctx->sha256_state[2] += c; + ctx->sha256_state[3] += d; + ctx->sha256_state[4] += e; + ctx->sha256_state[5] += f; + ctx->sha256_state[6] += g; + ctx->sha256_state[7] += h; + + ret = 0; + +err: + return ret; +} + +/* Init hash function */ +int sha256_init(sha256_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->sha256_total = 0; + ctx->sha256_state[0] = 0x6A09E667; + ctx->sha256_state[1] = 0xBB67AE85; + ctx->sha256_state[2] = 0x3C6EF372; + ctx->sha256_state[3] = 0xA54FF53A; + ctx->sha256_state[4] = 0x510E527F; + ctx->sha256_state[5] = 0x9B05688C; + ctx->sha256_state[6] = 0x1F83D9AB; + ctx->sha256_state[7] = 0x5BE0CD19; + + /* Tell that we are initialized */ + ctx->magic = SHA256_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Update hash function */ +int sha256_update(sha256_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + SHA256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->sha256_total & 0x3F); + fill = (u16)(SHA256_BLOCK_SIZE - left); + + ctx->sha256_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sha256_buffer + left, data_ptr, fill); EG(ret, err); + ret = sha256_process(ctx, ctx->sha256_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SHA256_BLOCK_SIZE) { + ret = sha256_process(ctx, data_ptr); EG(ret, err); + data_ptr += SHA256_BLOCK_SIZE; + remain_ilen -= SHA256_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sha256_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize */ +int sha256_final(sha256_context *ctx, u8 output[SHA256_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SHA256_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + SHA256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = (ctx->sha256_total % SHA256_BLOCK_SIZE); + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sha256_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SHA256_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_BE(8 * ctx->sha256_total, last_padded_block, + (2 * SHA256_BLOCK_SIZE) - sizeof(u64)); + ret = sha256_process(ctx, last_padded_block); EG(ret, err); + ret = sha256_process(ctx, last_padded_block + SHA256_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_BE(8 * ctx->sha256_total, last_padded_block, + SHA256_BLOCK_SIZE - sizeof(u64)); + ret = sha256_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_BE(ctx->sha256_state[0], output, 0); + PUT_UINT32_BE(ctx->sha256_state[1], output, 4); + PUT_UINT32_BE(ctx->sha256_state[2], output, 8); + PUT_UINT32_BE(ctx->sha256_state[3], output, 12); + PUT_UINT32_BE(ctx->sha256_state[4], output, 16); + PUT_UINT32_BE(ctx->sha256_state[5], output, 20); + PUT_UINT32_BE(ctx->sha256_state[6], output, 24); + PUT_UINT32_BE(ctx->sha256_state[7], output, 28); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +int sha256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA256_DIGEST_SIZE]) +{ + sha256_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha256_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha256_final(&ctx, output); + +err: + return ret; +} + +int sha256(const u8 *input, u32 ilen, u8 output[SHA256_DIGEST_SIZE]) +{ + sha256_context ctx; + int ret; + + ret = sha256_init(&ctx); EG(ret, err); + ret = sha256_update(&ctx, input, ilen); EG(ret, err); + ret = sha256_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA256 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA256 */ diff --git a/crypto/libecc/src/hash/sha3-224.c b/crypto/libecc/src/hash/sha3-224.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha3-224.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_224 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha3_224_init(sha3_224_context *ctx) +{ + int ret; + + ret = _sha3_init(ctx, SHA3_224_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = SHA3_224_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha3_224_update(sha3_224_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA3_224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_update((sha3_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int sha3_224_final(sha3_224_context *ctx, u8 output[SHA3_224_DIGEST_SIZE]) +{ + int ret; + + SHA3_224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_finalize((sha3_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha3_224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_224_DIGEST_SIZE]) +{ + sha3_224_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha3_224_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha3_224_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha3_224_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int sha3_224(const u8 *input, u32 ilen, u8 output[SHA3_224_DIGEST_SIZE]) +{ + sha3_224_context ctx; + int ret; + + ret = sha3_224_init(&ctx); EG(ret, err); + ret = sha3_224_update(&ctx, input, ilen); EG(ret, err); + ret = sha3_224_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA3_224 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA3_224 */ diff --git a/crypto/libecc/src/hash/sha3-256.c b/crypto/libecc/src/hash/sha3-256.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha3-256.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_256 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha3_256_init(sha3_256_context *ctx) +{ + int ret; + + ret = _sha3_init(ctx, SHA3_256_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = SHA3_256_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha3_256_update(sha3_256_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA3_256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_update((sha3_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int sha3_256_final(sha3_256_context *ctx, u8 output[SHA3_256_DIGEST_SIZE]) +{ + int ret; + + SHA3_256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_finalize((sha3_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha3_256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_256_DIGEST_SIZE]) +{ + sha3_256_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha3_256_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha3_256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha3_256_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int sha3_256(const u8 *input, u32 ilen, u8 output[SHA3_256_DIGEST_SIZE]) +{ + sha3_256_context ctx; + int ret; + + ret = sha3_256_init(&ctx); EG(ret, err); + ret = sha3_256_update(&ctx, input, ilen); EG(ret, err); + ret = sha3_256_final(&ctx, output); EG(ret, err); + +err: + return ret; +} + +#else /* WITH_HASH_SHA3_256 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA3_256 */ diff --git a/crypto/libecc/src/hash/sha3-384.c b/crypto/libecc/src/hash/sha3-384.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha3-384.c @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_384 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha3_384_init(sha3_384_context *ctx) +{ + int ret; + + ret = _sha3_init(ctx, SHA3_384_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = SHA3_384_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha3_384_update(sha3_384_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA3_384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_update((sha3_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int sha3_384_final(sha3_384_context *ctx, u8 output[SHA3_384_DIGEST_SIZE]) +{ + int ret; + + SHA3_384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_finalize((sha3_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha3_384_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_384_DIGEST_SIZE]) +{ + sha3_384_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha3_384_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + const u8 *buf = inputs[pos]; + u32 buflen = ilens[pos]; + + ret = sha3_384_update(&ctx, buf, buflen); EG(ret, err); + + pos += 1; + } + + ret = sha3_384_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int sha3_384(const u8 *input, u32 ilen, u8 output[SHA3_384_DIGEST_SIZE]) +{ + sha3_384_context ctx; + int ret; + + ret = sha3_384_init(&ctx); EG(ret, err); + ret = sha3_384_update(&ctx, input, ilen); EG(ret, err); + ret = sha3_384_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA3_384 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA3_384 */ diff --git a/crypto/libecc/src/hash/sha3-512.c b/crypto/libecc/src/hash/sha3-512.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha3-512.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA3_512 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha3_512_init(sha3_512_context *ctx) +{ + int ret; + + ret = _sha3_init(ctx, SHA3_512_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = SHA3_512_HASH_MAGIC; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha3_512_update(sha3_512_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA3_512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_update((sha3_context *)ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int sha3_512_final(sha3_512_context *ctx, u8 output[SHA3_512_DIGEST_SIZE]) +{ + int ret; + + SHA3_512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _sha3_finalize((sha3_context *)ctx, output); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha3_512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA3_512_DIGEST_SIZE]) +{ + sha3_512_context ctx; + int ret, pos = 0; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha3_512_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha3_512_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha3_512_final(&ctx, output); + +err: + return ret; +} + +/* + * Single call version performing init/update/final on given input. + * Returns 0 on success, -1 on error. + */ +int sha3_512(const u8 *input, u32 ilen, u8 output[SHA3_512_DIGEST_SIZE]) +{ + sha3_512_context ctx; + int ret; + + ret = sha3_512_init(&ctx); EG(ret, err); + ret = sha3_512_update(&ctx, input, ilen); EG(ret, err); + ret = sha3_512_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA3_512 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA3_512 */ diff --git a/crypto/libecc/src/hash/sha3.c b/crypto/libecc/src/hash/sha3.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha3.c @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +#if defined(WITH_HASH_SHA3_224) || defined(WITH_HASH_SHA3_256) || defined(WITH_HASH_SHA3_384) || defined(WITH_HASH_SHA3_512) +#include +#include + +/* Init function depending on the digest size. Return 0 on success, -1 on error. */ +int _sha3_init(sha3_context *ctx, u8 digest_size) +{ + int ret; + + /* + * Check given inpur digest size: we only consider KECCAK versions + * mapped on SHA-3 instances (224, 256, 384, 512). + */ + MUST_HAVE(((digest_size == (224/8)) || (digest_size == (256/8)) || + (digest_size == (384/8)) || (digest_size == (512/8))), ret, err); + MUST_HAVE((ctx != NULL), ret, err); + + /* Zeroize the internal state */ + ret = local_memset(ctx->sha3_state, 0, sizeof(ctx->sha3_state)); EG(ret, err); + + ctx->sha3_idx = 0; + ctx->sha3_digest_size = digest_size; + ctx->sha3_block_size = (u8)((KECCAK_SLICES * KECCAK_SLICES * sizeof(u64)) - (u8)(2 * digest_size)); + + /* Detect endianness */ + ctx->sha3_endian = arch_is_big_endian() ? SHA3_BIG : SHA3_LITTLE; + +err: + return ret; +} + +/* Update hash function. Returns 0 on sucess, -1 on error. */ +int _sha3_update(sha3_context *ctx, const u8 *input, u32 ilen) +{ + u32 i; + u8 *state; + int ret; + + MUST_HAVE(((ctx != NULL) && ((input != NULL) || (ilen == 0))), ret, err); + + state = (u8*)(ctx->sha3_state); + + for (i = 0; i < ilen; i++) { + u64 idx = (ctx->sha3_endian == SHA3_LITTLE) ? ctx->sha3_idx : SWAP64_Idx(ctx->sha3_idx); + ctx->sha3_idx++; + /* Update the state, and adapt endianness order */ + state[idx] ^= input[i]; + if(ctx->sha3_idx == ctx->sha3_block_size){ + KECCAKF(ctx->sha3_state); + ctx->sha3_idx = 0; + } + } + + ret = 0; + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int _sha3_finalize(sha3_context *ctx, u8 *output) +{ + unsigned int i; + u8 *state; + int ret; + + MUST_HAVE((output != NULL) && (ctx != NULL), ret, err); + MUST_HAVE((ctx->sha3_digest_size <= sizeof(ctx->sha3_state)), ret, err); + + state = (u8*)(ctx->sha3_state); + + /* Proceed with the padding of the last block */ + /* Compute the index depending on the endianness */ + if (ctx->sha3_endian == SHA3_LITTLE) { + /* Little endian case */ + state[ctx->sha3_idx] ^= 0x06; + state[ctx->sha3_block_size - 1] ^= 0x80; + } else { + /* Big endian case */ + state[SWAP64_Idx(ctx->sha3_idx)] ^= 0x06; + state[SWAP64_Idx(ctx->sha3_block_size - 1)] ^= 0x80; + } + KECCAKF(ctx->sha3_state); + for(i = 0; i < ctx->sha3_digest_size; i++){ + output[i] = (ctx->sha3_endian == SHA3_LITTLE) ? state[i] : state[SWAP64_Idx(i)]; + } + + ret = 0; + +err: + return ret; +} + +#else +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif diff --git a/crypto/libecc/src/hash/sha384.c b/crypto/libecc/src/hash/sha384.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha384.c @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA384 + +#include + +/* SHA-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static int sha384_process(sha384_context *ctx, + const u8 data[SHA384_BLOCK_SIZE]) +{ + u64 a, b, c, d, e, f, g, h; + u64 W[80]; + unsigned int i; + int ret; + + MUST_HAVE((data != NULL), ret, err); + SHA384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Init our inner variables */ + a = ctx->sha384_state[0]; + b = ctx->sha384_state[1]; + c = ctx->sha384_state[2]; + d = ctx->sha384_state[3]; + e = ctx->sha384_state[4]; + f = ctx->sha384_state[5]; + g = ctx->sha384_state[6]; + h = ctx->sha384_state[7]; + + for (i = 0; i < 16; i++) { + GET_UINT64_BE(W[i], data, 8 * i); + SHA2CORE_SHA512(a, b, c, d, e, f, g, h, W[i], K_SHA512[i]); + } + + for (i = 16; i < 80; i++) { + SHA2CORE_SHA512(a, b, c, d, e, f, g, h, UPDATEW_SHA512(W, i), + K_SHA512[i]); + } + + /* Update state */ + ctx->sha384_state[0] += a; + ctx->sha384_state[1] += b; + ctx->sha384_state[2] += c; + ctx->sha384_state[3] += d; + ctx->sha384_state[4] += e; + ctx->sha384_state[5] += f; + ctx->sha384_state[6] += g; + ctx->sha384_state[7] += h; + + ret = 0; + +err: + return ret; +} + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha384_init(sha384_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->sha384_total[0] = ctx->sha384_total[1] = 0; + ctx->sha384_state[0] = (u64)(0xCBBB9D5DC1059ED8); + ctx->sha384_state[1] = (u64)(0x629A292A367CD507); + ctx->sha384_state[2] = (u64)(0x9159015A3070DD17); + ctx->sha384_state[3] = (u64)(0x152FECD8F70E5939); + ctx->sha384_state[4] = (u64)(0x67332667FFC00B31); + ctx->sha384_state[5] = (u64)(0x8EB44A8768581511); + ctx->sha384_state[6] = (u64)(0xDB0C2E0D64F98FA7); + ctx->sha384_state[7] = (u64)(0x47B5481DBEFA4FA4); + + /* Tell that we are initialized */ + ctx->magic = SHA384_HASH_MAGIC; + ret = 0; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha384_update(sha384_context *ctx, const u8 *input, u32 ilen) +{ + u32 left; + u32 fill; + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + int ret; + + MUST_HAVE((input != NULL), ret, err); + SHA384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->sha384_total[0] & 0x7F); + fill = (SHA384_BLOCK_SIZE - left); + + ADD_UINT128_UINT64(ctx->sha384_total[0], ctx->sha384_total[1], ilen); + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sha384_buffer + left, data_ptr, fill); EG(ret, err); + ret = sha384_process(ctx, ctx->sha384_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SHA384_BLOCK_SIZE) { + ret = sha384_process(ctx, data_ptr); EG(ret, err); + data_ptr += SHA384_BLOCK_SIZE; + remain_ilen -= SHA384_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sha384_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* + * Finalize hash function. Returns 0 on success, -1 on error. In all + * cases (success or error), hash context is no more usable after the + * call. + */ +int sha384_final(sha384_context *ctx, u8 output[SHA384_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SHA384_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + SHA384_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = (ctx->sha384_total[0] % SHA384_BLOCK_SIZE); + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sha384_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SHA384_BLOCK_SIZE - 1 - (2 * sizeof(u64)))) { + /* We need an additional block */ + PUT_MUL8_UINT128_BE(ctx->sha384_total[0], ctx->sha384_total[1], + last_padded_block, + 2 * (SHA384_BLOCK_SIZE - sizeof(u64))); + ret = sha384_process(ctx, last_padded_block); EG(ret, err); + ret = sha384_process(ctx, last_padded_block + SHA384_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_MUL8_UINT128_BE(ctx->sha384_total[0], ctx->sha384_total[1], + last_padded_block, + SHA384_BLOCK_SIZE - (2 * sizeof(u64))); + ret = sha384_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT64_BE(ctx->sha384_state[0], output, 0); + PUT_UINT64_BE(ctx->sha384_state[1], output, 8); + PUT_UINT64_BE(ctx->sha384_state[2], output, 16); + PUT_UINT64_BE(ctx->sha384_state[3], output, 24); + PUT_UINT64_BE(ctx->sha384_state[4], output, 32); + PUT_UINT64_BE(ctx->sha384_state[5], output, 40); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha384_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA384_DIGEST_SIZE]) +{ + sha384_context ctx; + int pos = 0; + int ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha384_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + const u8 *buf = inputs[pos]; + u32 buflen = ilens[pos]; + + ret = sha384_update(&ctx, buf, buflen); EG(ret, err); + pos += 1; + } + + ret = sha384_final(&ctx, output); + +err: + return ret; +} + +/* init/update/finalize on a single buffer 'input' of length 'ilen'. */ +int sha384(const u8 *input, u32 ilen, u8 output[SHA384_DIGEST_SIZE]) +{ + sha384_context ctx; + int ret; + + ret = sha384_init(&ctx); EG(ret, err); + ret = sha384_update(&ctx, input, ilen); EG(ret, err); + ret = sha384_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA384 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA384 */ diff --git a/crypto/libecc/src/hash/sha512-224.c b/crypto/libecc/src/hash/sha512-224.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha512-224.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA512_224 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha512_224_init(sha512_224_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->sha512_total[0] = ctx->sha512_total[1] = 0; + ctx->sha512_state[0] = (u64)(0x8C3D37C819544DA2); + ctx->sha512_state[1] = (u64)(0x73E1996689DCD4D6); + ctx->sha512_state[2] = (u64)(0x1DFAB7AE32FF9C82); + ctx->sha512_state[3] = (u64)(0x679DD514582F9FCF); + ctx->sha512_state[4] = (u64)(0x0F6D2B697BD44DA8); + ctx->sha512_state[5] = (u64)(0x77E36F7304C48942); + ctx->sha512_state[6] = (u64)(0x3F9D85A86A1D36C8); + ctx->sha512_state[7] = (u64)(0x1112E6AD91D692A1); + + /* Tell that we are initialized */ + ctx->magic = SHA512_224_HASH_MAGIC; + ret = 0; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha512_224_update(sha512_224_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA512_224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = sha512_core_update(ctx, input, ilen); + +err: + return ret; +} + +/* Finalize hash function. Returns 0 on success, -1 on error. */ +int sha512_224_final(sha512_224_context *ctx, u8 output[SHA512_224_DIGEST_SIZE]) +{ + int ret; + + SHA512_224_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = sha512_core_final(ctx, output, SHA512_224_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha512_224_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA512_224_DIGEST_SIZE]) +{ + sha512_224_context ctx; + int pos = 0; + int ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha512_224_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha512_224_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha512_224_final(&ctx, output); + +err: + return ret; +} + +/* init/update/finalize on a single buffer 'input' of length 'ilen'. */ +int sha512_224(const u8 *input, u32 ilen, u8 output[SHA512_224_DIGEST_SIZE]) +{ + sha512_224_context ctx; + int ret; + + ret = sha512_224_init(&ctx); EG(ret, err); + ret = sha512_224_update(&ctx, input, ilen); EG(ret, err); + ret = sha512_224_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA512_224 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA512_224 */ diff --git a/crypto/libecc/src/hash/sha512-256.c b/crypto/libecc/src/hash/sha512-256.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha512-256.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA512_256 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha512_256_init(sha512_256_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->sha512_total[0] = ctx->sha512_total[1] = 0; + ctx->sha512_state[0] = (u64)(0x22312194FC2BF72C); + ctx->sha512_state[1] = (u64)(0x9F555FA3C84C64C2); + ctx->sha512_state[2] = (u64)(0x2393B86B6F53B151); + ctx->sha512_state[3] = (u64)(0x963877195940EABD); + ctx->sha512_state[4] = (u64)(0x96283EE2A88EFFE3); + ctx->sha512_state[5] = (u64)(0xBE5E1E2553863992); + ctx->sha512_state[6] = (u64)(0x2B0199FC2C85B8AA); + ctx->sha512_state[7] = (u64)(0x0EB72DDC81C52CA2); + + /* Tell that we are initialized */ + ctx->magic = SHA512_256_HASH_MAGIC; + ret = 0; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha512_256_update(sha512_256_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA512_256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = sha512_core_update(ctx, input, ilen); + +err: + return ret; +} + +/* + * Finalize hash function. Returns 0 on success, -1 on error. + */ +int sha512_256_final(sha512_256_context *ctx, u8 output[SHA512_256_DIGEST_SIZE]) +{ + int ret; + + SHA512_256_HASH_CHECK_INITIALIZED(ctx, ret, err); + ret = sha512_core_final(ctx, output, SHA512_256_DIGEST_SIZE); EG(ret, err); + + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha512_256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA512_256_DIGEST_SIZE]) +{ + sha512_256_context ctx; + int pos = 0; + int ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha512_256_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha512_256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha512_256_final(&ctx, output); + +err: + return ret; +} + +/* init/update/finalize on a single buffer 'input' of length 'ilen'. */ +int sha512_256(const u8 *input, u32 ilen, u8 output[SHA512_256_DIGEST_SIZE]) +{ + sha512_256_context ctx; + int ret; + + ret = sha512_256_init(&ctx); EG(ret, err); + ret = sha512_256_update(&ctx, input, ilen); EG(ret, err); + ret = sha512_256_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA512_256 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA512_256 */ diff --git a/crypto/libecc/src/hash/sha512.c b/crypto/libecc/src/hash/sha512.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha512.c @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHA512 + +#include + +/* Init hash function. Returns 0 on success, -1 on error. */ +int sha512_init(sha512_context *ctx) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ctx->sha512_total[0] = ctx->sha512_total[1] = 0; + ctx->sha512_state[0] = (u64)(0x6A09E667F3BCC908); + ctx->sha512_state[1] = (u64)(0xBB67AE8584CAA73B); + ctx->sha512_state[2] = (u64)(0x3C6EF372FE94F82B); + ctx->sha512_state[3] = (u64)(0xA54FF53A5F1D36F1); + ctx->sha512_state[4] = (u64)(0x510E527FADE682D1); + ctx->sha512_state[5] = (u64)(0x9B05688C2B3E6C1F); + ctx->sha512_state[6] = (u64)(0x1F83D9ABFB41BD6B); + ctx->sha512_state[7] = (u64)(0x5BE0CD19137E2179); + + /* Tell that we are initialized */ + ctx->magic = SHA512_HASH_MAGIC; + ret = 0; + +err: + return ret; +} + +/* Update hash function. Returns 0 on success, -1 on error. */ +int sha512_update(sha512_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHA512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = sha512_core_update(ctx, input, ilen); + +err: + return ret; +} + +/* + * Finalize hash function. Returns 0 on success, -1 on error. */ +int sha512_final(sha512_context *ctx, u8 output[SHA512_DIGEST_SIZE]) +{ + int ret; + + SHA512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = sha512_core_final(ctx, output, SHA512_DIGEST_SIZE); EG(ret, err); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + ret = 0; + +err: + return ret; +} + +/* + * Scattered version performing init/update/finalize on a vector of buffers + * 'inputs' with the length of each buffer passed via 'ilens'. The function + * loops on pointers in 'inputs' until it finds a NULL pointer. The function + * returns 0 on success, -1 on error. + */ +int sha512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHA512_DIGEST_SIZE]) +{ + sha512_context ctx; + int pos = 0; + int ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sha512_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sha512_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sha512_final(&ctx, output); + +err: + return ret; +} + +/* init/update/finalize on a single buffer 'input' of length 'ilen'. */ +int sha512(const u8 *input, u32 ilen, u8 output[SHA512_DIGEST_SIZE]) +{ + sha512_context ctx; + int ret; + + ret = sha512_init(&ctx); EG(ret, err); + ret = sha512_update(&ctx, input, ilen); EG(ret, err); + ret = sha512_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHA512 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA512 */ diff --git a/crypto/libecc/src/hash/sha512_core.c b/crypto/libecc/src/hash/sha512_core.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sha512_core.c @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_HASH_SHA512) || defined(WITH_HASH_SHA512_224) || defined(WITH_HASH_SHA512_256) +#include + +/* SHA-2 core processing. Returns 0 on success, -1 on error. */ +ATTRIBUTE_WARN_UNUSED_RET static int sha512_core_process(sha512_core_context *ctx, + const u8 data[SHA512_CORE_BLOCK_SIZE]) +{ + u64 a, b, c, d, e, f, g, h; + u64 W[80]; + unsigned int i; + int ret; + + MUST_HAVE(((ctx != NULL) && (data != NULL)), ret, err); + + /* Init our inner variables */ + a = ctx->sha512_state[0]; + b = ctx->sha512_state[1]; + c = ctx->sha512_state[2]; + d = ctx->sha512_state[3]; + e = ctx->sha512_state[4]; + f = ctx->sha512_state[5]; + g = ctx->sha512_state[6]; + h = ctx->sha512_state[7]; + + for (i = 0; i < 16; i++) { + GET_UINT64_BE(W[i], data, 8 * i); + SHA2CORE_SHA512(a, b, c, d, e, f, g, h, W[i], K_SHA512[i]); + } + + for (i = 16; i < 80; i++) { + SHA2CORE_SHA512(a, b, c, d, e, f, g, h, UPDATEW_SHA512(W, i), + K_SHA512[i]); + } + + /* Update state */ + ctx->sha512_state[0] += a; + ctx->sha512_state[1] += b; + ctx->sha512_state[2] += c; + ctx->sha512_state[3] += d; + ctx->sha512_state[4] += e; + ctx->sha512_state[5] += f; + ctx->sha512_state[6] += g; + ctx->sha512_state[7] += h; + + ret = 0; + +err: + return ret; +} + +/* Core update hash function. Returns 0 on success, -1 on error. */ +int sha512_core_update(sha512_core_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE(((ctx != NULL) && ((input != NULL) || (ilen == 0))), ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = ctx->sha512_total[0] & 0x7F; + fill = (u16)(SHA512_CORE_BLOCK_SIZE - left); + + ADD_UINT128_UINT64(ctx->sha512_total[0], ctx->sha512_total[1], ilen); + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sha512_buffer + left, data_ptr, fill); EG(ret, err); + ret = sha512_core_process(ctx, ctx->sha512_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SHA512_CORE_BLOCK_SIZE) { + ret = sha512_core_process(ctx, data_ptr); EG(ret, err); + data_ptr += SHA512_CORE_BLOCK_SIZE; + remain_ilen -= SHA512_CORE_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sha512_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Core finalize. Returns 0 on success, -1 on error. */ +int sha512_core_final(sha512_core_context *ctx, u8 *output, u32 output_size) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SHA512_CORE_BLOCK_SIZE]; + int ret; + + MUST_HAVE(((ctx != NULL) && (output != NULL)), ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = ctx->sha512_total[0] % SHA512_CORE_BLOCK_SIZE; + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sha512_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SHA512_CORE_BLOCK_SIZE - 1 - (2 * sizeof(u64)))) { + /* We need an additional block */ + PUT_MUL8_UINT128_BE(ctx->sha512_total[0], ctx->sha512_total[1], + last_padded_block, + 2 * (SHA512_CORE_BLOCK_SIZE - sizeof(u64))); + ret = sha512_core_process(ctx, last_padded_block); EG(ret, err); + ret = sha512_core_process(ctx, last_padded_block + SHA512_CORE_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_MUL8_UINT128_BE(ctx->sha512_total[0], ctx->sha512_total[1], + last_padded_block, + SHA512_CORE_BLOCK_SIZE - (2 * sizeof(u64))); + ret = sha512_core_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result truncated to the output size */ + if(output_size >= SHA512_CORE_DIGEST_SIZE){ + PUT_UINT64_BE(ctx->sha512_state[0], output, 0); + PUT_UINT64_BE(ctx->sha512_state[1], output, 8); + PUT_UINT64_BE(ctx->sha512_state[2], output, 16); + PUT_UINT64_BE(ctx->sha512_state[3], output, 24); + PUT_UINT64_BE(ctx->sha512_state[4], output, 32); + PUT_UINT64_BE(ctx->sha512_state[5], output, 40); + PUT_UINT64_BE(ctx->sha512_state[6], output, 48); + PUT_UINT64_BE(ctx->sha512_state[7], output, 56); + } else { + u8 tmp_output[SHA512_CORE_DIGEST_SIZE] = { 0 }; + PUT_UINT64_BE(ctx->sha512_state[0], tmp_output, 0); + PUT_UINT64_BE(ctx->sha512_state[1], tmp_output, 8); + PUT_UINT64_BE(ctx->sha512_state[2], tmp_output, 16); + PUT_UINT64_BE(ctx->sha512_state[3], tmp_output, 24); + PUT_UINT64_BE(ctx->sha512_state[4], tmp_output, 32); + PUT_UINT64_BE(ctx->sha512_state[5], tmp_output, 40); + PUT_UINT64_BE(ctx->sha512_state[6], tmp_output, 48); + PUT_UINT64_BE(ctx->sha512_state[7], tmp_output, 56); + ret = local_memcpy(output, tmp_output, output_size); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +#else /* defined(WITH_HASH_SHA512) || defined(WITH_HASH_SHA512_224) || defined(WITH_HASH_SHA512_256) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHA512 */ diff --git a/crypto/libecc/src/hash/shake.c b/crypto/libecc/src/hash/shake.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/shake.c @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* Init function depending on the digest size */ +int _shake_init(shake_context *ctx, u8 digest_size, u8 block_size) +{ + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + /* Zeroize the internal state */ + ret = local_memset(ctx->shake_state, 0, sizeof(ctx->shake_state)); EG(ret, err); + + ctx->shake_idx = 0; + ctx->shake_digest_size = digest_size; + ctx->shake_block_size = block_size; + + /* Detect endianness */ + ctx->shake_endian = arch_is_big_endian() ? SHAKE_BIG : SHAKE_LITTLE; + +err: + return ret; +} + +/* Update hash function */ +int _shake_update(shake_context *ctx, const u8 *input, u32 ilen) +{ + u32 i; + u8 *state; + int ret; + + MUST_HAVE((ctx != NULL) && ((input != NULL) || (ilen == 0)), ret, err); + + state = (u8*)(ctx->shake_state); + + for(i = 0; i < ilen; i++){ + /* Compute the index depending on the endianness */ + u64 idx = (ctx->shake_endian == SHAKE_LITTLE) ? ctx->shake_idx : SWAP64_Idx(ctx->shake_idx); + ctx->shake_idx++; + /* Update the state, and adapt endianness order */ + state[idx] ^= input[i]; + if(ctx->shake_idx == ctx->shake_block_size){ + KECCAKF(ctx->shake_state); + ctx->shake_idx = 0; + } + } + ret = 0; + +err: + return ret; +} + +/* Finalize hash function */ +int _shake_finalize(shake_context *ctx, u8 *output) +{ + unsigned int i; + u8 *state; + int ret; + + MUST_HAVE((ctx != NULL) && (output != NULL), ret, err); + MUST_HAVE((ctx->shake_digest_size <= sizeof(ctx->shake_state)), ret, err); + + state = (u8*)(ctx->shake_state); + + /* Proceed with the padding of the last block */ + /* Compute the index depending on the endianness */ + if(ctx->shake_endian == SHAKE_LITTLE){ + /* Little endian case */ + state[ctx->shake_idx] ^= 0x1f; + state[ctx->shake_block_size - 1] ^= 0x80; + } + else{ + /* Big endian case */ + state[SWAP64_Idx(ctx->shake_idx)] ^= 0x1f; + state[SWAP64_Idx(ctx->shake_block_size - 1)] ^= 0x80; + } + /* Produce the output. + * NOTE: we should have a fixed version of SHAKE producing an output size + * with size less than the state size. + */ + KECCAKF(ctx->shake_state); + for(i = 0; i < ctx->shake_digest_size; i++){ + output[i] = (ctx->shake_endian == SHAKE_LITTLE) ? state[i] : state[SWAP64_Idx(i)]; + } + + /* Uninit our context magic */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} diff --git a/crypto/libecc/src/hash/shake256.c b/crypto/libecc/src/hash/shake256.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/shake256.c @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SHAKE256 + +#include + +int shake256_init(shake256_context *ctx) +{ + int ret; + + ret = _shake_init(ctx, SHAKE256_DIGEST_SIZE, SHAKE256_BLOCK_SIZE); EG(ret, err); + + /* Tell that we are initialized */ + ctx->magic = SHAKE256_HASH_MAGIC; + +err: + return ret; +} + +int shake256_update(shake256_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + SHAKE256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _shake_update((shake_context *)ctx, input, ilen); + +err: + return ret; +} + +int shake256_final(shake256_context *ctx, u8 output[SHAKE256_DIGEST_SIZE]) +{ + int ret; + + SHAKE256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = _shake_finalize((shake_context *)ctx, output); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + +err: + return ret; +} + +int shake256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SHAKE256_DIGEST_SIZE]) +{ + shake256_context ctx; + int pos = 0, ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = shake256_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = shake256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = shake256_final(&ctx, output); + +err: + return ret; +} + +int shake256(const u8 *input, u32 ilen, u8 output[SHAKE256_DIGEST_SIZE]) +{ + int ret; + shake256_context ctx; + + ret = shake256_init(&ctx); EG(ret, err); + ret = shake256_update(&ctx, input, ilen); EG(ret, err); + ret = shake256_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SHAKE256 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SHAKE256 */ diff --git a/crypto/libecc/src/hash/sm3.c b/crypto/libecc/src/hash/sm3.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/sm3.c @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_HASH_SM3 + +#include + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) ]) << 24 ) \ + | ( ((u32) (b)[(i) + 1]) << 16 ) \ + | ( ((u32) (b)[(i) + 2]) << 8 ) \ + | ( ((u32) (b)[(i) + 3]) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +/* + * 64-bit integer manipulation macros (big endian) + */ +#ifndef PUT_UINT64_BE +#define PUT_UINT64_BE(n,b,i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 56 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 48 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 40 ); \ + (b)[(i) + 3] = (u8) ( (n) >> 32 ); \ + (b)[(i) + 4] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 5] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 6] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 7] = (u8) ( (n) ); \ +} while( 0 ) +#endif /* PUT_UINT64_BE */ + + + +static const u32 SM3_Tj_low = 0x79cc4519; +static const u32 SM3_Tj_high = 0x7a879d8a; + +/* Boolean functions FF_j and GG_j for 0 <= j <= 15 */ +#define FF_j_low(X, Y, Z) (((u32)(X)) ^ ((u32)(Y)) ^ ((u32)(Z))) +#define GG_j_low(X, Y, Z) (((u32)(X)) ^ ((u32)(Y)) ^ ((u32)(Z))) + +/* Boolean functions FF_j and GG_j for 16 <= j <= 63 */ +#define FF_j_high(X, Y, Z) ((((u32)(X)) & ((u32)(Y))) | \ + (((u32)(X)) & ((u32)(Z))) | \ + (((u32)(Y)) & ((u32)(Z)))) +#define GG_j_high(X, Y, Z) ((((u32)(X)) & ((u32)(Y))) | \ + ((~((u32)(X))) & ((u32)(Z)))) + +/* 32-bit bitwise cyclic shift. Only support shifts value y < 32 */ +#define _SM3_ROTL_(x, y) ((((u32)(x)) << (y)) | \ + (((u32)(x)) >> ((sizeof(u32) * 8) - (y)))) + +#define SM3_ROTL(x, y) ((((y) < (sizeof(u32) * 8)) && ((y) > 0)) ? (_SM3_ROTL_(x, y)) : (x)) + +/* Permutation Functions P_0 and P_1 */ +#define SM3_P_0(X) (((u32)X) ^ SM3_ROTL((X), 9) ^ SM3_ROTL((X), 17)) +#define SM3_P_1(X) (((u32)X) ^ SM3_ROTL((X), 15) ^ SM3_ROTL((X), 23)) + +/* SM3 Iterative Compression Process + * NOTE: ctx and data sanity checks are performed by the caller (this is an internal function) + */ +ATTRIBUTE_WARN_UNUSED_RET static int sm3_process(sm3_context *ctx, const u8 data[SM3_BLOCK_SIZE]) +{ + u32 A, B, C, D, E, F, G, H; + u32 SS1, SS2, TT1, TT2; + u32 W[68 + 64]; + unsigned int j; + int ret; + + /* Message Expansion Function ME */ + + for (j = 0; j < 16; j++) { + GET_UINT32_BE(W[j], data, 4 * j); + } + + for (j = 16; j < 68; j++) { + W[j] = SM3_P_1(W[j - 16] ^ W[j - 9] ^ (SM3_ROTL(W[j - 3], 15))) ^ + (SM3_ROTL(W[j - 13], 7)) ^ W[j - 6]; + } + + for (j = 0; j < 64; j++) { + W[j + 68] = W[j] ^ W[j + 4]; + } + + /* Compression Function CF */ + + A = ctx->sm3_state[0]; + B = ctx->sm3_state[1]; + C = ctx->sm3_state[2]; + D = ctx->sm3_state[3]; + E = ctx->sm3_state[4]; + F = ctx->sm3_state[5]; + G = ctx->sm3_state[6]; + H = ctx->sm3_state[7]; + + /* + * Note: in a previous version of the code, we had two loops for j from + * 0 to 15 and then from 16 to 63 with SM3_ROTL(SM3_Tj_low, (j & 0x1F)) + * inside but clang-12 was smart enough to detect cases where SM3_ROTL + * macro is useless. On the other side, clang address sanitizer does not + * allow to remove the check for too high shift values in the macro + * itself. Creating 3 distinct loops instead of 2 to remove the & 0x1F + * is sufficient to satisfy everyone. + */ + + for (j = 0; j < 16; j++) { + SS1 = SM3_ROTL(SM3_ROTL(A, 12) + E + SM3_ROTL(SM3_Tj_low, j),7); + SS2 = SS1 ^ SM3_ROTL(A, 12); + TT1 = FF_j_low(A, B, C) + D + SS2 + W[j + 68]; + TT2 = GG_j_low(E, F, G) + H + SS1 + W[j]; + D = C; + C = SM3_ROTL(B, 9); + B = A; + A = TT1; + H = G; + G = SM3_ROTL(F, 19); + F = E; + E = SM3_P_0(TT2); + } + + for (j = 16; j < 32; j++) { + SS1 = SM3_ROTL(SM3_ROTL(A, 12) + E + SM3_ROTL(SM3_Tj_high, j), 7); + SS2 = SS1 ^ SM3_ROTL(A, 12); + TT1 = FF_j_high(A, B, C) + D + SS2 + W[j + 68]; + TT2 = GG_j_high(E, F, G) + H + SS1 + W[j]; + D = C; + C = SM3_ROTL(B, 9); + B = A; + A = TT1; + H = G; + G = SM3_ROTL(F, 19); + F = E; + E = SM3_P_0(TT2); + } + + for (j = 32; j < 64; j++) { + SS1 = SM3_ROTL(SM3_ROTL(A, 12) + E + SM3_ROTL(SM3_Tj_high, (j - 32)), 7); + SS2 = SS1 ^ SM3_ROTL(A, 12); + TT1 = FF_j_high(A, B, C) + D + SS2 + W[j + 68]; + TT2 = GG_j_high(E, F, G) + H + SS1 + W[j]; + D = C; + C = SM3_ROTL(B, 9); + B = A; + A = TT1; + H = G; + G = SM3_ROTL(F, 19); + F = E; + E = SM3_P_0(TT2); + } + + ctx->sm3_state[0] ^= A; + ctx->sm3_state[1] ^= B; + ctx->sm3_state[2] ^= C; + ctx->sm3_state[3] ^= D; + ctx->sm3_state[4] ^= E; + ctx->sm3_state[5] ^= F; + ctx->sm3_state[6] ^= G; + ctx->sm3_state[7] ^= H; + + ret = 0; + + return ret; +} + +/* Init hash function. Initialize state to SM3 defined IV. */ +int sm3_init(sm3_context *ctx) +{ + int ret; + + MUST_HAVE(ctx != NULL, ret, err); + + ctx->sm3_total = 0; + ctx->sm3_state[0] = 0x7380166F; + ctx->sm3_state[1] = 0x4914B2B9; + ctx->sm3_state[2] = 0x172442D7; + ctx->sm3_state[3] = 0xDA8A0600; + ctx->sm3_state[4] = 0xA96F30BC; + ctx->sm3_state[5] = 0x163138AA; + ctx->sm3_state[6] = 0xE38DEE4D; + ctx->sm3_state[7] = 0xB0FB0E4E; + + /* Tell that we are initialized */ + ctx->magic = SM3_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Update hash function */ +int sm3_update(sm3_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((input != NULL) || (ilen == 0), ret, err); + SM3_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->sm3_total & 0x3F); + fill = (u16)(SM3_BLOCK_SIZE - left); + + ctx->sm3_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->sm3_buffer + left, data_ptr, fill); EG(ret, err); + ret = sm3_process(ctx, ctx->sm3_buffer); EG(ret, err); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= SM3_BLOCK_SIZE) { + ret = sm3_process(ctx, data_ptr); EG(ret, err); + data_ptr += SM3_BLOCK_SIZE; + remain_ilen -= SM3_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->sm3_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +/* Finalize */ +int sm3_final(sm3_context *ctx, u8 output[SM3_DIGEST_SIZE]) +{ + unsigned int block_present = 0; + u8 last_padded_block[2 * SM3_BLOCK_SIZE]; + int ret; + + MUST_HAVE((output != NULL), ret, err); + SM3_HASH_CHECK_INITIALIZED(ctx, ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = (ctx->sm3_total % SM3_BLOCK_SIZE); + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->sm3_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x80 byte, beginning of padding */ + last_padded_block[block_present] = 0x80; + + /* Handle possible additional block */ + if (block_present > (SM3_BLOCK_SIZE - 1 - sizeof(u64))) { + /* We need an additional block */ + PUT_UINT64_BE(8 * ctx->sm3_total, last_padded_block, + (2 * SM3_BLOCK_SIZE) - sizeof(u64)); + ret = sm3_process(ctx, last_padded_block); EG(ret, err); + ret = sm3_process(ctx, last_padded_block + SM3_BLOCK_SIZE); EG(ret, err); + } else { + /* We do not need an additional block */ + PUT_UINT64_BE(8 * ctx->sm3_total, last_padded_block, + SM3_BLOCK_SIZE - sizeof(u64)); + ret = sm3_process(ctx, last_padded_block); EG(ret, err); + } + + /* Output the hash result */ + PUT_UINT32_BE(ctx->sm3_state[0], output, 0); + PUT_UINT32_BE(ctx->sm3_state[1], output, 4); + PUT_UINT32_BE(ctx->sm3_state[2], output, 8); + PUT_UINT32_BE(ctx->sm3_state[3], output, 12); + PUT_UINT32_BE(ctx->sm3_state[4], output, 16); + PUT_UINT32_BE(ctx->sm3_state[5], output, 20); + PUT_UINT32_BE(ctx->sm3_state[6], output, 24); + PUT_UINT32_BE(ctx->sm3_state[7], output, 28); + + /* Tell that we are uninitialized */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +int sm3_scattered(const u8 **inputs, const u32 *ilens, + u8 output[SM3_DIGEST_SIZE]) +{ + sm3_context ctx; + int pos = 0, ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = sm3_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = sm3_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = sm3_final(&ctx, output); + +err: + return ret; +} + +int sm3(const u8 *input, u32 ilen, u8 output[SM3_DIGEST_SIZE]) +{ + sm3_context ctx; + int ret; + + ret = sm3_init(&ctx); EG(ret, err); + ret = sm3_update(&ctx, input, ilen); EG(ret, err); + ret = sm3_final(&ctx, output); + +err: + return ret; +} + +#else /* WITH_HASH_SM3 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_HASH_SM3 */ diff --git a/crypto/libecc/src/hash/streebog.c b/crypto/libecc/src/hash/streebog.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/hash/streebog.c @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512) + +/* + * NOTE: we put STREEBOG256 and STREEBOG512 in the same compilation unit on + * purpose, so that we avoid duplicating the rather big tables that are shared + * between the two digest versions. + */ + +#include +#if defined(WITH_HASH_STREEBOG256) +#include +#endif +#if defined(WITH_HASH_STREEBOG512) +#include +#endif + +/*** Generic functions for both STREEBOG256 and STREEBOG512 ***/ +/* Init */ +ATTRIBUTE_WARN_UNUSED_RET static int streebog_init(streebog_context *ctx, u8 digest_size, u8 block_size) +{ + int ret; + + /* Sanity check */ + MUST_HAVE((digest_size == STREEBOG256_DIGEST_SIZE) || (digest_size == STREEBOG512_DIGEST_SIZE), ret, err); + + MUST_HAVE((ctx != NULL), ret, err); + + /* Zeroize the internal state */ + ret = local_memset(ctx, 0, sizeof(streebog_context)); EG(ret, err); + + if(digest_size == 32){ + ret = local_memset(ctx->h, 1, sizeof(ctx->h)); EG(ret, err); + } + + /* Initialize our digest size and block size */ + ctx->streebog_digest_size = digest_size; + ctx->streebog_block_size = block_size; + /* Detect endianness */ + ctx->streebog_endian = arch_is_big_endian() ? STREEBOG_BIG : STREEBOG_LITTLE; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int streebog_update(streebog_context *ctx, const u8 *input, u32 ilen) +{ + const u8 *data_ptr = input; + u32 remain_ilen = ilen; + u16 fill; + u8 left; + int ret; + + MUST_HAVE((ctx != NULL) && ((input != NULL) || (ilen == 0)), ret, err); + + /* Nothing to process, return */ + if (ilen == 0) { + ret = 0; + goto err; + } + + /* Get what's left in our local buffer */ + left = (ctx->streebog_total & 0x3F); + fill = (u16)(STREEBOG_BLOCK_SIZE - left); + + ctx->streebog_total += ilen; + + if ((left > 0) && (remain_ilen >= fill)) { + /* Copy data at the end of the buffer */ + ret = local_memcpy(ctx->streebog_buffer + left, data_ptr, fill); EG(ret, err); + streebog_process(ctx, ctx->streebog_buffer, (8 * STREEBOG_BLOCK_SIZE)); + data_ptr += fill; + remain_ilen -= fill; + left = 0; + } + + while (remain_ilen >= STREEBOG_BLOCK_SIZE) { + streebog_process(ctx, data_ptr, (8 * STREEBOG_BLOCK_SIZE)); + data_ptr += STREEBOG_BLOCK_SIZE; + remain_ilen -= STREEBOG_BLOCK_SIZE; + } + + if (remain_ilen > 0) { + ret = local_memcpy(ctx->streebog_buffer + left, data_ptr, remain_ilen); EG(ret, err); + } + + ret = 0; + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int streebog_final(streebog_context *ctx, u8 *output) +{ + unsigned int block_present = 0; + u8 last_padded_block[STREEBOG_BLOCK_SIZE]; + u64 Z[STREEBOG_BLOCK_U64_SIZE]; + unsigned int j; + u8 digest_size; + u8 idx; + int ret; + + MUST_HAVE((ctx != NULL) && (output != NULL), ret, err); + + digest_size = ctx->streebog_digest_size; + /* Sanity check */ + MUST_HAVE((digest_size == 32) || (digest_size == 64), ret, err); + + /* Zero init our Z */ + ret = local_memset(Z, 0, sizeof(Z)); EG(ret, err); + + /* Fill in our last block with zeroes */ + ret = local_memset(last_padded_block, 0, sizeof(last_padded_block)); EG(ret, err); + + /* This is our final step, so we proceed with the padding */ + block_present = (ctx->streebog_total % STREEBOG_BLOCK_SIZE); + if (block_present != 0) { + /* Copy what's left in our temporary context buffer */ + ret = local_memcpy(last_padded_block, ctx->streebog_buffer, + block_present); EG(ret, err); + } + + /* Put the 0x01 byte, beginning of padding */ + last_padded_block[block_present] = 0x01; + + streebog_process(ctx, last_padded_block, (8 * (ctx->streebog_total % STREEBOG_BLOCK_SIZE))); + + gN(ctx->h, ctx->N, Z); + gN(ctx->h, ctx->Sigma, Z); + + for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){ + ctx->h[j] = S64(ctx->h[j]); + } + + idx = 0; + + if(digest_size == 64){ + /* 512-bit hash case */ + STREEBOG_PUT_UINT64(ctx->h[0], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + STREEBOG_PUT_UINT64(ctx->h[1], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + STREEBOG_PUT_UINT64(ctx->h[2], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + STREEBOG_PUT_UINT64(ctx->h[3], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + } + /* 256 and 512-bit hash case */ + STREEBOG_PUT_UINT64(ctx->h[4], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + STREEBOG_PUT_UINT64(ctx->h[5], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + STREEBOG_PUT_UINT64(ctx->h[6], output, idx, ctx->streebog_endian); idx = (u8)(idx + 8); + STREEBOG_PUT_UINT64(ctx->h[7], output, idx, ctx->streebog_endian); + + ret = 0; + +err: + return ret; +} + +#if defined(WITH_HASH_STREEBOG256) + +/* Init */ +int streebog256_init(streebog256_context *ctx) +{ + int ret; + + ret = streebog_init(ctx, STREEBOG256_DIGEST_SIZE, STREEBOG256_BLOCK_SIZE); EG(ret, err); + + ctx->magic = STREEBOG256_HASH_MAGIC; + +err: + return ret; +} + +/* Update */ +int streebog256_update(streebog256_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + STREEBOG256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = streebog_update(ctx, input, ilen); + +err: + return ret; +} + +/* Finalize */ +int streebog256_final(streebog256_context *ctx, + u8 output[STREEBOG256_DIGEST_SIZE]) +{ + int ret; + + STREEBOG256_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = streebog_final(ctx, output); EG(ret, err); + + /* Uninit our context magic */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +int streebog256_scattered(const u8 **inputs, const u32 *ilens, + u8 output[STREEBOG256_DIGEST_SIZE]) +{ + streebog256_context ctx; + int pos = 0; + int ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = streebog256_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = streebog256_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = streebog256_final(&ctx, output); + +err: + return ret; +} + +int streebog256(const u8 *input, u32 ilen, u8 output[STREEBOG256_DIGEST_SIZE]) +{ + int ret; + streebog256_context ctx; + + ret = streebog256_init(&ctx); EG(ret, err); + ret = streebog256_update(&ctx, input, ilen); EG(ret, err); + ret = streebog256_final(&ctx, output); + +err: + return ret; +} + +#endif /* defined(WITH_HASH_STREEBOG256) */ + + +#if defined(WITH_HASH_STREEBOG512) + +/* Init */ +int streebog512_init(streebog512_context *ctx) +{ + int ret; + + ret = streebog_init(ctx, STREEBOG512_DIGEST_SIZE, STREEBOG512_BLOCK_SIZE); EG(ret, err); + + ctx->magic = STREEBOG512_HASH_MAGIC; + + ret = 0; + +err: + return ret; +} + +/* Update */ +int streebog512_update(streebog512_context *ctx, const u8 *input, u32 ilen) +{ + int ret; + + STREEBOG512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = streebog_update(ctx, input, ilen); + +err: + return ret; +} + +/* Finalize */ +int streebog512_final(streebog512_context *ctx, + u8 output[STREEBOG512_DIGEST_SIZE]) +{ + int ret; + + STREEBOG512_HASH_CHECK_INITIALIZED(ctx, ret, err); + + ret = streebog_final(ctx, output); EG(ret, err); + + /* Uninit our context magic */ + ctx->magic = WORD(0); + + ret = 0; + +err: + return ret; +} + +int streebog512_scattered(const u8 **inputs, const u32 *ilens, + u8 output[STREEBOG512_DIGEST_SIZE]) +{ + streebog512_context ctx; + int pos = 0; + int ret; + + MUST_HAVE((inputs != NULL) && (ilens != NULL) && (output != NULL), ret, err); + + ret = streebog512_init(&ctx); EG(ret, err); + + while (inputs[pos] != NULL) { + ret = streebog512_update(&ctx, inputs[pos], ilens[pos]); EG(ret, err); + pos += 1; + } + + ret = streebog512_final(&ctx, output); + +err: + return ret; +} + +int streebog512(const u8 *input, u32 ilen, u8 output[STREEBOG512_DIGEST_SIZE]) +{ + int ret; + streebog512_context ctx; + + ret = streebog512_init(&ctx); EG(ret, err); + ret = streebog512_update(&ctx, input, ilen); EG(ret, err); + ret = streebog512_final(&ctx, output); + +err: + return ret; +} + +#endif /* defined(WITH_HASH_STREEBOG512) */ + +#else /* !(defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512)) */ +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; + +#endif /* defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512) */ + diff --git a/crypto/libecc/src/nn/meson.build b/crypto/libecc/src/nn/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/meson.build @@ -0,0 +1,11 @@ +nn_mod_src = files( + 'nn_add.c', + 'nn.c', + 'nn_div.c', + 'nn_logical.c', + 'nn_modinv.c', + 'nn_mod_pow.c', + 'nn_mul.c', + 'nn_mul_redc1.c', + 'nn_rand.c', + ) diff --git a/crypto/libecc/src/nn/nn.c b/crypto/libecc/src/nn/nn.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn.c @@ -0,0 +1,608 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#define NN_CONSISTENCY_CHECK +#include + +/* + * Used for the conditional swap algorithm SCA + * resistance, see below in the implementation of + * nn_cnd_swap. + */ +#include + +/* + * Except otherwise specified, all functions accept *initialized* nn. + * The WORD(NN_MAX_WORD_LEN + WORDSIZE) magic is here to detect modules + * compiled with different WORDSIZE or NN_MAX_WORD_LEN and are binary + * incompatible. + */ + +#define NN_MAGIC ((word_t)((0xb4cf5d56e2023316ULL ^ (WORD(NN_MAX_WORD_LEN + WORDSIZE))))) + +/* + * Local helper internally used to check that the storage space + * above wlen is made of zero words. The function does NOT check + * if given nn has been initialized. This must have been done + * by the caller. + * + * Due to its performance cost, this consistency check is used + * in SHOULD_HAVE macros, meaning that it will only be present + * in DEBUG mode. Hence the ATTRIBUTE_UNUSED so that no warning + * (error in -Werror) is triggered at compilation time. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int ATTRIBUTE_UNUSED __nn_is_wlen_consistent(nn_src_t A) +{ + word_t val = 0; + u8 i; + + for (i = A->wlen; i < NN_MAX_WORD_LEN; i++) { + val |= (A)->val[i]; + } + + return (val == 0); +} + +/* + * Verify that pointed nn has already been initialized. This function + * should be used as a safety net in all function before using a nn + * received as parameter. Returns 0 on success, -1 on error. + */ +int nn_check_initialized(nn_src_t A) +{ + int ret; + + MUST_HAVE((A != NULL), ret, err); + MUST_HAVE((A->magic == NN_MAGIC), ret, err); + MUST_HAVE((A->wlen <= NN_MAX_WORD_LEN), ret, err); + SHOULD_HAVE(__nn_is_wlen_consistent(A), ret, err); + + ret = 0; + +err: + return ret; +} + +/* + * Initialize nn from expected initial byte length 'len', setting its wlen + * to associated (ceil) value and clearing whole storage space. Return 0 + * on success, -1 on error. + */ +int nn_init(nn_t A, u16 len) +{ + int ret; + u8 i; + + MUST_HAVE(((A != NULL) && (len <= NN_MAX_BYTE_LEN)), ret, err); + + A->wlen = (u8)BYTE_LEN_WORDS(len); + A->magic = NN_MAGIC; + + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + A->val[i] = WORD(0); + } + + ret = 0; + +err: + return ret; +} + +/* + * Uninitialize the pointed nn to prevent further use (magic field in the + * structure is zeroized). The associated storage space is also zeroized. If + * given pointer is NULL or does not point to an initialized nn, the function + * does nothing. + */ +void nn_uninit(nn_t A) +{ + if ((A != NULL) && (A->magic == NN_MAGIC)) { + int i; + + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + A->val[i] = WORD(0); + } + + A->wlen = 0; + A->magic = WORD(0); + } + + return; +} + +/* + * Set current value of pointed initialized nn to 0. Returns 0 on success, -1 + * on error. + */ +int nn_zero(nn_t A) +{ + int ret; + + ret = nn_check_initialized(A); EG(ret, err); + ret = nn_init(A, 0); + +err: + return ret; +} + +/* + * Set current value of pointed initialized nn to given word value. Returns 0 + * on success, -1 on error. + */ +int nn_set_word_value(nn_t A, word_t val) +{ + int ret; + + ret = nn_zero(A); EG(ret, err); + + A->val[0] = val; + A->wlen = 1; + +err: + return ret; +} + +/* + * Set current value of pointed initialized nn to 1. Returns 0 on success, -1 + * on error. + */ +int nn_one(nn_t A) +{ + return nn_set_word_value(A, WORD(1)); +} + +/* + * Conditionally swap two nn's content *in constant time*. Swapping is done + * if 'cnd' is not zero. Nothing is done otherwise. Returns 0 on success, -1 + * on error. + * + * Aliasing of inputs is supported. + */ +int nn_cnd_swap(int cnd, nn_t in1, nn_t in2) +{ + word_t mask = WORD_MASK_IFNOTZERO(cnd); + u8 len, i; + word_t t, r; + volatile word_t r_mask; + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + + MUST_HAVE((in1->wlen <= NN_MAX_WORD_LEN), ret, err); + MUST_HAVE((in2->wlen <= NN_MAX_WORD_LEN), ret, err); + + len = (in1->wlen >= in2->wlen) ? in1->wlen : in2->wlen; + + /* Use a random word for randomly masking the delta value hamming + * weight as proposed in Algorithm 4 of "Nonce@once: A Single-Trace + * EM Side Channel Attack on Several Constant-Time Elliptic + * Curve Implementations in Mobile Platforms" by Alam et al. + */ + ret = get_unsafe_random((u8*)&r, sizeof(r)); EG(ret, err); + r_mask = r; + + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + word_t local_mask = WORD_MASK_IFNOTZERO((i < len)); + t = ((in1->val[i] ^ in2->val[i]) & mask) ^ r_mask; + in1->val[i] ^= ((t & local_mask) ^ (r_mask & local_mask)); + in2->val[i] ^= ((t & local_mask) ^ (r_mask & local_mask)); + } + + t = (word_t)(((in1->wlen ^ in2->wlen) & mask) ^ r_mask); + in1->wlen ^= (u8)(t ^ r_mask); + in2->wlen ^= (u8)(t ^ r_mask); + +err: + return ret; +} + +/* + * Adjust internal wlen attribute of given nn to new_wlen. If internal wlen + * attribute value is reduced, words above that limit in A are zeroized. + * new_wlen must be in [0, NN_MAX_WORD_LEN]. + * The trimming is performed in constant time wrt to the length of the + * input to avoid leaking it. + * Returns 0 on success, -1 on error. + */ +int nn_set_wlen(nn_t A, u8 new_wlen) +{ + int ret; + u8 i; + + ret = nn_check_initialized(A); EG(ret, err); + MUST_HAVE((new_wlen <= NN_MAX_WORD_LEN), ret, err); + MUST_HAVE((A->wlen <= NN_MAX_WORD_LEN), ret, err); + + /* Trimming performed in constant time */ + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + A->val[i] = (word_t)(A->val[i] & WORD_MASK_IFZERO((i >= new_wlen))); + } + + A->wlen = new_wlen; + +err: + return ret; +} + +/* + * The function tests if given nn value is zero. The result of the test is given + * using 'iszero' out parameter (1 if nn is zero, 0 if it is not). The function + * returns 0 on success, -1 on error. 'iszero' is not meaningfull on error. + * When A is valid, check is done *in constant time*. + */ +int nn_iszero(nn_src_t A, int *iszero) +{ + int ret, notzero; + u8 i; + + ret = nn_check_initialized(A); EG(ret, err); + MUST_HAVE((A->wlen <= NN_MAX_WORD_LEN), ret, err); + MUST_HAVE((iszero != NULL), ret, err); + + notzero = 0; + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + int mask = ((i < A->wlen) ? 1 : 0); + notzero |= ((A->val[i] != 0) & mask); + } + + *iszero = !notzero; + +err: + return ret; +} + +/* + * The function tests if given nn value is one. The result of the test is given + * using 'isone' out parameter (1 if nn is one, 0 if it is not). The function + * returns 0 on success, -1 on error. 'isone' is not meaningfull on error. + * When A is valid, check is done *in constant time*. + */ +int nn_isone(nn_src_t A, int *isone) +{ + int ret, notone; + u8 i; + + ret = nn_check_initialized(A); EG(ret, err); + MUST_HAVE(!(A->wlen > NN_MAX_WORD_LEN), ret, err); + MUST_HAVE((isone != NULL), ret, err); + + /* val[0] access is ok no matter wlen value */ + notone = (A->val[0] != 1); + for (i = 1; i < NN_MAX_WORD_LEN; i++) { + int mask = ((i < A->wlen) ? 1 : 0); + notone |= ((A->val[i] != 0) & mask); + } + + *isone = !notone; + +err: + return ret; +} + +/* + * The function tests if given nn value is odd. The result of the test is given + * using 'isodd' out parameter (1 if nn is odd, 0 if it is not). The function + * returns 0 on success, -1 on error. 'isodd' is not meaningfull on error. + */ +int nn_isodd(nn_src_t A, int *isodd) +{ + int ret; + + ret = nn_check_initialized(A); EG(ret, err); + MUST_HAVE((isodd != NULL), ret, err); + + *isodd = (A->wlen != 0) && (A->val[0] & 1); + +err: + return ret; +} + +/* + * Compare given nn against given word value. This is done *in constant time* + * (only depending on the input length, not on its value or on the word value) + * when provided nn is valid. The function returns 0 on success and provides + * the comparison value in 'cmp' parameter. -1 is returned on error, in which + * case 'cmp' is not meaningful. + */ +int nn_cmp_word(nn_src_t in, word_t w, int *cmp) +{ + int ret, tmp = 0; + word_t mask; + u8 i; + + ret = nn_check_initialized(in); EG(ret, err); + MUST_HAVE((cmp != NULL), ret, err); + + /* No need to read, we can conclude */ + if (in->wlen == 0) { + *cmp = -(w != 0); + ret = 0; + goto err; + } + + /* + * Let's loop on all words above first one to see if one + * of those is non-zero. + */ + for (i = (u8)(in->wlen - 1); i > 0; i--) { + tmp |= (in->val[i] != 0); + } + + /* + * Compare first word of nn w/ w if needed. This + * is done w/ masking to avoid doing or not doing + * it based on 'tmp' (i.e. fact that a high word + * of nn is not zero). + */ + mask = WORD_MASK_IFZERO(tmp); + tmp += (int)(((word_t)(in->val[i] > w)) & (mask)); + tmp -= (int)(((word_t)(in->val[i] < w)) & (mask)); + *cmp = tmp; + +err: + return ret; +} + +/* + * Compare given two nn 'A' and '. This is done *in constant time* (only + * depending on the largest length of the inputs, not on their values). The + * function returns 0 on success and provides the comparison value in + * 'cmp' parameter (0 if A == B, -1 if A < B, +1 if A > B). -1 is returned + * on error, in which case 'cmp' is not meaningful. + * + * Aliasing of inputs is supported. + */ +int nn_cmp(nn_src_t A, nn_src_t B, int *cmp) +{ + int tmp, mask, ret, i; + u8 cmp_len; + + ret = nn_check_initialized(A); EG(ret, err); + ret = nn_check_initialized(B); EG(ret, err); + MUST_HAVE((cmp != NULL), ret, err); + + cmp_len = (A->wlen >= B->wlen) ? A->wlen : B->wlen; + + tmp = 0; + for (i = (cmp_len - 1); i >= 0; i--) { /* ok even if cmp_len is 0 */ + mask = !(tmp & 0x1); + tmp += ((A->val[i] > B->val[i]) & mask); + tmp -= ((A->val[i] < B->val[i]) & mask); + } + (*cmp) = tmp; + +err: + return ret; +} + +/* + * Copy given nn 'src_nn' value into 'dst_nn'. This is done *in constant time*. + * 'dst_nn' must point to a declared nn, but *need not be initialized*; it will + * be (manually) initialized by the function. 'src_nn' must have been + * initialized prior to the call. The function returns 0 on success, -1 on error. + * + * Alising of input and output is supported. + */ +int nn_copy(nn_t dst_nn, nn_src_t src_nn) +{ + int ret; + u8 i; + + MUST_HAVE((dst_nn != NULL), ret, err); + ret = nn_check_initialized(src_nn); EG(ret, err); + + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + dst_nn->val[i] = src_nn->val[i]; + } + + dst_nn->wlen = src_nn->wlen; + dst_nn->magic = NN_MAGIC; + +err: + return ret; +} + +/* + * Update wlen value of given nn if a set of words below wlen value are zero. + * The function is *not constant time*, i.e. it depends on the input value. + * The function returns 0 on sucess, -1 on error. + */ +int nn_normalize(nn_t in1) +{ + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + + while ((in1->wlen > 0) && (in1->val[in1->wlen - 1] == 0)) { + in1->wlen--; + } + +err: + return ret; +} + +/* + * Convert given consecutive WORD_BYTES bytes pointed by 'val' from network (big + * endian) order to host order. 'val' needs not point to a word-aligned region. + * The function returns 0 on success, -1 on error. On success, the result is + * provided in 'out'. 'out' is not meaningful on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _ntohw(const u8 *val, word_t *out) +{ + word_t res = 0; + u8 *res_buf = (u8 *)(&res); + int i, ret; + + MUST_HAVE(((val != NULL) && (out != NULL)), ret, err); + + if (arch_is_big_endian()) { + /* copy bytes, one by one to avoid alignement issues */ + for (i = 0; i < WORD_BYTES; i++) { + res_buf[i] = val[i]; + } + } else { + u8 tmp; + + for (i = 0; i < (WORD_BYTES / 2); i++) { + tmp = val[i]; + res_buf[i] = val[WORD_BYTES - i - 1]; + res_buf[WORD_BYTES - i - 1] = tmp; + } + + VAR_ZEROIFY(tmp); + } + + *out = res; + ret = 0; + +err: + return ret; +} + +/* Same as previous function but from host to network byte order. */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _htonw(const u8 *val, word_t *out) +{ + return _ntohw(val, out); +} + +/* + * 'out_nn' is expected to point to the storage location of a declared nn, + * which will be initialized by the function (i.e. given nn need not be + * initialized). The function then imports value (expected to be in big + * endian) from given buffer 'buf' of length 'buflen' into it. The function + * expects (and enforces) that buflen is less than or equal to NN_MAX_BYTE_LEN. + * The function returns 0 on success, -1 on error. + */ +int nn_init_from_buf(nn_t out_nn, const u8 *buf, u16 buflen) +{ + u8 tmp[NN_MAX_BYTE_LEN]; + u16 wpos; + int ret; + + MUST_HAVE(((out_nn != NULL) && (buf != NULL) && + (buflen <= NN_MAX_BYTE_LEN)), ret, err); + + ret = local_memset(tmp, 0, (u32)(NN_MAX_BYTE_LEN - buflen)); EG(ret, err); + ret = local_memcpy(tmp + NN_MAX_BYTE_LEN - buflen, buf, buflen); EG(ret, err); + + ret = nn_init(out_nn, buflen); EG(ret, err); + + for (wpos = 0; wpos < NN_MAX_WORD_LEN; wpos++) { + u16 buf_pos = (u16)((NN_MAX_WORD_LEN - wpos - 1) * WORD_BYTES); + ret = _ntohw(tmp + buf_pos, &(out_nn->val[wpos])); EG(ret, err); + } + + ret = local_memset(tmp, 0, NN_MAX_BYTE_LEN); + +err: + return ret; +} + +/* + * Export 'buflen' LSB bytes of given nn as a big endian buffer. If buffer + * length is larger than effective size of input nn, padding w/ zero is + * performed. If buffer size is smaller than input nn effective size, + * MSB bytes are simply lost in exported buffer. The function returns 0 + * on success, -1 on error. + */ +int nn_export_to_buf(u8 *buf, u16 buflen, nn_src_t in_nn) +{ + u8 *src_word_ptr, *dst_word_ptr; + const u8 wb = WORD_BYTES; + u16 remain = buflen; + int ret; + u8 i; + + MUST_HAVE((buf != NULL), ret, err); + ret = nn_check_initialized(in_nn); EG(ret, err); + + ret = local_memset(buf, 0, buflen); EG(ret, err); + + /* + * We consider each word in input nn one at a time and convert + * it to big endian in a temporary word. Based on remaining + * length of output buffer, we copy the LSB bytes of temporary + * word into it at current position. That way, filling of the + * buffer is performed from its end to its beginning, word by + * word, except for the last one, which may be shorten if + * given buffer length is not a multiple of word length. + */ + for (i = 0; remain && (i < in_nn->wlen); i++) { + u16 copylen = (remain > wb) ? wb : remain; + word_t val; + + ret = _htonw((const u8 *)&in_nn->val[i], &val); EG(ret, err); + + dst_word_ptr = (buf + buflen - (i * wb) - copylen); + src_word_ptr = (u8 *)(&val) + wb - copylen; + + ret = local_memcpy(dst_word_ptr, src_word_ptr, copylen); EG(ret, err); + src_word_ptr = NULL; + + remain = (u16)(remain - copylen); + } + +err: + return ret; +} + +/* + * Given a table 'tab' pointing to a set of 'tabsize' NN elements, the + * function copies the value of element at position idx (idx < tabsize) + * in 'out' parameters. Masking is used to avoid leaking which element + * was copied. + * + * Note that the main copying loop is done on the maximum bits for all + * NN elements and not based on the specific effective size of each + * NN elements in 'tab' + * + * Returns 0 on success, -1 on error. + * + * Aliasing of out and the selected element inside the tab is NOT supported. + */ +int nn_tabselect(nn_t out, u8 idx, nn_src_t *tab, u8 tabsize) +{ + u8 i, k; + word_t mask; + int ret; + + /* Basic sanity checks */ + MUST_HAVE(((tab != NULL) && (idx < tabsize)), ret, err); + + ret = nn_check_initialized(out); EG(ret, err); + + /* Zeroize out and enforce its size. */ + ret = nn_zero(out); EG(ret, err); + + out->wlen = 0; + + for (k = 0; k < tabsize; k++) { + /* Check current element is initialized */ + ret = nn_check_initialized(tab[k]); EG(ret, err); + + mask = WORD_MASK_IFNOTZERO(idx == k); + + out->wlen = (u8)(out->wlen | ((tab[k]->wlen) & mask)); + + for (i = 0; i < NN_MAX_WORD_LEN; i++) { + out->val[i] |= (tab[k]->val[i] & mask); + } + } + +err: + return ret; +} diff --git a/crypto/libecc/src/nn/nn_add.c b/crypto/libecc/src/nn/nn_add.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_add.c @@ -0,0 +1,613 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* + * This module provides conditional addition and subtraction functions between + * two nn: + * + * o out = in1 +/- in2 if cnd is not zero. + * o out = in1 if cnd is zero. + * + * The time taken by the operation does not depend on cnd value, i.e. it is + * constant time for that specific factor, nor on the values of in1 and in2. + * It still depends on the maximal length of in1 and in2. + * + * Common addition and subtraction functions are derived from those conditional + * versions. + */ + +/* + * Conditionally adds 'in2' to 'in1' according to "cnd", storing the result + * in "out" and returning the carry in 'carry' parameter on success. This + * is the lowest level function for conditional addition. The function + * returns 0 on success, -1 on error. + * + * Note that unlike "usual" addition, the function is *in general* not + * commutative, i.e. "_nn_cnd_add(cnd, out, in1, in2)" is not equivalent + * to "_nn_cnd_add(cnd, out, in2, in1)". It is commutative though if "cnd" + * is not zero or 'in1' == 'in2'. + * + * Aliasing of inputs and output is possible. "out" is initialized if needed, + * that is if not aliased to 'in1' or 'in2'. The length of "out" is set to + * the maximal length of 'in1' and 'in2'. Note that both 'in1' and 'in2' will + * be read to this maximal length. As our memory managment model assumes that + * storage arrays only contains zeros past the "wlen" index, correct results + * will be produced. The length of 'out' is not normalized on return. + * + * The runtime of this function should not depend on: + * o the value of "cnd", + * o the data stored in 'in1' and 'in2'. + * It depends on: + * o the maximal length of 'in1' and 'in2'. + * + * This function is for internal use only. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_cnd_add(int cnd, nn_t out, nn_src_t in1, nn_src_t in2, + word_t *carry) +{ + word_t tmp, carry1, carry2, _carry = WORD(0); + word_t mask = WORD_MASK_IFNOTZERO(cnd); + u8 i, loop_wlen; + int ret; + + MUST_HAVE((carry != NULL), ret, err); + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + + /* Handle aliasing */ + loop_wlen = LOCAL_MAX(in1->wlen, in2->wlen); + if ((out != in1) && (out != in2)) { + ret = nn_init(out, (u16)(loop_wlen * WORD_BYTES)); EG(ret, err); + } else { + ret = nn_set_wlen(out, loop_wlen); EG(ret, err); + } + + /* Perform addition one word at a time, propagating the carry. */ + for (i = 0; i < loop_wlen; i++) { + tmp = (word_t)(in1->val[i] + (in2->val[i] & mask)); + carry1 = (word_t)(tmp < in1->val[i]); + out->val[i] = (word_t)(tmp + _carry); + carry2 = (word_t)(out->val[i] < tmp); + /* There is at most one carry going out. */ + _carry = (word_t)(carry1 | carry2); + } + + (*carry) = _carry; + +err: + return ret; +} + +/* + * Conditionally adds 'in2' to 'in1' according to "cnd", storing the result + * in "out", including the potential carry overflowing past the maximal + * length of 'in1' and 'in2'. It is user responsibility to ensure that the + * resulting nn will not be higher than what can be supported. This is + * for instance guaranteed if both in1->wlen and in2->wlen are less than + * NN_MAX_WORD_LEN. Otherwise the function will error out which could leak + * information. + * + * Note that the length of the output depends the lengths of the inputs, + * but also on their values. + * It is the user responsibility to use this function carefully when + * constant time of an algorithm using this function is seeked. + * This choice was preferred above unconditionally increasing + * the length of the output by one, to ease the management of length + * explosion when multiple additions are performed. + * For finer carry propagation and length control the internal "_nn_cnd_add" + * function can be used. + * + * See "_nn_cnd_add" documentation above for further details. + * + * The function returns 0 on success, -1 on error. + */ +int nn_cnd_add(int cnd, nn_t out, nn_src_t in1, nn_src_t in2) +{ + word_t carry; + int ret; + + ret = _nn_cnd_add(cnd, out, in1, in2, &carry); EG(ret, err); + + /* We cannot allow a non-zero carry if out->wlen is at its limit */ + MUST_HAVE(((out->wlen != NN_MAX_WORD_LEN) || (!carry)), ret, err); + + if (out->wlen != NN_MAX_WORD_LEN) { + /* + * To maintain constant time, we perform carry addition in all + * cases. If carry is 0, no change is performed in practice, + * neither to 'out' value, nor to its length. + * Note that the length of the output can vary and make + * the time taken by further operations on it also vary. + */ + out->val[out->wlen] = carry; + out->wlen = (u8)(out->wlen + carry); + } + +err: + return ret; +} + +/* + * Unconditionally adds 'in2' to 'in1', storing the result in "out", + * including the potential carry overflowing past the maximal length of + * 'in1' and 'in2'. The function returns 0 on success, -1 on error. + * + * Note that the length of the output depends the lengths of the inputs, + * but also on their values. + * It is the user responsibility to use this function carefully when + * constant time of an algorithm using this function is seeked. + * + * See "_nn_cnd_add" documentation for further details. + * + */ +int nn_add(nn_t out, nn_src_t in1, nn_src_t in2) +{ + return nn_cnd_add(1, out, in1, in2); +} + +/* + * Compute out = in1 + w where 'in1' is an initialized nn and 'w' a word. It is + * caller responsibility to ensure that the result will fit in a nn (This is + * for instance guaranteed if 'in1' wlen is less than NN_MAX_WORD_LEN). The + * function returns 0 on succes, -1 on error. + * + * The result is stored in 'out' parameter. 'out' is initialized if needed (i.e. + * in case aliasing is not used) and is not normalized on return. + * + * Note that the length of the output depends the lengths of the inputs, + * but also on their values. + * It is the user responsibility to use this function carefully when + * constant time of an algorithm using this function is seeked. + * + * This function is for internal use only. + */ +ATTRIBUTE_WARN_UNUSED_RET static int nn_add_word(nn_t out, nn_src_t in1, word_t w) +{ + word_t carry, tmp; + u8 i, n_wlen; + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + + /* Handle aliasing */ + n_wlen = in1->wlen; + if (out != in1) { + ret = nn_init(out, (u16)(n_wlen * WORD_BYTES)); EG(ret, err); + } else { + ret = nn_set_wlen(out, n_wlen); EG(ret, err); + } + + /* No matter its value, propagate the carry. */ + carry = w; + for (i = 0; i < n_wlen; i++) { + tmp = (word_t)(in1->val[i] + carry); + carry = (word_t)(tmp < in1->val[i]); + out->val[i] = tmp; + } + + MUST_HAVE(((out->wlen != NN_MAX_WORD_LEN) || (!carry)), ret, err); + if (out->wlen != NN_MAX_WORD_LEN) { + /* + * To maintain constant time, we perform carry addition in all + * cases. If carry is 0, no change is performed in practice, + * neither to 'out' value, nor to its length. + * Note that the length of the output can vary and make + * the time taken by further operations on it will vary. + */ + out->val[out->wlen] = carry; + out->wlen = (u8)(out->wlen + carry); + } + +err: + return ret; +} + +/* + * Compute out = in1 + 1. Aliasing is supported i.e. nn_inc(in1, in1) works as + * expected and provides in1++. It is caller responsibility to ensure that the + * result will fit in a nn (This is for instance guaranteed if 'in1' wlen is + * less than NN_MAX_WORD_LEN). The function returns 0 on success, -1 on error. + * + * Note that the length of the output depends the lengths of the inputs, + * but also on their values. + * It is the user responsibility to use this function carefully when + * constant time of an algorithm using this function is seeked. + */ +int nn_inc(nn_t out, nn_src_t in1) +{ + return nn_add_word(out, in1, WORD(1)); +} + +/* + * Conditionally subtracts 'in2' from 'in1' according to "cnd", + * storing the result in "out": + * o out = in1 - in2 if cnd is not zero. + * o out = in1 if cnd is zero. + * + * 'in1' and 'in2' must point to initialized nn, such that the value of 'in1' + * is larger than 'in2'. Aliasing is supported, i.e. 'out' can point to the + * same nn as 'in1' or 'in2'. If aliasing is not used, 'out' is initialized by + * the function. The length of 'out' is set to the length of 'in1' + * and is not normalized on return. + * + * The function returns 0 on success, -1 on error. + */ +int nn_cnd_sub(int cnd, nn_t out, nn_src_t in1, nn_src_t in2) +{ + word_t tmp, borrow1, borrow2, borrow = WORD(0); + word_t mask = WORD_MASK_IFNOTZERO(cnd); + u8 loop_wlen, i; + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + + /* Handle aliasing */ + loop_wlen = LOCAL_MAX(in1->wlen, in2->wlen); + if ((out != in1) && (out != in2)) { + ret = nn_init(out, (u16)(loop_wlen * WORD_BYTES)); EG(ret, err); + } else { + ret = nn_set_wlen(out, in1->wlen); EG(ret, err); + } + + /* Perform subtraction one word at a time, propagating the borrow. */ + for (i = 0; i < loop_wlen; i++) { + tmp = (word_t)(in1->val[i] - (in2->val[i] & mask)); + borrow1 = (word_t)(tmp > in1->val[i]); + out->val[i] = (word_t)(tmp - borrow); + borrow2 = (word_t)(out->val[i] > tmp); + /* There is at most one borrow going out. */ + borrow = (word_t)(borrow1 | borrow2); + } + + /* We only support the in1 >= in2 case */ + ret = (borrow != WORD(0)) ? -1 : 0; + +err: + return ret; +} + +/* Same as the one above, but the subtraction is performed unconditionally. */ +int nn_sub(nn_t out, nn_src_t in1, nn_src_t in2) +{ + return nn_cnd_sub(1, out, in1, in2); +} + +/* + * Compute out = in1 - 1 where in1 is a *positive* integer. Aliasing is + * supported i.e. nn_dec(A, A) works as expected and provides A -= 1. + * The function returns 0 on success, -1 on error. + */ +int nn_dec(nn_t out, nn_src_t in1) +{ + const word_t w = WORD(1); + word_t tmp, borrow; + u8 n_wlen, i; + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + n_wlen = in1->wlen; + ret = nn_set_wlen(out, n_wlen); EG(ret, err); + + /* Perform subtraction w/ provided word and propagate the borrow */ + borrow = w; + for (i = 0; i < n_wlen; i++) { + tmp = (word_t)(in1->val[i] - borrow); + borrow = (word_t)(tmp > in1->val[i]); + out->val[i] = tmp; + } + + ret = (borrow != WORD(0)) ? -1 : 0; + +err: + return ret; +} + +/* + * The following functions handle modular arithmetic. Our outputs sizes do not + * need a "normalization" since everything will be bounded by the modular number + * size. + * + * Warning: the following functions are only useful when the inputs are < p, + * i.e. we suppose that the input are already reduced modulo p. These primitives + * are mostly useful for the Fp layer. Even though they give results when + * applied to inputs >= p, there is no guarantee that the result is indeed < p + * or correct whatsoever. + */ + +/* + * Compute out = in1 + in2 mod p. The function returns 0 on success, -1 on + * error. + * + * Aliasing not fully supported, for internal use only. + */ +static int _nn_mod_add(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p) +{ + int ret, larger, cmp; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + MUST_HAVE((p->wlen < NN_MAX_WORD_LEN), ret, err); /* otherwise carry could overflow */ + SHOULD_HAVE((!nn_cmp(in1, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE as documented above */ + SHOULD_HAVE((!nn_cmp(in2, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE as documented above */ + + ret = nn_add(out, in1, in2); EG(ret, err); + /* + * If previous addition extends out->wlen, this may have an effect on + * computation time of functions below. For that reason, we always + * normalize out->wlen to p->wlen + 1. Its length is set to that of + * p after the computations. + * + * We could also use _nn_cnd_add to catch the carry and deal + * with p's of size NN_MAX_WORD_LEN. + * It is still painful because we have no constraint on the lengths + * of in1 and in2 so getting a carry out does not necessarily mean + * that the sum is larger than p... + */ + ret = nn_set_wlen(out, (u8)(p->wlen + 1)); EG(ret, err); + ret = nn_cmp(out, p, &cmp); EG(ret, err); + larger = (cmp >= 0); + ret = nn_cnd_sub(larger, out, out, p); EG(ret, err); + ret = nn_set_wlen(out, p->wlen); + +err: + return ret; +} + +/* + * Compute out = in1 + in2 mod p. The function returns 0 on success, -1 on + * error. + * + * Aliasing is supported. + */ +int nn_mod_add(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p) +{ + int ret; + + if(out == p){ + nn p_cpy; + p_cpy.magic = WORD(0); + + ret = nn_copy(&p_cpy, p); EG(ret, err1); + ret = _nn_mod_add(out, in1, in2, &p_cpy); + +err1: + nn_uninit(&p_cpy); + EG(ret, err); + } + else{ + ret = _nn_mod_add(out, in1, in2, p); + } + +err: + return ret; +} + +/* + * Compute out = in1 + 1 mod p. The function returns 0 on success, -1 on error. + * + * Aliasing not fully supported, for internal use only. + */ +static int _nn_mod_inc(nn_t out, nn_src_t in1, nn_src_t p) +{ + int larger, ret, cmp; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + MUST_HAVE((p->wlen < NN_MAX_WORD_LEN), ret, err); /* otherwise carry could overflow */ + SHOULD_HAVE((!nn_cmp(in1, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE as documented above */ + + ret = nn_inc(out, in1); EG(ret, err); + ret = nn_set_wlen(out, (u8)(p->wlen + 1)); EG(ret, err); /* see comment in nn_mod_add() */ + ret = nn_cmp(out, p, &cmp); EG(ret, err); + larger = (cmp >= 0); + ret = nn_cnd_sub(larger, out, out, p); EG(ret, err); + ret = nn_set_wlen(out, p->wlen); + +err: + return ret; +} + +/* + * Compute out = in1 + 1 mod p. The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_mod_inc(nn_t out, nn_src_t in1, nn_src_t p) +{ + int ret; + + if(out == p){ + nn p_cpy; + p_cpy.magic = WORD(0); + + ret = nn_copy(&p_cpy, p); EG(ret, err1); + ret = _nn_mod_inc(out, in1, &p_cpy); + +err1: + nn_uninit(&p_cpy); + EG(ret, err); + } + else{ + ret = _nn_mod_inc(out, in1, p); + } + +err: + return ret; + +} + +/* + * Compute out = in1 - in2 mod p. The function returns 0 on success, -1 on + * error. + * + * Aliasing not supported, for internal use only. + */ +static int _nn_mod_sub(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p) +{ + int smaller, ret, cmp; + nn_src_t in2_; + nn in2_cpy; + in2_cpy.magic = WORD(0); + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + MUST_HAVE((p->wlen < NN_MAX_WORD_LEN), ret, err); /* otherwise carry could overflow */ + SHOULD_HAVE((!nn_cmp(in1, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE as documented above */ + SHOULD_HAVE((!nn_cmp(in2, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE as documented above */ + + /* Handle the case where in2 and out are aliased */ + if (in2 == out) { + ret = nn_copy(&in2_cpy, in2); EG(ret, err); + in2_ = &in2_cpy; + } else { + ret = nn_init(&in2_cpy, 0); EG(ret, err); + in2_ = in2; + } + + /* The below trick is used to avoid handling of "negative" numbers. */ + ret = nn_cmp(in1, in2_, &cmp); EG(ret, err); + smaller = (cmp < 0); + ret = nn_cnd_add(smaller, out, in1, p); EG(ret, err); + ret = nn_set_wlen(out, (u8)(p->wlen + 1)); EG(ret, err);/* See Comment in nn_mod_add() */ + ret = nn_sub(out, out, in2_); EG(ret, err); + ret = nn_set_wlen(out, p->wlen); + +err: + nn_uninit(&in2_cpy); + + return ret; +} + +/* + * Compute out = in1 - in2 mod p. The function returns 0 on success, -1 on + * error. + * + * Aliasing supported. + */ +int nn_mod_sub(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p) +{ + int ret; + + if(out == p){ + nn p_cpy; + p_cpy.magic = WORD(0); + + ret = nn_copy(&p_cpy, p); EG(ret, err1); + ret = _nn_mod_sub(out, in1, in2, &p_cpy); + +err1: + nn_uninit(&p_cpy); + EG(ret, err); + } + else{ + ret = _nn_mod_sub(out, in1, in2, p); + } + +err: + return ret; +} + +/* + * Compute out = in1 - 1 mod p. The function returns 0 on success, -1 on error + * + * Aliasing not supported, for internal use only. + */ +static int _nn_mod_dec(nn_t out, nn_src_t in1, nn_src_t p) +{ + int ret, iszero, cmp; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + MUST_HAVE((p->wlen < NN_MAX_WORD_LEN), ret, err); /* otherwise carry could overflow */ + FORCE_USED_VAR(cmp); /* nop to silence possible warning with macro below */ + SHOULD_HAVE((!nn_cmp(in1, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE; Documented above */ + + /* The below trick is used to avoid handling of "negative" numbers. */ + ret = nn_iszero(in1, &iszero); EG(ret, err); + ret = nn_cnd_add(iszero, out, in1, p); EG(ret, err); + ret = nn_set_wlen(out, (u8)(p->wlen + 1)); EG(ret, err); /* See Comment in nn_mod_add() */ + ret = nn_dec(out, out); EG(ret, err); + ret = nn_set_wlen(out, p->wlen); + +err: + return ret; +} + +/* + * Compute out = in1 - 1 mod p. The function returns 0 on success, -1 on error + * + * Aliasing supported. + */ +int nn_mod_dec(nn_t out, nn_src_t in1, nn_src_t p) +{ + int ret; + + if(out == p){ + nn p_cpy; + p_cpy.magic = WORD(0); + + ret = nn_copy(&p_cpy, p); EG(ret, err1); + ret = _nn_mod_dec(out, in1, &p_cpy); + +err1: + nn_uninit(&p_cpy); + EG(ret, err); + } + else{ + ret = _nn_mod_dec(out, in1, p); + } + +err: + return ret; +} + +/* + * Compute out = -in mod p. The function returns 0 on success, -1 on error. + * Because we only support positive integers, we compute + * out = p - in (except when value is 0). + * + * We suppose that in is already reduced modulo p. + * + * Aliasing is supported. + * + */ +int nn_mod_neg(nn_t out, nn_src_t in, nn_src_t p) +{ + int ret, cmp, iszero; + + FORCE_USED_VAR(cmp); + + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + + SHOULD_HAVE((!nn_cmp(in, p, &cmp)) && (cmp < 0), ret, err); /* a SHOULD_HAVE; Documented above */ + + ret = nn_iszero(in, &iszero); EG(ret, err); + if (iszero) { + ret = nn_init(out, 0); EG(ret, err); + ret = nn_zero(out); EG(ret, err); + } else { + ret = nn_sub(out, p, in); EG(ret, err); + } + +err: + return ret; +} diff --git a/crypto/libecc/src/nn/nn_div.h b/crypto/libecc/src/nn/nn_div.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_div.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_DIV_H__ +#define __NN_DIV_H__ +#include +#include + +/* Compute quotient q and remainder r for given a and b such that a = q*b + r */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_divrem(nn_t q, nn_t r, nn_src_t a, nn_src_t b); (declared in public header) */ +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem_notrim(nn_t q, nn_t r, nn_src_t a, nn_src_t b); +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem_unshifted(nn_t q, nn_t r, nn_src_t a, nn_src_t b, word_t v, + bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_divrem_normalized(nn_t q, nn_t r, nn_src_t a, nn_src_t b, word_t v); + +/* Compute r = a mod b */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_mod(nn_t r, nn_src_t a, nn_src_t b); (declared in public header) */ +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_notrim(nn_t r, nn_src_t a, nn_src_t b); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_unshifted(nn_t r, nn_src_t a, nn_src_t b, word_t v, bitcnt_t cnt); +ATTRIBUTE_WARN_UNUSED_RET int nn_mod_normalized(nn_t r, nn_src_t a, nn_src_t b, word_t v); + +/* Compute floor(B^3/(d+1)) - B. */ +ATTRIBUTE_WARN_UNUSED_RET int wreciprocal(word_t dh, word_t dl, word_t *reciprocal); +ATTRIBUTE_WARN_UNUSED_RET int nn_compute_div_coefs(nn_t p_normalized, word_t *p_shift, + word_t *p_reciprocal, nn_src_t p_in); + +/* Compute gcd of a and b */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_gcd(nn_t d, nn_src_t a, nn_src_t b, int *sign); (declared in public header) */ +/* ATTRIBUTE_WARN_UNUSED_RET int nn_xgcd(nn_t g, nn_t u, nn_t v, nn_src_t a, nn_src_t b, int *sign); (declared in public header) */ + +#endif /* __NN_DIV_H__ */ diff --git a/crypto/libecc/src/nn/nn_div.c b/crypto/libecc/src/nn/nn_div.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_div.c @@ -0,0 +1,1271 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +/* Use internal API header */ +#include "nn_div.h" + +/* + * Some helper functions to perform operations on an arbitrary part + * of a multiprecision number. + * This is exactly the same code as for operations on the least significant + * part of a multiprecision number except for the starting point in the + * array representing it. + * Done in *constant time*. + * + * Operations producing an output are in place. + */ + +/* + * Compare all the bits of in2 with the same number of bits in in1 starting at + * 'shift' position in in1. in1 must be long enough for that purpose, i.e. + * in1->wlen >= (in2->wlen + shift). The comparison value is provided in + * 'cmp' parameter. The function returns 0 on success, -1 on error. + * + * The function is an internal helper; it expects initialized nn in1 and + * in2: it does not verify that. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_cmp_shift(nn_src_t in1, nn_src_t in2, u8 shift, int *cmp) +{ + int ret, mask, tmp; + u8 i; + + MUST_HAVE((in1->wlen >= (in2->wlen + shift)), ret, err); + MUST_HAVE((cmp != NULL), ret, err); + + tmp = 0; + for (i = in2->wlen; i > 0; i--) { + mask = (!(tmp & 0x1)); + tmp += ((in1->val[shift + i - 1] > in2->val[i - 1]) & mask); + tmp -= ((in1->val[shift + i - 1] < in2->val[i - 1]) & mask); + } + (*cmp) = tmp; + ret = 0; + +err: + return ret; +} + +/* + * Conditionally subtract a shifted version of in from out, i.e.: + * - if cnd == 1, out <- out - (in << shift) + * - if cnd == 0, out <- out + * The function returns 0 on success, -1 on error. On success, 'borrow' + * provides the possible borrow resulting from the subtraction. 'borrow' + * is not meaningful on error. + * + * The function is an internal helper; it expects initialized nn out and + * in: it does not verify that. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_cnd_sub_shift(int cnd, nn_t out, nn_src_t in, + u8 shift, word_t *borrow) +{ + word_t tmp, borrow1, borrow2, _borrow = WORD(0); + word_t mask = WORD_MASK_IFNOTZERO(cnd); + int ret; + u8 i; + + MUST_HAVE((out->wlen >= (in->wlen + shift)), ret, err); + MUST_HAVE((borrow != NULL), ret, err); + + /* + * Perform subtraction one word at a time, + * propagating the borrow. + */ + for (i = 0; i < in->wlen; i++) { + tmp = (word_t)(out->val[shift + i] - (in->val[i] & mask)); + borrow1 = (word_t)(tmp > out->val[shift + i]); + out->val[shift + i] = (word_t)(tmp - _borrow); + borrow2 = (word_t)(out->val[shift + i] > tmp); + /* There is at most one borrow going out. */ + _borrow = (word_t)(borrow1 | borrow2); + } + + (*borrow) = _borrow; + ret = 0; + +err: + return ret; +} + +/* + * Subtract a shifted version of 'in' multiplied by 'w' from 'out' and return + * borrow. The function returns 0 on success, -1 on error. 'borrow' is + * meaningful only on success. + * + * The function is an internal helper; it expects initialized nn out and + * in: it does not verify that. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_submul_word_shift(nn_t out, nn_src_t in, word_t w, u8 shift, + word_t *borrow) +{ + word_t _borrow = WORD(0), prod_high, prod_low, tmp; + int ret; + u8 i; + + MUST_HAVE((out->wlen >= (in->wlen + shift)), ret, err); + MUST_HAVE((borrow != NULL), ret, err); + + for (i = 0; i < in->wlen; i++) { + /* + * Compute the result of the multiplication of + * two words. + */ + WORD_MUL(prod_high, prod_low, in->val[i], w); + + /* + * And add previous borrow. + */ + prod_low = (word_t)(prod_low + _borrow); + prod_high = (word_t)(prod_high + (prod_low < _borrow)); + + /* + * Subtract computed word at current position in result. + */ + tmp = (word_t)(out->val[shift + i] - prod_low); + _borrow = (word_t)(prod_high + (tmp > out->val[shift + i])); + out->val[shift + i] = tmp; + } + + (*borrow) = _borrow; + ret = 0; + +err: + return ret; +} + +/* + * Compute quotient 'q' and remainder 'r' of Euclidean division of 'a' by 'b' + * (i.e. q and r such that a = b*q + r). 'q' and 'r' are not normalized on + * return. * Computation are performed in *constant time*, only depending on + * the lengths of 'a' and 'b', but not on the values of 'a' and 'b'. + * + * This uses the above function to perform arithmetic on arbitrary parts + * of multiprecision numbers. + * + * The algorithm used is schoolbook division: + * + the quotient is computed word by word, + * + a small division of the MSW is performed to obtain an + * approximation of the MSW of the quotient, + * + the approximation is corrected to obtain the correct + * multiprecision MSW of the quotient, + * + the corresponding product is subtracted from the dividend, + * + the same procedure is used for the following word of the quotient. + * + * It is assumed that: + * + b is normalized: the MSB of its MSW is 1, + * + the most significant part of a is smaller than b, + * + a precomputed reciprocal + * v = floor(B^3/(d+1)) - B + * where d is the MSW of the (normalized) divisor + * is given to perform the small 3-by-2 division. + * + using this reciprocal, the approximated quotient is always + * too small and at most one multiprecision correction is needed. + * + * It returns 0 on sucess, -1 on error. + * + * CAUTION: + * + * - The function is expected to be used ONLY by the generic version + * nn_divrem_normalized() defined later in the file. + * - All parameters must have been initialized. Unlike exported/public + * functions, this internal helper does not verify that nn parameters + * have been initialized. Again, this is expected from the caller + * (nn_divrem_normalized()). + * - The function does not support aliasing of 'b' or 'q'. See + * _nn_divrem_normalized_aliased() for such a wrapper. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_divrem_normalized(nn_t q, nn_t r, + nn_src_t a, nn_src_t b, word_t v) +{ + word_t borrow, qstar, qh, ql, rh, rl; /* for 3-by-2 div. */ + int _small, cmp, ret; + u8 i; + + MUST_HAVE(!(b->wlen <= 0), ret, err); + MUST_HAVE(!(a->wlen <= b->wlen), ret, err); + MUST_HAVE(!(!((b->val[b->wlen - 1] >> (WORD_BITS - 1)) == WORD(1))), ret, err); + MUST_HAVE(!_nn_cmp_shift(a, b, (u8)(a->wlen - b->wlen), &cmp) && (cmp < 0), ret, err); + + /* Handle trivial aliasing for a and r */ + if (r != a) { + ret = nn_set_wlen(r, a->wlen); EG(ret, err); + ret = nn_copy(r, a); EG(ret, err); + } + + ret = nn_set_wlen(q, (u8)(r->wlen - b->wlen)); EG(ret, err); + + /* + * Compute subsequent words of the quotient one by one. + * Perform approximate 3-by-2 division using the precomputed + * reciprocal and correct afterward. + */ + for (i = r->wlen; i > b->wlen; i--) { + u8 shift = (u8)(i - b->wlen - 1); + + /* + * Perform 3-by-2 approximate division: + * = * (v + B) + * We are only interested in qstar. + */ + rh = r->val[i - 1]; + rl = r->val[i - 2]; + /* Perform 2-by-1 multiplication. */ + WORD_MUL(qh, ql, rl, v); + WORD_MUL(qstar, ql, rh, v); + /* And propagate carries. */ + qh = (word_t)(qh + ql); + qstar = (word_t)(qstar + (qh < ql)); + qh = (word_t)(qh + rl); + rh = (word_t)(rh + (qh < rl)); + qstar = (word_t)(qstar + rh); + + /* + * Compute approximate quotient times divisor + * and subtract it from remainder: + * r = r - (b*qstar << B^shift) + */ + ret = _nn_submul_word_shift(r, b, qstar, shift, &borrow); EG(ret, err); + + /* Check the approximate quotient was indeed not too large. */ + MUST_HAVE(!(r->val[i - 1] < borrow), ret, err); + r->val[i - 1] = (word_t)(r->val[i - 1] - borrow); + + /* + * Check whether the approximate quotient was too small or not. + * At most one multiprecision correction is needed. + */ + ret = _nn_cmp_shift(r, b, shift, &cmp); EG(ret, err); + _small = ((!!(r->val[i - 1])) | (cmp >= 0)); + /* Perform conditional multiprecision correction. */ + ret = _nn_cnd_sub_shift(_small, r, b, shift, &borrow); EG(ret, err); + MUST_HAVE(!(r->val[i - 1] != borrow), ret, err); + r->val[i - 1] = (word_t)(r->val[i - 1] - borrow); + /* + * Adjust the quotient if it was too small and set it in the + * multiprecision array. + */ + qstar = (word_t)(qstar + (word_t)_small); + q->val[shift] = qstar; + /* + * Check that the MSW of remainder was cancelled out and that + * we could not increase the quotient anymore. + */ + MUST_HAVE(!(r->val[r->wlen - 1] != WORD(0)), ret, err); + + ret = _nn_cmp_shift(r, b, shift, &cmp); EG(ret, err); + MUST_HAVE(!(cmp >= 0), ret, err); + + ret = nn_set_wlen(r, (u8)(r->wlen - 1)); EG(ret, err); + } + +err: + return ret; +} + +/* + * Compute quotient 'q' and remainder 'r' of Euclidean division of 'a' by 'b' + * (i.e. q and r such that a = b*q + r). 'q' and 'r' are not normalized. + * Compared to _nn_divrem_normalized(), this internal version + * explicitly handle the case where 'b' and 'r' point to the same nn (i.e. 'r' + * result is stored in 'b' on success), hence the removal of 'r' parameter from + * function prototype compared to _nn_divrem_normalized(). + * + * The computation is performed in *constant time*, see documentation of + * _nn_divrem_normalized(). + * + * Assume that 'b' is normalized (the MSB of its MSW is set), that 'v' is the + * reciprocal of the MSW of 'b' and that the high part of 'a' is smaller than + * 'b'. + * + * The function returns 0 on success, -1 on error. + * + * CAUTION: + * + * - The function is expected to be used ONLY by the generic version + * nn_divrem_normalized() defined later in the file. + * - All parameters must have been initialized. Unlike exported/public + * functions, this internal helper does not verify that nn parameters + * have been initialized. Again, this is expected from the caller + * (nn_divrem_normalized()). + * - The function does not support aliasing of 'a' or 'q'. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_divrem_normalized_aliased(nn_t q, nn_src_t a, nn_t b, word_t v) +{ + int ret; + nn r; + r.magic = WORD(0); + + ret = nn_init(&r, 0); EG(ret, err); + ret = _nn_divrem_normalized(q, &r, a, b, v); EG(ret, err); + ret = nn_copy(b, &r); EG(ret, err); + +err: + nn_uninit(&r); + return ret; +} + +/* + * Compute quotient and remainder of Euclidean division, and do not normalize + * them. Done in *constant time*, see documentation of _nn_divrem_normalized(). + * + * Assume that 'b' is normalized (the MSB of its MSW is set), that 'v' is the + * reciprocal of the MSW of 'b' and that the high part of 'a' is smaller than + * 'b'. + * + * Aliasing is supported for 'r' only (with 'b'), i.e. 'r' and 'b' can point + * to the same nn. + * + * The function returns 0 on success, -1 on error. + */ +int nn_divrem_normalized(nn_t q, nn_t r, nn_src_t a, nn_src_t b, word_t v) +{ + int ret; + + ret = nn_check_initialized(a); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(r); EG(ret, err); + + /* Unsupported aliasings */ + MUST_HAVE((q != r) && (q != a) && (q != b), ret, err); + + if (r == b) { + ret = _nn_divrem_normalized_aliased(q, a, r, v); + } else { + ret = nn_check_initialized(b); EG(ret, err); + ret = _nn_divrem_normalized(q, r, a, b, v); + } + +err: + return ret; +} + +/* + * Compute remainder only and do not normalize it. + * Constant time, see documentation of _nn_divrem_normalized. + * + * Support aliasing of inputs and outputs. + * + * The function returns 0 on success, -1 on error. + */ +int nn_mod_normalized(nn_t r, nn_src_t a, nn_src_t b, word_t v) +{ + int ret; + nn q; + q.magic = WORD(0); + + ret = nn_init(&q, 0); EG(ret, err); + ret = nn_divrem_normalized(&q, r, a, b, v); + +err: + nn_uninit(&q); + return ret; +} + +/* + * Compute quotient and remainder of Euclidean division, + * and do not normalize them. + * Done in *constant time*, + * only depending on the lengths of 'a' and 'b' and the value of 'cnt', + * but not on the values of 'a' and 'b'. + * + * Assume that b has been normalized by a 'cnt' bit shift, + * that v is the reciprocal of the MSW of 'b', + * but a is not shifted yet. + * Useful when multiple multiplication by the same b are performed, + * e.g. at the fp level. + * + * All outputs MUST have been initialized. The function does not support + * aliasing of 'b' or 'q'. It returns 0 on success, -1 on error. + * + * CAUTION: + * + * - The function is expected to be used ONLY by the generic version + * nn_divrem_normalized() defined later in the file. + * - All parameters must have been initialized. Unlike exported/public + * functions, this internal helper does not verify that + * have been initialized. Again, this is expected from the caller + * (nn_divrem_unshifted()). + * - The function does not support aliasing. See + * _nn_divrem_unshifted_aliased() for such a wrapper. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_divrem_unshifted(nn_t q, nn_t r, nn_src_t a, nn_src_t b_norm, + word_t v, bitcnt_t cnt) +{ + nn a_shift; + u8 new_wlen, b_wlen; + int larger, ret, cmp; + word_t borrow; + a_shift.magic = WORD(0); + + /* Avoid overflow */ + MUST_HAVE(((a->wlen + BIT_LEN_WORDS(cnt)) < NN_MAX_WORD_LEN), ret, err); + + /* We now know that new_wlen will fit in an u8 */ + new_wlen = (u8)(a->wlen + (u8)BIT_LEN_WORDS(cnt)); + + b_wlen = b_norm->wlen; + if (new_wlen < b_wlen) { /* trivial case */ + ret = nn_copy(r, a); EG(ret, err); + ret = nn_zero(q); + goto err; + } + + /* Shift a. */ + ret = nn_init(&a_shift, (u16)(new_wlen * WORD_BYTES)); EG(ret, err); + ret = nn_set_wlen(&a_shift, new_wlen); EG(ret, err); + ret = nn_lshift_fixedlen(&a_shift, a, cnt); EG(ret, err); + ret = nn_set_wlen(r, new_wlen); EG(ret, err); + + if (new_wlen == b_wlen) { + /* Ensure that a is smaller than b. */ + ret = nn_cmp(&a_shift, b_norm, &cmp); EG(ret, err); + larger = (cmp >= 0); + ret = nn_cnd_sub(larger, r, &a_shift, b_norm); EG(ret, err); + MUST_HAVE(((!nn_cmp(r, b_norm, &cmp)) && (cmp < 0)), ret, err); + + /* Set MSW of quotient. */ + ret = nn_set_wlen(q, (u8)(new_wlen - b_wlen + 1)); EG(ret, err); + q->val[new_wlen - b_wlen] = (word_t) larger; + /* And we are done as the quotient is 0 or 1. */ + } else if (new_wlen > b_wlen) { + /* Ensure that most significant part of a is smaller than b. */ + ret = _nn_cmp_shift(&a_shift, b_norm, (u8)(new_wlen - b_wlen), &cmp); EG(ret, err); + larger = (cmp >= 0); + ret = _nn_cnd_sub_shift(larger, &a_shift, b_norm, (u8)(new_wlen - b_wlen), &borrow); EG(ret, err); + MUST_HAVE(((!_nn_cmp_shift(&a_shift, b_norm, (u8)(new_wlen - b_wlen), &cmp)) && (cmp < 0)), ret, err); + + /* + * Perform division with MSP of a smaller than b. This ensures + * that the quotient is of length a_len - b_len. + */ + ret = nn_divrem_normalized(q, r, &a_shift, b_norm, v); EG(ret, err); + + /* Set MSW of quotient. */ + ret = nn_set_wlen(q, (u8)(new_wlen - b_wlen + 1)); EG(ret, err); + q->val[new_wlen - b_wlen] = (word_t) larger; + } /* else a is smaller than b... treated above. */ + + ret = nn_rshift_fixedlen(r, r, cnt); EG(ret, err); + ret = nn_set_wlen(r, b_wlen); + +err: + nn_uninit(&a_shift); + + return ret; +} + +/* + * Same as previous but handling aliasing of 'r' with 'b_norm', i.e. on success, + * result 'r' is passed through 'b_norm'. + * + * CAUTION: + * + * - The function is expected to be used ONLY by the generic version + * nn_divrem_normalized() defined later in the file. + * - All parameter must have been initialized. Unlike exported/public + * functions, this internal helper does not verify that nn parameters + * have been initialized. Again, this is expected from the caller + * (nn_divrem_unshifted()). + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_divrem_unshifted_aliased(nn_t q, nn_src_t a, nn_t b_norm, + word_t v, bitcnt_t cnt) +{ + int ret; + nn r; + r.magic = WORD(0); + + ret = nn_init(&r, 0); EG(ret, err); + ret = _nn_divrem_unshifted(q, &r, a, b_norm, v, cnt); EG(ret, err); + ret = nn_copy(b_norm, &r); EG(ret, err); + +err: + nn_uninit(&r); + return ret; +} + +/* + * Compute quotient and remainder and do not normalize them. + * Constant time, see documentation of _nn_divrem_unshifted(). + * + * Alias-supporting version of _nn_divrem_unshifted for 'r' only. + * + * The function returns 0 on success, -1 on error. + */ +int nn_divrem_unshifted(nn_t q, nn_t r, nn_src_t a, nn_src_t b, + word_t v, bitcnt_t cnt) +{ + int ret; + + ret = nn_check_initialized(a); EG(ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(r); EG(ret, err); + + /* Unsupported aliasings */ + MUST_HAVE((q != r) && (q != a) && (q != b), ret, err); + + if (r == b) { + ret = _nn_divrem_unshifted_aliased(q, a, r, v, cnt); + } else { + ret = nn_check_initialized(b); EG(ret, err); + ret = _nn_divrem_unshifted(q, r, a, b, v, cnt); + } + +err: + return ret; +} + +/* + * Compute remainder only and do not normalize it. + * Constant time, see documentation of _nn_divrem_unshifted. + * + * Aliasing of inputs and outputs is possible. + * + * The function returns 0 on success, -1 on error. + */ +int nn_mod_unshifted(nn_t r, nn_src_t a, nn_src_t b, word_t v, bitcnt_t cnt) +{ + nn q; + int ret; + q.magic = WORD(0); + + ret = nn_init(&q, 0); EG(ret, err); + ret = nn_divrem_unshifted(&q, r, a, b, v, cnt); + +err: + nn_uninit(&q); + + return ret; +} + +/* + * Helper functions for arithmetic in 2-by-1 division + * used in the reciprocal computation. + * + * These are variations of the nn multiprecision functions + * acting on arrays of fixed length, in place, + * and returning carry/borrow. + * + * Done in constant time. + */ + +/* + * Comparison of two limbs numbers. Internal helper. + * Checks left to the caller + */ +ATTRIBUTE_WARN_UNUSED_RET static int _wcmp_22(word_t a[2], word_t b[2]) +{ + int mask, ret = 0; + ret += (a[1] > b[1]); + ret -= (a[1] < b[1]); + mask = !(ret & 0x1); + ret += ((a[0] > b[0]) & mask); + ret -= ((a[0] < b[0]) & mask); + return ret; +} + +/* + * Addition of two limbs numbers with carry returned. Internal helper. + * Checks left to the caller. + */ +ATTRIBUTE_WARN_UNUSED_RET static word_t _wadd_22(word_t a[2], word_t b[2]) +{ + word_t carry; + a[0] = (word_t)(a[0] + b[0]); + carry = (word_t)(a[0] < b[0]); + a[1] = (word_t)(a[1] + carry); + carry = (word_t)(a[1] < carry); + a[1] = (word_t)(a[1] + b[1]); + carry = (word_t)(carry | (a[1] < b[1])); + return carry; +} + +/* + * Subtraction of two limbs numbers with borrow returned. Internal helper. + * Checks left to the caller. + */ +ATTRIBUTE_WARN_UNUSED_RET static word_t _wsub_22(word_t a[2], word_t b[2]) +{ + word_t borrow, tmp; + tmp = (word_t)(a[0] - b[0]); + borrow = (word_t)(tmp > a[0]); + a[0] = tmp; + tmp = (word_t)(a[1] - borrow); + borrow = (word_t)(tmp > a[1]); + a[1] = (word_t)(tmp - b[1]); + borrow = (word_t)(borrow | (a[1] > tmp)); + return borrow; +} + +/* + * Helper macros for conditional subtraction in 2-by-1 division + * used in the reciprocal computation. + * + * Done in constant time. + */ + +/* Conditional subtraction of a one limb number from a two limbs number. */ +#define WORD_CND_SUB_21(cnd, ah, al, b) do { \ + word_t tmp, mask; \ + mask = WORD_MASK_IFNOTZERO((cnd)); \ + tmp = (word_t)((al) - ((b) & mask)); \ + (ah) = (word_t)((ah) - (tmp > (al))); \ + (al) = tmp; \ + } while (0) +/* Conditional subtraction of a two limbs number from a two limbs number. */ +#define WORD_CND_SUB_22(cnd, ah, al, bh, bl) do { \ + word_t tmp, mask; \ + mask = WORD_MASK_IFNOTZERO((cnd)); \ + tmp = (word_t)((al) - ((bl) & mask)); \ + (ah) = (word_t)((ah) - (tmp > (al))); \ + (al) = tmp; \ + (ah) = (word_t)((ah) - ((bh) & mask)); \ + } while (0) + +/* + * divide two words by a normalized word using schoolbook division on half + * words. This is only used below in the reciprocal computation. No checks + * are performed on inputs. This is expected to be done by the caller. + * + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _word_divrem(word_t *q, word_t *r, word_t ah, word_t al, word_t b) +{ + word_t bh, bl, qh, ql, rm, rhl[2], phl[2]; + int larger, ret; + u8 j; + + MUST_HAVE((WRSHIFT((b), (WORD_BITS - 1)) == WORD(1)), ret, err); + bh = WRSHIFT((b), HWORD_BITS); + bl = WLSHIFT((b), HWORD_BITS); + rhl[1] = ah; + rhl[0] = al; + + /* + * Compute high part of the quotient. We know from + * MUST_HAVE() check above that bh (a word_t) is not 0 + */ + + KNOWN_FACT(bh != 0, ret, err); + qh = (rhl[1] / bh); + qh = WORD_MIN(qh, HWORD_MASK); + WORD_MUL(phl[1], phl[0], qh, (b)); + phl[1] = (WLSHIFT(phl[1], HWORD_BITS) | + WRSHIFT(phl[0], HWORD_BITS)); + phl[0] = WLSHIFT(phl[0], HWORD_BITS); + + for (j = 0; j < 2; j++) { + larger = (_wcmp_22(phl, rhl) > 0); + qh = (word_t)(qh - (word_t)larger); + WORD_CND_SUB_22(larger, phl[1], phl[0], bh, bl); + } + + ret = (_wcmp_22(phl, rhl) > 0); + MUST_HAVE(!(ret), ret, err); + IGNORE_RET_VAL(_wsub_22(rhl, phl)); + MUST_HAVE((WRSHIFT(rhl[1], HWORD_BITS) == 0), ret, err); + + /* Compute low part of the quotient. */ + rm = (WLSHIFT(rhl[1], HWORD_BITS) | + WRSHIFT(rhl[0], HWORD_BITS)); + ql = (rm / bh); + ql = WORD_MIN(ql, HWORD_MASK); + WORD_MUL(phl[1], phl[0], ql, (b)); + + for (j = 0; j < 2; j++) { + larger = (_wcmp_22(phl, rhl) > 0); + ql = (word_t) (ql - (word_t)larger); + WORD_CND_SUB_21(larger, phl[1], phl[0], (b)); + } + + ret = _wcmp_22(phl, rhl) > 0; + MUST_HAVE(!(ret), ret, err); + IGNORE_RET_VAL(_wsub_22(rhl, phl)); + /* Set outputs. */ + MUST_HAVE((rhl[1] == WORD(0)), ret, err); + MUST_HAVE(!(rhl[0] >= (b)), ret, err); + (*q) = (WLSHIFT(qh, HWORD_BITS) | ql); + (*r) = rhl[0]; + MUST_HAVE(!((word_t) ((*q)*(b) + (*r)) != (al)), ret, err); + ret = 0; + +err: + return ret; +} + +/* + * Compute the reciprocal of d as + * floor(B^3/(d+1)) - B + * which is used to perform approximate small division using a multiplication. + * + * No attempt was made to make it constant time. Indeed, such values are usually + * precomputed in contexts where constant time is wanted, e.g. in the fp layer. + * + * Returns 0 on success, -1 on error. + */ +int wreciprocal(word_t dh, word_t dl, word_t *reciprocal) +{ + word_t q, carry, r[2], t[2]; + int ret; + + MUST_HAVE((reciprocal != NULL), ret, err); + + if (((word_t)(dh + WORD(1)) == WORD(0)) && + ((word_t)(dl + WORD(1)) == WORD(0))) { + (*reciprocal) = WORD(0); + ret = 0; + goto err; + } + + if ((word_t)(dh + WORD(1)) == WORD(0)) { + q = (word_t)(~dh); + r[1] = (word_t)(~dl); + } else { + t[1] = (word_t)(~dh); + t[0] = (word_t)(~dl); + ret = _word_divrem(&q, r+1, t[1], t[0], + (word_t)(dh + WORD(1))); EG(ret, err); + } + + if ((word_t)(dl + WORD(1)) == WORD(0)) { + (*reciprocal) = q; + ret = 0; + goto err; + } + + r[0] = WORD(0); + + WORD_MUL(t[1], t[0], q, (word_t)~dl); + carry = _wadd_22(r, t); + + t[0] = (word_t)(dl + WORD(1)); + t[1] = dh; + while (carry || (_wcmp_22(r, t) >= 0)) { + q++; + carry = (word_t)(carry - _wsub_22(r, t)); + } + + (*reciprocal) = q; + ret = 0; + +err: + return ret; +} + +/* + * Given an odd number p, compute division coefficients p_normalized, + * p_shift and p_reciprocal so that: + * - p_shift = p_rounded_bitlen - bitsizeof(p), where + * o p_rounded_bitlen = BIT_LEN_WORDS(p) (i.e. bit length of + * minimum number of words required to store p) and + * o p_bitlen is the real bit size of p + * - p_normalized = p << p_shift + * - p_reciprocal = B^3 / ((p_normalized >> (pbitlen - 2*WORDSIZE)) + 1) - B + * with B = 2^WORDSIZE + * + * These coefficients are useful for the optimized shifted variants of NN + * division and modular functions. Because we have two word_t outputs + * (p_shift and p_reciprocal), these are passed through word_t pointers. + * Aliasing of outputs with the input is possible since p_in is copied in + * local p at the beginning of the function. + * + * The function does not support aliasing. + * + * The function returns 0 on success, -1 on error. + */ +int nn_compute_div_coefs(nn_t p_normalized, word_t *p_shift, + word_t *p_reciprocal, nn_src_t p_in) +{ + bitcnt_t p_rounded_bitlen, p_bitlen; + nn p, tmp_nn; + int ret; + p.magic = tmp_nn.magic = WORD(0); + + ret = nn_check_initialized(p_in); EG(ret, err); + + MUST_HAVE((p_shift != NULL), ret, err); + MUST_HAVE((p_reciprocal != NULL), ret, err); + + /* Unsupported aliasing */ + MUST_HAVE((p_normalized != p_in), ret, err); + + ret = nn_init(&p, 0); EG(ret, err); + ret = nn_copy(&p, p_in); EG(ret, err); + + /* + * In order for our reciprocal division routines to work, it is expected + * that the bit length (including leading zeroes) of input prime + * p is >= 2 * wlen where wlen is the number of bits of a word size. + */ + if (p.wlen < 2) { + ret = nn_set_wlen(&p, 2); EG(ret, err); + } + + ret = nn_init(p_normalized, 0); EG(ret, err); + ret = nn_init(&tmp_nn, 0); EG(ret, err); + + /* p_rounded_bitlen = bitlen of p rounded to word size */ + p_rounded_bitlen = (bitcnt_t)(WORD_BITS * p.wlen); + + /* p_shift */ + ret = nn_bitlen(&p, &p_bitlen); EG(ret, err); + (*p_shift) = (word_t)(p_rounded_bitlen - p_bitlen); + + /* p_normalized = p << pshift */ + ret = nn_lshift(p_normalized, &p, (bitcnt_t)(*p_shift)); EG(ret, err); + + /* Sanity check to protect the p_reciprocal computation */ + MUST_HAVE((p_rounded_bitlen >= (2 * WORDSIZE)), ret, err); + + /* + * p_reciprocal = B^3 / ((p_normalized >> (p_rounded_bitlen - 2 * wlen)) + 1) - B + * where B = 2^wlen where wlen = word size in bits. We use our NN + * helper to compute it. + */ + ret = nn_rshift(&tmp_nn, p_normalized, (bitcnt_t)(p_rounded_bitlen - (2 * WORDSIZE))); EG(ret, err); + ret = wreciprocal(tmp_nn.val[1], tmp_nn.val[0], p_reciprocal); + +err: + nn_uninit(&p); + nn_uninit(&tmp_nn); + + return ret; +} + +/* + * Compute quotient remainder of Euclidean division. + * + * This function is a wrapper to normalize the divisor, i.e. shift it so that + * the MSB of its MSW is set, and precompute the reciprocal of this MSW to be + * used to perform small divisions using multiplications during the long + * schoolbook division. It uses the helper functions/macros above. + * + * This is NOT constant time with regards to the word length of a and b, + * but also the actual bitlength of b as we need to normalize b at the + * bit level. + * Moreover the precomputation of the reciprocal is not constant time at all. + * + * r need not be initialized, the function does it for the the caller. + * + * This function does not support aliasing. This is an internal helper, which + * expects caller to check parameters. + * + * It returns 0 on sucess, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_divrem(nn_t q, nn_t r, nn_src_t a, nn_src_t b) +{ + nn b_large, b_normalized; + bitcnt_t cnt; + word_t v; + nn_src_t ptr = b; + int ret, iszero; + b_large.magic = b_normalized.magic = WORD(0); + + ret = nn_init(r, 0); EG(ret, err); + ret = nn_init(q, 0); EG(ret, err); + ret = nn_init(&b_large, 0); EG(ret, err); + + MUST_HAVE(!nn_iszero(b, &iszero) && !iszero, ret, err); + + if (b->wlen == 1) { + ret = nn_copy(&b_large, b); EG(ret, err); + + /* Expand our big number with zeroes */ + ret = nn_set_wlen(&b_large, 2); EG(ret, err); + + /* + * This cast could seem inappropriate, but we are + * sure here that we won't touch ptr since it is only + * given as a const parameter to sub functions. + */ + ptr = (nn_src_t) &b_large; + } + + /* After this, we only handle >= 2 words big numbers */ + MUST_HAVE(!(ptr->wlen < 2), ret, err); + + ret = nn_init(&b_normalized, (u16)((ptr->wlen) * WORD_BYTES)); EG(ret, err); + ret = nn_clz(ptr, &cnt); EG(ret, err); + ret = nn_lshift_fixedlen(&b_normalized, ptr, cnt); EG(ret, err); + ret = wreciprocal(b_normalized.val[ptr->wlen - 1], + b_normalized.val[ptr->wlen - 2], + &v); /* Not constant time. */ EG(ret, err); + + ret = _nn_divrem_unshifted(q, r, a, &b_normalized, v, cnt); + +err: + nn_uninit(&b_normalized); + nn_uninit(&b_large); + + return ret; +} + +/* + * Returns 0 on succes, -1 on error. Internal helper. Checks on params + * expected from the caller. + */ +ATTRIBUTE_WARN_UNUSED_RET static int __nn_divrem_notrim_alias(nn_t q, nn_t r, nn_src_t a, nn_src_t b) +{ + nn a_cpy, b_cpy; + int ret; + a_cpy.magic = b_cpy.magic = WORD(0); + + ret = nn_init(&a_cpy, 0); EG(ret, err); + ret = nn_init(&b_cpy, 0); EG(ret, err); + ret = nn_copy(&a_cpy, a); EG(ret, err); + ret = nn_copy(&b_cpy, b); EG(ret, err); + ret = _nn_divrem(q, r, &a_cpy, &b_cpy); + +err: + nn_uninit(&b_cpy); + nn_uninit(&a_cpy); + + return ret; +} + + + +/* + * Compute quotient and remainder and normalize them. + * Not constant time, see documentation of _nn_divrem. + * + * Aliased version of _nn_divrem. Returns 0 on success, + * -1 on error. + */ +int nn_divrem_notrim(nn_t q, nn_t r, nn_src_t a, nn_src_t b) +{ + int ret; + + /* _nn_divrem initializes q and r */ + ret = nn_check_initialized(a); EG(ret, err); + ret = nn_check_initialized(b); EG(ret, err); + MUST_HAVE(((q != NULL) && (r != NULL)), ret, err); + + /* + * Handle aliasing whenever any of the inputs is + * used as an output. + */ + if ((a == q) || (a == r) || (b == q) || (b == r)) { + ret = __nn_divrem_notrim_alias(q, r, a, b); + } else { + ret = _nn_divrem(q, r, a, b); + } + +err: + return ret; +} + +/* + * Compute quotient and remainder and normalize them. + * Not constant time, see documentation of _nn_divrem(). + * Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int nn_divrem(nn_t q, nn_t r, nn_src_t a, nn_src_t b) +{ + int ret; + + ret = nn_divrem_notrim(q, r, a, b); EG(ret, err); + + /* Normalize (trim) the quotient and rest to avoid size overflow */ + ret = nn_normalize(q); EG(ret, err); + ret = nn_normalize(r); + +err: + return ret; +} + +/* + * Compute remainder only and do not normalize it. Not constant time, see + * documentation of _nn_divrem(). Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int nn_mod_notrim(nn_t r, nn_src_t a, nn_src_t b) +{ + int ret; + nn q; + q.magic = WORD(0); + + /* nn_divrem() will init q. */ + ret = nn_divrem_notrim(&q, r, a, b); + + nn_uninit(&q); + + return ret; +} + +/* + * Compute remainder only and normalize it. Not constant time, see + * documentation of _nn_divrem(). r is initialized by the function. + * Returns 0 on success, -1 on error. + * + * Aliasing is supported. + */ +int nn_mod(nn_t r, nn_src_t a, nn_src_t b) +{ + int ret; + nn q; + q.magic = WORD(0); + + /* nn_divrem will init q. */ + ret = nn_divrem(&q, r, a, b); + + nn_uninit(&q); + + return ret; +} + +/* + * Below follow gcd and xgcd non constant time functions for the user ease. + */ + +/* + * Unaliased version of xgcd, and we suppose that a >= b. Badly non-constant + * time per the algorithm used. The function returns 0 on success, -1 on + * error. internal helper: expect caller to check parameters. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_xgcd(nn_t g, nn_t u, nn_t v, nn_src_t a, nn_src_t b, + int *sign) +{ + nn_t c, d, q, r, u1, v1, u2, v2; + nn scratch[8]; + int ret, swap, iszero; + u8 i; + + for (i = 0; i < 8; i++){ + scratch[i].magic = WORD(0); + } + + /* + * Maintain: + * |u1 v1| |c| = |a| + * |u2 v2| |d| |b| + * u1, v1, u2, v2 >= 0 + * c >= d + * + * Initially: + * |1 0 | |a| = |a| + * |0 1 | |b| |b| + * + * At each iteration: + * c >= d + * c = q*d + r + * |u1 v1| = |q*u1+v1 u1| + * |u2 v2| |q*u2+v2 u2| + * + * Finally, after i steps: + * |u1 v1| |g| = |a| + * |u2 v2| |0| = |b| + * + * Inverting the matrix: + * |g| = (-1)^i | v2 -v1| |a| + * |0| |-u2 u1| |b| + */ + + /* + * Initialization. + */ + ret = nn_init(g, 0); EG(ret, err); + ret = nn_init(u, 0); EG(ret, err); + ret = nn_init(v, 0); EG(ret, err); + ret = nn_iszero(b, &iszero); EG(ret, err); + if (iszero) { + /* gcd(0, a) = a, and 1*a + 0*b = a */ + ret = nn_copy(g, a); EG(ret, err); + ret = nn_one(u); EG(ret, err); + ret = nn_zero(v); EG(ret, err); + (*sign) = 1; + goto err; + } + + for (i = 0; i < 8; i++){ + ret = nn_init(&scratch[i], 0); EG(ret, err); + } + + u1 = &(scratch[0]); + v1 = &(scratch[1]); + u2 = &(scratch[2]); + v2 = &(scratch[3]); + ret = nn_one(u1); EG(ret, err); + ret = nn_zero(v1); EG(ret, err); + ret = nn_zero(u2); EG(ret, err); + ret = nn_one(v2); EG(ret, err); + c = &(scratch[4]); + d = &(scratch[5]); + ret = nn_copy(c, a); EG(ret, err); /* Copy could be skipped. */ + ret = nn_copy(d, b); EG(ret, err); /* Copy could be skipped. */ + q = &(scratch[6]); + r = &(scratch[7]); + swap = 0; + + /* + * Loop. + */ + ret = nn_iszero(d, &iszero); EG(ret, err); + while (!iszero) { + ret = nn_divrem(q, r, c, d); EG(ret, err); + ret = nn_normalize(q); EG(ret, err); + ret = nn_normalize(r); EG(ret, err); + ret = nn_copy(c, r); EG(ret, err); + ret = nn_mul(r, q, u1); EG(ret, err); + ret = nn_normalize(r); EG(ret, err); + ret = nn_add(v1, v1, r); EG(ret, err); + ret = nn_mul(r, q, u2); EG(ret, err); + ret = nn_normalize(r); EG(ret, err); + ret = nn_add(v2, v2, r); EG(ret, err); + ret = nn_normalize(v1); EG(ret, err); + ret = nn_normalize(v2); EG(ret, err); + swap = 1; + ret = nn_iszero(c, &iszero); EG(ret, err); + if (iszero) { + break; + } + ret = nn_divrem(q, r, d, c); EG(ret, err); + ret = nn_normalize(q); EG(ret, err); + ret = nn_normalize(r); EG(ret, err); + ret = nn_copy(d, r); EG(ret, err); + ret = nn_mul(r, q, v1); EG(ret, err); + ret = nn_normalize(r); EG(ret, err); + ret = nn_add(u1, u1, r); EG(ret, err); + ret = nn_mul(r, q, v2); EG(ret, err); + ret = nn_normalize(r); EG(ret, err); + ret = nn_add(u2, u2, r); EG(ret, err); + ret = nn_normalize(u1); EG(ret, err); + ret = nn_normalize(u2); EG(ret, err); + swap = 0; + + /* refresh loop condition */ + ret = nn_iszero(d, &iszero); EG(ret, err); + } + + /* Copies could be skipped. */ + if (swap) { + ret = nn_copy(g, d); EG(ret, err); + ret = nn_copy(u, u2); EG(ret, err); + ret = nn_copy(v, u1); EG(ret, err); + } else { + ret = nn_copy(g, c); EG(ret, err); + ret = nn_copy(u, v2); EG(ret, err); + ret = nn_copy(v, v1); EG(ret, err); + } + + /* swap = -1 means u <= 0; = 1 means v <= 0 */ + (*sign) = swap ? -1 : 1; + ret = 0; + +err: + /* + * We uninit scratch elements in all cases, i.e. whether or not + * we return an error or not. + */ + for (i = 0; i < 8; i++){ + nn_uninit(&scratch[i]); + } + /* Unitialize output in case of error */ + if (ret){ + nn_uninit(v); + nn_uninit(u); + nn_uninit(g); + } + + return ret; +} + +/* + * Aliased version of xgcd, and no assumption on a and b. Not constant time at + * all. returns 0 on success, -1 on error. XXX document 'sign' + * + * Aliasing is supported. + */ +int nn_xgcd(nn_t g, nn_t u, nn_t v, nn_src_t a, nn_src_t b, int *sign) +{ + /* Handle aliasing + * Note: in order to properly handle aliasing, we accept to lose + * some "space" on the stack with copies. + */ + nn a_cpy, b_cpy; + nn_src_t a_, b_; + int ret, cmp, _sign; + a_cpy.magic = b_cpy.magic = WORD(0); + + /* The internal _nn_xgcd function initializes g, u and v */ + ret = nn_check_initialized(a); EG(ret, err); + ret = nn_check_initialized(b); EG(ret, err); + MUST_HAVE((sign != NULL), ret, err); + + ret = nn_init(&b_cpy, 0); EG(ret, err); + + /* Aliasing of a */ + if ((g == a) || (u == a) || (v == a)){ + ret = nn_copy(&a_cpy, a); EG(ret, err); + a_ = &a_cpy; + } else { + a_ = a; + } + /* Aliasing of b */ + if ((g == b) || (u == b) || (v == b)) { + ret = nn_copy(&b_cpy, b); EG(ret, err); + b_ = &b_cpy; + } else { + b_ = b; + } + + ret = nn_cmp(a_, b_, &cmp); EG(ret, err); + if (cmp < 0) { + /* If a < b, swap the inputs */ + ret = _nn_xgcd(g, v, u, b_, a_, &_sign); EG(ret, err); + (*sign) = -(_sign); + } else { + ret = _nn_xgcd(g, u, v, a_, b_, &_sign); EG(ret, err); + (*sign) = _sign; + } + +err: + nn_uninit(&b_cpy); + nn_uninit(&a_cpy); + + return ret; +} + +/* + * Compute g = gcd(a, b). Internally use the xgcd and drop u and v. + * Not constant time at all. Returns 0 on success, -1 on error. + * XXX document 'sign'. + * + * Aliasing is supported. + */ +int nn_gcd(nn_t g, nn_src_t a, nn_src_t b, int *sign) +{ + nn u, v; + int ret; + u.magic = v.magic = WORD(0); + + /* nn_xgcd will initialize g, u and v and + * check if a and b are indeed initialized. + */ + ret = nn_xgcd(g, &u, &v, a, b, sign); + + nn_uninit(&u); + nn_uninit(&v); + + return ret; +} diff --git a/crypto/libecc/src/nn/nn_logical.c b/crypto/libecc/src/nn/nn_logical.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_logical.c @@ -0,0 +1,577 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* + * nn_lshift_fixedlen: left logical shift in N, i.e. compute out = (in << cnt). + * + * Aliasing is possible for 'in' and 'out', i.e. x <<= cnt can be computed + * using nn_lshift_fixedlen(x, x, cnt). + * + * The function supports 'in' and 'out' parameters of differents sizes. + * + * The operation time of the function depends on the size of 'in' and + * 'out' parameters and the value of 'cnt'. It does not depend on the + * value of 'in'. + * + * It is to be noted that the function uses out->wlen as the + * upper limit for its work, i.e. bits shifted above out->wlen + * are lost (the NN size of the output is not modified). + * + * The function returns 0 on sucess, -1 on error. + * + * Aliasing supported. + */ +int nn_lshift_fixedlen(nn_t out, nn_src_t in, bitcnt_t cnt) +{ + int ipos, opos, dec, ret; + bitcnt_t lshift, hshift; + u8 owlen, iwlen; + + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_check_initialized(out); EG(ret, err); + owlen = out->wlen; + iwlen = in->wlen; + + dec = cnt / WORD_BITS; + hshift = cnt % WORD_BITS; + lshift = (bitcnt_t)(WORD_BITS - hshift); + + for (opos = owlen - 1; opos >= 0; opos--) { + word_t hipart = 0, lopart = 0; + + ipos = opos - dec - 1; + if ((ipos >= 0) && (ipos < iwlen)) { + lopart = WRSHIFT(in->val[ipos], lshift); + } + + ipos = opos - dec; + if ((ipos >= 0) && (ipos < iwlen)) { + hipart = WLSHIFT(in->val[ipos], hshift); + } + + out->val[opos] = hipart | lopart; + } + +err: + return ret; +} + +/* + * nn_lshift: left logical shift in N, i.e. compute out = (in << cnt). + * + * Aliasing is possible for 'in' and 'out', i.e. x <<= cnt can be computed + * using nn_lshift(x, x, cnt). + * + * The function supports 'in' and 'out' parameters of differents sizes. + * + * The operation time of the function depends on the size of 'in' and + * 'out' parameters and the value of 'cnt'. It does not depend on the + * value of 'in'. + * + * It is to be noted that the function computes the output bit length + * depending on the shift count and the input length, i.e. out bit length + * will be roughly in bit length plus cnt, maxed to NN_MAX_BIT_LEN. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_lshift(nn_t out, nn_src_t in, bitcnt_t cnt) +{ + bitcnt_t lshift, hshift, blen; + int ipos, opos, dec, ret; + u8 owlen, iwlen; + + ret = nn_check_initialized(in); EG(ret, err); + iwlen = in->wlen; + + /* Initialize output if no aliasing is used */ + if (out != in) { + ret = nn_init(out, 0); EG(ret, err); + } + + /* Adapt output length accordingly */ + ret = nn_bitlen(in, &blen); EG(ret, err); + owlen = (u8)LOCAL_MIN(BIT_LEN_WORDS(cnt + blen), + BIT_LEN_WORDS(NN_MAX_BIT_LEN)); + out->wlen = owlen; + + dec = cnt / WORD_BITS; + hshift = cnt % WORD_BITS; + lshift = (bitcnt_t)(WORD_BITS - hshift); + + for (opos = owlen - 1; opos >= 0; opos--) { + word_t hipart = 0, lopart = 0; + + ipos = opos - dec - 1; + if ((ipos >= 0) && (ipos < iwlen)) { + lopart = WRSHIFT(in->val[ipos], lshift); + } + + ipos = opos - dec; + if ((ipos >= 0) && (ipos < iwlen)) { + hipart = WLSHIFT(in->val[ipos], hshift); + } + + out->val[opos] = hipart | lopart; + } + +err: + return ret; +} + +/* + * nn_rshift_fixedlen: right logical shift in N, i.e. compute out = (in >> cnt). + * + * Aliasing is possible for 'in' and 'out', i.e. x >>= cnt can be computed + * using nn_rshift_fixedlen(x, x, cnt). + * + * The function supports 'in' and 'out' parameters of differents sizes. + * + * The operation time of the function depends on the size of 'in' and + * 'out' parameters and the value of 'cnt'. It does not depend on the + * value of 'in'. + * It is to be noted that the function uses out->wlen as the + * upper limit for its work, which means zeroes are shifted in while + * keeping the same NN output size. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_rshift_fixedlen(nn_t out, nn_src_t in, bitcnt_t cnt) +{ + int ipos, opos, dec, ret; + bitcnt_t lshift, hshift; + u8 owlen, iwlen; + + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_check_initialized(out); EG(ret, err); + owlen = out->wlen; + iwlen = in->wlen; + + dec = cnt / WORD_BITS; + lshift = cnt % WORD_BITS; + hshift = (bitcnt_t)(WORD_BITS - lshift); + + for (opos = 0; opos < owlen; opos++) { + word_t hipart = 0, lopart = 0; + + ipos = opos + dec; + if ((ipos >= 0) && (ipos < iwlen)) { + lopart = WRSHIFT(in->val[ipos], lshift); + } + + ipos = opos + dec + 1; + if ((ipos >= 0) && (ipos < iwlen)) { + hipart = WLSHIFT(in->val[ipos], hshift); + } + + out->val[opos] = hipart | lopart; + } + +err: + return ret; +} + +/* + * nn_rshift: right logical shift in N, i.e. compute out = (in >> cnt). + * + * Aliasing is possible for 'in' and 'out', i.e. x >>= cnt can be computed + * using nn_rshift_fixedlen(x, x, cnt). + * + * The function supports 'in' and 'out' parameters of differents sizes. + * + * The operation time of the function depends on the size of 'in' and + * 'out' parameters and the value of 'cnt'. It does not depend on the + * value of 'in'. + * It is to be noted that the function adapts the output size to + * the input size and the shift bit count, i.e. out bit lenth is roughly + * equal to input bit length minus cnt. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_rshift(nn_t out, nn_src_t in, bitcnt_t cnt) +{ + int ipos, opos, dec, ret; + bitcnt_t lshift, hshift; + u8 owlen, iwlen; + bitcnt_t blen; + + ret = nn_check_initialized(in); EG(ret, err); + iwlen = in->wlen; + /* Initialize output if no aliasing is used */ + if (out != in) { + ret = nn_init(out, 0); EG(ret, err); + } + + dec = cnt / WORD_BITS; + lshift = cnt % WORD_BITS; + hshift = (bitcnt_t)(WORD_BITS - lshift); + + /* Adapt output length accordingly */ + ret = nn_bitlen(in, &blen); EG(ret, err); + if (cnt > blen) { + owlen = 0; + } else { + owlen = (u8)BIT_LEN_WORDS(blen - cnt); + } + /* Adapt output length in out */ + out->wlen = owlen; + + for (opos = 0; opos < owlen; opos++) { + word_t hipart = 0, lopart = 0; + + ipos = opos + dec; + if ((ipos >= 0) && (ipos < iwlen)) { + lopart = WRSHIFT(in->val[ipos], lshift); + } + + ipos = opos + dec + 1; + if ((ipos >= 0) && (ipos < iwlen)) { + hipart = WLSHIFT(in->val[ipos], hshift); + } + + out->val[opos] = hipart | lopart; + } + + /* + * Zero the output upper part now that we don't need it anymore + * NB: as we cannot use our normalize helper here (since a consistency + * check is done on wlen and upper part), we have to do this manually + */ + for (opos = owlen; opos < NN_MAX_WORD_LEN; opos++) { + out->val[opos] = 0; + } + +err: + return ret; +} + +/* + * This function right rotates the input NN value by the value 'cnt' on the + * bitlen basis. The function does it in the following way; right rotation + * of x by cnt is "simply": (x >> cnt) ^ (x << (bitlen - cnt)) + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_rrot(nn_t out, nn_src_t in, bitcnt_t cnt, bitcnt_t bitlen) +{ + u8 owlen = (u8)BIT_LEN_WORDS(bitlen); + int ret; + nn tmp; + tmp.magic = WORD(0); + + MUST_HAVE((bitlen <= NN_MAX_BIT_LEN), ret, err); + MUST_HAVE((cnt < bitlen), ret, err); + + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_lshift(&tmp, in, (bitcnt_t)(bitlen - cnt)); EG(ret, err); + ret = nn_set_wlen(&tmp, owlen); EG(ret, err); + ret = nn_rshift(out, in, cnt); EG(ret, err); + ret = nn_set_wlen(out, owlen); EG(ret, err); + ret = nn_xor(out, out, &tmp); EG(ret, err); + + /* Mask the last word if necessary */ + if (((bitlen % WORD_BITS) != 0) && (out->wlen > 0)) { + /* shift operation below is ok (less than WORD_BITS) */ + word_t mask = (word_t)(((word_t)(WORD(1) << (bitlen % WORD_BITS))) - 1); + out->val[out->wlen - 1] &= mask; + } + +err: + nn_uninit(&tmp); + + return ret; +} + +/* + * This function left rotates the input NN value by the value 'cnt' on the + * bitlen basis. The function does it in the following way; Left rotation + * of x by cnt is "simply": (x << cnt) ^ (x >> (bitlen - cnt)) + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_lrot(nn_t out, nn_src_t in, bitcnt_t cnt, bitcnt_t bitlen) +{ + u8 owlen = (u8)BIT_LEN_WORDS(bitlen); + int ret; + nn tmp; + tmp.magic = WORD(0); + + MUST_HAVE(!(bitlen > NN_MAX_BIT_LEN), ret, err); + MUST_HAVE(!(cnt >= bitlen), ret, err); + + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_lshift(&tmp, in, cnt); EG(ret, err); + ret = nn_set_wlen(&tmp, owlen); EG(ret, err); + ret = nn_rshift(out, in, (bitcnt_t)(bitlen - cnt)); EG(ret, err); + ret = nn_set_wlen(out, owlen); EG(ret, err); + ret = nn_xor(out, out, &tmp); EG(ret, err); + + /* Mask the last word if necessary */ + if (((bitlen % WORD_BITS) != 0) && (out->wlen > 0)) { + word_t mask = (word_t)(((word_t)(WORD(1) << (bitlen % WORD_BITS))) - 1); + out->val[out->wlen - 1] &= mask; + } + +err: + nn_uninit(&tmp); + + return ret; +} + +/* + * Compute XOR between B and C and put the result in A. B and C must be + * initialized. Aliasing is supported, i.e. A can be one of the parameter B or + * C. If aliasing is not used, A will be initialized by the function. Function + * execution time depends on the word length of larger parameter but not on its + * particular value. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_xor(nn_t A, nn_src_t B, nn_src_t C) +{ + int ret; + u8 i; + + ret = nn_check_initialized(B); EG(ret, err); + ret = nn_check_initialized(C); EG(ret, err); + + /* Initialize the output if no aliasing is used */ + if ((A != B) && (A != C)) { + ret = nn_init(A, 0); EG(ret, err); + } + + /* Set output wlen accordingly */ + A->wlen = (C->wlen < B->wlen) ? B->wlen : C->wlen; + + for (i = 0; i < A->wlen; i++) { + A->val[i] = (B->val[i] ^ C->val[i]); + } + +err: + return ret; +} + +/* + * Compute logical OR between B and C and put the result in A. B and C must be + * initialized. Aliasing is supported, i.e. A can be one of the parameter B or + * C. If aliasing is not used, A will be initialized by the function. Function + * execution time depends on the word length of larger parameter but not on its + * particular value. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_or(nn_t A, nn_src_t B, nn_src_t C) +{ + int ret; + u8 i; + + ret = nn_check_initialized(B); EG(ret, err); + ret = nn_check_initialized(C); EG(ret, err); + + /* Initialize the output if no aliasing is used */ + if ((A != B) && (A != C)) { + ret = nn_init(A, 0); EG(ret, err); + } + + /* Set output wlen accordingly */ + A->wlen = (C->wlen < B->wlen) ? B->wlen : C->wlen; + + for (i = 0; i < A->wlen; i++) { + A->val[i] = (B->val[i] | C->val[i]); + } + +err: + return ret; +} + +/* + * Compute logical AND between B and C and put the result in A. B and C must be + * initialized. Aliasing is supported, i.e. A can be one of the parameter B or + * C. If aliasing is not used, A will be initialized by the function. Function + * execution time depends on the word length of larger parameter but not on its + * particular value. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_and(nn_t A, nn_src_t B, nn_src_t C) +{ + int ret; + u8 i; + + ret = nn_check_initialized(B); EG(ret, err); + ret = nn_check_initialized(C); EG(ret, err); + + /* Initialize the output if no aliasing is used */ + if ((A != B) && (A != C)) { + ret = nn_init(A, 0); EG(ret, err); + } + + /* Set output wlen accordingly */ + A->wlen = (C->wlen < B->wlen) ? B->wlen : C->wlen; + + for (i = 0; i < A->wlen; i++) { + A->val[i] = (B->val[i] & C->val[i]); + } + +err: + return ret; +} + +/* + * Compute logical NOT of B and put the result in A. B must be initialized. + * Aliasing is supported. If aliasing is not used, A will be initialized by + * the function. + * + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_not(nn_t A, nn_src_t B) +{ + int ret; + u8 i; + + ret = nn_check_initialized(B); EG(ret, err); + + /* Initialize the output if no aliasing is used */ + if (A != B) { + ret = nn_init(A, 0); EG(ret, err); + } + + /* Set output wlen accordingly */ + A->wlen = B->wlen; + + for (i = 0; i < A->wlen; i++) { + A->val[i] = (word_t)(~(B->val[i])); + } + +err: + return ret; +} + +/* Count leading zeros of a word. This is constant time */ +ATTRIBUTE_WARN_UNUSED_RET static u8 wclz(word_t A) +{ + u8 cnt = WORD_BITS, over = 0; + int i; + + for (i = (WORD_BITS - 1); i >= 0; i--) { + /* i is less than WORD_BITS so shift operations below are ok */ + u8 mask = (u8)(((A & (WORD(1) << i)) >> i) & 0x1); + over |= mask; + cnt = (u8)(cnt - over); + } + + return cnt; +} + +/* + * Count leading zeros of an initialized nn. This is NOT constant time. The + * function returns 0 on success, -1 on error. On success, the number of + * leading zeroes is available in 'lz'. 'lz' is not meaningful on error. + */ +int nn_clz(nn_src_t in, bitcnt_t *lz) +{ + bitcnt_t cnt = 0; + int ret; + u8 i; + + /* Sanity check */ + MUST_HAVE((lz != NULL), ret, err); + ret = nn_check_initialized(in); EG(ret, err); + + for (i = in->wlen; i > 0; i--) { + if (in->val[i - 1] == 0) { + cnt = (bitcnt_t)(cnt + WORD_BITS); + } else { + cnt = (bitcnt_t)(cnt + wclz(in->val[i - 1])); + break; + } + } + *lz = cnt; + +err: + return ret; +} + +/* + * Compute bit length of given nn. This is NOT constant-time. The + * function returns 0 on success, -1 on error. On success, the bit length + * of 'in' is available in 'blen'. 'blen' is not meaningful on error. + */ +int nn_bitlen(nn_src_t in, bitcnt_t *blen) +{ + bitcnt_t _blen = 0; + int ret; + u8 i; + + /* Sanity check */ + MUST_HAVE((blen != NULL), ret, err); + ret = nn_check_initialized(in); EG(ret, err); + + for (i = in->wlen; i > 0; i--) { + if (in->val[i - 1] != 0) { + _blen = (bitcnt_t)((i * WORD_BITS) - wclz(in->val[i - 1])); + break; + } + } + (*blen) = _blen; + +err: + return ret; +} + +/* + * On success (return value is 0), the function provides via 'bitval' the value + * of the bit at position 'bit' in 'in' nn. 'bitval' in not meaningful error + * (when return value is -1). + */ +int nn_getbit(nn_src_t in, bitcnt_t bit, u8 *bitval) +{ + bitcnt_t widx = bit / WORD_BITS; + u8 bidx = bit % WORD_BITS; + int ret; + + /* Sanity check */ + MUST_HAVE((bitval != NULL), ret, err); + ret = nn_check_initialized(in); EG(ret, err); + MUST_HAVE((bit < NN_MAX_BIT_LEN), ret, err); + + /* bidx is less than WORD_BITS so shift operations below are ok */ + (*bitval) = (u8)((((in->val[widx]) & (WORD(1) << bidx)) >> bidx) & 0x1); + +err: + return ret; +} diff --git a/crypto/libecc/src/nn/nn_mod_pow.c b/crypto/libecc/src/nn/nn_mod_pow.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_mod_pow.c @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include +#include + +/* + * NOT constant time with regard to the bitlength of exp. + * + * Implements a left to right Montgomery Ladder for modular exponentiation. + * This is an internal common helper and assumes that all the initialization + * and aliasing of inputs/outputs are handled by the callers. Depending on + * the inputs, redcification is optionally used. + * The base is reduced if necessary. + * + * Montgomery Ladder is masked using Itoh et al. anti-ADPA + * (Address-bit DPA) countermeasure. + * See "A Practical Countermeasure against Address-Bit Differential Power Analysis" + * by Itoh, Izu and Takenaka for more information. + + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_exp_monty_ladder_ltr(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod, nn_src_t r, nn_src_t r_square, word_t mpinv) +{ + nn T[3]; + nn mask; + bitcnt_t explen, oldexplen; + u8 expbit, rbit; + int ret, cmp; + T[0].magic = T[1].magic = T[2].magic = mask.magic = WORD(0); + + /* Initialize out */ + ret = nn_init(out, 0); EG(ret, err); + + ret = nn_init(&T[0], 0); EG(ret, err); + ret = nn_init(&T[1], 0); EG(ret, err); + ret = nn_init(&T[2], 0); EG(ret, err); + + /* Generate our Itoh random mask */ + ret = nn_get_random_len(&mask, NN_MAX_BYTE_LEN); EG(ret, err); + + ret = nn_bitlen(exp, &explen); EG(ret, err); + + + /* From now on, since we deal with Itoh's countermeasure, we must have at + * least 2 bits in the exponent. We will deal with the particular cases of 0 and 1 + * bit exponents later. + */ + oldexplen = explen; + explen = (explen < 2) ? 2 : explen; + + ret = nn_getbit(&mask, (bitcnt_t)(explen - 1), &rbit); EG(ret, err); + + /* Reduce the base if necessary */ + ret = nn_cmp(base, mod, &cmp); EG(ret, err); + if(cmp >= 0){ + /* Modular reduction */ + ret = nn_mod(&T[rbit], base, mod); EG(ret, err); + if(r != NULL){ + /* Redcify the base if necessary */ + ret = nn_mul_redc1(&T[rbit], &T[rbit], r_square, mod, mpinv); EG(ret, err); + } + } + else{ + if(r != NULL){ + /* Redcify the base if necessary */ + ret = nn_mul_redc1(&T[rbit], base, r_square, mod, mpinv); EG(ret, err); + } + else{ + ret = nn_copy(&T[rbit], base); EG(ret, err); + } + } + + /* We implement the Montgomery ladder exponentiation with Itoh masking using three + * registers T[0], T[1] and T[2]. The random mask is in 'mask'. + */ + if(r != NULL){ + ret = nn_mul_redc1(&T[1-rbit], &T[rbit], &T[rbit], mod, mpinv); EG(ret, err); + } + else{ + ret = nn_mod_mul(&T[1-rbit], &T[rbit], &T[rbit], mod); EG(ret, err); + } + + /* Now proceed with the Montgomery Ladder algorithm. + */ + explen = (bitcnt_t)(explen - 1); + while (explen > 0) { + u8 rbit_next; + explen = (bitcnt_t)(explen - 1); + + /* rbit is r[i+1], and rbit_next is r[i] */ + ret = nn_getbit(&mask, explen, &rbit_next); EG(ret, err); + /* Get the exponent bit */ + ret = nn_getbit(exp, explen, &expbit); EG(ret, err); + + /* Square */ + if(r != NULL){ + ret = nn_mul_redc1(&T[2], &T[expbit ^ rbit], &T[expbit ^ rbit], mod, mpinv); EG(ret, err); + } + else{ + ret = nn_mod_mul(&T[2], &T[expbit ^ rbit], &T[expbit ^ rbit], mod); EG(ret, err); + } + /* Multiply */ + if(r != NULL){ + ret = nn_mul_redc1(&T[1], &T[0], &T[1], mod, mpinv); EG(ret, err); + } + else{ + ret = nn_mod_mul(&T[1], &T[0], &T[1], mod); EG(ret, err); + } + /* Copy */ + ret = nn_copy(&T[0], &T[2 - (expbit ^ rbit_next)]); EG(ret, err); + ret = nn_copy(&T[1], &T[1 + (expbit ^ rbit_next)]); EG(ret, err); + /* Update rbit */ + rbit = rbit_next; + } + ret = nn_one(&T[1 - rbit]); + if(r != NULL){ + /* Unredcify in out */ + ret = nn_mul_redc1(&T[rbit], &T[rbit], &T[1 - rbit], mod, mpinv); EG(ret, err); + } + + /* Deal with the particular cases of 0 and 1 bit exponents */ + /* Case with 0 bit exponent: T[1 - rbit] contains 1 modulo mod */ + ret = nn_mod(&T[1 - rbit], &T[1 - rbit], mod); EG(ret, err); + /* Case with 1 bit exponent */ + ret = nn_mod(&T[2], base, mod); EG(ret, err); + /* Proceed with the output */ + ret = nn_cnd_swap((oldexplen == 0), out, &T[1 - rbit]); + ret = nn_cnd_swap((oldexplen == 1), out, &T[2]); + ret = nn_cnd_swap(((oldexplen != 0) && (oldexplen != 1)), out, &T[rbit]); + +err: + nn_uninit(&T[0]); + nn_uninit(&T[1]); + nn_uninit(&T[2]); + nn_uninit(&mask); + + return ret; +} + +/* + * NOT constant time with regard to the bitlength of exp. + * + * Reduces the base modulo mod if it is not already reduced, + * which is also a small divergence wrt constant time leaking + * the information that base <= mod or not: please use with care + * in the callers if this information is sensitive. + * + * Aliasing not supported. Expects caller to check parameters + * have been initialized. This is an internal helper. + * + * Compute (base ** exp) mod (mod) using a Montgomery Ladder algorithm + * with Montgomery redcification, hence the Montgomery coefficients as input. + * The module "mod" is expected to be odd for redcification to be used. + * + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mod_pow_redc(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod, nn_src_t r, nn_src_t r_square, word_t mpinv) +{ + return _nn_exp_monty_ladder_ltr(out, base, exp, mod, r, r_square, mpinv); +} + +/* + * NOT constant time with regard to the bitlength of exp. + * + * Reduces the base modulo mod if it is not already reduced, + * which is also a small divergence wrt constant time leaking + * the information that base <= mod or not: please use with care + * in the callers if this information is sensitive. + * + * Aliasing is supported. Expects caller to check parameters + * have been initialized. This is an internal helper. + * + * Compute (base ** exp) mod (mod) using a Montgomery Ladder algorithm. + * This function works for all values of "mod", but is slower that the one + * using Montgomery multiplication (which only works for odd "mod"). Hence, + * it is only used on even "mod" by upper layers. + * + * Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mod_pow(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod) +{ + int ret; + + if ((out == base) || (out == exp) || (out == mod)) { + nn _out; + _out.magic = WORD(0); + + ret = nn_init(&_out, 0); EG(ret, err); + ret = _nn_exp_monty_ladder_ltr(&_out, base, exp, mod, NULL, NULL, WORD(0)); EG(ret, err); + ret = nn_copy(out, &_out); + } + else{ + ret = _nn_exp_monty_ladder_ltr(out, base, exp, mod, NULL, NULL, WORD(0)); + } + +err: + return ret; +} + +/* + * Same purpose as above but handles aliasing. + * Expects caller to check parameters + * have been initialized. This is an internal helper. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mod_pow_redc_aliased(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod, nn_src_t r, nn_src_t r_square, word_t mpinv) +{ + nn _out; + int ret; + _out.magic = WORD(0); + + ret = nn_init(&_out, 0); EG(ret, err); + ret = _nn_mod_pow_redc(&_out, base, exp, mod, r, r_square, mpinv); EG(ret, err); + ret = nn_copy(out, &_out); + +err: + nn_uninit(&_out); + + return ret; +} + +/* Aliased version of previous one. + * NOTE: our nn_mod_pow_redc primitives suppose that the modulo is odd for Montgomery multiplication + * primitives to provide consistent results. + * + * Aliasing is supported. + */ +int nn_mod_pow_redc(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod, nn_src_t r, nn_src_t r_square, word_t mpinv) +{ + int ret, isodd; + + ret = nn_check_initialized(base); EG(ret, err); + ret = nn_check_initialized(exp); EG(ret, err); + ret = nn_check_initialized(mod); EG(ret, err); + ret = nn_check_initialized(r); EG(ret, err); + ret = nn_check_initialized(r_square); EG(ret, err); + + /* Check that we have an odd number for our modulo */ + ret = nn_isodd(mod, &isodd); EG(ret, err); + MUST_HAVE(isodd, ret, err); + + /* Handle the case where our prime is less than two words size. + * We need it to be >= 2 words size for the Montgomery multiplication to be + * usable. + */ + if(mod->wlen < 2){ + /* Local copy our modulo */ + nn _mod; + _mod.magic = WORD(0); + + /* And set its length accordingly */ + ret = nn_copy(&_mod, mod); EG(ret, err1); + ret = nn_set_wlen(&_mod, 2); EG(ret, err1); + /* Handle output aliasing */ + if ((out == base) || (out == exp) || (out == mod) || (out == r) || (out == r_square)) { + ret = _nn_mod_pow_redc_aliased(out, base, exp, &_mod, r, r_square, mpinv); EG(ret, err1); + } else { + ret = _nn_mod_pow_redc(out, base, exp, &_mod, r, r_square, mpinv); EG(ret, err1); + } +err1: + nn_uninit(&_mod); + EG(ret, err); + } + else{ + /* Handle output aliasing */ + if ((out == base) || (out == exp) || (out == mod) || (out == r) || (out == r_square)) { + ret = _nn_mod_pow_redc_aliased(out, base, exp, mod, r, r_square, mpinv); + } else { + ret = _nn_mod_pow_redc(out, base, exp, mod, r, r_square, mpinv); + } + } + +err: + return ret; +} + + +/* + * NOT constant time with regard to the bitlength of exp. + * Aliasing is supported. + * + * Compute (base ** exp) mod (mod) using a Montgomery Ladder algorithm. + * Internally, this computes Montgomery coefficients and uses the redc + * function. + * + * Returns 0 on success, -1 on error. + */ +int nn_mod_pow(nn_t out, nn_src_t base, nn_src_t exp, nn_src_t mod) +{ + nn r, r_square; + word_t mpinv; + int ret, isodd; + r.magic = r_square.magic = WORD(0); + + /* Handle the case where our modulo is even: in this case, we cannot + * use our Montgomery multiplication primitives as they are only suitable + * for odd numbers. We fallback to less efficient regular modular exponentiation. + */ + ret = nn_isodd(mod, &isodd); EG(ret, err); + if(!isodd){ + /* mod is even: use the regular unoptimized modular exponentiation */ + ret = _nn_mod_pow(out, base, exp, mod); + } + else{ + /* mod is odd */ + /* Compute the Montgomery coefficients */ + ret = nn_compute_redc1_coefs(&r, &r_square, mod, &mpinv); EG(ret, err); + + /* Now use the redc version */ + ret = nn_mod_pow_redc(out, base, exp, mod, &r, &r_square, mpinv); + } + +err: + nn_uninit(&r); + nn_uninit(&r_square); + + return ret; +} diff --git a/crypto/libecc/src/nn/nn_modinv.c b/crypto/libecc/src/nn/nn_modinv.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_modinv.c @@ -0,0 +1,587 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include +#include +/* Include the "internal" header as we use non public API here */ +#include "../nn/nn_mul.h" + +/* + * Compute out = x^-1 mod m, i.e. out such that (out * x) = 1 mod m + * out is initialized by the function, i.e. caller needs not initialize + * it; only provide the associated storage space. Done in *constant + * time* if underlying routines are. + * + * Asserts that m is odd and that x is smaller than m. + * This second condition is not strictly necessary, + * but it allows to perform all operations on nn's of the same length, + * namely the length of m. + * + * Uses a binary xgcd algorithm, + * only keeps track of coefficient for inverting x, + * and performs reduction modulo m at each step. + * + * This does not normalize out on return. + * + * 0 is returned on success (everything went ok and x has reciprocal), -1 + * on error or if x has no reciprocal. On error, out is not meaningful. + * + * The function is an internal helper: caller MUST check params have been + * initialized, i.e. this is not done by the function. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_modinv_odd(nn_t out, nn_src_t x, nn_src_t m) +{ + int isodd, swap, smaller, ret, cmp, iszero, tmp_isodd; + nn a, b, u, tmp, mp1d2; + nn_t uu = out; + bitcnt_t cnt; + a.magic = b.magic = u.magic = tmp.magic = mp1d2.magic = WORD(0); + + ret = nn_init(out, 0); EG(ret, err); + ret = nn_init(&a, (u16)(m->wlen * WORD_BYTES)); EG(ret, err); + ret = nn_init(&b, (u16)(m->wlen * WORD_BYTES)); EG(ret, err); + ret = nn_init(&u, (u16)(m->wlen * WORD_BYTES)); EG(ret, err); + ret = nn_init(&mp1d2, (u16)(m->wlen * WORD_BYTES)); EG(ret, err); + /* + * Temporary space needed to only deal with positive stuff. + */ + ret = nn_init(&tmp, (u16)(m->wlen * WORD_BYTES)); EG(ret, err); + + MUST_HAVE((!nn_isodd(m, &isodd)) && isodd, ret, err); + MUST_HAVE((!nn_cmp(x, m, &cmp)) && (cmp < 0), ret, err); + MUST_HAVE((!nn_iszero(x, &iszero)) && (!iszero), ret, err); + + /* + * Maintain: + * + * a = u * x (mod m) + * b = uu * x (mod m) + * + * and b odd at all times. Initially, + * + * a = x, u = 1 + * b = m, uu = 0 + */ + ret = nn_copy(&a, x); EG(ret, err); + ret = nn_set_wlen(&a, m->wlen); EG(ret, err); + ret = nn_copy(&b, m); EG(ret, err); + ret = nn_one(&u); EG(ret, err); + ret = nn_zero(uu); EG(ret, err); + + /* + * The lengths of u and uu should not affect constant timeness but it + * does not hurt to set them already. + * They will always be strictly smaller than m. + */ + ret = nn_set_wlen(&u, m->wlen); EG(ret, err); + ret = nn_set_wlen(uu, m->wlen); EG(ret, err); + + /* + * Precompute inverse of 2 mod m: + * 2^-1 = (m+1)/2 + * computed as (m >> 1) + 1. + */ + ret = nn_rshift_fixedlen(&mp1d2, m, 1); EG(ret, err); + + ret = nn_inc(&mp1d2, &mp1d2); EG(ret, err); /* no carry can occur here + because of prev. shift */ + + cnt = (bitcnt_t)((a.wlen + b.wlen) * WORD_BITS); + while (cnt > 0) { + cnt = (bitcnt_t)(cnt - 1); + /* + * Always maintain b odd. The logic of the iteration is as + * follows. + */ + + /* + * For a, b: + * + * odd = a & 1 + * swap = odd & (a < b) + * if (swap) + * swap(a, b) + * if (odd) + * a -= b + * a /= 2 + */ + + MUST_HAVE((!nn_isodd(&b, &tmp_isodd)) && tmp_isodd, ret, err); + + ret = nn_isodd(&a, &isodd); EG(ret, err); + ret = nn_cmp(&a, &b, &cmp); EG(ret, err); + swap = isodd & (cmp == -1); + + ret = nn_cnd_swap(swap, &a, &b); EG(ret, err); + ret = nn_cnd_sub(isodd, &a, &a, &b); EG(ret, err); + + MUST_HAVE((!nn_isodd(&a, &tmp_isodd)) && (!tmp_isodd), ret, err); /* a is now even */ + + ret = nn_rshift_fixedlen(&a, &a, 1); EG(ret, err);/* division by 2 */ + + /* + * For u, uu: + * + * if (swap) + * swap u, uu + * smaller = (u < uu) + * if (odd) + * if (smaller) + * u += m - uu + * else + * u -= uu + * u >>= 1 + * if (u was odd) + * u += (m+1)/2 + */ + ret = nn_cnd_swap(swap, &u, uu); EG(ret, err); + + /* This parameter is used to avoid handling negative numbers. */ + ret = nn_cmp(&u, uu, &cmp); EG(ret, err); + smaller = (cmp == -1); + + /* Computation of 'm - uu' can always be performed. */ + ret = nn_sub(&tmp, m, uu); EG(ret, err); + + /* Selection btw 'm-uu' and '-uu' is made by the following function calls. */ + ret = nn_cnd_add(isodd & smaller, &u, &u, &tmp); EG(ret, err); /* no carry can occur as 'u+(m-uu) = m-(uu-u) < m' */ + ret = nn_cnd_sub(isodd & (!smaller), &u, &u, uu); EG(ret, err); + + /* Divide u by 2 */ + ret = nn_isodd(&u, &isodd); EG(ret, err); + ret = nn_rshift_fixedlen(&u, &u, 1); EG(ret, err); + ret = nn_cnd_add(isodd, &u, &u, &mp1d2); EG(ret, err); /* no carry can occur as u=1+u' with u' 0, the quantity + * (bitsize of a) + (bitsize of b) + * is reduced by at least one bit per iteration, + * hence after (bitsize of x) + (bitsize of m) - 1 + * iterations we surely have a = 0. Then b = gcd(x, m) + * and if b = 1 then also uu = x^{-1} (mod m). + */ + } + + MUST_HAVE((!nn_iszero(&a, &iszero)) && iszero, ret, err); + + /* Check that gcd is one. */ + ret = nn_cmp_word(&b, WORD(1), &cmp); EG(ret, err); + + /* If not, set "inverse" to zero. */ + ret = nn_cnd_sub(cmp != 0, uu, uu, uu); EG(ret, err); + + ret = cmp ? -1 : 0; + +err: + nn_uninit(&a); + nn_uninit(&b); + nn_uninit(&u); + nn_uninit(&mp1d2); + nn_uninit(&tmp); + + PTR_NULLIFY(uu); + + return ret; +} + +/* + * Same as above without restriction on m. + * No attempt to make it constant time. + * Uses the above constant-time binary xgcd when m is odd + * and a not constant time plain Euclidean xgcd when m is even. + * + * _out parameter need not be initialized; this will be done by the function. + * x and m must be initialized nn. + * + * Return -1 on error or if if x has no reciprocal modulo m. out is zeroed. + * Return 0 if x has reciprocal modulo m. + * + * The function supports aliasing. + */ +int nn_modinv(nn_t _out, nn_src_t x, nn_src_t m) +{ + int sign, ret, cmp, isodd, isone; + nn_t x_mod_m; + nn u, v, out; /* Out to support aliasing */ + out.magic = u.magic = v.magic = WORD(0); + + ret = nn_check_initialized(x); EG(ret, err); + ret = nn_check_initialized(m); EG(ret, err); + + /* Initialize out */ + ret = nn_init(&out, 0); EG(ret, err); + ret = nn_isodd(m, &isodd); EG(ret, err); + if (isodd) { + ret = nn_cmp(x, m, &cmp); EG(ret, err); + if (cmp >= 0) { + /* + * If x >= m, (x^-1) mod m = ((x mod m)^-1) mod m + * Hence, compute x mod m. In order to avoid + * additional stack usage, we use 'u' (not + * already useful at that point in the function). + */ + x_mod_m = &u; + ret = nn_mod(x_mod_m, x, m); EG(ret, err); + ret = _nn_modinv_odd(&out, x_mod_m, m); EG(ret, err); + } else { + ret = _nn_modinv_odd(&out, x, m); EG(ret, err); + } + ret = nn_copy(_out, &out); + goto err; + } + + /* Now m is even */ + ret = nn_isodd(x, &isodd); EG(ret, err); + MUST_HAVE(isodd, ret, err); + + ret = nn_init(&u, 0); EG(ret, err); + ret = nn_init(&v, 0); EG(ret, err); + ret = nn_xgcd(&out, &u, &v, x, m, &sign); EG(ret, err); + ret = nn_isone(&out, &isone); EG(ret, err); + MUST_HAVE(isone, ret, err); + + ret = nn_mod(&out, &u, m); EG(ret, err); + if (sign == -1) { + ret = nn_sub(&out, m, &out); EG(ret, err); + } + ret = nn_copy(_out, &out); + +err: + nn_uninit(&out); + nn_uninit(&u); + nn_uninit(&v); + + PTR_NULLIFY(x_mod_m); + + return ret; +} + +/* + * Compute (A - B) % 2^(storagebitsizeof(B) + 1). A and B must be initialized nn. + * the function is an internal helper and does not verify params have been + * initialized; this must be done by the caller. No assumption on A and B values + * such as A >= B. Done in *constant time. Returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _nn_sub_mod_2exp(nn_t A, nn_src_t B) +{ + u8 Awlen = A->wlen; + int ret; + + ret = nn_set_wlen(A, (u8)(Awlen + 1)); EG(ret, err); + + /* Make sure A > B */ + /* NOTE: A->wlen - 1 is not an issue here thant to the nn_set_wlen above */ + A->val[A->wlen - 1] = WORD(1); + ret = nn_sub(A, A, B); EG(ret, err); + + /* The artificial word will be cleared in the following function call */ + ret = nn_set_wlen(A, Awlen); + +err: + return ret; +} + +/* + * Invert x modulo 2^exp using Hensel lifting. Returns 0 on success, -1 on + * error. On success, x_isodd is 1 if x is odd, 0 if it is even. + * Please note that the result is correct (inverse of x) only when x is prime + * to 2^exp, i.e. x is odd (x_odd is 1). + * + * Operations are done in *constant time*. + * + * Aliasing is supported. + */ +int nn_modinv_2exp(nn_t _out, nn_src_t x, bitcnt_t exp, int *x_isodd) +{ + bitcnt_t cnt; + u8 exp_wlen = (u8)BIT_LEN_WORDS(exp); + bitcnt_t exp_cnt = exp % WORD_BITS; + word_t mask = (word_t)((exp_cnt == 0) ? WORD_MASK : (word_t)((WORD(1) << exp_cnt) - WORD(1))); + nn tmp_sqr, tmp_mul; + /* for aliasing */ + int isodd, ret; + nn out; + out.magic = tmp_sqr.magic = tmp_mul.magic = WORD(0); + + MUST_HAVE((x_isodd != NULL), ret, err); + ret = nn_check_initialized(x); EG(ret, err); + ret = nn_check_initialized(_out); EG(ret, err); + + ret = nn_init(&out, 0); EG(ret, err); + ret = nn_init(&tmp_sqr, 0); EG(ret, err); + ret = nn_init(&tmp_mul, 0); EG(ret, err); + ret = nn_isodd(x, &isodd); EG(ret, err); + if (exp == (bitcnt_t)0){ + /* Specific case of zero exponent, output 0 */ + (*x_isodd) = isodd; + goto err; + } + if (!isodd) { + ret = nn_zero(_out); EG(ret, err); + (*x_isodd) = 0; + goto err; + } + + /* + * Inverse modulo 2. + */ + cnt = 1; + ret = nn_one(&out); EG(ret, err); + + /* + * Inverse modulo 2^(2^i) <= 2^WORD_BITS. + * Assumes WORD_BITS is a power of two. + */ + for (; cnt < WORD_MIN(WORD_BITS, exp); cnt = (bitcnt_t)(cnt << 1)) { + ret = nn_sqr_low(&tmp_sqr, &out, out.wlen); EG(ret, err); + ret = nn_mul_low(&tmp_mul, &tmp_sqr, x, out.wlen); EG(ret, err); + ret = nn_lshift_fixedlen(&out, &out, 1); EG(ret, err); + + /* + * Allowing "negative" results for a subtraction modulo + * a power of two would allow to use directly: + * nn_sub(out, out, tmp_mul) + * which is always negative in ZZ except when x is one. + * + * Another solution is to add the opposite of tmp_mul. + * nn_modopp_2exp(tmp_mul, tmp_mul); + * nn_add(out, out, tmp_mul); + * + * The current solution is to add a sufficiently large power + * of two to out unconditionally to absorb the potential + * borrow. The result modulo 2^(2^i) is correct whether the + * borrow occurs or not. + */ + ret = _nn_sub_mod_2exp(&out, &tmp_mul); EG(ret, err); + } + + /* + * Inverse modulo 2^WORD_BITS < 2^(2^i) < 2^exp. + */ + for (; cnt < ((exp + 1) >> 1); cnt = (bitcnt_t)(cnt << 1)) { + ret = nn_set_wlen(&out, (u8)(2 * out.wlen)); EG(ret, err); + ret = nn_sqr_low(&tmp_sqr, &out, out.wlen); EG(ret, err); + ret = nn_mul_low(&tmp_mul, &tmp_sqr, x, out.wlen); EG(ret, err); + ret = nn_lshift_fixedlen(&out, &out, 1); EG(ret, err); + ret = _nn_sub_mod_2exp(&out, &tmp_mul); EG(ret, err); + } + + /* + * Inverse modulo 2^(2^i + j) >= 2^exp. + */ + if (exp > WORD_BITS) { + ret = nn_set_wlen(&out, exp_wlen); EG(ret, err); + ret = nn_sqr_low(&tmp_sqr, &out, out.wlen); EG(ret, err); + ret = nn_mul_low(&tmp_mul, &tmp_sqr, x, out.wlen); EG(ret, err); + ret = nn_lshift_fixedlen(&out, &out, 1); EG(ret, err); + ret = _nn_sub_mod_2exp(&out, &tmp_mul); EG(ret, err); + } + + /* + * Inverse modulo 2^exp. + */ + out.val[exp_wlen - 1] &= mask; + + ret = nn_copy(_out, &out); EG(ret, err); + + (*x_isodd) = 1; + +err: + nn_uninit(&out); + nn_uninit(&tmp_sqr); + nn_uninit(&tmp_mul); + + return ret; +} + +/* + * Invert word w modulo m. + * + * The function supports aliasing. + */ +int nn_modinv_word(nn_t out, word_t w, nn_src_t m) +{ + nn nn_tmp; + int ret; + nn_tmp.magic = WORD(0); + + ret = nn_init(&nn_tmp, 0); EG(ret, err); + ret = nn_set_word_value(&nn_tmp, w); EG(ret, err); + ret = nn_modinv(out, &nn_tmp, m); + +err: + nn_uninit(&nn_tmp); + + return ret; +} + + +/* + * Internal function for nn_modinv_fermat and nn_modinv_fermat_redc used + * hereafter. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_modinv_fermat_common(nn_t out, nn_src_t x, nn_src_t p, nn_t p_minus_two, int *lesstwo) +{ + int ret, cmp, isodd; + nn two; + two.magic = WORD(0); + + /* Sanity checks on inputs */ + ret = nn_check_initialized(x); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + /* NOTE: since this is an internal function, we are ensured that p_minus_two, + * two and regular are OK. + */ + + /* 0 is not invertible in any case */ + ret = nn_iszero(x, &cmp); EG(ret, err); + if(cmp){ + /* Zero the output and return an error */ + ret = nn_init(out, 0); EG(ret, err); + ret = nn_zero(out); EG(ret, err); + ret = -1; + goto err; + } + + /* For p <= 2, p being prime either p = 1 or p = 2. + * When p = 2, only 1 has an inverse, if p = 1 no one has an inverse. + */ + (*lesstwo) = 0; + ret = nn_cmp_word(p, WORD(2), &cmp); EG(ret, err); + if(cmp == 0){ + /* This is the p = 2 case, parity of x provides the result */ + ret = nn_isodd(x, &isodd); EG(ret, err); + if(isodd){ + /* x is odd, 1 is its inverse */ + ret = nn_init(out, 0); EG(ret, err); + ret = nn_one(out); EG(ret, err); + ret = 0; + } + else{ + /* x is even, no inverse. Zero the output */ + ret = nn_init(out, 0); EG(ret, err); + ret = nn_zero(out); EG(ret, err); + ret = -1; + } + (*lesstwo) = 1; + goto err; + } else if (cmp < 0){ + /* This is the p = 1 case, no inverse here: hence return an error */ + /* Zero the output */ + ret = nn_init(out, 0); EG(ret, err); + ret = nn_zero(out); EG(ret, err); + ret = -1; + (*lesstwo) = 1; + goto err; + } + + /* Else we compute (p-2) for the upper layer */ + if(p != p_minus_two){ + /* Handle aliasing of p and p_minus_two */ + ret = nn_init(p_minus_two, 0); EG(ret, err); + } + + ret = nn_init(&two, 0); EG(ret, err); + ret = nn_set_word_value(&two, WORD(2)); EG(ret, err); + ret = nn_sub(p_minus_two, p, &two); + +err: + nn_uninit(&two); + + return ret; +} + +/* + * Invert NN x modulo p using Fermat's little theorem for our inversion: + * + * p prime means that: + * x^(p-1) = 1 mod (p) + * which means that x^(p-2) mod(p) is the modular inverse of x mod (p) + * for x != 0 + * + * NOTE: the input hypothesis is that p is prime. + * XXX WARNING: using this function with p not prime will produce wrong + * results without triggering an error! + * + * The function returns 0 on success, -1 on error + * (e.g. if x has no inverse modulo p, i.e. x = 0). + * + * Aliasing is supported. + */ +int nn_modinv_fermat(nn_t out, nn_src_t x, nn_src_t p) +{ + int ret, lesstwo; + nn p_minus_two; + p_minus_two.magic = WORD(0); + + /* Call our helper. + * NOTE: "marginal" cases where x = 0 and p <= 2 should be caught in this helper. + */ + ret = _nn_modinv_fermat_common(out, x, p, &p_minus_two, &lesstwo); EG(ret, err); + + if(!lesstwo){ + /* Compute x^(p-2) mod (p) */ + ret = nn_mod_pow(out, x, &p_minus_two, p); + } + +err: + nn_uninit(&p_minus_two); + + return ret; +} + +/* + * Invert NN x modulo m using Fermat's little theorem for our inversion. + * + * This is a version with already (pre)computed Montgomery coefficients. + * + * NOTE: the input hypothesis is that p is prime. + * XXX WARNING: using this function with p not prime will produce wrong + * results without triggering an error! + * + * The function returns 0 on success, -1 on error + * (e.g. if x has no inverse modulo p, i.e. x = 0). + * + * Aliasing is supported. + */ +int nn_modinv_fermat_redc(nn_t out, nn_src_t x, nn_src_t p, nn_src_t r, nn_src_t r_square, word_t mpinv) +{ + int ret, lesstwo; + nn p_minus_two; + p_minus_two.magic = WORD(0); + + /* Call our helper. + * NOTE: "marginal" cases where x = 0 and p <= 2 should be caught in this helper. + */ + ret = _nn_modinv_fermat_common(out, x, p, &p_minus_two, &lesstwo); EG(ret, err); + + if(!lesstwo){ + /* Compute x^(p-2) mod (p) using precomputed Montgomery coefficients as input */ + ret = nn_mod_pow_redc(out, x, &p_minus_two, p, r, r_square, mpinv); + } + +err: + nn_uninit(&p_minus_two); + + return ret; +} diff --git a/crypto/libecc/src/nn/nn_mul.h b/crypto/libecc/src/nn/nn_mul.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_mul.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __NN_MUL_H__ +#define __NN_MUL_H__ +#include +#include + +ATTRIBUTE_WARN_UNUSED_RET int nn_mul_low(nn_t out, nn_src_t in1, nn_src_t in2, u8 wlimit); +ATTRIBUTE_WARN_UNUSED_RET int nn_sqr_low(nn_t out, nn_src_t in, u8 wlimit); +/* (declared in public header) +ATTRIBUTE_WARN_UNUSED_RET int nn_mul(nn_t out, nn_src_t in1, nn_src_t in2); +ATTRIBUTE_WARN_UNUSED_RET int nn_sqr(nn_t out, nn_src_t in); +ATTRIBUTE_WARN_UNUSED_RET int nn_mul_word(nn_t out, nn_src_t in, word_t w); +*/ + +#endif /* __NN_MUL_H__ */ diff --git a/crypto/libecc/src/nn/nn_mul.c b/crypto/libecc/src/nn/nn_mul.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_mul.c @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +/* Use internal API header */ +#include "nn_mul.h" + +/* + * Compute out = (in1 * in2) & (2^(WORD_BYTES * wlimits) - 1). + * + * The function is constant time for all sets of parameters of given + * lengths. + * + * Implementation: while most generic library implement some advanced + * algorithm (Karatsuba, Toom-Cook, or FFT based algorithms) + * which provide a performance advantage for large numbers, the code + * below is mainly oriented towards simplicity and readibility. It is + * a direct writing of the naive multiplication algorithm one has + * learned in school. + * + * Portability: in order for the code to be portable, all word by + * word multiplication are actually performed by an helper macro + * on half words. + * + * Note: 'out' is initialized by the function (caller can omit it) + * + * Internal use only. Check on input nn left to the caller. + * + * The function returns 0 on succes, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mul_low(nn_t out, nn_src_t in1, nn_src_t in2, + u8 wlimit) +{ + word_t carry, prod_high, prod_low; + u8 i, j, pos; + int ret; + + /* We have to check that wlimit does not exceed our NN_MAX_WORD_LEN */ + MUST_HAVE(((wlimit * WORD_BYTES) <= NN_MAX_BYTE_LEN), ret, err); + + ret = nn_init(out, (u16)(wlimit * WORD_BYTES)); EG(ret, err); + + for (i = 0; i < in1->wlen; i++) { + carry = 0; + pos = 0; + + for (j = 0; j < in2->wlen; j++) { + pos = (u8)(i + j); + + /* + * size of the result provided by the caller may not + * be large enough for what multiplication may + * generate. + */ + if (pos >= wlimit) { + continue; + } + + /* + * Compute the result of the multiplication of + * two words. + */ + WORD_MUL(prod_high, prod_low, + in1->val[i], in2->val[j]); + /* + * And add previous carry. + */ + prod_low = (word_t)(prod_low + carry); + prod_high = (word_t)(prod_high + (prod_low < carry)); + + /* + * Add computed word to what we can currently + * find at current position in result. + */ + out->val[pos] = (word_t)(out->val[pos] + prod_low); + carry = (word_t)(prod_high + (out->val[pos] < prod_low)); + } + + /* + * What remains in acc_high at end of previous loop should + * be added to next word after pos in result. + */ + if ((pos + 1) < wlimit) { + out->val[pos + 1] = (word_t)(out->val[pos + 1] + carry); + } + } + +err: + return ret; +} + +/* Aliased version. Internal use only. Check on input nn left to the caller */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mul_low_aliased(nn_t out, nn_src_t in1, nn_src_t in2, + u8 wlimit) +{ + nn out_cpy; + int ret; + out_cpy.magic = WORD(0); + + ret = _nn_mul_low(&out_cpy, in1, in2, wlimit); EG(ret, err); + ret = nn_init(out, out_cpy.wlen); EG(ret, err); + ret = nn_copy(out, &out_cpy); + +err: + nn_uninit(&out_cpy); + + return ret; +} + +/* Public version supporting aliasing. */ +int nn_mul_low(nn_t out, nn_src_t in1, nn_src_t in2, u8 wlimit) +{ + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + + /* Handle output aliasing */ + if ((out == in1) || (out == in2)) { + ret = _nn_mul_low_aliased(out, in1, in2, wlimit); + } else { + ret = _nn_mul_low(out, in1, in2, wlimit); + } + +err: + return ret; +} + +/* + * Compute out = in1 * in2. 'out' is initialized by the function. + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_mul(nn_t out, nn_src_t in1, nn_src_t in2) +{ + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + ret = nn_mul_low(out, in1, in2, (u8)(in1->wlen + in2->wlen)); + +err: + return ret; +} + +int nn_sqr_low(nn_t out, nn_src_t in, u8 wlimit) +{ + return nn_mul_low(out, in, in, wlimit); +} + +/* + * Compute out = in * in. 'out' is initialized by the function. + * The function returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_sqr(nn_t out, nn_src_t in) +{ + return nn_mul(out, in, in); +} + +/* + * Multiply a multiprecision number by a word, i.e. out = in * w. The function + * returns 0 on success, -1 on error. + * + * Aliasing supported. + */ +int nn_mul_word(nn_t out, nn_src_t in, word_t w) +{ + nn w_nn; + int ret; + w_nn.magic = WORD(0); + + ret = nn_check_initialized(in); EG(ret, err); + ret = nn_init(&w_nn, WORD_BYTES); EG(ret, err); + w_nn.val[0] = w; + ret = nn_mul(out, in, &w_nn); + +err: + nn_uninit(&w_nn); + + return ret; +} diff --git a/crypto/libecc/src/nn/nn_mul_redc1.c b/crypto/libecc/src/nn/nn_mul_redc1.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_mul_redc1.c @@ -0,0 +1,342 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include +#include +#include + +/* + * Given an odd number p, compute Montgomery coefficients r, r_square + * as well as mpinv so that: + * + * - r = 2^p_rounded_bitlen mod (p), where + * p_rounded_bitlen = BIT_LEN_WORDS(p) (i.e. bit length of + * minimum number of words required to store p) + * - r_square = r^2 mod (p) + * - mpinv = -p^-1 mod (2^WORDSIZE). + * + * Aliasing of outputs with the input is possible since p_in is + * copied in local p at the beginning of the function. + * + * The function returns 0 on success, -1 on error. out parameters 'r', + * 'r_square' and 'mpinv' are only meaningful on success. + */ +int nn_compute_redc1_coefs(nn_t r, nn_t r_square, nn_src_t p_in, word_t *mpinv) +{ + bitcnt_t p_rounded_bitlen; + nn p, tmp_nn1, tmp_nn2; + word_t _mpinv; + int ret, isodd; + p.magic = tmp_nn1.magic = tmp_nn2.magic = WORD(0); + + ret = nn_check_initialized(p_in); EG(ret, err); + ret = nn_init(&p, 0); EG(ret, err); + ret = nn_copy(&p, p_in); EG(ret, err); + MUST_HAVE((mpinv != NULL), ret, err); + + /* + * In order for our reciprocal division routines to work, it is + * expected that the bit length (including leading zeroes) of + * input prime p is >= 2 * wlen where wlen is the number of bits + * of a word size. + */ + if (p.wlen < 2) { + ret = nn_set_wlen(&p, 2); EG(ret, err); + } + + ret = nn_init(r, 0); EG(ret, err); + ret = nn_init(r_square, 0); EG(ret, err); + ret = nn_init(&tmp_nn1, 0); EG(ret, err); + ret = nn_init(&tmp_nn2, 0); EG(ret, err); + + /* p_rounded_bitlen = bitlen of p rounded to word size */ + p_rounded_bitlen = (bitcnt_t)(WORD_BITS * p.wlen); + + /* _mpinv = 2^wlen - (modinv(prime, 2^wlen)) */ + ret = nn_set_wlen(&tmp_nn1, 2); EG(ret, err); + tmp_nn1.val[1] = WORD(1); + ret = nn_copy(&tmp_nn2, &tmp_nn1); EG(ret, err); + ret = nn_modinv_2exp(&tmp_nn1, &p, WORD_BITS, &isodd); EG(ret, err); + ret = nn_sub(&tmp_nn1, &tmp_nn2, &tmp_nn1); EG(ret, err); + _mpinv = tmp_nn1.val[0]; + + /* r = (0x1 << p_rounded_bitlen) (p) */ + ret = nn_one(r); EG(ret, err); + ret = nn_lshift(r, r, p_rounded_bitlen); EG(ret, err); + ret = nn_mod(r, r, &p); EG(ret, err); + + /* + * r_square = (0x1 << (2*p_rounded_bitlen)) (p) + * We are supposed to handle NN numbers of size at least two times + * the biggest prime we use. Thus, we should be able to compute r_square + * with a multiplication followed by a reduction. (NB: we cannot use our + * Montgomery primitives at this point since we are computing its + * constants!) + */ + /* Check we have indeed enough space for our r_square computation */ + MUST_HAVE(!(NN_MAX_BIT_LEN < (2 * p_rounded_bitlen)), ret, err); + + ret = nn_sqr(r_square, r); EG(ret, err); + ret = nn_mod(r_square, r_square, &p); EG(ret, err); + + (*mpinv) = _mpinv; + +err: + nn_uninit(&p); + nn_uninit(&tmp_nn1); + nn_uninit(&tmp_nn2); + + return ret; +} + +/* + * Perform Montgomery multiplication, that is usual multiplication + * followed by reduction modulo p. + * + * Inputs are supposed to be < p (i.e. taken modulo p). + * + * This uses the CIOS algorithm from Koc et al. + * + * The p input is the modulo number of the Montgomery multiplication, + * and mpinv is -p^(-1) mod (2^WORDSIZE). + * + * The function does not check input parameters are initialized. This + * MUST be done by the caller. + * + * The function returns 0 on success, -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mul_redc1(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p, + word_t mpinv) +{ + word_t prod_high, prod_low, carry, acc, m; + unsigned int i, j, len, len_mul; + /* a and b inputs such that len(b) <= len(a) */ + nn_src_t a, b; + int ret, cmp; + u8 old_wlen; + + /* + * These comparisons are input hypothesis and does not "break" + * the following computation. However performance loss exists + * when this check is always done, this is why we use our + * SHOULD_HAVE primitive. + */ + SHOULD_HAVE((!nn_cmp(in1, p, &cmp)) && (cmp < 0), ret, err); + SHOULD_HAVE((!nn_cmp(in2, p, &cmp)) && (cmp < 0), ret, err); + + ret = nn_init(out, 0); EG(ret, err); + + /* Check which one of in1 or in2 is the biggest */ + a = (in1->wlen <= in2->wlen) ? in2 : in1; + b = (in1->wlen <= in2->wlen) ? in1 : in2; + + /* + * The inputs might have been reduced due to trimming + * because of leading zeroes. It is important for our + * Montgomery algorithm to work on sizes consistent with + * out prime p real bit size. Thus, we expand the output + * size to the size of p. + */ + ret = nn_set_wlen(out, p->wlen); EG(ret, err); + + len = out->wlen; + len_mul = b->wlen; + /* + * We extend out to store carries. We first check that we + * do not have an overflow on the NN size. + */ + MUST_HAVE(((WORD_BITS * (out->wlen + 1)) <= NN_MAX_BIT_LEN), ret, err); + old_wlen = out->wlen; + out->wlen = (u8)(out->wlen + 1); + + /* + * This can be skipped if the first iteration of the for loop + * is separated. + */ + for (i = 0; i < out->wlen; i++) { + out->val[i] = 0; + } + for (i = 0; i < len; i++) { + carry = WORD(0); + for (j = 0; j < len_mul; j++) { + WORD_MUL(prod_high, prod_low, a->val[i], b->val[j]); + prod_low = (word_t)(prod_low + carry); + prod_high = (word_t)(prod_high + (prod_low < carry)); + out->val[j] = (word_t)(out->val[j] + prod_low); + carry = (word_t)(prod_high + (out->val[j] < prod_low)); + } + for (; j < len; j++) { + out->val[j] = (word_t)(out->val[j] + carry); + carry = (word_t)(out->val[j] < carry); + } + out->val[j] = (word_t)(out->val[j] + carry); + acc = (word_t)(out->val[j] < carry); + + m = (word_t)(out->val[0] * mpinv); + WORD_MUL(prod_high, prod_low, m, p->val[0]); + prod_low = (word_t)(prod_low + out->val[0]); + carry = (word_t)(prod_high + (prod_low < out->val[0])); + for (j = 1; j < len; j++) { + WORD_MUL(prod_high, prod_low, m, p->val[j]); + prod_low = (word_t)(prod_low + carry); + prod_high = (word_t)(prod_high + (prod_low < carry)); + out->val[j - 1] = (word_t)(prod_low + out->val[j]); + carry = (word_t)(prod_high + (out->val[j - 1] < prod_low)); + } + out->val[j - 1] = (word_t)(carry + out->val[j]); + carry = (word_t)(out->val[j - 1] < out->val[j]); + out->val[j] = (word_t)(acc + carry); + } + /* + * Note that at this stage the msw of out is either 0 or 1. + * If out > p we need to subtract p from out. + */ + ret = nn_cmp(out, p, &cmp); EG(ret, err); + ret = nn_cnd_sub(cmp >= 0, out, out, p); EG(ret, err); + MUST_HAVE((!nn_cmp(out, p, &cmp)) && (cmp < 0), ret, err); + /* We restore out wlen. */ + out->wlen = old_wlen; + +err: + return ret; +} + +/* + * Wrapper for previous function handling aliasing of one of the input + * paramter with out, through a copy. The function does not check + * input parameters are initialized. This MUST be done by the caller. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _nn_mul_redc1_aliased(nn_t out, nn_src_t in1, nn_src_t in2, + nn_src_t p, word_t mpinv) +{ + nn out_cpy; + int ret; + out_cpy.magic = WORD(0); + + ret = _nn_mul_redc1(&out_cpy, in1, in2, p, mpinv); EG(ret, err); + ret = nn_init(out, out_cpy.wlen); EG(ret, err); + ret = nn_copy(out, &out_cpy); + +err: + nn_uninit(&out_cpy); + + return ret; +} + +/* + * Public version, handling possible aliasing of out parameter with + * one of the input parameters. + */ +int nn_mul_redc1(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p, + word_t mpinv) +{ + int ret; + + ret = nn_check_initialized(in1); EG(ret, err); + ret = nn_check_initialized(in2); EG(ret, err); + ret = nn_check_initialized(p); EG(ret, err); + + /* Handle possible output aliasing */ + if ((out == in1) || (out == in2) || (out == p)) { + ret = _nn_mul_redc1_aliased(out, in1, in2, p, mpinv); + } else { + ret = _nn_mul_redc1(out, in1, in2, p, mpinv); + } + +err: + return ret; +} + +/* + * Compute in1 * in2 mod p where in1 and in2 are numbers < p. + * When p is an odd number, the function redcifies in1 and in2 + * parameters, does the computation and then unredcifies the + * result. When p is an even number, we use an unoptimized mul + * then mod operations sequence. + * + * From a mathematical standpoint, the computation is equivalent + * to performing: + * + * nn_mul(&tmp2, in1, in2); + * nn_mod(&out, &tmp2, q); + * + * but the modular reduction is done progressively during + * Montgomery reduction when p is odd (which brings more efficiency). + * + * Inputs are supposed to be < p (i.e. taken modulo p). + * + * The function returns 0 on success, -1 on error. + */ +int nn_mod_mul(nn_t out, nn_src_t in1, nn_src_t in2, nn_src_t p_in) +{ + nn r_square, p; + nn in1_tmp, in2_tmp; + word_t mpinv; + int ret, isodd; + r_square.magic = in1_tmp.magic = in2_tmp.magic = p.magic = WORD(0); + + /* When p_in is even, we cannot work with Montgomery multiplication */ + ret = nn_isodd(p_in, &isodd); EG(ret, err); + if(!isodd){ + /* When p_in is even, we fallback to less efficient mul then mod */ + ret = nn_mul(out, in1, in2); EG(ret, err); + ret = nn_mod(out, out, p_in); EG(ret, err); + } + else{ + /* Here, p_in is odd and we can use redcification */ + ret = nn_copy(&p, p_in); EG(ret, err); + + /* + * In order for our reciprocal division routines to work, it is + * expected that the bit length (including leading zeroes) of + * input prime p is >= 2 * wlen where wlen is the number of bits + * of a word size. + */ + if (p.wlen < 2) { + ret = nn_set_wlen(&p, 2); EG(ret, err); + } + + /* Compute Mongtomery coefs. + * NOTE: in1_tmp holds a dummy value here after the operation. + */ + ret = nn_compute_redc1_coefs(&in1_tmp, &r_square, &p, &mpinv); EG(ret, err); + + /* redcify in1 and in2 */ + ret = nn_mul_redc1(&in1_tmp, in1, &r_square, &p, mpinv); EG(ret, err); + ret = nn_mul_redc1(&in2_tmp, in2, &r_square, &p, mpinv); EG(ret, err); + + /* Compute in1 * in2 mod p in montgomery world. + * NOTE: r_square holds the result after the operation. + */ + ret = nn_mul_redc1(&r_square, &in1_tmp, &in2_tmp, &p, mpinv); EG(ret, err); + + /* Come back to real world by unredcifying result */ + ret = nn_init(&in1_tmp, 0); EG(ret, err); + ret = nn_one(&in1_tmp); EG(ret, err); + ret = nn_mul_redc1(out, &r_square, &in1_tmp, &p, mpinv); EG(ret, err); + } + +err: + nn_uninit(&p); + nn_uninit(&r_square); + nn_uninit(&in1_tmp); + nn_uninit(&in2_tmp); + + return ret; +} diff --git a/crypto/libecc/src/nn/nn_rand.c b/crypto/libecc/src/nn/nn_rand.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/nn/nn_rand.c @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +/* Include the "internal" header as we use non public API here */ +#include "../nn/nn_div.h" + + +#include + +/* + * The function initializes nn structure pointed by 'out' to a random value of + * byte length 'len'. The resulting nn will have a uniformly random value in + * [0, 2^(8 * len)[. Provided length 'len' parameter must be less than or equal + * to NN_MAX_BYTE_LEN. The function returns -1 on error and 0 on success. + */ +int nn_get_random_len(nn_t out, u16 len) +{ + int ret; + + MUST_HAVE((len <= NN_MAX_BYTE_LEN), ret, err); + + ret = nn_init(out, len); EG(ret, err); + ret = get_random((u8*) out->val, len); + +err: + return ret; +} + +/* + * The function initializes nn structure pointed by 'out' to a random value of + * *random* byte length less than or equal to 'max_len'. Unlike the function + * above (nn_get_random_len()), the resulting nn will have a uniformly random + * value in in [0, 2^(8 * len)[ *with* length selected at random in + * [0, max_len]. The function returns -1 on error and 0 on success. + * + * !! NOTE !!: think twice before using this function for anything other than + * testing purposes. Its main goal is to generate nn with random length, not + * random numbers. For instance, for a given value of max_len, the function + * returns a nn with a value of 0 w/ probability 1/max_len. + */ +int nn_get_random_maxlen(nn_t out, u16 max_len) +{ + u16 len; + int ret; + + MUST_HAVE((max_len <= NN_MAX_BYTE_LEN), ret, err); + + ret = get_random((u8 *)&len, 2); EG(ret, err); + + len = (u16)(len % (max_len + 1)); + + ret = nn_get_random_len(out, len); + +err: + return ret; +} + +/* + * On success, the return value of the function is 0 and 'out' parameter + * is initialized to an unbiased random value in ]0,q[. On error, the + * function returns -1. Due to the generation process described below, + * the size of q is limited by NN_MAX_BYTE_LEN / 2. Aliasing is supported. + * + * Generating a random value in ]0,q[ is done by reducing a large random + * value modulo q. The random value is taken with a length twice the one + * of q to ensure the reduction does not produce a biased value. + * + * Even if this is unlikely to happen, the reduction can produce a null + * result; this specific case would require to repeat the whole process. + * For that reason, the algorithm we implement works in the following + * way: + * + * 1) compute q' = q - 1 (note: q is neither 0 nor 1) + * 2) generate a random value tmp_rand twice the size of q + * 3) compute out = tmp_rand mod q' (note: out is in [0, q-2]) + * 4) compute out += 1 (note: out is in [1, q-1]) + * + * Aliasing is supported. + */ +int nn_get_random_mod(nn_t out, nn_src_t q) +{ + nn tmp_rand, qprime; + bitcnt_t q_bit_len, q_len; + int ret, isone; + qprime.magic = tmp_rand.magic = WORD(0); + + /* Check q is initialized and get its bit length */ + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_bitlen(q, &q_bit_len); EG(ret, err); + q_len = (bitcnt_t)BYTECEIL(q_bit_len); + + /* Check q is neither 0, nor 1 and its size is ok */ + MUST_HAVE((q_len) && (q_len <= (NN_MAX_BYTE_LEN / 2)), ret, err); + MUST_HAVE((!nn_isone(q, &isone)) && (!isone), ret, err); + + /* 1) compute q' = q - 1 */ + ret = nn_copy(&qprime, q); EG(ret, err); + ret = nn_dec(&qprime, &qprime); EG(ret, err); + + /* 2) generate a random value tmp_rand twice the size of q */ + ret = nn_init(&tmp_rand, (u16)(2 * q_len)); EG(ret, err); + ret = get_random((u8 *)tmp_rand.val, (u16)(2 * q_len)); EG(ret, err); + + /* 3) compute out = tmp_rand mod q' */ + ret = nn_init(out, (u16)q_len); EG(ret, err); + + /* Use nn_mod_notrim to avoid exposing the generated random length */ + ret = nn_mod_notrim(out, &tmp_rand, &qprime); EG(ret, err); + + /* 4) compute out += 1 */ + ret = nn_inc(out, out); + + err: + nn_uninit(&qprime); + nn_uninit(&tmp_rand); + + return ret; +} diff --git a/crypto/libecc/src/sig/bign.c b/crypto/libecc/src/sig/bign.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/bign.c @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_BIGN + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "BIGN" +#endif +#include + +int bign_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + return __bign_init_pub_key(out_pub, in_priv, BIGN); +} + +int bign_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + return __bign_siglen(p_bit_len, q_bit_len, hsize, blocksize, siglen); +} + +int _bign_sign_init(struct ec_sign_context *ctx) +{ + return __bign_sign_init(ctx, BIGN); +} + +int _bign_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __bign_sign_update(ctx, chunk, chunklen, BIGN); +} + +int _bign_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + return __bign_sign_finalize(ctx, sig, siglen, BIGN); +} + +int _bign_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen) +{ + return __bign_verify_init(ctx, sig, siglen, BIGN); +} + +int _bign_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __bign_verify_update(ctx, chunk, chunklen, BIGN); +} + +int _bign_verify_finalize(struct ec_verify_context *ctx) +{ + return __bign_verify_finalize(ctx, BIGN); +} + +#else /* WITH_SIG_BIGN */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_BIGN */ diff --git a/crypto/libecc/src/sig/bign_common.c b/crypto/libecc/src/sig/bign_common.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/bign_common.c @@ -0,0 +1,1001 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "BIGN" +#endif +#include + +/* + * This is an implementation of the BIGN signature algorithm as + * described in the STB 34.101.45 standard + * (http://apmi.bsu.by/assets/files/std/bign-spec29.pdf). + * + * The BIGN signature is a variation on the Shnorr signature scheme. + * + * An english high-level (less formal) description and rationale can be found + * in the IETF archive: + * https://mailarchive.ietf.org/arch/msg/cfrg/pI92HSRjMBg50NVEz32L5RciVBk/ + * + * BIGN comes in two flavors: deterministic and non-deterministic. The current + * file implements the two. + * + * In this implementation, we are *on purpose* more lax than the STB standard regarding + * the so called "internal"/"external" hash function sizes and the order size: + * - We accept order sizes that might be different than twice the internal hash + * function (HASH-BELT truncated) and the size of the external hash function. + * - We accept security levels that might be different from {128, 192, 256}. + * + * If we strictly conform to STB 34.101.45, only orders of size exactly twice the + * internal hash function length are accepted, and only external hash functions of size + * of the order are accepted. Also only security levels of 128, 192 or 256 bits + * are accepted. + * + * Being more lax on these parameters allows to be compatible with more hash + * functions and curves. + * + * Finally, although the IETF archive in english leaves the "internal" hash functions + * as configurable (wrt size constraints), the STB 34.101.45 standard fixes the BELT hash + * function (standardized in STB 34.101.31) as the one to be used. The current file follows + * this mandatory requirement and uses BELT as the only possible internal hash function + * while the external one is configurable. + * + */ + +/* NOTE: BIGN uses per its standard the BELT-HASH hash function as its "internal" + * hash function, as well as the BELT encryption block cipher during the deterministic + * computation of the nonce for the deterministic version of BIGN. + * Hence the sanity check below. + */ +#if !defined(WITH_HASH_BELT_HASH) +#error "BIGN and DBIGN need BELT-HASH, please activate it!" +#endif + + +/* Reverses the endiannes of a buffer in place */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _reverse_endianness(u8 *buf, u16 buf_size) +{ + u16 i; + u8 tmp; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + + if(buf_size > 1){ + for(i = 0; i < (buf_size / 2); i++){ + tmp = buf[i]; + buf[i] = buf[buf_size - 1 - i]; + buf[buf_size - 1 - i] = tmp; + } + } + + ret = 0; +err: + return ret; +} + +/* The additional data for bign are specific. We provide + * helpers to extract them from an adata pointer. + */ +int bign_get_oid_from_adata(const u8 *adata, u16 adata_len, const u8 **oid_ptr, u16 *oid_len) +{ + int ret; + u16 t_len; + + MUST_HAVE((adata != NULL) && (oid_ptr != NULL) && (oid_len != NULL), ret, err); + MUST_HAVE((adata_len >= 4), ret, err); + + (*oid_len) = (u16)(((u16)adata[0] << 8) | adata[1]); + t_len = (u16)(((u16)adata[2] << 8) | adata[3]); + /* Check overflow */ + MUST_HAVE(((*oid_len) + t_len) >= (t_len), ret, err); + MUST_HAVE(((*oid_len) + t_len) <= (adata_len - 4), ret, err); + (*oid_ptr) = &adata[4]; + + ret = 0; +err: + if(ret && (oid_ptr != NULL)){ + (*oid_ptr) = NULL; + } + if(ret && (oid_len != NULL)){ + (*oid_len) = 0; + } + return ret; +} + +int bign_get_t_from_adata(const u8 *adata, u16 adata_len, const u8 **t_ptr, u16 *t_len) +{ + int ret; + u16 oid_len; + + MUST_HAVE((adata != NULL) && (t_ptr != NULL) && (t_len != NULL), ret, err); + MUST_HAVE((adata_len >= 4), ret, err); + + oid_len = (u16)(((u16)adata[0] << 8) | adata[1]); + (*t_len) = (u16)(((u16)adata[2] << 8) | adata[3]); + /* Check overflow */ + MUST_HAVE((oid_len + (*t_len)) >= (oid_len), ret, err); + MUST_HAVE((oid_len + (*t_len)) <= (adata_len - 4), ret, err); + (*t_ptr) = &adata[4 + oid_len]; + + ret = 0; +err: + if(ret && (t_ptr != NULL)){ + (*t_ptr) = NULL; + } + if(ret && (t_len != NULL)){ + (*t_len) = 0; + } + return ret; +} + +int bign_set_adata(u8 *adata, u16 adata_len, const u8 *oid, u16 oid_len, const u8 *t, u16 t_len) +{ + int ret; + + MUST_HAVE((adata != NULL), ret, err); + + MUST_HAVE((oid != NULL) || (oid_len == 0), ret, err); + MUST_HAVE((t != NULL) || (t_len == 0), ret, err); + MUST_HAVE((adata_len >= 4), ret, err); + /* Check overflow */ + MUST_HAVE(((oid_len + t_len) >= oid_len), ret, err); + MUST_HAVE(((adata_len - 4) >= (oid_len + t_len)), ret, err); + + if(oid != NULL){ + adata[0] = (u8)(oid_len >> 8); + adata[1] = (u8)(oid_len & 0xff); + ret = local_memcpy(&adata[4], oid, oid_len); EG(ret, err); + } + else{ + adata[0] = adata[1] = 0; + } + if(t != NULL){ + adata[2] = (u8)(t_len >> 8); + adata[3] = (u8)(t_len & 0xff); + ret = local_memcpy(&adata[4 + oid_len], t, t_len); EG(ret, err); + + } + else{ + adata[2] = adata[3] = 0; + } + + ret = 0; +err: + return ret; +} + +#if defined(WITH_SIG_DBIGN) +/* + * Deterministic nonce generation function for deterministic BIGN, as + * described in STB 34.101.45 6.3.3. + * + * NOTE: Deterministic nonce generation for BIGN is useful against attackers + * in contexts where only poor RNG/entropy are available, or when nonce bits + * leaking can be possible through side-channel attacks. + * However, in contexts where fault attacks are easy to mount, deterministic + * BIGN can bring more security risks than regular BIGN. + * + * Depending on the context where you use the library, choose carefully if + * you want to use the deterministic version or not. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int __bign_determinitic_nonce(nn_t k, nn_src_t q, bitcnt_t q_bit_len, + nn_src_t x, const u8 *adata, u16 adata_len, + const u8 *h, u8 hlen) +{ + int ret, cmp, iszero; + u8 theta[BELT_HASH_DIGEST_SIZE]; + u8 FE2OS_D[LOCAL_MAX(BYTECEIL(CURVES_MAX_Q_BIT_LEN), 2 * BELT_HASH_DIGEST_SIZE)]; + u8 r[((MAX_DIGEST_SIZE / BELT_BLOCK_LEN) * BELT_BLOCK_LEN) + (2 * BELT_BLOCK_LEN)]; + u8 r_bar[((MAX_DIGEST_SIZE / BELT_BLOCK_LEN) * BELT_BLOCK_LEN) + (2 * BELT_BLOCK_LEN)]; + u8 q_len, l; + unsigned int j, z, n; + u32 i; + u16 r_bar_len; + + belt_hash_context belt_hash_ctx; + const u8 *oid_ptr = NULL; + const u8 *t_ptr = NULL; + u16 oid_len = 0, t_len = 0; + + MUST_HAVE((adata != NULL) && (h != NULL), ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + ret = local_memset(theta, 0, sizeof(theta)); EG(ret, err); + ret = local_memset(FE2OS_D, 0, sizeof(FE2OS_D)); EG(ret, err); + ret = local_memset(r_bar, 0, sizeof(r_bar)); EG(ret, err); + + q_len = (u8)BYTECEIL(q_bit_len); + + /* Compute l depending on the order */ + l = (u8)BIGN_S0_LEN(q_bit_len); + + /* Extract oid and t from the additional data */ + ret = bign_get_oid_from_adata(adata, adata_len, &oid_ptr, &oid_len); EG(ret, err); + ret = bign_get_t_from_adata(adata, adata_len, &t_ptr, &t_len); EG(ret, err); + + ret = belt_hash_init(&belt_hash_ctx); EG(ret, err); + ret = belt_hash_update(&belt_hash_ctx, oid_ptr, oid_len); EG(ret, err); + + /* Put the private key in a string 2*l */ + ret = local_memset(FE2OS_D, 0, sizeof(FE2OS_D)); EG(ret, err); + ret = nn_export_to_buf(&FE2OS_D[0], q_len, x); EG(ret, err); + ret = _reverse_endianness(&FE2OS_D[0], q_len); EG(ret, err); + /* Only hash the 2*l bytes of d */ + ret = belt_hash_update(&belt_hash_ctx, &FE2OS_D[0], (u32)(2*l)); EG(ret, err); + + ret = belt_hash_update(&belt_hash_ctx, t_ptr, t_len); EG(ret, err); + + ret = belt_hash_final(&belt_hash_ctx, theta); EG(ret, err); + + dbg_buf_print("theta", theta, BELT_HASH_DIGEST_SIZE); + + /* n is the number of 128 bits blocks in H */ + n = (hlen / BELT_BLOCK_LEN); + + MUST_HAVE((hlen <= sizeof(r)), ret, err); + ret = local_memset(r, 0, sizeof(r)); + ret = local_memcpy(r, h, hlen); EG(ret, err); + /* If we have less than two blocks for the input hash size, we use zero + * padding to achieve at least two blocks. + * NOTE: this is not in the standard but allows to be compatible with small + * size hash functions. + */ + if(n <= 1){ + n = 2; + } + + /* Now iterate until the nonce is computed in [1, q-1] + * NOTE: we are ensured here that n >= 2, which allows us to + * index (n-1) and (n-2) blocks in r. + */ + i = (u32)1; + + while(1){ + u8 s[BELT_BLOCK_LEN]; + u8 i_block[BELT_BLOCK_LEN]; + ret = local_memset(s, 0, sizeof(s)); EG(ret, err); + + /* Put the xor of all n-1 elements in s */ + for(j = 0; j < (n - 1); j++){ + for(z = 0; z < BELT_BLOCK_LEN; z++){ + s[z] ^= r[(BELT_BLOCK_LEN * j) + z]; + } + } + /* Move elements left for the first n-2 elements */ + ret = local_memcpy(&r[0], &r[BELT_BLOCK_LEN], (n - 2) * BELT_BLOCK_LEN); EG(ret, err); + + /* r_n-1 = belt-block(s, theta) ^ r_n ^ 128 */ + ret = local_memset(i_block, 0, sizeof(i_block)); EG(ret, err); + PUT_UINT32_LE(i, i_block, 0); + belt_encrypt(s, &r[(n - 2) * BELT_BLOCK_LEN], theta); + for(z = 0; z < BELT_BLOCK_LEN; z++){ + r[((n - 2) * BELT_BLOCK_LEN) + z] ^= (r[((n - 1) * BELT_BLOCK_LEN) + z] ^ i_block[z]); + } + + /* r_n = s */ + ret = local_memcpy(&r[(n - 1) * BELT_BLOCK_LEN], s, BELT_BLOCK_LEN); EG(ret, err); + + /* Import r_bar as a big number in little endian + * (truncate our import to the bitlength size of q) + */ + if(q_len < (n * BELT_BLOCK_LEN)){ + r_bar_len = q_len; + ret = local_memcpy(&r_bar[0], &r[0], r_bar_len); EG(ret, err); + /* Handle the useless bits between q_bit_len and (8 * q_len) */ + if((q_bit_len % 8) != 0){ + r_bar[r_bar_len - 1] &= (u8)((0x1 << (q_bit_len % 8)) - 1); + } + } + else{ + /* In this case, q_len is bigger than the size of r, we need to adapt: + * we truncate to the size of r. + * NOTE: we of course lose security, but this is the explicit choice + * of the user using a "small" hash function with a "big" order. + */ + MUST_HAVE((n * BELT_BLOCK_LEN) <= 0xffff, ret, err); + r_bar_len = (u16)(n * BELT_BLOCK_LEN); + ret = local_memcpy(&r_bar[0], &r[0], r_bar_len); EG(ret, err); + } + ret = _reverse_endianness(&r_bar[0], r_bar_len); EG(ret, err); + ret = nn_init_from_buf(k, &r_bar[0], r_bar_len); EG(ret, err); + + /* Compare it to q */ + ret = nn_cmp(k, q, &cmp); EG(ret, err); + /* Compare it to 0 */ + ret = nn_iszero(k, &iszero); EG(ret, err); + + if((i >= (2 * n)) && (cmp < 0) && (!iszero)){ + break; + } + i += (u32)1; + /* If we have wrapped (meaning i > 2^32), we exit with failure */ + MUST_HAVE((i != 0), ret, err); + } + + ret = 0; +err: + /* Destroy local variables potentially containing sensitive data */ + IGNORE_RET_VAL(local_memset(theta, 0, sizeof(theta))); + IGNORE_RET_VAL(local_memset(FE2OS_D, 0, sizeof(FE2OS_D))); + + return ret; +} +#endif + +int __bign_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv, + ec_alg_type key_type) +{ + prj_pt_src_t G; + int ret, cmp; + nn_src_t q; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, key_type); EG(ret, err); + q = &(in_priv->params->ec_gen_order); + + /* Sanity check on key compliance */ + MUST_HAVE((!nn_cmp(&(in_priv->x), q, &cmp)) && (cmp < 0), ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = key_type; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +int __bign_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE(siglen != NULL, ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + (*siglen) = (u8)BIGN_SIGLEN(q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* BIGN signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Implementation notes: + * + * a) The BIGN algorithm makes use of the OID of the external hash function. + * We let the upper layer provide us with this in the "adata" field of the + * context. + * + */ + +#define BIGN_SIGN_MAGIC ((word_t)(0x63439a2b38921340ULL)) +#define BIGN_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BIGN_SIGN_MAGIC), ret, err) + +int __bign_sign_init(struct ec_sign_context *ctx, ec_alg_type key_type) +{ + int ret; + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* We check that our additional data is not NULL as it must contain + * the mandatory external hash OID. + */ + MUST_HAVE((ctx->adata != NULL) && (ctx->adata_len != 0), ret, err); + + /* + * Initialize hash context stored in our private part of context + * and record data init has been done + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.bign.h_ctx)); EG(ret, err); + + ctx->sign_data.bign.magic = BIGN_SIGN_MAGIC; + +err: + return ret; +} + +int __bign_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type) +{ + int ret; + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an BIGN + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + BIGN_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.bign), ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + + /* 1. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.bign.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int __bign_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen, + ec_alg_type key_type) +{ + int ret, cmp; + const ec_priv_key *priv_key; + prj_pt_src_t G; + u8 hash[MAX_DIGEST_SIZE]; + u8 hash_belt[BELT_HASH_DIGEST_SIZE]; + u8 FE2OS_W[LOCAL_MAX(2 * BYTECEIL(CURVES_MAX_P_BIT_LEN), 2 * BIGN_S0_LEN(CURVES_MAX_Q_BIT_LEN))]; + bitcnt_t q_bit_len, p_bit_len; + prj_pt kG; + nn_src_t q, x; + u8 hsize, p_len, l; + nn k, h, tmp, s1; + belt_hash_context belt_hash_ctx; + const u8 *oid_ptr = NULL; + u16 oid_len = 0; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif + + k.magic = h.magic = WORD(0); + tmp.magic = s1.magic = WORD(0); + kG.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an BIGN + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + BIGN_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.bign), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + + /* Zero init out point */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + q = &(priv_key->params->ec_gen_order); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + p_bit_len = priv_key->params->ec_fp.p_bitlen; + G = &(priv_key->params->ec_gen); + p_len = (u8)BYTECEIL(p_bit_len); + x = &(priv_key->x); + hsize = ctx->h->digest_size; + + MUST_HAVE((priv_key->key_type == key_type), ret, err); + + /* Compute l depending on the order */ + l = (u8)BIGN_S0_LEN(q_bit_len); + + /* Sanity check */ + ret = nn_cmp(x, q, &cmp); EG(ret, err); + /* This should not happen and means that our + * private key is not compliant! + */ + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", &(priv_key->params->ec_gen_order)); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", &(priv_key->params->ec_gen)); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* Check given signature buffer length has the expected size */ + MUST_HAVE((siglen == BIGN_SIGLEN(q_bit_len)), ret, err); + + /* We check that our additional data is not NULL as it must contain + * the mandatory external hash OID. + */ + MUST_HAVE((ctx->adata != NULL) && (ctx->adata_len != 0), ret, err); + + /* 1. Compute h = H(m) */ + ret = local_memset(hash, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.bign.h_ctx), hash); EG(ret, err); + dbg_buf_print("h", hash, hsize); + + + /* 2. get a random value k in ]0,q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + if(ctx->rand != nn_get_random_mod){ +#ifdef WITH_SIG_DBIGN + /* In deterministic BIGN, nevermind! */ + if(key_type != DBIGN) +#endif + { + ret = -1; + goto err; + } + } +#endif + if(ctx->rand != NULL){ + /* Non-deterministic generation, or deterministic with + * test vectors. + */ + ret = ctx->rand(&k, q); + } + else +#if defined(WITH_SIG_DBIGN) + { + /* Only applies for DETERMINISTIC BIGN */ + if(key_type != DBIGN){ + ret = -1; + goto err; + } + /* Deterministically generate k as STB 34.101.45 mandates */ + ret = __bign_determinitic_nonce(&k, q, q_bit_len, &(priv_key->x), ctx->adata, ctx->adata_len, hash, hsize); + } +#else + { + /* NULL rand function is not accepted for regular BIGN */ + ret = -1; + goto err; + } +#endif + if (ret) { + ret = -1; + goto err; + } + dbg_nn_print("k", &k); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, r and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + + /* 3. Compute W = (W_x,W_y) = kG */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 4. Compute s0 = || >2*l || H(X))>l */ + ret = belt_hash_init(&belt_hash_ctx); EG(ret, err); + ret = bign_get_oid_from_adata(ctx->adata, ctx->adata_len, &oid_ptr, &oid_len); EG(ret, err); + ret = belt_hash_update(&belt_hash_ctx, oid_ptr, oid_len); EG(ret, err); + /**/ + ret = local_memset(FE2OS_W, 0, sizeof(FE2OS_W)); EG(ret, err); + ret = fp_export_to_buf(&FE2OS_W[0], p_len, &(kG.X)); EG(ret, err); + ret = _reverse_endianness(&FE2OS_W[0], p_len); EG(ret, err); + ret = fp_export_to_buf(&FE2OS_W[p_len], p_len, &(kG.Y)); EG(ret, err); + ret = _reverse_endianness(&FE2OS_W[p_len], p_len); EG(ret, err); + /* Only hash the 2*l bytes of FE2OS(W_x) || FE2OS(W_y) */ + ret = belt_hash_update(&belt_hash_ctx, &FE2OS_W[0], (u32)(2*l)); EG(ret, err); + /**/ + ret = belt_hash_update(&belt_hash_ctx, hash, hsize); EG(ret, err); + /* Store our s0 */ + ret = local_memset(hash_belt, 0, sizeof(hash_belt)); EG(ret, err); + ret = belt_hash_final(&belt_hash_ctx, hash_belt); EG(ret, err); + ret = local_memset(&sig[0], 0, l); EG(ret, err); + ret = local_memcpy(&sig[0], &hash_belt[0], LOCAL_MIN(l, BELT_HASH_DIGEST_SIZE)); EG(ret, err); + dbg_buf_print("s0", &sig[0], LOCAL_MIN(l, BELT_HASH_DIGEST_SIZE)); + + /* 5. Now compute s1 = (k - H_bar - (s0_bar + 2**l) * d) mod q */ + /* First import H and s0 as numbers modulo q */ + /* Import H */ + ret = _reverse_endianness(hash, hsize); EG(ret, err); + ret = nn_init_from_buf(&h, hash, hsize); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); + /* Import s0_bar */ + ret = local_memcpy(FE2OS_W, &sig[0], l); EG(ret, err); + ret = _reverse_endianness(FE2OS_W, l); EG(ret, err); + ret = nn_init_from_buf(&s1, FE2OS_W, l); EG(ret, err); + ret = nn_mod(&s1, &s1, q); EG(ret, err); + /* Compute (s0_bar + 2**l) * d */ + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_one(&tmp); EG(ret, err); + ret = nn_lshift(&tmp, &tmp, (bitcnt_t)(8*l)); EG(ret, err); + ret = nn_mod(&tmp, &tmp, q); EG(ret, err); + ret = nn_mod_add(&s1, &s1, &tmp, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind s1 with b */ + ret = nn_mod_mul(&s1, &s1, &b, q); EG(ret, err); + + /* Blind the message hash */ + ret = nn_mod_mul(&h, &h, &b, q); EG(ret, err); + + /* Blind the nonce */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + ret = nn_mod_mul(&s1, &s1, &(priv_key->x), q); EG(ret, err); + ret = nn_mod_sub(&s1, &k, &s1, q); EG(ret, err); + ret = nn_mod_sub(&s1, &s1, &h, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Unblind s1 */ + ret = nn_mod_mul(&s1, &s1, &binv, q); EG(ret, err); +#endif + dbg_nn_print("s1", &s1); + + /* Clean hash buffer as we do not need it anymore */ + ret = local_memset(hash, 0, hsize); EG(ret, err); + + /* Now export s1 and reverse its endianness */ + ret = nn_export_to_buf(&sig[l], (u16)BIGN_S1_LEN(q_bit_len), &s1); EG(ret, err); + ret = _reverse_endianness(&sig[l], (u16)BIGN_S1_LEN(q_bit_len)); + +err: + nn_uninit(&k); + nn_uninit(&h); + nn_uninit(&tmp); + nn_uninit(&s1); + prj_pt_uninit(&kG); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.bign), 0, sizeof(bign_sign_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + PTR_NULLIFY(oid_ptr); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(hsize); + VAR_ZEROIFY(oid_len); + + return ret; +} + +/* + * Generic *internal* BIGN verification functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Implementation notes: + * + * a) The BIGN algorithm makes use of the OID of the external hash function. + * We let the upper layer provide us with this in the "adata" field of the + * context. + */ + +#define BIGN_VERIFY_MAGIC ((word_t)(0xceff8344927346abULL)) +#define BIGN_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == BIGN_VERIFY_MAGIC), ret, err) + +int __bign_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen, + ec_alg_type key_type) +{ + bitcnt_t q_bit_len; + nn_src_t q; + nn *s0, *s1; + u8 *s0_sig; + u8 TMP[BYTECEIL(CURVES_MAX_Q_BIT_LEN)]; + u8 l; + int ret, cmp; + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + ret = local_memset(TMP, 0, sizeof(TMP)); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* We check that our additional data is not NULL as it must contain + * the mandatory external hash OID. + */ + MUST_HAVE((ctx->adata != NULL) && (ctx->adata_len != 0), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + s0 = &(ctx->verify_data.bign.s0); + s1 = &(ctx->verify_data.bign.s1); + s0_sig = (u8*)(&(ctx->verify_data.bign.s0_sig)); + + /* Compute l depending on the order */ + l = (u8)BIGN_S0_LEN(q_bit_len); + + /* Check given signature length is the expected one */ + MUST_HAVE((siglen == BIGN_SIGLEN(q_bit_len)), ret, err); + + /* Copy s0 to be checked later */ + ret = local_memcpy(s0_sig, sig, l); EG(ret, err); + + /* Import s0 and s1 values from signature buffer */ + ret = local_memcpy(&TMP[0], sig, l); EG(ret, err); + ret = _reverse_endianness(&TMP[0], l); EG(ret, err); + ret = nn_init_from_buf(s0, &TMP[0], l); EG(ret, err); + /**/ + ret = local_memcpy(&TMP[0], &sig[l], (u32)BIGN_S1_LEN(q_bit_len)); EG(ret, err); + ret = _reverse_endianness(&TMP[0], (u16)BIGN_S1_LEN(q_bit_len)); EG(ret, err); + ret = nn_init_from_buf(s1, &TMP[0], (u8)BIGN_S1_LEN(q_bit_len)); EG(ret, err); + dbg_nn_print("s0", s0); + dbg_nn_print("s1", s1); + + /* 1. Reject the signature if s1 >= q */ + ret = nn_cmp(s1, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + /* Initialize the remaining of verify context. */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.bign.h_ctx)); EG(ret, err); + + ctx->verify_data.bign.magic = BIGN_VERIFY_MAGIC; + + err: + VAR_ZEROIFY(q_bit_len); + PTR_NULLIFY(q); + PTR_NULLIFY(s0); + PTR_NULLIFY(s1); + PTR_NULLIFY(s0_sig); + + return ret; +} + +int __bign_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an BIGN + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + BIGN_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.bign), ret, err); + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.bign.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int __bign_verify_finalize(struct ec_verify_context *ctx, + ec_alg_type key_type) +{ + prj_pt uG, vY; + prj_pt_src_t G, Y; + prj_pt_t W; + u8 hash[MAX_DIGEST_SIZE]; + u8 hash_belt[BELT_HASH_DIGEST_SIZE]; + u8 t[BIGN_S0_LEN(CURVES_MAX_Q_BIT_LEN)]; + u8 FE2OS_W[LOCAL_MAX(2 * BYTECEIL(CURVES_MAX_P_BIT_LEN), 2 * BIGN_S0_LEN(CURVES_MAX_Q_BIT_LEN))]; + bitcnt_t p_bit_len, q_bit_len; + nn_src_t q; + nn h, tmp; + nn *s0, *s1; + u8 *s0_sig; + u8 hsize, p_len, l; + belt_hash_context belt_hash_ctx; + int ret, iszero, cmp; + const u8 *oid_ptr = NULL; + u16 oid_len = 0; + + h.magic = tmp.magic = WORD(0); + uG.magic = vY.magic = WORD(0); + + /* NOTE: we reuse uG for W to optimize local variables */ + W = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an BIGN + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + BIGN_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.bign), ret, err); + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + + /* We check that our additional data is not NULL as it must contain + * the mandatory external hash OID. + */ + MUST_HAVE((ctx->adata != NULL) && (ctx->adata_len != 0), ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + p_bit_len = ctx->pub_key->params->ec_fp.p_bitlen; + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + hsize = ctx->h->digest_size; + s0 = &(ctx->verify_data.bign.s0); + s1 = &(ctx->verify_data.bign.s1); + s0_sig = (u8*)(&(ctx->verify_data.bign.s0_sig)); + + /* Sanity check */ + MUST_HAVE((sizeof(t) == sizeof(ctx->verify_data.bign.s0_sig)), ret, err); + + /* Compute our l that is inherited from q size */ + l = (u8)BIGN_S0_LEN(q_bit_len); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.bign.h_ctx), hash); EG(ret, err); + dbg_buf_print("h = H(m)", hash, hsize); + + /* Import H */ + ret = _reverse_endianness(hash, hsize); EG(ret, err); + ret = nn_init_from_buf(&h, hash, hsize); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); + /* NOTE: we reverse endianness again of the hash since we will + * have to use the original value. + */ + ret = _reverse_endianness(hash, hsize); EG(ret, err); + + /* Compute ((s1_bar + h_bar) mod q) */ + ret = nn_mod_add(&h, &h, s1, q); EG(ret, err); + /* Compute (s0_bar + 2**l) mod q */ + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_one(&tmp); EG(ret, err); + ret = nn_lshift(&tmp, &tmp, (bitcnt_t)(8*l)); EG(ret, err); + ret = nn_mod(&tmp, &tmp, q); EG(ret, err); + ret = nn_mod_add(&tmp, &tmp, s0, q); EG(ret, err); + + /* 3. Compute ((s1_bar + h_bar) mod q) * G + ((s0_bar + 2**l) mod q) * Y. */ + ret = prj_pt_mul(&uG, &h, G); EG(ret, err); + ret = prj_pt_mul(&vY, &tmp, Y); EG(ret, err); + ret = prj_pt_add(W, &uG, &vY); EG(ret, err); + /* 5. If the result is point at infinity, return false. */ + ret = prj_pt_iszero(W, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + ret = prj_pt_unique(W, W); EG(ret, err); + + /* 6. Compute t = || >2*l || H(X))>l */ + ret = belt_hash_init(&belt_hash_ctx); EG(ret, err); + ret = bign_get_oid_from_adata(ctx->adata, ctx->adata_len, &oid_ptr, &oid_len); EG(ret, err); + ret = belt_hash_update(&belt_hash_ctx, oid_ptr, oid_len); EG(ret, err); + /**/ + ret = local_memset(FE2OS_W, 0, sizeof(FE2OS_W)); EG(ret, err); + ret = fp_export_to_buf(&FE2OS_W[0], p_len, &(W->X)); EG(ret, err); + ret = _reverse_endianness(&FE2OS_W[0], p_len); EG(ret, err); + ret = fp_export_to_buf(&FE2OS_W[p_len], p_len, &(W->Y)); EG(ret, err); + ret = _reverse_endianness(&FE2OS_W[p_len], p_len); EG(ret, err); + /* Only hash the 2*l bytes of FE2OS(W_x) || FE2OS(W_y) */ + ret = belt_hash_update(&belt_hash_ctx, &FE2OS_W[0], (u32)(2*l)); EG(ret, err); + /**/ + ret = belt_hash_update(&belt_hash_ctx, hash, hsize); EG(ret, err); + /* Store our t */ + ret = local_memset(hash_belt, 0, sizeof(hash_belt)); EG(ret, err); + ret = belt_hash_final(&belt_hash_ctx, hash_belt); EG(ret, err); + ret = local_memset(&t[0], 0, l); EG(ret, err); + ret = local_memcpy(&t[0], &hash_belt[0], LOCAL_MIN(l, BELT_HASH_DIGEST_SIZE)); EG(ret, err); + + /* 10. Accept the signature if and only if t equals s0_sig' */ + ret = are_equal(t, s0_sig, l, &cmp); EG(ret, err); + ret = (cmp == 0) ? -1 : 0; + + err: + prj_pt_uninit(&uG); + prj_pt_uninit(&vY); + nn_uninit(&h); + nn_uninit(&tmp); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.bign), 0, sizeof(bign_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(W); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(p_len); + PTR_NULLIFY(q); + PTR_NULLIFY(s0); + PTR_NULLIFY(s1); + PTR_NULLIFY(s0_sig); + PTR_NULLIFY(oid_ptr); + VAR_ZEROIFY(hsize); + VAR_ZEROIFY(oid_len); + + return ret; +} + +#else /* defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_BIGN */ diff --git a/crypto/libecc/src/sig/bip0340.c b/crypto/libecc/src/sig/bip0340.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/bip0340.c @@ -0,0 +1,1325 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_BIP0340) + +/* BIP0340 needs SHA-256: check it */ +#if !defined(WITH_HASH_SHA256) +#error "Error: BIP0340 needs SHA-256 to be defined! Please define it in libecc config file" +#endif + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "BIP0340" +#endif +#include + +/* + * The current implementation is for the BIP0340 signature as described + * in https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki + * + * The BIP0340 signature is only compatible with SHA-256 and secp256k1, + * but we extend it to any hash function or curve. + * + */ + +/* The "hash" function static prefixes */ +#define BIP0340_AUX "BIP0340/aux" +#define BIP0340_NONCE "BIP0340/nonce" +#define BIP0340_CHALLENGE "BIP0340/challenge" + +ATTRIBUTE_WARN_UNUSED_RET static int _bip0340_hash(const u8 *tag, u32 tag_len, + const u8 *m, u32 m_len, + const hash_mapping *hm, hash_context *h_ctx) +{ + int ret; + u8 hash[MAX_DIGEST_SIZE]; + + MUST_HAVE((h_ctx != NULL), ret, err); + + ret = hash_mapping_callbacks_sanity_check(hm); EG(ret, err); + + ret = hm->hfunc_init(h_ctx); EG(ret, err); + ret = hm->hfunc_update(h_ctx, tag, tag_len); EG(ret, err); + ret = hm->hfunc_finalize(h_ctx, hash); EG(ret, err); + + /* Now compute hash(hash(tag) || hash(tag) || m) */ + ret = hm->hfunc_init(h_ctx); EG(ret, err); + ret = hm->hfunc_update(h_ctx, hash, hm->digest_size); EG(ret, err); + ret = hm->hfunc_update(h_ctx, hash, hm->digest_size); EG(ret, err); + ret = hm->hfunc_update(h_ctx, m, m_len); EG(ret, err); + + ret = 0; +err: + return ret; +} + +/* Set the scalar value depending on the parity bit of the input + * point y coordinate. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _bip0340_set_scalar(nn_t scalar, + nn_src_t q, + prj_pt_src_t P) +{ + int ret, isodd, isone; + + /* Sanity check */ + ret = prj_pt_check_initialized(P); EG(ret, err); + + /* This operation is only meaningful on the "affine" representative. + * Check it. + */ + ret = nn_isone(&(P->Z.fp_val), &isone); EG(ret, err); + MUST_HAVE((isone), ret, err); + + /* Check if Py is odd or even */ + ret = nn_isodd(&(P->Y.fp_val), &isodd); EG(ret, err); + + if(isodd){ + /* Replace the input scalar by (q - scalar) + * (its opposite modulo q) + */ + ret = nn_mod_neg(scalar, scalar, q); EG(ret, err); + } + +err: + return ret; +} + +/* + * Generic *internal* helper for BIP340 public key initialization + * functions. The function returns 0 on success, -1 on error. + */ +int bip0340_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + prj_pt_src_t G; + int ret; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, BIP0340); EG(ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = BIP0340; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +/* + * Generic *internal* helper for BIP0340 signature length functions. + */ +int bip0340_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE(((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE)), + ret, err); + + (*siglen) = (u8)BIP0340_SIGLEN(p_bit_len, q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* helper for BIP0340 signature. + * NOTE: because of the semi-deterministinc nonce generation + * process, streaming mode is NOT supported for signing. + * Hence the following all-in-one signature function. + * + * The function returns 0 on success, -1 on error. + */ +int _bip0340_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + prj_pt_src_t G; + prj_pt Y; + nn_src_t q; + nn k, d, e; + prj_pt kG; + const ec_priv_key *priv_key; + const ec_pub_key *pub_key; + bitcnt_t p_bit_len, q_bit_len; + u8 i, p_len, q_len; + int ret, cmp, iszero; + hash_context h_ctx; + const hash_mapping *hm; + u8 buff[MAX_DIGEST_SIZE]; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + + k.magic = d.magic = e.magic = kG.magic = Y.magic = WORD(0); + + FORCE_USED_VAR(adata_len); + + /* No ancillary data is expected with BIP0340 */ + MUST_HAVE((key_pair != NULL) && (sig != NULL) && (adata == NULL), ret, err); + + /* Check our algorithm type */ + MUST_HAVE((sig_type == BIP0340), ret, err); + + /* Check that keypair is initialized */ + ret = key_pair_check_initialized_and_type(key_pair, BIP0340); EG(ret, err); + + /* Get the hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + ret = hash_mapping_callbacks_sanity_check(hm); EG(ret, err); + + /* Make things more readable */ + priv_key = &(key_pair->priv_key); + pub_key = &(key_pair->pub_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + p_bit_len = priv_key->params->ec_fp.p_bitlen; + q_bit_len = priv_key->params->ec_gen_order_bitlen; + q_len = (u8)BYTECEIL(q_bit_len); + p_len = (u8)BYTECEIL(p_bit_len); + + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(&Y, &(pub_key->y)); EG(ret, err); + ret = prj_pt_unique(&Y, &Y); EG(ret, err); + + ret = nn_init(&d, 0); EG(ret, err); + ret = nn_copy(&d, &(priv_key->x)); EG(ret, err); + + dbg_nn_print("d", &d); + + /* Check signature size */ + MUST_HAVE((siglen == BIP0340_SIGLEN(p_bit_len, q_bit_len)), ret, err); + MUST_HAVE((p_len == BIP0340_R_LEN(p_bit_len)), ret, err); + MUST_HAVE((q_len == BIP0340_S_LEN(q_bit_len)), ret, err); + + /* Fail if d = 0 or d >= q */ + ret = nn_iszero(&d, &iszero); EG(ret, err); + ret = nn_cmp(&d, q, &cmp); EG(ret, err); + MUST_HAVE((!iszero) && (cmp < 0), ret, err); + + /* Adjust d depending on public key y */ + ret = _bip0340_set_scalar(&d, q, &Y); EG(ret, err); + + /* Compute the nonce in a deterministic way. + * First, we get the random auxilary data. + */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE((rand == nn_get_random_mod), ret, err); +#endif + ret = nn_init(&e, 0); EG(ret, err); + ret = nn_one(&e); EG(ret, err); + ret = nn_lshift(&e, &e, (bitcnt_t)(8 * q_len)); EG(ret, err); + if(rand == NULL){ + rand = nn_get_random_mod; + } + ret = rand(&k, &e); EG(ret, err); + dbg_nn_print("a", &k); + + MUST_HAVE((siglen >= q_len), ret, err); + ret = nn_export_to_buf(&sig[0], q_len, &k); EG(ret, err); + + /* Compute the seed for the nonce computation */ + ret = _bip0340_hash((const u8*)BIP0340_AUX, sizeof(BIP0340_AUX) - 1, + &sig[0], q_len, hm, &h_ctx); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, buff); EG(ret, err); + + ret = nn_export_to_buf(&sig[0], q_len, &d); EG(ret, err); + + if(q_len > hm->digest_size){ + for(i = 0; i < hm->digest_size; i++){ + sig[i] ^= buff[i]; + } + ret = _bip0340_hash((const u8*)BIP0340_NONCE, sizeof(BIP0340_NONCE) - 1, + &sig[0], q_len, hm, &h_ctx); EG(ret, err); + } + else{ + for(i = 0; i < q_len; i++){ + buff[i] ^= sig[i]; + } + ret = _bip0340_hash((const u8*)BIP0340_NONCE, sizeof(BIP0340_NONCE) - 1, + &buff[0], hm->digest_size, hm, &h_ctx); EG(ret, err); + } + ret = fp_export_to_buf(&sig[0], p_len, &(Y.X)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &sig[0], p_len); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, m, mlen); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, buff); EG(ret, err); + + /* Now import the semi-deterministic nonce modulo q */ + ret = nn_init_from_buf(&k, buff, hm->digest_size); EG(ret, err); + ret = nn_mod(&k, &k, q); EG(ret, err); + + dbg_nn_print("k", &k); + + /* Fail if the nonce is zero */ + ret = nn_iszero(&k, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Proceed with the modulation exponentiation kG */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_ec_point_print("(k G)", &kG); + + /* Update k depending on the kG y coordinate */ + ret = _bip0340_set_scalar(&k, q, &kG); EG(ret, err); + + /* Compute e */ + /* We export our r here */ + ret = fp_export_to_buf(&sig[0], p_len, &(kG.X)); EG(ret, err); + ret = _bip0340_hash((const u8*)BIP0340_CHALLENGE, sizeof(BIP0340_CHALLENGE) - 1, + &sig[0], p_len, hm, &h_ctx); EG(ret, err); + /* Export our public key */ + ret = fp_export_to_buf(&sig[0], p_len, &(Y.X)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &sig[0], p_len); EG(ret, err); + /* Update with the message */ + ret = hm->hfunc_update(&h_ctx, m, mlen); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, buff); EG(ret, err); + ret = nn_init_from_buf(&e, buff, hm->digest_size); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + dbg_nn_print("e", &e); + + /* Export our r in the signature */ + dbg_nn_print("r", &(kG.X.fp_val)); + ret = fp_export_to_buf(&sig[0], p_len, &(kG.X)); EG(ret, err); + + /* Compute (k + ed) mod n */ +#ifdef USE_SIG_BLINDING + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + +#ifdef USE_SIG_BLINDING + /* Blind e with b */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); + /* Blind k with b */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + ret = nn_mod_mul(&e, &e, &d, q); EG(ret, err); + ret = nn_mod_add(&e, &k, &e, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Unblind */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&e, &e, &binv, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Export our s in the signature */ + dbg_nn_print("s", &e); + ret = nn_export_to_buf(&sig[p_len], q_len, &e); EG(ret, err); + +err: + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(hm); + + prj_pt_uninit(&Y); + nn_uninit(&k); + nn_uninit(&e); + nn_uninit(&d); + + return ret; +} + +/* local helper for context sanity checks. Returns 0 on success, -1 on error. */ +#define BIP0340_VERIFY_MAGIC ((word_t)(0x340175910abafcddULL)) +#define BIP0340_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((const void *)(A)) != NULL) && \ + ((A)->magic == BIP0340_VERIFY_MAGIC), ret, err) + +/* + * Generic *internal* helper for BIP0340 verification initialization functions. + * The function returns 0 on success, -1 on error. + */ +int _bip0340_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + bitcnt_t p_bit_len, q_bit_len; + u8 p_len, q_len; + int ret, cmp; + nn_src_t q; + prj_pt Y; + fp *rx; + nn *s; + u8 Pubx[NN_MAX_BYTE_LEN]; + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, BIP0340); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + p_bit_len = ctx->pub_key->params->ec_fp.p_bitlen; + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + q_len = (u8)BYTECEIL(q_bit_len); + s = &(ctx->verify_data.bip0340.s); + rx = &(ctx->verify_data.bip0340.r); + + MUST_HAVE((siglen == BIP0340_SIGLEN(p_bit_len, q_bit_len)), ret, err); + MUST_HAVE((p_len == BIP0340_R_LEN(p_bit_len)), ret, err); + MUST_HAVE((q_len == BIP0340_S_LEN(q_bit_len)), ret, err); + + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(&Y, &(ctx->pub_key->y)); EG(ret, err); + ret = prj_pt_unique(&Y, &Y); EG(ret, err); + + /* Extract r and s */ + ret = fp_init(rx, ctx->pub_key->params->ec_curve.a.ctx); EG(ret, err); + ret = fp_import_from_buf(rx, &sig[0], p_len); EG(ret, err); + ret = nn_init_from_buf(s, &sig[p_len], q_len); EG(ret, err); + ret = nn_cmp(s, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("r", &(rx->fp_val)); + dbg_nn_print("s", s); + + /* Initialize our hash context */ + ret = _bip0340_hash((const u8*)BIP0340_CHALLENGE, sizeof(BIP0340_CHALLENGE) - 1, + &sig[0], p_len, ctx->h, + &(ctx->verify_data.bip0340.h_ctx)); EG(ret, err); + ret = fp_export_to_buf(&Pubx[0], p_len, &(Y.X)); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.bip0340.h_ctx), &Pubx[0], p_len); EG(ret, err); + ret = local_memset(Pubx, 0, sizeof(Pubx)); EG(ret, err); + + ctx->verify_data.bip0340.magic = BIP0340_VERIFY_MAGIC; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(rx); + PTR_NULLIFY(s); + + prj_pt_uninit(&Y); + + if (ret && (ctx != NULL)) { + /* + * Signature is invalid. Clear data part of the context. + * This will clear magic and avoid further reuse of the + * whole context. + */ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.bip0340), 0, + sizeof(bip0340_verify_data))); + } + + return ret; +} + +/* + * Generic *internal* helper for BIP0340 verification update functions. + * The function returns 0 on success, -1 on error. + */ +int _bip0340_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an BIP0340 + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + BIP0340_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.bip0340), ret, err); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.bip0340.h_ctx), chunk, + chunklen); + +err: + return ret; +} + +/* + * Generic *internal* helper for BIP0340 verification finalization + * functions. The function returns 0 on success, -1 on error. + */ +int _bip0340_verify_finalize(struct ec_verify_context *ctx) +{ + prj_pt_src_t G; + nn_src_t s, q; + fp_src_t r; + nn e; + prj_pt sG, eY, Y; + u8 e_buf[MAX_DIGEST_SIZE]; + u8 hsize; + int ret, iszero, isodd, cmp; + + ret = sig_verify_check_initialized(ctx); EG(ret, err); + BIP0340_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.bip0340), ret, err); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + + /* Zero init points */ + ret = local_memset(&sG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&eY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + hsize = ctx->h->digest_size; + q = &(ctx->pub_key->params->ec_gen_order); + s = &(ctx->verify_data.bip0340.s); + r = &(ctx->verify_data.bip0340.r); + + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(&Y, &(ctx->pub_key->y)); EG(ret, err); + ret = prj_pt_unique(&Y, &Y); EG(ret, err); + + /* Compute e */ + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.bip0340.h_ctx), + &e_buf[0]); EG(ret, err); + ret = nn_init_from_buf(&e, e_buf, hsize); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + + dbg_nn_print("e", &e); + + /* Compute s G - e Y */ + ret = prj_pt_mul(&sG, s, G); EG(ret, err); + ret = nn_mod_neg(&e, &e, q); EG(ret, err); /* compute -e = (q - e) mod q */ + /* Do we have to "lift" Y the public key ? */ + ret = nn_isodd(&(Y.Y.fp_val), &isodd); EG(ret, err); + if(isodd){ + /* If yes, negate the y coordinate */ + ret = fp_neg(&(Y.Y), &(Y.Y)); EG(ret, err); + } + ret = prj_pt_mul(&eY, &e, &Y); EG(ret, err); + ret = prj_pt_add(&sG, &sG, &eY); EG(ret, err); + ret = prj_pt_unique(&sG, &sG); EG(ret, err); + + dbg_ec_point_print("(s G - e Y)", &sG); + + /* Reject point at infinity */ + ret = prj_pt_iszero(&sG, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Reject non even Y coordinate */ + ret = nn_isodd(&(sG.Y.fp_val), &isodd); EG(ret, err); + MUST_HAVE((!isodd), ret, err); + + /* Check the x coordinate against r */ + ret = nn_cmp(&(r->fp_val), &(sG.X.fp_val), &cmp); EG(ret, err); + ret = (cmp == 0) ? 0 : -1; + +err: + PTR_NULLIFY(G); + PTR_NULLIFY(s); + PTR_NULLIFY(q); + PTR_NULLIFY(r); + + nn_uninit(&e); + prj_pt_uninit(&sG); + prj_pt_uninit(&eY); + prj_pt_uninit(&Y); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.bip0340), 0, + sizeof(bip0340_verify_data))); + } + + return ret; +} + +/* + * Helper to compute the seed to generate batch verification randomizing scalars. + * + */ +/****************************************************/ +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ +do { \ + (n) = ( ((u32) (b)[(i) + 3]) << 24 ) \ + | ( ((u32) (b)[(i) + 2]) << 16 ) \ + | ( ((u32) (b)[(i) + 1]) << 8 ) \ + | ( ((u32) (b)[(i) ]) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ +do { \ + (b)[(i) + 3] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 8 ); \ + (b)[(i) ] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n, b, i) \ +do { \ + (b)[(i) ] = (u8) ( (n) >> 24 ); \ + (b)[(i) + 1] = (u8) ( (n) >> 16 ); \ + (b)[(i) + 2] = (u8) ( (n) >> 8 ); \ + (b)[(i) + 3] = (u8) ( (n) ); \ +} while( 0 ) +#endif + +#define _CHACHA20_ROTL_(x, y) (((x) << (y)) | ((x) >> ((sizeof(u32) * 8) - (y)))) +#define CHACA20_ROTL(x, y) ((((y) < (sizeof(u32) * 8)) && ((y) > 0)) ? (_CHACHA20_ROTL_(x, y)) : (x)) + +#define CHACHA20_QROUND(a, b, c, d) do { \ + (a) += (b); \ + (d) ^= (a); \ + (d) = CHACA20_ROTL((d), 16); \ + (c) += (d); \ + (b) ^= (c); \ + (b) = CHACA20_ROTL((b), 12); \ + (a) += (b); \ + (d) ^= (a); \ + (d) = CHACA20_ROTL((d), 8); \ + (c) += (d); \ + (b) ^= (c); \ + (b) = CHACA20_ROTL((b), 7); \ +} while(0) + +#define CHACHA20_INNER_BLOCK(s) do { \ + CHACHA20_QROUND(s[0], s[4], s[ 8], s[12]); \ + CHACHA20_QROUND(s[1], s[5], s[ 9], s[13]); \ + CHACHA20_QROUND(s[2], s[6], s[10], s[14]); \ + CHACHA20_QROUND(s[3], s[7], s[11], s[15]); \ + CHACHA20_QROUND(s[0], s[5], s[10], s[15]); \ + CHACHA20_QROUND(s[1], s[6], s[11], s[12]); \ + CHACHA20_QROUND(s[2], s[7], s[ 8], s[13]); \ + CHACHA20_QROUND(s[3], s[4], s[ 9], s[14]); \ +} while(0) + +#define CHACHA20_MAX_ASKED_LEN 64 + +ATTRIBUTE_WARN_UNUSED_RET static int _bip0340_chacha20_block(const u8 key[32], const u8 nonce[12], u32 block_counter, u8 *stream, u32 stream_len){ + int ret; + u32 state[16]; + u32 initial_state[16]; + unsigned int i; + + MUST_HAVE((stream != NULL), ret, err); + MUST_HAVE((stream_len <= CHACHA20_MAX_ASKED_LEN), ret, err); + + /* Initial state */ + state[0] = 0x61707865; + state[1] = 0x3320646e; + state[2] = 0x79622d32; + state[3] = 0x6b206574; + + for(i = 4; i < 12; i++){ + GET_UINT32_LE(state[i], key, (4 * (i - 4))); + } + state[12] = block_counter; + for(i = 13; i < 16; i++){ + GET_UINT32_LE(state[i], nonce, (4 * (i - 13))); + } + + /* Core loop */ + ret = local_memcpy(initial_state, state, sizeof(state)); EG(ret, err); + for(i = 0; i < 10; i++){ + CHACHA20_INNER_BLOCK(state); + } + /* Serialize and output the block */ + for(i = 0; i < 16; i++){ + u32 tmp = (u32)(state[i] + initial_state[i]); + PUT_UINT32_LE(tmp, (u8*)(&state[i]), 0); + } + ret = local_memcpy(stream, &state[0], stream_len); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int _bip0340_compute_batch_csprng_one_scalar(const u8 *seed, u32 seedlen, + u8 *scalar, u32 scalar_len, u32 num) +{ + int ret; + u8 nonce[12]; + + /* Sanity check for ChaCha20 */ + MUST_HAVE((seedlen == SHA256_DIGEST_SIZE) && (scalar_len <= CHACHA20_MAX_ASKED_LEN), ret, err); + + /* NOTE: nothing in the BIP340 specification fixes the nonce for + * ChaCha20. We simply use 0 here for the nonce. */ + ret = local_memset(nonce, 0, sizeof(nonce)); EG(ret, err); + + /* Use our CSPRNG based on ChaCha20 to generate the scalars */ + ret = _bip0340_chacha20_block(seed, nonce, num, scalar, scalar_len); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int _bip0340_compute_batch_csprng_scalars(const u8 *seed, u32 seedlen, + u8 *scalar, u32 scalar_len, + u32 *num, nn_src_t q, + bitcnt_t q_bit_len, u8 q_len, + nn_t a) +{ + int ret, iszero, cmp; + u32 size, remain; + + MUST_HAVE((seed != NULL) && (scalar != NULL) && (num != NULL) && (a != NULL), ret, err); + MUST_HAVE((scalar_len >= q_len), ret, err); + +gen_scalar_again: + size = remain = 0; + while(size < q_len){ + MUST_HAVE((*num) < 0xffffffff, ret, err); + remain = ((q_len - size) < CHACHA20_MAX_ASKED_LEN) ? (q_len - size): CHACHA20_MAX_ASKED_LEN; + ret = _bip0340_compute_batch_csprng_one_scalar(seed, seedlen, + &scalar[size], remain, + (*num)); EG(ret, err); + (*num)++; + size += remain; + } + if((q_bit_len % 8) != 0){ + /* Handle the cutoff when q_bit_len is not a byte multiple */ + scalar[0] &= (u8)((0x1 << (q_bit_len % 8)) - 1); + } + /* Import the scalar */ + ret = nn_init_from_buf(a, scalar, q_len); EG(ret, err); + /* Check if the scalar is between 1 and q-1 */ + ret = nn_iszero(a, &iszero); EG(ret, err); + ret = nn_cmp(a, q, &cmp); EG(ret, err); + if((iszero) || (cmp >= 0)){ + goto gen_scalar_again; + } + + ret = 0; +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int _bip0340_compute_batch_csprng_seed(const u8 **s, const u8 *s_len, + const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, + u8 p_len, u8 *seed, u32 seedlen) +{ + int ret; + u32 i; + hash_context h_ctx; + u8 Pubx[NN_MAX_BYTE_LEN]; + const hash_mapping *hm; + + /* NOTE: sanity checks on inputs are performed by the upper layer */ + + ret = local_memset(Pubx, 0, sizeof(Pubx)); EG(ret, err); + + /* Get our hash mapping for SHA-256 as we need a fixed 256-bit key + * for keying our ChaCha20 CSPRNG + */ + ret = get_hash_by_type(SHA256, &hm); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + + MUST_HAVE((seedlen == hm->digest_size), ret, err); + + /* As per specification, seed = seed_hash(pk1..pku || m1..mu || sig1..sigu), instantiated + * with SHA-256 */ + ret = hm->hfunc_init(&h_ctx); EG(ret, err); + for(i = 0; i < num; i++){ + ret = fp_export_to_buf(&Pubx[0], p_len, &(pub_keys[i]->y.X)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &Pubx[0], p_len); EG(ret, err); + } + for(i = 0; i < num; i++){ + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + } + for(i = 0; i < num; i++){ + ret = hm->hfunc_update(&h_ctx, s[i], s_len[i]); EG(ret, err); + } + ret = hm->hfunc_finalize(&h_ctx, seed); + +err: + return ret; +} + +/* Batch verification function: + * This function takes multiple signatures/messages/public keys, and + * checks in an optimized way all the signatures. + * + * This returns 0 if *all* the signatures are correct, and -1 if at least + * one signature is not correct. + * + */ +static int _bip0340_verify_batch_no_memory(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len) +{ + nn_src_t q = NULL; + prj_pt_src_t G = NULL; + prj_pt_t R = NULL, Y = NULL; + prj_pt Tmp, R_sum, P_sum; + nn S, S_sum, e, a; + fp rx; + u8 hash[MAX_DIGEST_SIZE]; + u8 Pubx[NN_MAX_BYTE_LEN]; + const ec_pub_key *pub_key, *pub_key0; + int ret, iszero, isodd, cmp; + prj_pt_src_t pub_key_y; + hash_context h_ctx; + const hash_mapping *hm; + ec_shortw_crv_src_t shortw_curve; + ec_alg_type key_type = UNKNOWN_ALG; + bitcnt_t p_bit_len, q_bit_len; + u8 p_len, q_len; + u16 hsize; + u32 i; + u8 chacha20_seed[SHA256_DIGEST_SIZE]; + u8 chacha20_scalar[BYTECEIL(CURVES_MAX_Q_BIT_LEN)]; + u32 chacha20_scalar_counter = 1; + + Tmp.magic = R_sum.magic = P_sum.magic = WORD(0); + S.magic = S_sum.magic = e.magic = a.magic = WORD(0); + rx.magic = WORD(0); + + FORCE_USED_VAR(adata_len); + FORCE_USED_VAR(adata); + + /* First, some sanity checks */ + MUST_HAVE((s != NULL) && (pub_keys != NULL) && (m != NULL), ret, err); + /* We need at least one element in our batch data bags */ + MUST_HAVE((num > 0), ret, err); + + /* Zeroize buffers */ + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(Pubx, 0, sizeof(Pubx)); EG(ret, err); + ret = local_memset(chacha20_seed, 0,sizeof(chacha20_seed)); EG(ret, err); + ret = local_memset(chacha20_scalar, 0,sizeof(chacha20_scalar)); EG(ret, err); + + pub_key0 = pub_keys[0]; + MUST_HAVE((pub_key0 != NULL), ret, err); + + /* Get our hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + hsize = hm->digest_size; + MUST_HAVE((hm != NULL), ret, err); + + for(i = 0; i < num; i++){ + u8 siglen; + const u8 *sig = NULL; + + ret = pub_key_check_initialized_and_type(pub_keys[i], BIP0340); EG(ret, err); + + /* Make things more readable */ + pub_key = pub_keys[i]; + + /* Sanity check that all our public keys have the same parameters */ + MUST_HAVE((pub_key->params) == (pub_key0->params), ret, err); + + q = &(pub_key->params->ec_gen_order); + shortw_curve = &(pub_key->params->ec_curve); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + G = &(pub_key->params->ec_gen); + p_bit_len = pub_key->params->ec_fp.p_bitlen; + q_bit_len = pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + q_len = (u8)BYTECEIL(q_bit_len); + + /* Check given signature length is the expected one */ + siglen = s_len[i]; + sig = s[i]; + MUST_HAVE((siglen == BIP0340_SIGLEN(p_bit_len, q_bit_len)), ret, err); + MUST_HAVE((siglen == (BIP0340_R_LEN(p_bit_len) + BIP0340_S_LEN(q_bit_len))), ret, err); + + /* Check the key type versus the algorithm */ + MUST_HAVE((key_type == sig_type), ret, err); + + if(i == 0){ + /* Initialize our sums to zero/point at infinity */ + ret = nn_init(&S_sum, 0); EG(ret, err); + ret = prj_pt_init(&R_sum, shortw_curve); EG(ret, err); + ret = prj_pt_zero(&R_sum); EG(ret, err); + ret = prj_pt_init(&P_sum, shortw_curve); EG(ret, err); + ret = prj_pt_zero(&P_sum); EG(ret, err); + ret = prj_pt_init(&Tmp, shortw_curve); EG(ret, err); + ret = nn_init(&e, 0); EG(ret, err); + ret = nn_init(&a, 0); EG(ret, err); + /* Compute the ChaCha20 seed */ + ret = _bip0340_compute_batch_csprng_seed(s, s_len, pub_keys, m, m_len, num, + p_len, chacha20_seed, + sizeof(chacha20_seed)); EG(ret, err); + } + else{ + /* Get a pseudo-random scalar a for randomizing the linear combination */ + ret = _bip0340_compute_batch_csprng_scalars(chacha20_seed, sizeof(chacha20_seed), + chacha20_scalar, sizeof(chacha20_scalar), + &chacha20_scalar_counter, q, + q_bit_len, q_len, &a); EG(ret, err); + } + + /***************************************************/ + /* Extract r and s */ + ret = fp_init(&rx, pub_key->params->ec_curve.a.ctx); EG(ret, err); + ret = fp_import_from_buf(&rx, &sig[0], p_len); EG(ret, err); + ret = nn_init_from_buf(&S, &sig[p_len], q_len); EG(ret, err); + ret = nn_cmp(&S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("r", &(rx.fp_val)); + dbg_nn_print("s", &S); + + /***************************************************/ + /* Add S to the sum */ + /* Multiply S by a */ + if(i != 0){ + ret = nn_mod_mul(&S, &a, &S, q); EG(ret, err); + } + ret = nn_mod_add(&S_sum, &S_sum, &S, q); EG(ret, err); + + /***************************************************/ + R = &Tmp; + /* Compute R from rx */ + ret = fp_copy(&(R->X), &rx); EG(ret, err); + ret = aff_pt_y_from_x(&(R->Y), &(R->Z), &rx, shortw_curve); EG(ret, err); + /* "Lift" R by choosing the even solution */ + ret = nn_isodd(&(R->Y.fp_val), &isodd); EG(ret, err); + if(isodd){ + ret = fp_copy(&(R->Y), &(R->Z)); EG(ret, err); + } + ret = fp_one(&(R->Z)); EG(ret, err); + /* Now multiply R by a */ + if(i != 0){ + ret = _prj_pt_unprotected_mult(R, &a, R); EG(ret, err); + } + /* Add to the sum */ + ret = prj_pt_add(&R_sum, &R_sum, R); EG(ret, err); + dbg_ec_point_print("aR", R); + + /***************************************************/ + /* Compute P and add it to P_sum */ + Y = &Tmp; + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(Y, pub_key_y); EG(ret, err); + ret = prj_pt_unique(Y, Y); EG(ret, err); + /* Do we have to "lift" Y the public key ? */ + ret = nn_isodd(&(Y->Y.fp_val), &isodd); EG(ret, err); + if(isodd){ + /* If yes, negate the y coordinate */ + ret = fp_neg(&(Y->Y), &(Y->Y)); EG(ret, err); + } + dbg_ec_point_print("Y", Y); + /* Compute e */ + ret = _bip0340_hash((const u8*)BIP0340_CHALLENGE, sizeof(BIP0340_CHALLENGE) - 1, + &sig[0], p_len, hm, + &h_ctx); EG(ret, err); + ret = fp_export_to_buf(&Pubx[0], p_len, &(Y->X)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &Pubx[0], p_len); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, hash); EG(ret, err); + + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + + dbg_nn_print("e", &e); + + /* Multiply e by 'a' */ + if(i != 0){ + ret = nn_mod_mul(&e, &e, &a, q); EG(ret, err); + } + ret = _prj_pt_unprotected_mult(Y, &e, Y); EG(ret, err); + dbg_ec_point_print("eY", Y); + /* Add to the sum */ + ret = prj_pt_add(&P_sum, &P_sum, Y); EG(ret, err); + } + + /* Sanity check */ + MUST_HAVE((q != NULL) && (G != NULL), ret, err); + + /* Compute S_sum * G */ + ret = nn_mod_neg(&S_sum, &S_sum, q); EG(ret, err); /* -S_sum = q - S_sum*/ + ret = _prj_pt_unprotected_mult(&Tmp, &S_sum, G); EG(ret, err); + /* Add P_sum and R_sum */ + ret = prj_pt_add(&Tmp, &Tmp, &R_sum); EG(ret, err); + ret = prj_pt_add(&Tmp, &Tmp, &P_sum); EG(ret, err); + /* The result should be point at infinity */ + ret = prj_pt_iszero(&Tmp, &iszero); EG(ret, err); + ret = (iszero == 1) ? 0 : -1; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(pub_key0); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(G); + PTR_NULLIFY(R); + PTR_NULLIFY(Y); + + prj_pt_uninit(&R_sum); + prj_pt_uninit(&P_sum); + prj_pt_uninit(&Tmp); + nn_uninit(&S); + nn_uninit(&S_sum); + nn_uninit(&e); + nn_uninit(&a); + fp_uninit(&rx); + + return ret; +} + +static int _bip0340_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + nn_src_t q = NULL; + prj_pt_src_t G = NULL; + prj_pt_t R = NULL, Y = NULL; + nn S, a; + nn_t e = NULL; + fp rx; + u8 hash[MAX_DIGEST_SIZE]; + u8 Pubx[NN_MAX_BYTE_LEN]; + const ec_pub_key *pub_key, *pub_key0; + int ret, iszero, isodd, cmp; + prj_pt_src_t pub_key_y; + hash_context h_ctx; + const hash_mapping *hm; + ec_shortw_crv_src_t shortw_curve; + ec_alg_type key_type = UNKNOWN_ALG; + bitcnt_t p_bit_len, q_bit_len = 0; + u8 p_len, q_len; + u16 hsize; + u32 i; + /* NN numbers and points pointers */ + verify_batch_scratch_pad *elements = scratch_pad_area; + u64 expected_len; + u8 chacha20_seed[SHA256_DIGEST_SIZE]; + u8 chacha20_scalar[BYTECEIL(CURVES_MAX_Q_BIT_LEN)]; + u32 chacha20_scalar_counter = 1; + + S.magic = a.magic = WORD(0); + rx.magic = WORD(0); + + FORCE_USED_VAR(adata_len); + FORCE_USED_VAR(adata); + + /* First, some sanity checks */ + MUST_HAVE((s != NULL) && (pub_keys != NULL) && (m != NULL), ret, err); + + MUST_HAVE((scratch_pad_area_len != NULL), ret, err); + MUST_HAVE(((2 * num) >= num), ret, err); + MUST_HAVE(((2 * num) + 1) >= num, ret, err); + + /* Zeroize buffers */ + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(Pubx, 0, sizeof(Pubx)); EG(ret, err); + ret = local_memset(chacha20_seed, 0,sizeof(chacha20_seed)); EG(ret, err); + ret = local_memset(chacha20_scalar, 0,sizeof(chacha20_scalar)); EG(ret, err); + + /* In oder to apply the algorithm, we must have at least two + * elements to verify. If this is not the case, we fallback to + * the regular "no memory" version. + */ + if(num <= 1){ + if(scratch_pad_area == NULL){ + /* We do not require any memory in this case */ + (*scratch_pad_area_len) = 0; + ret = 0; + goto err; + } + else{ + ret = _bip0340_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + goto err; + } + } + + expected_len = ((2 * num) + 1) * sizeof(verify_batch_scratch_pad); + MUST_HAVE((expected_len < 0xffffffff), ret, err); + + if(scratch_pad_area == NULL){ + /* Return the needed size: we need to keep track of (2 * num) + 1 NN numbers + * and (2 * num) + 1 projective points, plus (2 * num) + 1 indices + */ + (*scratch_pad_area_len) = (u32)expected_len; + ret = 0; + goto err; + } + else{ + MUST_HAVE((*scratch_pad_area_len) >= expected_len, ret, err); + } + + pub_key0 = pub_keys[0]; + MUST_HAVE((pub_key0 != NULL), ret, err); + + /* Get our hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + hsize = hm->digest_size; + MUST_HAVE((hm != NULL), ret, err); + + for(i = 0; i < num; i++){ + u8 siglen; + const u8 *sig = NULL; + + ret = pub_key_check_initialized_and_type(pub_keys[i], BIP0340); EG(ret, err); + + /* Make things more readable */ + pub_key = pub_keys[i]; + + /* Sanity check that all our public keys have the same parameters */ + MUST_HAVE((pub_key->params) == (pub_key0->params), ret, err); + + q = &(pub_key->params->ec_gen_order); + shortw_curve = &(pub_key->params->ec_curve); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + G = &(pub_key->params->ec_gen); + p_bit_len = pub_key->params->ec_fp.p_bitlen; + q_bit_len = pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + q_len = (u8)BYTECEIL(q_bit_len); + + /* Check given signature length is the expected one */ + siglen = s_len[i]; + sig = s[i]; + MUST_HAVE((siglen == BIP0340_SIGLEN(p_bit_len, q_bit_len)), ret, err); + MUST_HAVE((siglen == (BIP0340_R_LEN(p_bit_len) + BIP0340_S_LEN(q_bit_len))), ret, err); + + /* Check the key type versus the algorithm */ + MUST_HAVE((key_type == sig_type), ret, err); + + if(i == 0){ + /* Initialize our sums to zero/point at infinity */ + ret = nn_init(&a, 0); EG(ret, err); + ret = nn_init(&elements[(2 * num)].number, 0); EG(ret, err); + ret = prj_pt_copy(&elements[(2 * num)].point, G); EG(ret, err); + /* Compute the ChaCha20 seed */ + ret = _bip0340_compute_batch_csprng_seed(s, s_len, pub_keys, m, m_len, num, + p_len, chacha20_seed, + sizeof(chacha20_seed)); EG(ret, err); + } + else{ + /* Get a pseudo-random scalar a for randomizing the linear combination */ + ret = _bip0340_compute_batch_csprng_scalars(chacha20_seed, sizeof(chacha20_seed), + chacha20_scalar, sizeof(chacha20_scalar), + &chacha20_scalar_counter, q, + q_bit_len, q_len, &a); EG(ret, err); + } + + /***************************************************/ + /* Extract r and s */ + ret = fp_init(&rx, pub_key->params->ec_curve.a.ctx); EG(ret, err); + ret = fp_import_from_buf(&rx, &sig[0], p_len); EG(ret, err); + ret = nn_init_from_buf(&S, &sig[p_len], q_len); EG(ret, err); + ret = nn_cmp(&S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("r", &(rx.fp_val)); + dbg_nn_print("s", &S); + + /***************************************************/ + /* Add S to the sum */ + /* Multiply S by a */ + if(i != 0){ + ret = nn_mod_mul(&S, &a, &S, q); EG(ret, err); + } + ret = nn_mod_add(&elements[(2 * num)].number, &elements[(2 * num)].number, + &S, q); EG(ret, err); + + /***************************************************/ + /* Initialize R */ + R = &elements[i].point; + ret = prj_pt_init(R, shortw_curve); EG(ret, err); + /* Compute R from rx */ + ret = fp_copy(&(R->X), &rx); EG(ret, err); + ret = aff_pt_y_from_x(&(R->Y), &(R->Z), &rx, shortw_curve); EG(ret, err); + /* "Lift" R by choosing the even solution */ + ret = nn_isodd(&(R->Y.fp_val), &isodd); EG(ret, err); + if(isodd){ + ret = fp_copy(&(R->Y), &(R->Z)); EG(ret, err); + } + ret = fp_one(&(R->Z)); EG(ret, err); + + if(i != 0){ + ret = nn_init(&elements[i].number, 0); EG(ret, err); + ret = nn_copy(&elements[i].number, &a); EG(ret, err); + } + else{ + ret = nn_init(&elements[i].number, 0); EG(ret, err); + ret = nn_one(&elements[i].number); EG(ret, err); + } + dbg_ec_point_print("R", R); + + /***************************************************/ + /* Compute P and add it to P_sum */ + Y = &elements[num + i].point; + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(Y, pub_key_y); EG(ret, err); + ret = prj_pt_unique(Y, Y); EG(ret, err); + /* Do we have to "lift" Y the public key ? */ + ret = nn_isodd(&(Y->Y.fp_val), &isodd); EG(ret, err); + if(isodd){ + /* If yes, negate the y coordinate */ + ret = fp_neg(&(Y->Y), &(Y->Y)); EG(ret, err); + } + dbg_ec_point_print("Y", Y); + /* Compute e */ + /* Store the coefficient */ + e = &elements[num + i].number; + ret = nn_init(e, 0); EG(ret, err); + ret = _bip0340_hash((const u8*)BIP0340_CHALLENGE, sizeof(BIP0340_CHALLENGE) - 1, + &sig[0], p_len, hm, + &h_ctx); EG(ret, err); + ret = fp_export_to_buf(&Pubx[0], p_len, &(Y->X)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &Pubx[0], p_len); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, hash); EG(ret, err); + + ret = nn_init_from_buf(e, hash, hsize); EG(ret, err); + ret = nn_mod(e, e, q); EG(ret, err); + + dbg_nn_print("e", e); + + /* Multiply e by 'a' */ + if(i != 0){ + ret = nn_mod_mul(e, e, &a, q); EG(ret, err); + } + } + + /* Sanity check */ + MUST_HAVE((q != NULL) && (G != NULL) && (q_bit_len != 0), ret, err); + + /********************************************/ + /****** Bos-Coster algorithm ****************/ + ret = ec_verify_bos_coster(elements, (2 * num) + 1, q_bit_len); + if(ret){ + if(ret == -2){ + /* In case of Bos-Coster time out, we fall back to the + * slower regular batch verification. + */ + ret = _bip0340_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + } + goto err; + } + + /* The first element should contain the sum: it should + * be equal to zero. Reject the signature if this is not + * the case. + */ + ret = prj_pt_iszero(&elements[elements[0].index].point, &iszero); EG(ret, err); + ret = iszero ? 0 : -1; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(e); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(pub_key0); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(G); + PTR_NULLIFY(R); + PTR_NULLIFY(Y); + + /* Unitialize all our scratch_pad_area */ + if((scratch_pad_area != NULL) && (scratch_pad_area_len != NULL)){ + IGNORE_RET_VAL(local_memset((u8*)scratch_pad_area, 0, (*scratch_pad_area_len))); + } + + nn_uninit(&S); + nn_uninit(&a); + fp_uninit(&rx); + + return ret; +} + +int bip0340_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + int ret; + + if(scratch_pad_area != NULL){ + MUST_HAVE((scratch_pad_area_len != NULL), ret, err); + ret = _bip0340_verify_batch(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len, + scratch_pad_area, scratch_pad_area_len); EG(ret, err); + + } + else{ + ret = _bip0340_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + } + +err: + return ret; +} + +#else /* defined(WITH_SIG_BIP0340) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* defined(WITH_SIG_BIP0340) */ diff --git a/crypto/libecc/src/sig/dbign.c b/crypto/libecc/src/sig/dbign.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/dbign.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_DBIGN + +#if !defined(WITH_HMAC) +#error "DBIGN signature needs HMAC, please activate it!" +#endif +#include + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "DBIGN" +#endif +#include + +int dbign_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + return __bign_init_pub_key(out_pub, in_priv, DBIGN); +} + +int dbign_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + return __bign_siglen(p_bit_len, q_bit_len, hsize, blocksize, siglen); +} + +int _dbign_sign_init(struct ec_sign_context *ctx) +{ + int ret; + + /* Override our random source with NULL since we want a deterministic + * generation. + */ + MUST_HAVE((ctx != NULL), ret, err); + + ctx->rand = NULL; + ret = __bign_sign_init(ctx, DBIGN); + +err: + return ret; +} + +int _dbign_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* NOTE: for deterministic ECDSA, the random source MUST be NULL, hence + * the following check. + */ + MUST_HAVE((ctx != NULL) && (ctx->rand == NULL), ret, err); + + ret = __bign_sign_update(ctx, chunk, chunklen, DBIGN); + +err: + return ret; +} + +int _dbign_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + int ret; + + /* NOTE: for deterministic ECDSA, the random source MUST be NULL, hence + * the following check. + */ + MUST_HAVE((ctx != NULL) && (ctx->rand == NULL), ret, err); + + ret = __bign_sign_finalize(ctx, sig, siglen, DBIGN); + +err: + return ret; +} + +int _dbign_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen) +{ + return __bign_verify_init(ctx, sig, siglen, DBIGN); +} + +int _dbign_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __bign_verify_update(ctx, chunk, chunklen, DBIGN); +} + +int _dbign_verify_finalize(struct ec_verify_context *ctx) +{ + return __bign_verify_finalize(ctx, DBIGN); +} + +#else /* WITH_SIG_DBIGN */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_DBIGN */ diff --git a/crypto/libecc/src/sig/decdsa.c b/crypto/libecc/src/sig/decdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/decdsa.c @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_DECDSA + +#if !defined(WITH_HMAC) +#error "DECDSA signature needs HMAC, please activate it!" +#endif +#include + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "DECDSA" +#endif +#include + +int decdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + return __ecdsa_init_pub_key(out_pub, in_priv, DECDSA); +} + +int decdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + return __ecdsa_siglen(p_bit_len, q_bit_len, hsize, blocksize, siglen); +} + +int _decdsa_sign_init(struct ec_sign_context *ctx) +{ + int ret; + + /* Override our random source with NULL since we want a deterministic + * generation. + */ + MUST_HAVE((ctx != NULL), ret, err); + + ctx->rand = NULL; + ret = __ecdsa_sign_init(ctx, DECDSA); + +err: + return ret; +} + +int _decdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* NOTE: for deterministic ECDSA, the random source MUST be NULL, hence + * the following check. + */ + MUST_HAVE((ctx != NULL) && (ctx->rand == NULL), ret, err); + + ret = __ecdsa_sign_update(ctx, chunk, chunklen, DECDSA); + +err: + return ret; +} + +int _decdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + int ret; + + /* NOTE: for deterministic ECDSA, the random source MUST be NULL, hence + * the following check. + */ + MUST_HAVE((ctx != NULL) && (ctx->rand == NULL), ret, err); + + ret = __ecdsa_sign_finalize(ctx, sig, siglen, DECDSA); + +err: + return ret; +} + +int _decdsa_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen) +{ + return __ecdsa_verify_init(ctx, sig, siglen, DECDSA); +} + +int _decdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecdsa_verify_update(ctx, chunk, chunklen, DECDSA); +} + +int _decdsa_verify_finalize(struct ec_verify_context *ctx) +{ + return __ecdsa_verify_finalize(ctx, DECDSA); +} + +int decdsa_public_key_from_sig(ec_pub_key *out_pub1, ec_pub_key *out_pub2, const ec_params *params, + const u8 *sig, u8 siglen, const u8 *hash, u8 hsize) +{ + return __ecdsa_public_key_from_sig(out_pub1, out_pub2, params, sig, siglen, hash, hsize, DECDSA); +} + +#else /* WITH_SIG_DECDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_DECDSA */ diff --git a/crypto/libecc/src/sig/ec_key.c b/crypto/libecc/src/sig/ec_key.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ec_key.c @@ -0,0 +1,620 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include + +/* + * Check if given private key 'A' has been initialized. Returns 0 on success, + * -1 on error + */ +int priv_key_check_initialized(const ec_priv_key *A) +{ + int ret = 0; + + MUST_HAVE(((A != NULL) && (A->magic == PRIV_KEY_MAGIC) && (A->params != NULL)), ret, err); + +err: + return ret; +} + +/* + * Same as previous but also verifies that the signature algorithm type does + * match the one passed using 'alg_type'. Returns 0 on success, -1 on error. + */ +int priv_key_check_initialized_and_type(const ec_priv_key *A, + ec_alg_type alg_type) +{ + int ret = 0; + + MUST_HAVE(((A != NULL) && (A->magic == PRIV_KEY_MAGIC) && + (A->params != NULL) && (A->key_type == alg_type)), ret, err); + +err: + return ret; +} + +/* + * Import a private key from a buffer with known EC parameters and algorithm + * Note that no sanity check is performed by the function to verify key + * is valid for params. Also note that no deep copy of pointed params is + * performed. The function returns 0 on success, -1 on error. + */ +int ec_priv_key_import_from_buf(ec_priv_key *priv_key, + const ec_params *params, + const u8 *priv_key_buf, u8 priv_key_buf_len, + ec_alg_type ec_key_alg) +{ + int ret; + + MUST_HAVE((priv_key != NULL), ret, err); + + ret = nn_init_from_buf(&(priv_key->x), priv_key_buf, priv_key_buf_len); EG(ret, err); + + /* Set key type and pointer to EC params */ + priv_key->key_type = ec_key_alg; + priv_key->params = (const ec_params *)params; + priv_key->magic = PRIV_KEY_MAGIC; + +err: + return ret; +} + +/* + * Export a private key 'priv_key' to a buffer 'priv_key_buf' of length + * 'priv_key_buf_len'. The function returns 0 on sucess, -1 on error. + */ +int ec_priv_key_export_to_buf(const ec_priv_key *priv_key, u8 *priv_key_buf, + u8 priv_key_buf_len) +{ + int ret; + bitcnt_t blen; + + ret = priv_key_check_initialized(priv_key); EG(ret, err); + + /* + * Check that there is enough room to export our private key without + * losing information. + */ + ret = nn_bitlen(&(priv_key->x), &blen); EG(ret, err); + MUST_HAVE(((8 * (u32)priv_key_buf_len) >= (u32)blen), ret, err); + + /* Export our private key */ + ret = nn_export_to_buf(priv_key_buf, priv_key_buf_len, &(priv_key->x)); + +err: + return ret; +} + +/* + * Check if given public key 'A' has been initialized. Returns 0 on success, + * -1 on error + */ +int pub_key_check_initialized(const ec_pub_key *A) +{ + int ret = 0; + + MUST_HAVE(((A != NULL) && (A->magic == PUB_KEY_MAGIC) && (A->params != NULL)), ret, err); + +err: + return ret; +} + +/* + * Same as previous but also verifies that the signature algorithm type does + * match the one passed using 'alg_type'. Returns 0 on success, -1 on error. + */ +int pub_key_check_initialized_and_type(const ec_pub_key *A, + ec_alg_type alg_type) +{ + int ret = 0; + + MUST_HAVE(((A != NULL) && (A->magic == PUB_KEY_MAGIC) && + (A->params != NULL) && (A->key_type == alg_type)), ret, err); + +err: + return ret; +} + +/* + * Import a public key from a buffer with known EC parameters and algorithm + * Note that no sanity check is performed by the function to verify key + * is valid for params. Also note that no deep copy of pointed params is + * performed. The buffer contains projective point coordinates. The function + * returns 0 on success, -1 on error. + */ +int ec_pub_key_import_from_buf(ec_pub_key *pub_key, const ec_params *params, + const u8 *pub_key_buf, u8 pub_key_buf_len, + ec_alg_type ec_key_alg) +{ + int ret, isone, check; + + MUST_HAVE(((pub_key != NULL) && (pub_key_buf != NULL) && (params != NULL)), ret, err); + + /* Import the projective point */ + ret = prj_pt_import_from_buf(&(pub_key->y), + pub_key_buf, pub_key_buf_len, + (ec_shortw_crv_src_t)&(params->ec_curve)); EG(ret, err); + + /* If the cofactor of the curve is not 1, we check that + * our public key is indeed in the sub-group generated by + * our generator. + * NOTE: this is indeed a 'costly' operation, but it is necessary + * when we do not trust the public key that is provided, which can + * be the case in some protocols. + */ + ret = nn_isone(&(params->ec_gen_cofactor), &isone); EG(ret, err); + if (!isone) { + ret = check_prj_pt_order(&(pub_key->y), &(params->ec_gen_order), PUBLIC_PT, &check); EG(ret, err); + MUST_HAVE(check, ret, err); + } + + /* Set key type and pointer to EC params */ + pub_key->key_type = ec_key_alg; + pub_key->params = (const ec_params *)params; + pub_key->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +/* + * Import a public key from a buffer with known EC parameters and algorithm + * Note that no sanity check is performed by the function to verify key + * is valid for params. Also note that no deep copy of pointed params is + * performed. The buffer contains affine point coordinates. The function + * returns 0 on success, -1 on error. + */ +int ec_pub_key_import_from_aff_buf(ec_pub_key *pub_key, const ec_params *params, + const u8 *pub_key_buf, u8 pub_key_buf_len, + ec_alg_type ec_key_alg) +{ + int ret, isone, check; + + MUST_HAVE(((pub_key != NULL) && (pub_key_buf != NULL) && (params != NULL)), ret, err); + + /* Import the projective point */ + ret = prj_pt_import_from_aff_buf(&(pub_key->y), + pub_key_buf, pub_key_buf_len, + (ec_shortw_crv_src_t)&(params->ec_curve)); EG(ret, err); + + /* If the cofactor of the curve is not 1, we check that + * our public key is indeed in the sub-group generated by + * our generator. + * NOTE: this is indeed a 'costly' operation, but it is necessary + * when we do not trust the public key that is provided, which can + * be the case in some protocols. + */ + ret = nn_isone(&(params->ec_gen_cofactor), &isone); EG(ret, err); + if (!isone){ + ret = check_prj_pt_order(&(pub_key->y), &(params->ec_gen_order), PUBLIC_PT, &check); EG(ret, err); + MUST_HAVE(check, ret, err); + } + + /* Set key type and pointer to EC params */ + pub_key->key_type = ec_key_alg; + pub_key->params = (const ec_params *)params; + pub_key->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +/* + * Export a public key to a projective point buffer. The function returns 0 on + * success, -1 on error. + */ +int ec_pub_key_export_to_buf(const ec_pub_key *pub_key, u8 *pub_key_buf, + u8 pub_key_buf_len) +{ + int ret; + + ret = pub_key_check_initialized(pub_key); EG(ret, err); + ret = prj_pt_export_to_buf(&(pub_key->y), pub_key_buf, pub_key_buf_len); + +err: + return ret; +} + +/* + * Export a public key to an affine point buffer. The function returns 0 on + * success, -1 on error. + */ +int ec_pub_key_export_to_aff_buf(const ec_pub_key *pub_key, u8 *pub_key_buf, + u8 pub_key_buf_len) +{ + int ret; + + ret = pub_key_check_initialized(pub_key); EG(ret, err); + ret = prj_pt_export_to_aff_buf(&(pub_key->y), pub_key_buf, + pub_key_buf_len); + +err: + return ret; +} + +/* + * Check if given key pair 'A' has been initialized. Returns 0 on success, + * -1 on error + */ +int key_pair_check_initialized(const ec_key_pair *A) +{ + int ret; + + MUST_HAVE((A != NULL), ret, err); + + ret = priv_key_check_initialized(&A->priv_key); EG(ret, err); + ret = pub_key_check_initialized(&A->pub_key); + +err: + return ret; +} + +/* + * Same as previous but also verifies that the signature algorithm type does + * match the one passed using 'alg_type'. Returns 0 on success, -1 on error. + */ +int key_pair_check_initialized_and_type(const ec_key_pair *A, + ec_alg_type alg_type) +{ + int ret; + + MUST_HAVE((A != NULL), ret, err); + + ret = priv_key_check_initialized_and_type(&A->priv_key, alg_type); EG(ret, err); + ret = pub_key_check_initialized_and_type(&A->pub_key, alg_type); + +err: + return ret; +} + +/* + * Import a key pair from a buffer representing the private key. The associated + * public key is computed from the private key. The function returns 0 on + * success, -1 on error. + */ +int ec_key_pair_import_from_priv_key_buf(ec_key_pair *kp, + const ec_params *params, + const u8 *priv_key, u8 priv_key_len, + ec_alg_type ec_key_alg) +{ + int ret; + + MUST_HAVE((kp != NULL), ret, err); + + /* Import private key */ + ret = ec_priv_key_import_from_buf(&(kp->priv_key), params, priv_key, + priv_key_len, ec_key_alg); EG(ret, err); + /* Generate associated public key. */ + ret = init_pubkey_from_privkey(&(kp->pub_key), &(kp->priv_key)); + +err: + return ret; +} + +/* + * Import a structured private key to buffer. The structure allows some sanity + * checks. The function returns 0 on success, -1 on error. + */ +int ec_structured_priv_key_import_from_buf(ec_priv_key *priv_key, + const ec_params *params, + const u8 *priv_key_buf, + u8 priv_key_buf_len, + ec_alg_type ec_key_alg) +{ + u8 metadata_len = (3 * sizeof(u8)); + u8 crv_name_len; + u32 len; + int ret; + + /* We first pull the metadata, consisting of: + * - One byte = the key type (public or private) + * - One byte = the algorithm type (ECDSA, ECKCDSA, ...) + * - One byte = the curve type (FRP256V1, ...) + */ + MUST_HAVE((priv_key != NULL) && (priv_key_buf != NULL) && (priv_key_buf_len > metadata_len), ret, err); + MUST_HAVE((params != NULL) && (params->curve_name != NULL), ret, err); + + /* Pull and check the key type */ + MUST_HAVE((EC_PRIVKEY == priv_key_buf[0]), ret, err); + + /* Pull and check the algorithm type */ + MUST_HAVE((ec_key_alg == priv_key_buf[1]), ret, err); + + /* Pull and check the curve type */ + ret = local_strlen((const char *)params->curve_name, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + crv_name_len = (u8)len; + + ret = ec_check_curve_type_and_name((ec_curve_type) (priv_key_buf[2]), + params->curve_name, crv_name_len); EG(ret, err); + ret = ec_priv_key_import_from_buf(priv_key, params, + priv_key_buf + metadata_len, + (u8)(priv_key_buf_len - metadata_len), + ec_key_alg); + + err: + return ret; +} + +/* + * Export a structured private key to buffer. The structure allows some sanity + * checks. The function returns 0 on success, -1 on error. + */ +int ec_structured_priv_key_export_to_buf(const ec_priv_key *priv_key, + u8 *priv_key_buf, u8 priv_key_buf_len) +{ + + u8 metadata_len = (3 * sizeof(u8)); + const u8 *curve_name; + u8 curve_name_len; + u32 len; + ec_curve_type curve_type; + int ret; + + ret = priv_key_check_initialized(priv_key); EG(ret, err); + + MUST_HAVE((priv_key_buf != NULL) && (priv_key_buf_len > metadata_len) && (priv_key->params->curve_name != NULL), ret, err); + + /* + * We first put the metadata, consisting on: + * - One byte = the key type (public or private) + * - One byte = the algorithm type (ECDSA, ECKCDSA, ...) + * - One byte = the curve type (FRP256V1, ...) + */ + + /* Push the key type */ + priv_key_buf[0] = (u8)EC_PRIVKEY; + + /* Push the algorithm type */ + priv_key_buf[1] = (u8)priv_key->key_type; + + /* Push the curve type */ + curve_name = priv_key->params->curve_name; + + ret = local_strlen((const char *)curve_name, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + curve_name_len = (u8)len; + + ret = ec_get_curve_type_by_name(curve_name, curve_name_len, &curve_type); EG(ret, err); + priv_key_buf[2] = (u8)curve_type; + + /* Push the raw private key buffer */ + ret = ec_priv_key_export_to_buf(priv_key, priv_key_buf + metadata_len, + (u8)(priv_key_buf_len - metadata_len)); + +err: + return ret; +} + +/* + * Import a structured pub key from buffer. The structure allows some sanity + * checks. The function returns 0 on success, -1 on error. + */ +int ec_structured_pub_key_import_from_buf(ec_pub_key *pub_key, + const ec_params *params, + const u8 *pub_key_buf, + u8 pub_key_buf_len, + ec_alg_type ec_key_alg) +{ + u8 metadata_len = (3 * sizeof(u8)); + u8 crv_name_len; + u32 len; + int ret; + + MUST_HAVE((pub_key_buf != NULL) && (pub_key_buf_len > metadata_len), ret, err); + MUST_HAVE((params != NULL) && (params->curve_name != NULL), ret, err); + + /* + * We first pull the metadata, consisting of: + * - One byte = the key type (public or private) + * - One byte = the algorithm type (ECDSA, ECKCDSA, ...) + * - One byte = the curve type (FRP256V1, ...) + */ + + /* Pull and check the key type */ + MUST_HAVE((EC_PUBKEY == pub_key_buf[0]), ret, err); + + /* Pull and check the algorithm type */ + MUST_HAVE((ec_key_alg == pub_key_buf[1]), ret, err); + + /* Pull and check the curve type */ + ret = local_strlen((const char *)params->curve_name, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + crv_name_len = (u8)len; + + ret = ec_check_curve_type_and_name((ec_curve_type) (pub_key_buf[2]), + params->curve_name, crv_name_len); EG(ret, err); + ret = ec_pub_key_import_from_buf(pub_key, params, + pub_key_buf + metadata_len, + (u8)(pub_key_buf_len - metadata_len), + ec_key_alg); + +err: + return ret; +} + +/* + * Export a structured pubate key to buffer. The structure allows some sanity + * checks. The function returns 0 on success, -1 on error. + */ +int ec_structured_pub_key_export_to_buf(const ec_pub_key *pub_key, + u8 *pub_key_buf, u8 pub_key_buf_len) +{ + u8 metadata_len = (3 * sizeof(u8)); + const u8 *curve_name; + u8 curve_name_len; + u32 len; + ec_curve_type curve_type; + int ret; + + ret = pub_key_check_initialized(pub_key); EG(ret, err); + + MUST_HAVE((pub_key_buf != NULL) && (pub_key_buf_len > metadata_len), ret, err); + MUST_HAVE((pub_key->params->curve_name != NULL), ret, err); + + /* + * We first put the metadata, consisting of: + * - One byte = the key type (public or private) + * - One byte = the algorithm type (ECDSA, ECKCDSA, ...) + * - One byte = the curve type (FRP256V1, ...) + */ + + /* Push the key type */ + pub_key_buf[0] = (u8)EC_PUBKEY; + + /* Push the algorithm type */ + pub_key_buf[1] = (u8)pub_key->key_type; + + /* Push the curve type */ + curve_name = pub_key->params->curve_name; + + ret = local_strlen((const char *)curve_name, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + curve_name_len = (u8)len; + + ret = ec_get_curve_type_by_name(curve_name, curve_name_len, &curve_type); EG(ret, err); + pub_key_buf[2] = (u8)curve_type; + + /* Push the raw pub key buffer */ + ret = ec_pub_key_export_to_buf(pub_key, pub_key_buf + metadata_len, + (u8)(pub_key_buf_len - metadata_len)); + +err: + return ret; +} + +/* + * Import a key pair from a structured private key buffer. The structure allows + * some sanity checks. The function returns 0 on success, -1 on error. + */ +int ec_structured_key_pair_import_from_priv_key_buf(ec_key_pair *kp, + const ec_params *params, + const u8 *priv_key_buf, + u8 priv_key_buf_len, + ec_alg_type ec_key_alg) +{ + u8 metadata_len = (3 * sizeof(u8)); + u8 crv_name_len; + u32 len; + int ret; + + MUST_HAVE((kp != NULL) && (priv_key_buf != NULL) && (priv_key_buf_len > metadata_len), ret, err); + MUST_HAVE((params != NULL) && (params->curve_name != NULL), ret, err); + + /* We first pull the metadata, consisting on: + * - One byte = the key type (public or private) + * - One byte = the algorithm type (ECDSA, ECKCDSA, ...) + * - One byte = the curve type (FRP256V1, ...) + */ + + /* Pull and check the key type */ + MUST_HAVE((EC_PRIVKEY == priv_key_buf[0]), ret, err); + + /* Pull and check the algorithm type */ + MUST_HAVE((ec_key_alg == priv_key_buf[1]), ret, err); + + /* Pull and check the curve type */ + ret = local_strlen((const char *)params->curve_name, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + crv_name_len = (u8)len; + + ret = ec_check_curve_type_and_name((ec_curve_type) (priv_key_buf[2]), + params->curve_name, crv_name_len); EG(ret, err); + ret = ec_key_pair_import_from_priv_key_buf(kp, params, + priv_key_buf + metadata_len, + (u8)(priv_key_buf_len - metadata_len), + ec_key_alg); + + err: + return ret; +} + +/* + * Import a key pair from a two structured key buffer (private and public one) + * The function does not verify the coherency between private and public parts. + * The function returns 0 on success, -1 on error. + * + * NOTE: please use this API with care as it does not check the consistency + * between the private and public keys! On one side, this "saves" a costly + * scalar multiplication when there is confidence in the source of the buffers, + * but on the other side the user of the API MUST check the source (integrity) + * of the private/public key pair. If unsure, it is advised to use the + * ec_structured_key_pair_import_from_priv_key_buf API that safely derives the + * public key from the private key. + * + */ +int ec_structured_key_pair_import_from_buf(ec_key_pair *kp, + const ec_params *params, + const u8 *priv_key_buf, + u8 priv_key_buf_len, + const u8 *pub_key_buf, + u8 pub_key_buf_len, + ec_alg_type ec_key_alg) +{ + int ret; + + MUST_HAVE((kp != NULL), ret, err); + + ret = ec_structured_pub_key_import_from_buf(&kp->pub_key, params, + pub_key_buf, + pub_key_buf_len, + ec_key_alg); EG(ret, err); + ret = ec_structured_priv_key_import_from_buf(&kp->priv_key, params, + priv_key_buf, + priv_key_buf_len, + ec_key_alg); + +err: + return ret; +} + +/* + * Generate a public/private key pair for given signature algorithm, using + * given EC params. The function returns 0 on success, -1 on error. + */ +int ec_key_pair_gen(ec_key_pair *kp, const ec_params *params, + ec_alg_type ec_key_alg) +{ + int ret; + + MUST_HAVE((kp != NULL) && (params != NULL), ret, err); + + /* Get a random value in ]0,q[ */ + ret = nn_get_random_mod(&(kp->priv_key.x), &(params->ec_gen_order)); EG(ret, err); + + /* Set key type and pointer to EC params for private key */ + kp->priv_key.key_type = ec_key_alg; + kp->priv_key.params = (const ec_params *)params; + kp->priv_key.magic = PRIV_KEY_MAGIC; + + /* Call our private key generation function */ + ret = gen_priv_key(&(kp->priv_key)); EG(ret, err); + + /* Generate associated public key. */ + ret = init_pubkey_from_privkey(&(kp->pub_key), &(kp->priv_key)); + + err: + if (ret && (kp != NULL)) { + IGNORE_RET_VAL(local_memset(kp, 0, sizeof(ec_key_pair))); + } + return ret; +} diff --git a/crypto/libecc/src/sig/ecdsa.c b/crypto/libecc/src/sig/ecdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecdsa.c @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECDSA + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECDSA" +#endif +#include + +int ecdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + return __ecdsa_init_pub_key(out_pub, in_priv, ECDSA); +} + +int ecdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + return __ecdsa_siglen(p_bit_len, q_bit_len, hsize, blocksize, siglen); +} + +int _ecdsa_sign_init(struct ec_sign_context *ctx) +{ + return __ecdsa_sign_init(ctx, ECDSA); +} + +int _ecdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecdsa_sign_update(ctx, chunk, chunklen, ECDSA); +} + +int _ecdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + return __ecdsa_sign_finalize(ctx, sig, siglen, ECDSA); +} + +int _ecdsa_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen) +{ + return __ecdsa_verify_init(ctx, sig, siglen, ECDSA); +} + +int _ecdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecdsa_verify_update(ctx, chunk, chunklen, ECDSA); +} + +int _ecdsa_verify_finalize(struct ec_verify_context *ctx) +{ + return __ecdsa_verify_finalize(ctx, ECDSA); +} + +int ecdsa_public_key_from_sig(ec_pub_key *out_pub1, ec_pub_key *out_pub2, const ec_params *params, + const u8 *sig, u8 siglen, const u8 *hash, u8 hsize) +{ + return __ecdsa_public_key_from_sig(out_pub1, out_pub2, params, sig, siglen, hash, hsize, ECDSA); +} + +#else /* WITH_SIG_ECDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECDSA */ diff --git a/crypto/libecc/src/sig/ecdsa_common.c b/crypto/libecc/src/sig/ecdsa_common.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecdsa_common.c @@ -0,0 +1,1039 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_ECDSA) || defined(WITH_SIG_DECDSA) + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECDSA" +#endif +#include + + +#if defined(WITH_SIG_DECDSA) +#include + +/* + * Deterministic nonce generation function for deterministic ECDSA, as + * described in RFC6979. + * NOTE: Deterministic nonce generation for ECDSA is useful against attackers + * in contexts where only poor RNG/entropy are available, or when nonce bits + * leaking can be possible through side-channel attacks. + * However, in contexts where fault attacks are easy to mount, deterministic + * ECDSA can bring more security risks than regular ECDSA. + * + * Depending on the context where you use the library, choose carefully if + * you want to use the deterministic version or not. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int __ecdsa_rfc6979_nonce(nn_t k, nn_src_t q, bitcnt_t q_bit_len, + nn_src_t x, const u8 *hash, u8 hsize, + hash_alg_type hash_type) +{ + int ret, cmp; + u8 V[MAX_DIGEST_SIZE]; + u8 K[MAX_DIGEST_SIZE]; + u8 T[BYTECEIL(CURVES_MAX_Q_BIT_LEN) + MAX_DIGEST_SIZE]; + u8 priv_key_buff[EC_PRIV_KEY_MAX_SIZE]; + hmac_context hmac_ctx; + bitcnt_t t_bit_len; + u8 q_len; + u8 hmac_size; + u8 tmp; + + /* Sanity checks */ + MUST_HAVE((k != NULL), ret, err); + MUST_HAVE((hash != NULL), ret, err); + ret = nn_check_initialized(q); EG(ret, err); + ret = nn_check_initialized(x); EG(ret, err); + + q_len = (u8)BYTECEIL(q_bit_len); + + MUST_HAVE((q_len <= EC_PRIV_KEY_MAX_SIZE) && (hsize <= MAX_BLOCK_SIZE), ret, err); + + /* Steps b. and c.: set V = 0x01 ... 0x01 and K = 0x00 ... 0x00 */ + ret = local_memset(V, 0x01, hsize); EG(ret, err); + ret = local_memset(K, 0x00, hsize); EG(ret, err); + /* Export our private key in a buffer */ + ret = nn_export_to_buf(priv_key_buff, q_len, x); EG(ret, err); + /* Step d.: set K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1)) + * where x is the private key and h1 the message hash. + */ + ret = hmac_init(&hmac_ctx, K, hsize, hash_type); EG(ret, err); + ret = hmac_update(&hmac_ctx, V, hsize); EG(ret, err); + + tmp = 0x00; + ret = hmac_update(&hmac_ctx, &tmp, 1); EG(ret, err); + ret = hmac_update(&hmac_ctx, priv_key_buff, q_len); EG(ret, err); + + /* We compute bits2octets(hash) here */ + ret = nn_init_from_buf(k, hash, hsize); EG(ret, err); + if((8 * hsize) > q_bit_len){ + ret = nn_rshift(k, k, (bitcnt_t)((8 * hsize) - q_bit_len)); EG(ret, err); + } + ret = nn_mod(k, k, q); EG(ret, err); + ret = nn_export_to_buf(T, q_len, k); EG(ret, err); + ret = hmac_update(&hmac_ctx, T, q_len); EG(ret, err); + hmac_size = sizeof(K); + ret = hmac_finalize(&hmac_ctx, K, &hmac_size); EG(ret, err); + + /* Step e.: set V = HMAC_K(V) */ + hmac_size = sizeof(V); + ret = hmac(K, hsize, hash_type, V, hsize, V, &hmac_size); EG(ret, err); + /* Step f.: K = HMAC_K(V || 0x01 || int2octets(x) || bits2octets(h1)) */ + ret = hmac_init(&hmac_ctx, K, hsize, hash_type); EG(ret, err); + ret = hmac_update(&hmac_ctx, V, hsize); EG(ret, err); + + tmp = 0x01; + ret = hmac_update(&hmac_ctx, &tmp, 1); EG(ret, err); + ret = hmac_update(&hmac_ctx, priv_key_buff, q_len); EG(ret, err); + + /* We compute bits2octets(hash) here */ + ret = hmac_update(&hmac_ctx, T, q_len); EG(ret, err); + hmac_size = sizeof(K); + ret = hmac_finalize(&hmac_ctx, K, &hmac_size); EG(ret, err); + /* Step g.: set V = HMAC_K(V)*/ + hmac_size = sizeof(V); + ret = hmac(K, hsize, hash_type, V, hsize, V, &hmac_size); EG(ret, err); + + /* Step h. now apply the generation algorithm until we get + * a proper nonce value: + * 1. Set T to the empty sequence. The length of T (in bits) is + * denoted tlen; thus, at that point, tlen = 0. + * 2. While tlen < qlen, do the following: + * V = HMAC_K(V) + * T = T || V + * 3. Compute: + * k = bits2int(T) + * If that value of k is within the [1,q-1] range, and is + * suitable for DSA or ECDSA (i.e., it results in an r value + * that is not 0; see Section 3.4), then the generation of k is + * finished. The obtained value of k is used in DSA or ECDSA. + * Otherwise, compute: + * K = HMAC_K(V || 0x00) + * V = HMAC_K(V) + * and loop (try to generate a new T, and so on). + */ +restart: + t_bit_len = 0; + while(t_bit_len < q_bit_len){ + /* V = HMAC_K(V) */ + hmac_size = sizeof(V); + ret = hmac(K, hsize, hash_type, V, hsize, V, &hmac_size); EG(ret, err); + ret = local_memcpy(&T[BYTECEIL(t_bit_len)], V, hmac_size); EG(ret, err); + t_bit_len = (bitcnt_t)(t_bit_len + (8 * hmac_size)); + } + ret = nn_init_from_buf(k, T, q_len); EG(ret, err); + if((8 * q_len) > q_bit_len){ + ret = nn_rshift(k, k, (bitcnt_t)((8 * q_len) - q_bit_len)); EG(ret, err); + } + ret = nn_cmp(k, q, &cmp); EG(ret, err); + if(cmp >= 0){ + /* K = HMAC_K(V || 0x00) */ + ret = hmac_init(&hmac_ctx, K, hsize, hash_type); EG(ret, err); + ret = hmac_update(&hmac_ctx, V, hsize); EG(ret, err); + + tmp = 0x00; + ret = hmac_update(&hmac_ctx, &tmp, 1); EG(ret, err); + + hmac_size = sizeof(K); + ret = hmac_finalize(&hmac_ctx, K, &hmac_size); EG(ret, err); + /* V = HMAC_K(V) */ + hmac_size = sizeof(V); + ret = hmac(K, hsize, hash_type, V, hsize, V, &hmac_size); EG(ret, err); + + goto restart; + } + +err: + return ret; +} +#endif + +int __ecdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv, + ec_alg_type key_type) +{ + prj_pt_src_t G; + int ret, cmp; + nn_src_t q; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, key_type); EG(ret, err); + q = &(in_priv->params->ec_gen_order); + + /* Sanity check on key compliance */ + MUST_HAVE((!nn_cmp(&(in_priv->x), q, &cmp)) && (cmp < 0), ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = key_type; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +int __ecdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE(siglen != NULL, ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + (*siglen) = (u8)ECDSA_SIGLEN(q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* ECDSA signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-DSA signature process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - ECDSA signature + *| + *| UF 1. Compute h = H(m) + *| F 2. If |h| > bitlen(q), set h to bitlen(q) + *| leftmost (most significant) bits of h + *| F 3. e = OS2I(h) mod q + *| F 4. Get a random value k in ]0,q[ + *| F 5. Compute W = (W_x,W_y) = kG + *| F 6. Compute r = W_x mod q + *| F 7. If r is 0, restart the process at step 4. + *| F 8. If e == rx, restart the process at step 4. + *| F 9. Compute s = k^-1 * (xr + e) mod q + *| F 10. If s is 0, restart the process at step 4. + *| F 11. Return (r,s) + * + * Implementation notes: + * + * a) Usually (this is for instance the case in ISO 14888-3 and X9.62), the + * process starts with steps 4 to 7 and is followed by steps 1 to 3. + * The order is modified here w/o impact on the result and the security + * in order to allow the algorithm to be compatible with an + * init/update/finish API. More explicitly, the generation of k, which + * may later result in a (unlikely) restart of the whole process is + * postponed until the hash of the message has been computed. + * b) sig is built as the concatenation of r and s. Both r and s are + * encoded on ceil(bitlen(q)/8) bytes. + * c) in EC-DSA, the public part of the key is not needed per se during the + * signature but - as it is needed in other signature algs implemented + * in the library - the whole key pair is passed instead of just the + * private key. + */ + +#define ECDSA_SIGN_MAGIC ((word_t)(0x80299a2bf630945bULL)) +#define ECDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == ECDSA_SIGN_MAGIC), ret, err) + +int __ecdsa_sign_init(struct ec_sign_context *ctx, ec_alg_type key_type) +{ + int ret; + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* + * Initialize hash context stored in our private part of context + * and record data init has been done + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.ecdsa.h_ctx)); EG(ret, err); + + ctx->sign_data.ecdsa.magic = ECDSA_SIGN_MAGIC; + +err: + return ret; +} + +int __ecdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type) +{ + int ret; + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecdsa), ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + + /* 1. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecdsa.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int __ecdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen, + ec_alg_type key_type) +{ + int ret, iszero, cmp; + const ec_priv_key *priv_key; + prj_pt_src_t G; + u8 hash[MAX_DIGEST_SIZE]; + bitcnt_t rshift, q_bit_len; + prj_pt kG; + nn_src_t q, x; + u8 hsize, q_len; + nn k, r, e, tmp, s, kinv; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b; + b.magic = WORD(0); +#endif + + k.magic = r.magic = e.magic = WORD(0); + tmp.magic = s.magic = kinv.magic = WORD(0); + kG.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecdsa), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + + /* Zero init out point */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + q = &(priv_key->params->ec_gen_order); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + G = &(priv_key->params->ec_gen); + q_len = (u8)BYTECEIL(q_bit_len); + x = &(priv_key->x); + hsize = ctx->h->digest_size; + + MUST_HAVE((priv_key->key_type == key_type), ret, err); + + /* Sanity check */ + ret = nn_cmp(x, q, &cmp); EG(ret, err); + /* This should not happen and means that our + * private key is not compliant! + */ + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", &(priv_key->params->ec_gen_order)); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", &(priv_key->params->ec_gen)); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* Check given signature buffer length has the expected size */ + MUST_HAVE((siglen == ECDSA_SIGLEN(q_bit_len)), ret, err); + + /* 1. Compute h = H(m) */ + ret = local_memset(hash, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.ecdsa.h_ctx), hash); EG(ret, err); + dbg_buf_print("h", hash, hsize); + + /* + * 2. If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + * Note that it's easier to check if the truncation has + * to be done here but only implement it using a logical + * shift at the beginning of step 3. below once the hash + * has been converted to an integer. + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + + /* + * 3. Compute e = OS2I(h) mod q, i.e. by converting h to an + * integer and reducing it mod q + */ + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + dbg_nn_print("h initial import as nn", &e); + if (rshift) { + ret = nn_rshift_fixedlen(&e, &e, rshift); EG(ret, err); + } + dbg_nn_print("h final import as nn", &e); + ret = nn_mod(&e, &e, q); EG(ret, err); + dbg_nn_print("e", &e); + + restart: + /* 4. get a random value k in ]0,q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + if(ctx->rand != nn_get_random_mod){ +#ifdef WITH_SIG_DECDSA + /* In deterministic ECDSA, nevermind! */ + if(key_type != DECDSA) +#endif + { + ret = -1; + goto err; + } + } +#endif + if(ctx->rand != NULL){ + /* Non-deterministic generation, or deterministic with + * test vectors. + */ + ret = ctx->rand(&k, q); + } + else +#if defined(WITH_SIG_DECDSA) + { + /* Only applies for DETERMINISTIC ECDSA */ + if(key_type != DECDSA){ + ret = -1; + goto err; + } + /* Deterministically generate k as RFC6979 mandates */ + ret = __ecdsa_rfc6979_nonce(&k, q, q_bit_len, &(priv_key->x), + hash, hsize, ctx->h->type); + } +#else + { + /* NULL rand function is not accepted for regular ECDSA */ + ret = -1; + goto err; + } +#endif + if (ret) { + ret = -1; + goto err; + } + dbg_nn_print("k", &k); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, r and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + + /* 5. Compute W = (W_x,W_y) = kG */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 6. Compute r = W_x mod q */ + ret = nn_mod(&r, &(kG.X.fp_val), q); EG(ret, err); + dbg_nn_print("r", &r); + + /* 7. If r is 0, restart the process at step 4. */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Clean hash buffer as we do not need it anymore */ + ret = local_memset(hash, 0, hsize); EG(ret, err); + + /* Export r */ + ret = nn_export_to_buf(sig, q_len, &r); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Blind r with b */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + + /* Blind the message e */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* tmp = xr mod q */ + ret = nn_mod_mul(&tmp, x, &r, q); EG(ret, err); + dbg_nn_print("x*r mod q", &tmp); + + /* 8. If e == rx, restart the process at step 4. */ + ret = nn_cmp(&e, &tmp, &cmp); EG(ret, err); + if (!cmp) { + goto restart; + } + + /* 9. Compute s = k^-1 * (xr + e) mod q */ + + /* tmp = (e + xr) mod q */ + ret = nn_mod_add(&tmp, &tmp, &e, q); EG(ret, err); + dbg_nn_print("(xr + e) mod q", &tmp); + +#ifdef USE_SIG_BLINDING + /* + * In case of blinding, we compute (b*k)^-1, and b^-1 will + * automatically unblind (r*x) in the following. + */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); +#endif + /* Compute k^-1 mod q */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&kinv, &k, q); EG(ret, err); + + dbg_nn_print("k^-1 mod q", &kinv); + + /* s = k^-1 * tmp2 mod q */ + ret = nn_mod_mul(&s, &tmp, &kinv, q); EG(ret, err); + + dbg_nn_print("s", &s); + + /* 10. If s is 0, restart the process at step 4. */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* 11. return (r,s) */ + ret = nn_export_to_buf(sig + q_len, q_len, &s); + +err: + nn_uninit(&k); + nn_uninit(&r); + nn_uninit(&e); + nn_uninit(&tmp); + nn_uninit(&s); + nn_uninit(&kinv); + prj_pt_uninit(&kG); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecdsa), 0, sizeof(ecdsa_sign_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + VAR_ZEROIFY(q_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(rshift); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* + * Generic *internal* ECDSA verification functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global ECDSA verification process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - ECDSA verification + *| + *| I 1. Reject the signature if r or s is 0. + *| UF 2. Compute h = H(m) + *| F 3. If |h| > bitlen(q), set h to bitlen(q) + *| leftmost (most significant) bits of h + *| F 4. Compute e = OS2I(h) mod q + *| F 5. Compute u = (s^-1)e mod q + *| F 6. Compute v = (s^-1)r mod q + *| F 7. Compute W' = uG + vY + *| F 8. If W' is the point at infinity, reject the signature. + *| F 9. Compute r' = W'_x mod q + *| F 10. Accept the signature if and only if r equals r' + * + */ + +#define ECDSA_VERIFY_MAGIC ((word_t)(0x5155fe73e7fd51beULL)) +#define ECDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == ECDSA_VERIFY_MAGIC), ret, err) + +int __ecdsa_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen, + ec_alg_type key_type) +{ + bitcnt_t q_bit_len; + u8 q_len; + nn_src_t q; + nn *r, *s; + int ret, cmp1, cmp2, iszero1, iszero2; + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + q_len = (u8)BYTECEIL(q_bit_len); + r = &(ctx->verify_data.ecdsa.r); + s = &(ctx->verify_data.ecdsa.s); + + /* Check given signature length is the expected one */ + MUST_HAVE((siglen == ECDSA_SIGLEN(q_bit_len)), ret, err); + + /* Import r and s values from signature buffer */ + ret = nn_init_from_buf(r, sig, q_len); EG(ret, err); + ret = nn_init_from_buf(s, sig + q_len, q_len); EG(ret, err); + dbg_nn_print("r", r); + dbg_nn_print("s", s); + + /* 1. Reject the signature if r or s is 0. */ + ret = nn_iszero(r, &iszero1); EG(ret, err); + ret = nn_iszero(s, &iszero2); EG(ret, err); + ret = nn_cmp(r, q, &cmp1); EG(ret, err); + ret = nn_cmp(s, q, &cmp2); EG(ret, err); + MUST_HAVE(((!iszero1) && (cmp1 < 0) && !iszero2 && (cmp2 < 0)), ret, err); + + /* Initialize the remaining of verify context. */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.ecdsa.h_ctx)); EG(ret, err); + + ctx->verify_data.ecdsa.magic = ECDSA_VERIFY_MAGIC; + + err: + VAR_ZEROIFY(q_len); + VAR_ZEROIFY(q_bit_len); + PTR_NULLIFY(q); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + + return ret; +} + +int __ecdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen, ec_alg_type key_type) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecdsa), ret, err); + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecdsa.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int __ecdsa_verify_finalize(struct ec_verify_context *ctx, + ec_alg_type key_type) +{ + prj_pt uG, vY; + prj_pt_t W_prime; + nn e, sinv, uv, r_prime; + prj_pt_src_t G, Y; + u8 hash[MAX_DIGEST_SIZE]; + bitcnt_t rshift, q_bit_len; + nn_src_t q; + nn *s, *r; + u8 hsize; + int ret, iszero, cmp; + + uG.magic = vY.magic = WORD(0); + e.magic = sinv.magic = uv.magic = r_prime.magic = WORD(0); + + /* NOTE: we reuse uG for W_prime to optimize local variables */ + W_prime = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecdsa), ret, err); + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + hsize = ctx->h->digest_size; + r = &(ctx->verify_data.ecdsa.r); + s = &(ctx->verify_data.ecdsa.s); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.ecdsa.h_ctx), hash); EG(ret, err); + dbg_buf_print("h = H(m)", hash, hsize); + + /* + * 3. If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + * Note that it's easier to check here if the truncation + * needs to be done but implement it using a logical + * shift at the beginning of step 3. below once the hash + * has been converted to an integer. + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + + /* + * 4. Compute e = OS2I(h) mod q, by converting h to an integer + * and reducing it mod q + */ + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + ret = local_memset(hash, 0, hsize); EG(ret, err); + dbg_nn_print("h initial import as nn", &e); + if (rshift) { + ret = nn_rshift_fixedlen(&e, &e, rshift); EG(ret, err); + } + dbg_nn_print("h final import as nn", &e); + + ret = nn_mod(&e, &e, q); EG(ret, err); + dbg_nn_print("e", &e); + + /* Compute s^-1 mod q */ + ret = nn_modinv(&sinv, s, q); EG(ret, err); + dbg_nn_print("s", s); + dbg_nn_print("sinv", &sinv); + + /* 5. Compute u = (s^-1)e mod q */ + ret = nn_mod_mul(&uv, &e, &sinv, q); EG(ret, err); + dbg_nn_print("u = (s^-1)e mod q", &uv); + ret = prj_pt_mul(&uG, &uv, G); EG(ret, err); + + /* 6. Compute v = (s^-1)r mod q */ + ret = nn_mod_mul(&uv, r, &sinv, q); EG(ret, err); + dbg_nn_print("v = (s^-1)r mod q", &uv); + ret = prj_pt_mul(&vY, &uv, Y); EG(ret, err); + + /* 7. Compute W' = uG + vY */ + ret = prj_pt_add(W_prime, &uG, &vY); EG(ret, err); + + /* 8. If W' is the point at infinity, reject the signature. */ + ret = prj_pt_iszero(W_prime, &iszero); EG(ret, err); + MUST_HAVE(!iszero, ret, err); + + /* 9. Compute r' = W'_x mod q */ + ret = prj_pt_unique(W_prime, W_prime); EG(ret, err); + dbg_nn_print("W'_x", &(W_prime->X.fp_val)); + dbg_nn_print("W'_y", &(W_prime->Y.fp_val)); + ret = nn_mod(&r_prime, &(W_prime->X.fp_val), q); EG(ret, err); + + /* 10. Accept the signature if and only if r equals r' */ + ret = nn_cmp(&r_prime, r, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + + err: + prj_pt_uninit(&uG); + prj_pt_uninit(&vY); + nn_uninit(&e); + nn_uninit(&sinv); + nn_uninit(&uv); + nn_uninit(&r_prime); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecdsa), 0, sizeof(ecdsa_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(W_prime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + VAR_ZEROIFY(rshift); + VAR_ZEROIFY(q_bit_len); + PTR_NULLIFY(q); + PTR_NULLIFY(s); + PTR_NULLIFY(r); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* Public key recovery from a signature. + * For ECDSA, it is possible to recover two possible public keys from + * a signature and a digest. + * + * Please note that this recovery is not perfect as some information is + * lost when reducing Rx modulo the order q during the signature. Hence, + * a few possible R points can provide the same r. The following algorithm + * assumes that Rx == r, i.e. Rx is < q and already reduced. This should + * happen with a probability q / p, and "bad" cases with probability + * (p - q) / p. Actually, some small multiples of r are also tested, + * but we give up after 10 tries as this can be very time consuming. + * + * With usual curve parameters, this last probability is negligible if + * everything is random (which should be the case for a "regular" signature + * algorithm) for curves with cofactor = 1. However, an adversary could + * willingly choose a Rx > q and the following algorithm will most certainly + * fail. + * + * For curves with cofactor > 1, q is usually some orders of magnitudes + * smaller than p and this function will certainly fail. + * + * Please use the resulting public keys with care and with all these + * warnings in mind! + * + */ +int __ecdsa_public_key_from_sig(ec_pub_key *out_pub1, ec_pub_key *out_pub2, const ec_params *params, + const u8 *sig, u8 siglen, const u8 *hash, u8 hsize, + ec_alg_type key_type) +{ + int ret, iszero1, iszero2, cmp1, cmp2; + prj_pt uG; + prj_pt_t Y1, Y2; + prj_pt_src_t G; + nn u, v, e, r, s; + nn_src_t q, p; + bitcnt_t rshift, q_bit_len; + u8 q_len; + word_t order_multiplier = WORD(1); + + uG.magic = WORD(0); + u.magic = v.magic = e.magic = r.magic = s.magic = WORD(0); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Sanity checks */ + MUST_HAVE((params != NULL) && (sig != NULL) && (hash != NULL) && (out_pub1 != NULL) && (out_pub2 != NULL), ret, err); + + /* Import our params */ + G = &(params->ec_gen); + p = &(params->ec_fp.p); + q = &(params->ec_gen_order); + q_bit_len = params->ec_gen_order_bitlen; + q_len = (u8)BYTECEIL(q_bit_len); + Y1 = &(out_pub1->y); + Y2 = &(out_pub2->y); + + /* Check given signature length is the expected one */ + MUST_HAVE((siglen == ECDSA_SIGLEN(q_bit_len)), ret, err); + +restart: + /* Import r and s values from signature buffer */ + ret = nn_init_from_buf(&r, sig, q_len); EG(ret, err); + ret = nn_init_from_buf(&s, sig + q_len, q_len); EG(ret, err); + + /* Reject the signature if r or s is 0. */ + ret = nn_iszero(&r, &iszero1); EG(ret, err); + ret = nn_iszero(&s, &iszero2); EG(ret, err); + ret = nn_cmp(&r, q, &cmp1); EG(ret, err); + ret = nn_cmp(&s, q, &cmp2); EG(ret, err); + MUST_HAVE(((!iszero1) && (cmp1 < 0) && !iszero2 && (cmp2 < 0)), ret, err); + + /* Add a multiple of the order to r using our current order multiplier */ + if(order_multiplier > 1){ + int cmp; + ret = nn_init(&u, 0); + ret = nn_mul_word(&u, q, order_multiplier); EG(ret, err); + ret = nn_add(&r, &r, &u); EG(ret, err); + /* If we have reached > p, leave with an error */ + ret = nn_cmp(&r, p, &cmp); EG(ret, err); + /* NOTE: we do not use a MUST_HAVE macro here since + * this condition can nominally happen, and we do not want + * a MUST_HAVE in debug mode (i.e. with an assert) to break + * the execution flow. + */ + if(cmp < 0){ + ret = -1; + goto err; + } + } + + /* + * Compute e. + * If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + * Note that it's easier to check here if the truncation + * needs to be done but implement it using a logical + * shift. + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&e, &e, rshift); EG(ret, err); + } + ret = nn_mod(&e, &e, q); EG(ret, err); + + /* Now to find the y coordinate by solving the curve equation. + * NOTE: we use uG as temporary storage. + */ + ret = fp_init(&(uG.X), &(params->ec_fp)); EG(ret, err); + ret = fp_init(&(uG.Y), &(params->ec_fp)); EG(ret, err); + ret = fp_init(&(uG.Z), &(params->ec_fp)); EG(ret, err); + ret = fp_set_nn(&(uG.Z), &r); EG(ret, err); + ret = aff_pt_y_from_x(&(uG.X), &(uG.Y), &(uG.Z), &(params->ec_curve)); + if(ret){ + /* If we have failed here, this means that our r has certainly been + * reduced. Increment our multiplier and restart the process. + */ + order_multiplier = (word_t)(order_multiplier + 1); + if(order_multiplier > 10){ + /* Too much tries, leave ... */ + ret = -1; + goto err; + } + goto restart; + } + + /* Initialize Y1 and Y2 */ + ret = fp_init(&(Y2->Z), &(params->ec_fp)); EG(ret, err); + ret = fp_one(&(Y2->Z)); EG(ret, err); + /* Y1 */ + ret = prj_pt_init_from_coords(Y1, &(params->ec_curve), &(uG.Z), &(uG.X), &(Y2->Z)); EG(ret, err); + /* Y2 */ + ret = prj_pt_init_from_coords(Y2, &(params->ec_curve), &(uG.Z), &(uG.Y), &(Y1->Z)); EG(ret, err); + + /* Now compute u = (-e r^-1) mod q, and v = (s r^-1) mod q */ + ret = nn_init(&u, 0); EG(ret, err); + ret = nn_init(&v, 0); EG(ret, err); + ret = nn_modinv(&r, &r, q); EG(ret, err); + /* u */ + ret = nn_mod_mul(&u, &e, &r, q); EG(ret, err); + /* NOTE: -x mod q is (q - x) mod q, i.e. (q - x) when x is reduced, except for 0 */ + ret = nn_mod_neg(&u, &u, q); EG(ret, err); + /* v */ + ret = nn_mod_mul(&v, &s, &r, q); EG(ret, err); + + /* Compute uG */ + ret = prj_pt_mul(&uG, &u, G); EG(ret, err); + /* Compute vR1 and possible Y1 */ + ret = prj_pt_mul(Y1, &v, Y1); EG(ret, err); + ret = prj_pt_add(Y1, Y1, &uG); EG(ret, err); + /* Compute vR2 and possible Y2 */ + ret = prj_pt_mul(Y2, &v, Y2); EG(ret, err); + ret = prj_pt_add(Y2, Y2, &uG); EG(ret, err); + + /* Now initialize our two public keys */ + /* out_pub1 */ + out_pub1->key_type = key_type; + out_pub1->params = params; + out_pub1->magic = PUB_KEY_MAGIC; + /* out_pub2 */ + out_pub2->key_type = key_type; + out_pub2->params = params; + out_pub2->magic = PUB_KEY_MAGIC; + + ret = 0; + +err: + prj_pt_uninit(&uG); + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&u); + nn_uninit(&v); + nn_uninit(&e); + + /* Clean what remains on the stack */ + PTR_NULLIFY(G); + PTR_NULLIFY(Y1); + PTR_NULLIFY(Y2); + VAR_ZEROIFY(rshift); + VAR_ZEROIFY(q_bit_len); + PTR_NULLIFY(q); + PTR_NULLIFY(p); + + return ret; +} + +#else /* defined(WITH_SIG_ECDSA) || defined(WITH_SIG_DECDSA) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECDSA */ diff --git a/crypto/libecc/src/sig/ecfsdsa.c b/crypto/libecc/src/sig/ecfsdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecfsdsa.c @@ -0,0 +1,1087 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECFSDSA + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECFSDSA" +#endif +#include + +int ecfsdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + int ret, cmp; + prj_pt_src_t G; + nn_src_t q; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, ECFSDSA); EG(ret, err); + q = &(in_priv->params->ec_gen_order); + + /* Sanity check on key compliance */ + MUST_HAVE(!nn_cmp(&(in_priv->x), q, &cmp) && (cmp < 0), ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = ECFSDSA; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +int ecfsdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + (*siglen) = (u8)ECFSDSA_SIGLEN(p_bit_len, q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* ECFSDSA signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * their output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-FSDSA signature process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - ECFSDSA signature + *| + *| I 1. Get a random value k in ]0,q[ + *| I 2. Compute W = (W_x,W_y) = kG + *| I 3. Compute r = FE2OS(W_x)||FE2OS(W_y) + *| I 4. If r is an all zero string, restart the process at step 1. + *| IUF 5. Compute h = H(r||m) + *| F 6. Compute e = OS2I(h) mod q + *| F 7. Compute s = (k + ex) mod q + *| F 8. If s is 0, restart the process at step 1 (see c. below) + *| F 9. Return (r,s) + * + * Implementation notes: + * + * a) sig is built as the concatenation of r and s. r is encoded on + * 2*ceil(bitlen(p)) bytes and s on ceil(bitlen(q)) bytes. + * b) in EC-FSDSA, the public part of the key is not needed per se during + * the signature but - as it is needed in other signature algs implemented + * in the library - the whole key pair is passed instead of just the + * private key. + * c) Implementation of EC-FSDSA in an init()/update()/finalize() logic + * cannot be made deterministic, in the sense that if s is 0 at step + * 8 above, there is no way to restart the whole signature process + * w/o rehashing m. So, even if the event is extremely unlikely, + * signature process may fail to provide a signature of the data + * during finalize() call. + */ + +#define ECFSDSA_SIGN_MAGIC ((word_t)(0x1ed9635924b48ddaULL)) +#define ECFSDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECFSDSA_SIGN_MAGIC), ret, err) + +int _ecfsdsa_sign_init(struct ec_sign_context *ctx) +{ + prj_pt_src_t G; + nn_src_t q; + nn *k; + u8 *r; + prj_pt kG; + const ec_priv_key *priv_key; + bitcnt_t p_bit_len; + u8 i, p_len, r_len; + int ret; + kG.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, ECFSDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + r = ctx->sign_data.ecfsdsa.r; + k = &(ctx->sign_data.ecfsdsa.k); + p_bit_len = priv_key->params->ec_fp.p_bitlen; + MUST_HAVE(((u32)BYTECEIL(p_bit_len) <= NN_MAX_BYTE_LEN), ret, err); + p_len = (u8)BYTECEIL(p_bit_len); + r_len = (u8)ECFSDSA_R_LEN(p_bit_len); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", G); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + restart: + + /* 1. Get a random value k in ]0,q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE((ctx->rand == nn_get_random_mod), ret, err); +#endif + MUST_HAVE((ctx->rand != NULL), ret, err); + ret = ctx->rand(k, q); EG(ret, err); + + /* 2. Compute W = (W_x,W_y) = kG */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, k, G); EG(ret, err); +#endif + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("Wx", &(kG.X.fp_val)); + dbg_nn_print("Wy", &(kG.Y.fp_val)); + + /* 3. Compute r = FE2OS(W_x)||FE2OS(W_y) */ + ret = fp_export_to_buf(r, p_len, &(kG.X)); EG(ret, err); + ret = fp_export_to_buf(r + p_len, p_len, &(kG.Y)); EG(ret, err); + dbg_buf_print("r: ", r, r_len); + + /* 4. If r is an all zero string, restart the process at step 1. */ + ret = 0; + for (i = 0; i < r_len; i++) { + ret |= r[i]; + } + if (ret == 0) { + goto restart; + } + + /* 5. Compute h = H(r||m). + * + * Note that we only start the hash work here by initializing the hash + * context and processing r. Message m will be handled during following + * update() calls. + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.ecfsdsa.h_ctx)); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecfsdsa.h_ctx), r, r_len); EG(ret, err); + + ctx->sign_data.ecfsdsa.magic = ECFSDSA_SIGN_MAGIC; + + err: + prj_pt_uninit(&kG); + + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(k); + PTR_NULLIFY(r); + PTR_NULLIFY(priv_key); + VAR_ZEROIFY(i); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + + return ret; +} + +int _ecfsdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECFSDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECFSDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecfsdsa), ret, err); + + /* 5. Compute h = H(r||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecfsdsa.h_ctx), chunk, chunklen); EG(ret, err); + +err: + return ret; +} + +int _ecfsdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + nn_src_t q, x; + nn s, e, ex, *k; + const ec_priv_key *priv_key; + u8 e_buf[MAX_DIGEST_SIZE]; + bitcnt_t p_bit_len, q_bit_len; + u8 hsize, s_len, r_len; + int ret, iszero, cmp; + u8 *r; + +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + + s.magic = e.magic = ex.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECFSDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECFSDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecfsdsa), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + q = &(priv_key->params->ec_gen_order); + x = &(priv_key->x); + p_bit_len = ctx->key_pair->priv_key.params->ec_fp.p_bitlen; + q_bit_len = ctx->key_pair->priv_key.params->ec_gen_order_bitlen; + k = &(ctx->sign_data.ecfsdsa.k); + r_len = (u8)ECFSDSA_R_LEN(p_bit_len); + s_len = (u8)ECFSDSA_S_LEN(q_bit_len); + hsize = ctx->h->digest_size; + r = ctx->sign_data.ecfsdsa.r; + + /* Sanity check */ + ret = nn_cmp(x, q, &cmp); EG(ret, err); + /* This should not happen and means that our + * private key is not compliant! + */ + MUST_HAVE((cmp < 0), ret, err); + + MUST_HAVE((siglen == ECFSDSA_SIGLEN(p_bit_len, q_bit_len)), ret, err); + +#ifdef USE_SIG_BLINDING + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + /* 5. Compute h = H(r||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.ecfsdsa.h_ctx), e_buf); EG(ret, err); + dbg_buf_print("h(R||m)", e_buf, hsize); + + /* 6. Compute e by converting h to an integer and reducing it mod q */ + ret = nn_init_from_buf(&e, e_buf, hsize); EG(ret, err); + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Blind e with b */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* 7. Compute s = (k + ex) mod q */ + ret = nn_mod_mul(&ex, &e, x, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind k with b */ + ret = nn_mod_mul(&s, k, &b, q); EG(ret, err); + ret = nn_mod_add(&s, &s, &ex, q); EG(ret, err); +#else + ret = nn_mod_add(&s, k, &ex, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ +#ifdef USE_SIG_BLINDING + /* Unblind s */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + dbg_nn_print("s: ", &s); + + /* + * 8. If s is 0, restart the process at step 1. + * + * In practice, as we cannot restart the whole process in + * finalize() we just report an error. + */ + MUST_HAVE((!nn_iszero(&s, &iszero)) && (!iszero), ret, err); + + /* 9. Return (r,s) */ + ret = local_memcpy(sig, r, r_len); EG(ret, err); + ret = local_memset(r, 0, r_len); EG(ret, err); + ret = nn_export_to_buf(sig + r_len, s_len, &s); + + err: + nn_uninit(&s); + nn_uninit(&e); + nn_uninit(&ex); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecfsdsa), 0, sizeof(ecfsdsa_sign_data))); + } + + PTR_NULLIFY(q); + PTR_NULLIFY(x); + PTR_NULLIFY(k); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(r); + VAR_ZEROIFY(hsize); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + + return ret; +} + +/* + * Generic *internal* ECFSDSA verification functions (init, update and + * finalize). Their purpose is to allow passing a specific hash function + * (along with their output size) and the random ephemeral key k, so + * that compliance tests against test vectors can be made without ugly + * hack in the code itself. + * + * Global EC-FSDSA verification process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - ECFSDSA verification + *| + *| I 1. Reject the signature if r is not a valid point on the curve. + *| I 2. Reject the signature if s is not in ]0,q[ + *| IUF 3. Compute h = H(r||m) + *| F 4. Convert h to an integer and then compute e = -h mod q + *| F 5. compute W' = sG + eY, where Y is the public key + *| F 6. Compute r' = FE2OS(W'_x)||FE2OS(W'_y) + *| F 7. Accept the signature if and only if r equals r' + * + */ + +#define ECFSDSA_VERIFY_MAGIC ((word_t)(0x26afb13ccd96fa04ULL)) +#define ECFSDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECFSDSA_VERIFY_MAGIC), ret, err) + +int _ecfsdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + bitcnt_t p_bit_len, q_bit_len; + u8 p_len, r_len, s_len; + int ret, iszero, on_curve, cmp; + const u8 *r; + nn_src_t q; + fp rx, ry; + nn *s; + + rx.magic = ry.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, ECFSDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + p_bit_len = ctx->pub_key->params->ec_fp.p_bitlen; + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + r_len = (u8)ECFSDSA_R_LEN(p_bit_len); + s_len = (u8)ECFSDSA_S_LEN(q_bit_len); + s = &(ctx->verify_data.ecfsdsa.s); + + MUST_HAVE((siglen == ECFSDSA_SIGLEN(p_bit_len, q_bit_len)), ret, err); + + /* 1. Reject the signature if r is not a valid point on the curve. */ + + /* Let's first import r, i.e. x and y coordinates of the point */ + r = sig; + ret = fp_init(&rx, ctx->pub_key->params->ec_curve.a.ctx); EG(ret, err); + ret = fp_import_from_buf(&rx, r, p_len); EG(ret, err); + ret = fp_init(&ry, ctx->pub_key->params->ec_curve.a.ctx); EG(ret, err); + ret = fp_import_from_buf(&ry, r + p_len, p_len); EG(ret, err); + + /* Let's now check that r represents a point on the curve */ + ret = is_on_shortw_curve(&rx, &ry, &(ctx->pub_key->params->ec_curve), &on_curve); EG(ret, err); + MUST_HAVE(on_curve, ret, err); + + /* 2. Reject the signature if s is not in ]0,q[ */ + + /* Import s as a nn */ + ret = nn_init_from_buf(s, sig + r_len, s_len); EG(ret, err); + + /* Check that s is in ]0,q[ */ + ret = nn_iszero(s, &iszero); EG(ret, err); + ret = nn_cmp(s, q, &cmp); EG(ret, err); + MUST_HAVE((!iszero) && (cmp < 0), ret, err); + + /* 3. Compute h = H(r||m) */ + + /* Initialize the verify context */ + ret = local_memcpy(&(ctx->verify_data.ecfsdsa.r), r, r_len); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.ecfsdsa.h_ctx)); EG(ret, err); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecfsdsa.h_ctx), r, r_len); EG(ret, err); + + ctx->verify_data.ecfsdsa.magic = ECFSDSA_VERIFY_MAGIC; + + err: + fp_uninit(&rx); + fp_uninit(&ry); + + if (ret && (ctx != NULL)) { + /* + * Signature is invalid. Clear data part of the context. + * This will clear magic and avoid further reuse of the + * whole context. + */ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecfsdsa), 0, + sizeof(ecfsdsa_verify_data))); + } + + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(q_bit_len); + PTR_NULLIFY(r); + PTR_NULLIFY(q); + PTR_NULLIFY(s); + + return ret; +} + +int _ecfsdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECFSDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECFSDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecfsdsa), ret, err); + + /* 3. Compute h = H(r||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecfsdsa.h_ctx), chunk, + chunklen); + +err: + return ret; +} + +int _ecfsdsa_verify_finalize(struct ec_verify_context *ctx) +{ + prj_pt_src_t G, Y; + nn_src_t q; + nn tmp, e, *s; + prj_pt sG, eY; + prj_pt_t Wprime; + bitcnt_t p_bit_len, r_len; + u8 r_prime[2 * NN_MAX_BYTE_LEN]; + u8 e_buf[MAX_DIGEST_SIZE]; + u8 hsize, p_len; + const u8 *r; + int ret, check; + + tmp.magic = e.magic = WORD(0); + sG.magic = eY.magic = WORD(0); + + /* NOTE: we reuse sG for Wprime to optimize local variables */ + Wprime = &sG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECFSDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECFSDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecfsdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&sG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&eY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + hsize = ctx->h->digest_size; + s = &(ctx->verify_data.ecfsdsa.s); + r = ctx->verify_data.ecfsdsa.r; + p_bit_len = ctx->pub_key->params->ec_fp.p_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + r_len = (u8)ECFSDSA_R_LEN(p_bit_len); + + /* 3. Compute h = H(r||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.ecfsdsa.h_ctx), e_buf); EG(ret, err); + + /* + * 4. Convert h to an integer and then compute e = -h mod q + * + * Because we only support positive integers, we compute + * e = q - (h mod q) (except when h is 0). + */ + ret = nn_init_from_buf(&tmp, e_buf, hsize); EG(ret, err); + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + ret = nn_mod(&tmp, &tmp, q); EG(ret, err); + + ret = nn_mod_neg(&e, &tmp, q); EG(ret, err); + + /* 5. compute W' = (W'_x,W'_y) = sG + tY, where Y is the public key */ + ret = prj_pt_mul(&sG, s, G); EG(ret, err); + ret = prj_pt_mul(&eY, &e, Y); EG(ret, err); + ret = prj_pt_add(Wprime, &sG, &eY); EG(ret, err); + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + + /* 6. Compute r' = FE2OS(W'_x)||FE2OS(W'_y) */ + ret = fp_export_to_buf(r_prime, p_len, &(Wprime->X)); EG(ret, err); + ret = fp_export_to_buf(r_prime + p_len, p_len, &(Wprime->Y)); EG(ret, err); + + dbg_buf_print("r_prime: ", r_prime, r_len); + + /* 7. Accept the signature if and only if r equals r' */ + ret = are_equal(r, r_prime, r_len, &check); EG(ret, err); + ret = check ? 0 : -1; + +err: + IGNORE_RET_VAL(local_memset(r_prime, 0, sizeof(r_prime))); + + nn_uninit(&tmp); + nn_uninit(&e); + prj_pt_uninit(&sG); + prj_pt_uninit(&eY); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecfsdsa), 0, + sizeof(ecfsdsa_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(Wprime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + PTR_NULLIFY(s); + PTR_NULLIFY(r); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* + * NOTE: among all the EC-SDSA ISO14888-3 variants, only EC-FSDSA supports + * batch verification as it is the only one allowing the recovery of the + * underlying signature point from the signature value (other variants make + * use of a hash of (parts) of this point. + */ +/* Batch verification function: + * This function takes multiple signatures/messages/public keys, and + * checks in an optimized way all the signatures. + * + * This returns 0 if *all* the signatures are correct, and -1 if at least + * one signature is not correct. + * + */ +static int _ecfsdsa_verify_batch_no_memory(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len) +{ + nn_src_t q = NULL; + prj_pt_src_t G = NULL; + prj_pt_t W = NULL, Y = NULL; + prj_pt Tmp, W_sum, Y_sum; + nn S, S_sum, e, a; + u8 hash[MAX_DIGEST_SIZE]; + const ec_pub_key *pub_key, *pub_key0; + int ret, iszero, cmp; + prj_pt_src_t pub_key_y; + hash_context h_ctx; + const hash_mapping *hm; + ec_shortw_crv_src_t shortw_curve; + ec_alg_type key_type = UNKNOWN_ALG; + bitcnt_t p_bit_len, q_bit_len; + u8 p_len, q_len; + u16 hsize; + u32 i; + + Tmp.magic = W_sum.magic = Y_sum.magic = WORD(0); + S.magic = S_sum.magic = e.magic = a.magic = WORD(0); + + FORCE_USED_VAR(adata_len); + FORCE_USED_VAR(adata); + + /* First, some sanity checks */ + MUST_HAVE((s != NULL) && (pub_keys != NULL) && (m != NULL), ret, err); + /* We need at least one element in our batch data bags */ + MUST_HAVE((num > 0), ret, err); + + /* Zeroize buffers */ + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + pub_key0 = pub_keys[0]; + MUST_HAVE((pub_key0 != NULL), ret, err); + + /* Get our hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + hsize = hm->digest_size; + MUST_HAVE((hm != NULL), ret, err); + + for(i = 0; i < num; i++){ + u8 siglen; + const u8 *sig = NULL; + + ret = pub_key_check_initialized_and_type(pub_keys[i], ECFSDSA); EG(ret, err); + + /* Make things more readable */ + pub_key = pub_keys[i]; + + /* Sanity check that all our public keys have the same parameters */ + MUST_HAVE((pub_key->params) == (pub_key0->params), ret, err); + + q = &(pub_key->params->ec_gen_order); + shortw_curve = &(pub_key->params->ec_curve); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + G = &(pub_key->params->ec_gen); + p_bit_len = pub_key->params->ec_fp.p_bitlen; + q_bit_len = pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + q_len = (u8)BYTECEIL(q_bit_len); + + /* Check given signature length is the expected one */ + siglen = s_len[i]; + sig = s[i]; + MUST_HAVE((siglen == ECFSDSA_SIGLEN(p_bit_len, q_bit_len)), ret, err); + MUST_HAVE((siglen == (ECFSDSA_R_LEN(p_bit_len) + ECFSDSA_S_LEN(q_bit_len))), ret, err); + + /* Check the key type versus the algorithm */ + MUST_HAVE((key_type == sig_type), ret, err); + + if(i == 0){ + /* Initialize our sums to zero/point at infinity */ + ret = nn_init(&S_sum, 0); EG(ret, err); + ret = prj_pt_init(&W_sum, shortw_curve); EG(ret, err); + ret = prj_pt_zero(&W_sum); EG(ret, err); + ret = prj_pt_init(&Y_sum, shortw_curve); EG(ret, err); + ret = prj_pt_zero(&Y_sum); EG(ret, err); + ret = prj_pt_init(&Tmp, shortw_curve); EG(ret, err); + ret = nn_init(&e, 0); EG(ret, err); + ret = nn_init(&a, 0); EG(ret, err); + } + + /* Get a pseudo-random scalar a for randomizing the linear combination */ + ret = nn_get_random_mod(&a, q); EG(ret, err); + + /***************************************************/ + /* Extract s */ + ret = nn_init_from_buf(&S, &sig[2 * p_len], q_len); EG(ret, err); + ret = nn_cmp(&S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("s", &S); + + /***************************************************/ + /* Add S to the sum */ + /* Multiply S by a */ + ret = nn_mod_mul(&S, &a, &S, q); EG(ret, err); + ret = nn_mod_add(&S_sum, &S_sum, + &S, q); EG(ret, err); + + /***************************************************/ + /* Compute Y and add it to Y_sum */ + Y = &Tmp; + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(Y, pub_key_y); EG(ret, err); + ret = prj_pt_unique(Y, Y); EG(ret, err); + dbg_ec_point_print("Y", Y); + + /* Compute e */ + ret = hm->hfunc_init(&h_ctx); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &sig[0], (u32)(2 * p_len)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, hash); EG(ret, err); + + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + ret = nn_mod_neg(&e, &e, q); EG(ret, err); + + dbg_nn_print("e", &e); + + /* Multiply e by 'a' */ + ret = nn_mod_mul(&e, &e, &a, q); EG(ret, err); + + ret = _prj_pt_unprotected_mult(Y, &e, Y); EG(ret, err); + dbg_ec_point_print("eY", Y); + /* Add to the sum */ + ret = prj_pt_add(&Y_sum, &Y_sum, Y); EG(ret, err); + + /***************************************************/ + W = &Tmp; + /* Compute W from rx and ry */ + ret = prj_pt_import_from_aff_buf(W, &sig[0], (u16)(2 * p_len), shortw_curve); EG(ret, err); + + /* Now multiply W by -a */ + ret = nn_mod_neg(&a, &a, q); EG(ret, err); + ret = _prj_pt_unprotected_mult(W, &a, W); EG(ret, err); + + /* Add to the sum */ + ret = prj_pt_add(&W_sum, &W_sum, W); EG(ret, err); + dbg_ec_point_print("aW", W); + } + /* Sanity check */ + MUST_HAVE((q != NULL) && (G != NULL), ret, err); + + /* Compute S_sum * G */ + ret = _prj_pt_unprotected_mult(&Tmp, &S_sum, G); EG(ret, err); + /* Add P_sum and R_sum */ + ret = prj_pt_add(&Tmp, &Tmp, &W_sum); EG(ret, err); + ret = prj_pt_add(&Tmp, &Tmp, &Y_sum); EG(ret, err); + /* The result should be point at infinity */ + ret = prj_pt_iszero(&Tmp, &iszero); EG(ret, err); + ret = (iszero == 1) ? 0 : -1; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(pub_key0); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(G); + PTR_NULLIFY(W); + PTR_NULLIFY(Y); + + prj_pt_uninit(&W_sum); + prj_pt_uninit(&Y_sum); + prj_pt_uninit(&Tmp); + nn_uninit(&S); + nn_uninit(&S_sum); + nn_uninit(&e); + nn_uninit(&a); + + return ret; +} + + +static int _ecfsdsa_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + nn_src_t q = NULL; + prj_pt_src_t G = NULL; + prj_pt_t W = NULL, Y = NULL; + nn S, a; + nn_t e = NULL; + u8 hash[MAX_DIGEST_SIZE]; + const ec_pub_key *pub_key, *pub_key0; + int ret, iszero, cmp; + prj_pt_src_t pub_key_y; + hash_context h_ctx; + const hash_mapping *hm; + ec_shortw_crv_src_t shortw_curve; + ec_alg_type key_type = UNKNOWN_ALG; + bitcnt_t p_bit_len, q_bit_len = 0; + u8 p_len, q_len; + u16 hsize; + u32 i; + /* NN numbers and points pointers */ + verify_batch_scratch_pad *elements = scratch_pad_area; + u64 expected_len; + + S.magic = a.magic = WORD(0); + + FORCE_USED_VAR(adata_len); + FORCE_USED_VAR(adata); + + /* First, some sanity checks */ + MUST_HAVE((s != NULL) && (pub_keys != NULL) && (m != NULL), ret, err); + + MUST_HAVE((scratch_pad_area_len != NULL), ret, err); + MUST_HAVE(((2 * num) >= num), ret, err); + MUST_HAVE(((2 * num) + 1) >= num, ret, err); + + /* Zeroize buffers */ + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* In oder to apply the algorithm, we must have at least two + * elements to verify. If this is not the case, we fallback to + * the regular "no memory" version. + */ + if(num <= 1){ + if(scratch_pad_area == NULL){ + /* We do not require any memory in this case */ + (*scratch_pad_area_len) = 0; + ret = 0; + goto err; + } + else{ + ret = _ecfsdsa_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); + goto err; + } + } + + expected_len = ((2 * num) + 1) * sizeof(verify_batch_scratch_pad); + MUST_HAVE((expected_len < 0xffffffff), ret, err); + + if(scratch_pad_area == NULL){ + /* Return the needed size: we need to keep track of (2 * num) + 1 NN numbers + * and (2 * num) + 1 projective points, plus (2 * num) + 1 indices + */ + (*scratch_pad_area_len) = (u32)expected_len; + ret = 0; + goto err; + } + else{ + MUST_HAVE((*scratch_pad_area_len) >= expected_len, ret, err); + } + + pub_key0 = pub_keys[0]; + MUST_HAVE((pub_key0 != NULL), ret, err); + + /* Get our hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + hsize = hm->digest_size; + MUST_HAVE((hm != NULL), ret, err); + + for(i = 0; i < num; i++){ + u8 siglen; + const u8 *sig = NULL; + + ret = pub_key_check_initialized_and_type(pub_keys[i], ECFSDSA); EG(ret, err); + + /* Make things more readable */ + pub_key = pub_keys[i]; + + /* Sanity check that all our public keys have the same parameters */ + MUST_HAVE((pub_key->params) == (pub_key0->params), ret, err); + + q = &(pub_key->params->ec_gen_order); + shortw_curve = &(pub_key->params->ec_curve); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + G = &(pub_key->params->ec_gen); + p_bit_len = pub_key->params->ec_fp.p_bitlen; + q_bit_len = pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + q_len = (u8)BYTECEIL(q_bit_len); + + /* Check given signature length is the expected one */ + siglen = s_len[i]; + sig = s[i]; + MUST_HAVE((siglen == ECFSDSA_SIGLEN(p_bit_len, q_bit_len)), ret, err); + MUST_HAVE((siglen == (ECFSDSA_R_LEN(p_bit_len) + ECFSDSA_S_LEN(q_bit_len))), ret, err); + + /* Check the key type versus the algorithm */ + MUST_HAVE((key_type == sig_type), ret, err); + + if(i == 0){ + /* Initialize our sums to zero/point at infinity */ + ret = nn_init(&a, 0); EG(ret, err); + ret = nn_init(&elements[(2 * num)].number, 0); EG(ret, err); + ret = prj_pt_copy(&elements[(2 * num)].point, G); EG(ret, err); + } + + /* Get a pseudo-random scalar a for randomizing the linear combination */ + ret = nn_get_random_mod(&a, q); EG(ret, err); + + /***************************************************/ + /* Extract s */ + ret = nn_init_from_buf(&S, &sig[2 * p_len], q_len); EG(ret, err); + ret = nn_cmp(&S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + dbg_nn_print("s", &S); + + /***************************************************/ + /* Add S to the sum */ + /* Multiply S by a */ + ret = nn_mod_mul(&S, &a, &S, q); EG(ret, err); + ret = nn_mod_add(&elements[(2 * num)].number, &elements[(2 * num)].number, + &S, q); EG(ret, err); + + /***************************************************/ + /* Compute Y */ + Y = &elements[num + i].point; + /* Copy the public key point to work on the unique + * affine representative. + */ + ret = prj_pt_copy(Y, pub_key_y); EG(ret, err); + ret = prj_pt_unique(Y, Y); EG(ret, err); + dbg_ec_point_print("Y", Y); + + /* Compute e */ + e = &elements[num + i].number; + ret = nn_init(e, 0); EG(ret, err); + ret = hm->hfunc_init(&h_ctx); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, &sig[0], (u32)(2 * p_len)); EG(ret, err); + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx, hash); EG(ret, err); + + ret = nn_init_from_buf(e, hash, hsize); EG(ret, err); + ret = nn_mod(e, e, q); EG(ret, err); + ret = nn_mod_neg(e, e, q); EG(ret, err); + + dbg_nn_print("e", e); + + /* Multiply e by 'a' */ + ret = nn_mod_mul(e, e, &a, q); EG(ret, err); + + /***************************************************/ + W = &elements[i].point; + /* Compute W from rx and ry */ + ret = prj_pt_import_from_aff_buf(W, &sig[0], (u16)(2 * p_len), shortw_curve); EG(ret, err); + ret = nn_init(&elements[i].number, 0); EG(ret, err); + ret = nn_copy(&elements[i].number, &a); EG(ret, err); + ret = nn_mod_neg(&elements[i].number, &elements[i].number, q); EG(ret, err); + dbg_ec_point_print("W", W); + } + + /* Sanity check */ + MUST_HAVE((q != NULL) && (G != NULL) && (q_bit_len != 0), ret, err); + + /********************************************/ + /****** Bos-Coster algorithm ****************/ + ret = ec_verify_bos_coster(elements, (2 * num) + 1, q_bit_len); + if(ret){ + if(ret == -2){ + /* In case of Bos-Coster time out, we fall back to the + * slower regular batch verification. + */ + ret = _ecfsdsa_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + } + goto err; + } + + + /* The first element should contain the sum: it should + * be equal to zero. Reject the signature if this is not + * the case. + */ + ret = prj_pt_iszero(&elements[elements[0].index].point, &iszero); EG(ret, err); + ret = iszero ? 0 : -1; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(e); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(pub_key0); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(G); + PTR_NULLIFY(W); + PTR_NULLIFY(Y); + + nn_uninit(&S); + nn_uninit(&a); + + return ret; +} + + +int ecfsdsa_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + int ret; + + if(scratch_pad_area != NULL){ + MUST_HAVE((scratch_pad_area_len != NULL), ret, err); + ret = _ecfsdsa_verify_batch(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len, + scratch_pad_area, scratch_pad_area_len); EG(ret, err); + + } + else{ + ret = _ecfsdsa_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + } + +err: + return ret; +} + + +#else /* WITH_SIG_ECFSDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECFSDSA */ diff --git a/crypto/libecc/src/sig/ecgdsa.c b/crypto/libecc/src/sig/ecgdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecgdsa.c @@ -0,0 +1,621 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECGDSA + +#include +#include +#include +#include + +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECGDSA" +#endif +#include + +int ecgdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + prj_pt_src_t G; + nn_src_t q; + nn xinv; + int ret, cmp; + xinv.magic = WORD(0); + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, ECGDSA); EG(ret, err); + q = &(in_priv->params->ec_gen_order); + + /* Sanity check on key */ + MUST_HAVE((!nn_cmp(&(in_priv->x), q, &cmp)) && (cmp < 0), ret, err); + + /* Y = (x^-1)G */ + G = &(in_priv->params->ec_gen); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&xinv, &(in_priv->x), &(in_priv->params->ec_gen_order)); EG(ret, err); + /* Use blinding with scalar_b when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &xinv, G); EG(ret, err); + + out_pub->key_type = ECGDSA; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + nn_uninit(&xinv); + + return ret; +} + +int ecgdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + + (*siglen) = (u8)ECGDSA_SIGLEN(q_bit_len); + + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* EC-GDSA signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-GDSA signature process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - EC-GDSA signature + *| + *| UF 1. Compute h = H(m). If |h| > bitlen(q), set h to bitlen(q) + *| leftmost (most significant) bits of h + *| F 2. Compute e = - OS2I(h) mod q + *| F 3. Get a random value k in ]0,q[ + *| F 4. Compute W = (W_x,W_y) = kG + *| F 5. Compute r = W_x mod q + *| F 6. If r is 0, restart the process at step 4. + *| F 7. Compute s = x(kr + e) mod q + *| F 8. If s is 0, restart the process at step 4. + *| F 9. Return (r,s) + * + * Implementation notes: + * + * a) Usually (this is for instance the case in ISO 14888-3 and X9.62), the + * process starts with steps 4 to 7 and is followed by steps 1 to 3. + * The order is modified here w/o impact on the result and the security + * in order to allow the algorithm to be compatible with an + * init/update/finish API. More explicitly, the generation of k, which + * may later result in a (unlikely) restart of the whole process is + * postponed until the hash of the message has been computed. + * b) sig is built as the concatenation of r and s. Both r and s are + * encoded on ceil(bitlen(q)/8) bytes. + * c) in EC-GDSA, the public part of the key is not needed per se during the + * signature but - as it is needed in other signature algs implemented + * in the library - the whole key pair is passed instead of just the + * private key. + */ + +#define ECGDSA_SIGN_MAGIC ((word_t)(0xe2f60ea3353ecc9eULL)) +#define ECGDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECGDSA_SIGN_MAGIC), ret, err) + +int _ecgdsa_sign_init(struct ec_sign_context *ctx) +{ + int ret; + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, ECGDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* + * Initialize hash context stored in our private part of context + * and record data init has been done + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.ecgdsa.h_ctx)); EG(ret, err); + + ctx->sign_data.ecgdsa.magic = ECGDSA_SIGN_MAGIC; + +err: + return ret; +} + +int _ecgdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-GDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECGDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecgdsa), ret, err); + + /* 1. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecgdsa.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int _ecgdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + nn_src_t q, x; + u8 e_buf[MAX_DIGEST_SIZE]; + const ec_priv_key *priv_key; + prj_pt_src_t G; + u8 hsize, r_len, s_len; + bitcnt_t q_bit_len, p_bit_len, rshift; + prj_pt kG; + int ret, cmp, iszero; + nn tmp, s, e, kr, k, r; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif + + tmp.magic = s.magic = e.magic = WORD(0); + kr.magic = k.magic = r.magic = WORD(0); + kG.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-GDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECGDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecgdsa), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + x = &(priv_key->x); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + p_bit_len = priv_key->params->ec_fp.p_bitlen; + MUST_HAVE(((u32)BYTECEIL(p_bit_len) <= NN_MAX_BYTE_LEN), ret, err); + r_len = (u8)ECGDSA_R_LEN(q_bit_len); + s_len = (u8)ECGDSA_S_LEN(q_bit_len); + hsize = ctx->h->digest_size; + + /* Sanity check */ + ret = nn_cmp(x, q, &cmp); EG(ret, err); + /* This should not happen and means that our + * private key is not compliant! + */ + MUST_HAVE((cmp < 0), ret, err); + + MUST_HAVE((siglen == ECGDSA_SIGLEN(q_bit_len)), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", G); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* 1. Compute h = H(m) */ + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.ecgdsa.h_ctx), e_buf); EG(ret, err); + dbg_buf_print("H(m)", e_buf, hsize); + + /* + * If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + ret = nn_init_from_buf(&tmp, e_buf, hsize); EG(ret, err); + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&tmp, &tmp, rshift); EG(ret, err); + } + dbg_nn_print("H(m) truncated as nn", &tmp); + + /* + * 2. Convert h to an integer and then compute e = -h mod q, + * i.e. compute e = - OS2I(h) mod q + * + * Because we only support positive integers, we compute + * e = q - (h mod q) (except when h is 0). + */ + ret = nn_mod(&tmp, &tmp, q); EG(ret, err); + ret = nn_mod_neg(&e, &tmp, q); EG(ret, err); + + restart: + /* 3. Get a random value k in ]0,q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE(ctx->rand == nn_get_random_mod, ret, err); +#endif + MUST_HAVE(ctx->rand != NULL, ret, err); + + ret = ctx->rand(&k, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, e and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + /* 4. Compute W = kG = (Wx, Wy) */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 5. Compute r = Wx mod q */ + ret = nn_mod(&r, &(kG.X.fp_val), q); EG(ret, err); + dbg_nn_print("r", &r); + + /* 6. If r is 0, restart the process at step 4. */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* Export r */ + ret = nn_export_to_buf(sig, r_len, &r); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Blind e and r with b */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* 7. Compute s = x(kr + e) mod q */ + ret = nn_mod_mul(&kr, &k, &r, q); EG(ret, err); + ret = nn_mod_add(&tmp, &kr, &e, q); EG(ret, err); + ret = nn_mod_mul(&s, x, &tmp, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind s */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif + dbg_nn_print("s", &s); + + /* 8. If s is 0, restart the process at step 4. */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* 9. Return (r,s) */ + ret = nn_export_to_buf(sig + r_len, s_len, &s); + + err: + nn_uninit(&tmp); + nn_uninit(&s); + nn_uninit(&e); + nn_uninit(&kr); + nn_uninit(&k); + nn_uninit(&r); + prj_pt_uninit(&kG); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecgdsa), 0, sizeof(ecgdsa_sign_data))); + } + + /* Clean what remains on the stack */ + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(hsize); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + + return ret; +} + +/* + * Generic *internal* EC-GDSA verification functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * their output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-GDSA verification process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - EC-GDSA verification + *| + *| I 1. Reject the signature if r or s is 0. + *| UF 2. Compute h = H(m). If |h| > bitlen(q), set h to bitlen(q) + *| leftmost (most significant) bits of h + *| F 3. Compute e = OS2I(h) mod q + *| F 4. Compute u = ((r^-1)e mod q) + *| F 5. Compute v = ((r^-1)s mod q) + *| F 6. Compute W' = uG + vY + *| F 7. Compute r' = W'_x mod q + *| F 8. Accept the signature if and only if r equals r' + * + */ + +#define ECGDSA_VERIFY_MAGIC ((word_t)(0xd4da37527288d1b6ULL)) +#define ECGDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECGDSA_VERIFY_MAGIC), ret, err) + +int _ecgdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + u8 r_len, s_len; + bitcnt_t q_bit_len; + nn_src_t q; + nn *s, *r; + int ret, iszero1, iszero2, cmp1, cmp2; + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, ECGDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + r = &(ctx->verify_data.ecgdsa.r); + s = &(ctx->verify_data.ecgdsa.s); + r_len = (u8)ECGDSA_R_LEN(q_bit_len); + s_len = (u8)ECGDSA_S_LEN(q_bit_len); + + /* Check given signature length is the expected one */ + MUST_HAVE((siglen == ECGDSA_SIGLEN(q_bit_len)), ret, err); + + /* 1. Reject the signature if r or s is 0. */ + + /* Let's first import r, the x coordinates of the point reduced mod q */ + ret = nn_init_from_buf(r, sig, r_len); EG(ret, err); + + /* Import s as a nn */ + ret = nn_init_from_buf(s, sig + r_len, s_len); EG(ret, err); + + /* Check that r and s are both in ]0,q[ */ + ret = nn_iszero(s, &iszero1); EG(ret, err); + ret = nn_iszero(r, &iszero2); EG(ret, err); + ret = nn_cmp(s, q, &cmp1); EG(ret, err); + ret = nn_cmp(r, q, &cmp2); EG(ret, err); + + MUST_HAVE((!iszero1) && (cmp1 < 0) && (!iszero2) && (cmp2 < 0), ret, err); + + /* Initialize the remaining of verify context */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.ecgdsa.h_ctx)); EG(ret, err); + + ctx->verify_data.ecgdsa.magic = ECGDSA_VERIFY_MAGIC; + + err: + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + PTR_NULLIFY(q); + PTR_NULLIFY(s); + PTR_NULLIFY(r); + + return ret; +} + +int _ecgdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-GDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECGDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecgdsa), ret, err); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecgdsa.h_ctx), chunk, + chunklen); + +err: + return ret; +} + +int _ecgdsa_verify_finalize(struct ec_verify_context *ctx) +{ + nn e, r_prime, rinv, uv, *r, *s; + prj_pt uG, vY; + prj_pt_t Wprime; + prj_pt_src_t G, Y; + u8 e_buf[MAX_DIGEST_SIZE]; + nn_src_t q; + u8 hsize; + bitcnt_t q_bit_len, rshift; + int ret, cmp; + + e.magic = r_prime.magic = WORD(0); + rinv.magic = uv.magic = WORD(0); + uG.magic = vY.magic = WORD(0); + + /* NOTE: we reuse uG for Wprime to optimize local variables */ + Wprime = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-GDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECGDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecgdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + r = &(ctx->verify_data.ecgdsa.r); + s = &(ctx->verify_data.ecgdsa.s); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + hsize = ctx->h->digest_size; + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.ecgdsa.h_ctx), e_buf); EG(ret, err); + dbg_buf_print("H(m)", e_buf, hsize); + + /* + * If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + ret = nn_init_from_buf(&e, e_buf, hsize); EG(ret, err); + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&e, &e, rshift); EG(ret, err); + } + dbg_nn_print("H(m) truncated as nn", &e); + + /* 3. Compute e by converting h to an integer and reducing it mod q */ + ret = nn_mod(&e, &e, q); EG(ret, err); + + /* 4. Compute u = (r^-1)e mod q */ + ret = nn_modinv(&rinv, r, q); EG(ret, err); /* r^-1 */ + ret = nn_mod_mul(&uv, &rinv, &e, q); EG(ret, err); + ret = prj_pt_mul(&uG, &uv, G); EG(ret, err); + + /* 5. Compute v = (r^-1)s mod q */ + ret = nn_mod_mul(&uv, &rinv, s, q); EG(ret, err); + ret = prj_pt_mul(&vY, &uv, Y); EG(ret, err); + + /* 6. Compute W' = uG + vY */ + ret = prj_pt_add(Wprime, &uG, &vY); EG(ret, err); + + /* 7. Compute r' = W'_x mod q */ + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + dbg_nn_print("W'_x", &(Wprime->X.fp_val)); + dbg_nn_print("W'_y", &(Wprime->Y.fp_val)); + ret = nn_mod(&r_prime, &(Wprime->X.fp_val), q); EG(ret, err); + + /* 8. Accept the signature if and only if r equals r' */ + ret = nn_cmp(r, &r_prime, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + +err: + nn_uninit(&e); + nn_uninit(&r_prime); + nn_uninit(&rinv); + nn_uninit(&uv); + prj_pt_uninit(&uG); + prj_pt_uninit(&vY); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecgdsa), 0, + sizeof(ecgdsa_verify_data))); + } + + PTR_NULLIFY(Wprime); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + VAR_ZEROIFY(hsize); + + return ret; +} + +#else /* WITH_SIG_ECGDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECGDSA */ diff --git a/crypto/libecc/src/sig/eckcdsa.c b/crypto/libecc/src/sig/eckcdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/eckcdsa.c @@ -0,0 +1,841 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECKCDSA + +#include +#include +#include + +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECKCDSA" +#endif +#include + +/* + * Initialize public key 'out_pub' from input private key 'in_priv'. The + * function returns 0 on success, -1 on error. + */ +int eckcdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + prj_pt_src_t G; + int ret, cmp; + nn xinv; + nn_src_t q; + xinv.magic = WORD(0); + + MUST_HAVE((out_pub != NULL), ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, ECKCDSA); EG(ret, err); + + /* For readability in the remaining of the function */ + q = &(in_priv->params->ec_gen_order); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + /* Sanity check on key */ + MUST_HAVE((!nn_cmp(&(in_priv->x), q, &cmp)) && (cmp < 0), ret, err); + + /* Y = (x^-1)G */ + G = &(in_priv->params->ec_gen); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&xinv, &(in_priv->x), q); EG(ret, err); + + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &xinv, G); EG(ret, err); + + out_pub->key_type = ECKCDSA; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + nn_uninit(&xinv); + + return ret; +} + +/* + * Helper providing ECKCDSA signature length when exported to a buffer based on + * hash algorithm digest and block size, generator point order bit length, and + * underlying prime field order bit length. The function returns 0 on success, + * -1 on error. On success, signature length is provided via 'siglen' out + * parameter. + */ +int eckcdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && + (blocksize <= MAX_BLOCK_SIZE), ret, err); + + (*siglen) = (u8)ECKCDSA_SIGLEN(hsize, q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * ISO 14888-3:2016 has some insane specific case when the digest size + * (gamma) is larger than beta, the bit length of q (i.e. hsize > + * bitlen(q), i.e. gamma > beta). In that case, both the values of h + * (= H(z||m)) and r (= H(FE2OS(W_x))) must be post-processed/mangled + * in the following way: + * + * - h = I2BS(beta', (BS2I(gamma, h))) mod 2^beta' + * - r = I2BS(beta', (BS2I(gamma, r))) mod 2^beta' + * + * where beta' = 8 * ceil(beta / 8) + * + * There are two things to consider before implementing those steps + * using various conversions to/from nn, shifting and masking: + * + * - the expected post-processing work is simply clearing the first + * (gamma - beta') bits at the beginning of h and r to keep only + * last beta ones unmodified. + * - In the library, we do not work on bitstring but byte strings in + * all cases + * - In EC-KCDSA sig/verif, the result (h and then r) are then XORed + * together and then converted to an integer (the buffer being + * considered in big endian order) + * + * For that reason, this function simply takes a buffer 'buf' of + * 'buflen' bytes and shifts it 'shift' bytes to the left, clearing + * the trailing 'shift' bytes at the end of the buffer. The function + * is expected to be used with 'shift' parameter set to + * (gamma - beta') / 8. + * + * This is better presented on an example: + * + * shift = (gamma - beta') / 8 = 4 + * before: buf = { 0xff, 0xff, 0xff, 0x12, 0x34, 0x56, 0x78} + * after : buf = { 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00} + */ +ATTRIBUTE_WARN_UNUSED_RET static int buf_lshift(u8 *buf, u8 buflen, u8 shift) +{ + u8 i; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + + if (shift > buflen) { + shift = buflen; + } + + /* Start by shifting all trailing bytes to the left ... */ + for (i = shift; i < buflen; i++) { + buf[i - shift] = buf[i]; + } + + /* Let's now zeroize the end of the buffer ... */ + for (i = 1; i <= shift; i++) { + buf[buflen - i] = 0; + } + + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* EC-KCDSA signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-KCDSA signature process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - EC-KCDSA signature + *| + *| IUF 1. Compute h = H(z||m) + *| F 2. If |H| > bitlen(q), set h to beta' rightmost bits of + *| bitstring h (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + *| set h to I2BS(beta', BS2I(|H|, h) mod 2^beta') + *| F 3. Get a random value k in ]0,q[ + *| F 4. Compute W = (W_x,W_y) = kG + *| F 5. Compute r = H(FE2OS(W_x)). + *| F 6. If |H| > bitlen(q), set r to beta' rightmost bits of + *| bitstring r (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + *| set r to I2BS(beta', BS2I(|H|, r) mod 2^beta') + *| F 7. Compute e = OS2I(r XOR h) mod q + *| F 8. Compute s = x(k - e) mod q + *| F 9. if s == 0, restart at step 3. + *| F 10. return (r,s) + * + */ + +#define ECKCDSA_SIGN_MAGIC ((word_t)(0x45503fcf5114bf1eULL)) +#define ECKCDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECKCDSA_SIGN_MAGIC), ret, err) + +/* + * ECKCDSA signature initialization function. Returns 0 on success, -1 on + * error. + */ +int _eckcdsa_sign_init(struct ec_sign_context *ctx) +{ + u8 tmp_buf[LOCAL_MAX(2 * BYTECEIL(CURVES_MAX_P_BIT_LEN), MAX_BLOCK_SIZE)]; + const ec_pub_key *pub_key; + aff_pt y_aff; + u8 p_len; + u16 z_len; + int ret; + y_aff.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, ECKCDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* Make things more readable */ + pub_key = &(ctx->key_pair->pub_key); + p_len = (u8)BYTECEIL(pub_key->params->ec_fp.p_bitlen); + z_len = ctx->h->block_size; + + /* + * 1. Compute h = H(z||m) + * + * We first need to compute z, the certificate data that will be + * prepended to the message m prior to hashing. In ISO-14888-3:2016, + * z is basically the concatenation of Yx and Yy (the affine coordinates + * of the public key Y) up to the block size of the hash function. + * If the concatenation of those coordinates is smaller than blocksize, + * 0 are appended. + * + * So, we convert the public key point to its affine representation and + * concatenate the two coordinates in a temporary (zeroized) buffer, of + * which the first z_len (i.e. blocksize) bytes are exported to z. + * + * Message m will be handled during following update() calls. + */ + ret = prj_pt_to_aff(&y_aff, &(pub_key->y)); EG(ret, err); + ret = local_memset(tmp_buf, 0, sizeof(tmp_buf)); EG(ret, err); + ret = fp_export_to_buf(tmp_buf, p_len, &(y_aff.x)); EG(ret, err); + ret = fp_export_to_buf(tmp_buf + p_len, p_len, &(y_aff.y)); EG(ret, err); + + dbg_pub_key_print("Y", pub_key); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.eckcdsa.h_ctx)); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.eckcdsa.h_ctx), tmp_buf, z_len); EG(ret, err); + ret = local_memset(tmp_buf, 0, sizeof(tmp_buf)); EG(ret, err); + + /* Initialize data part of the context */ + ctx->sign_data.eckcdsa.magic = ECKCDSA_SIGN_MAGIC; + + err: + aff_pt_uninit(&y_aff); + + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(z_len); + PTR_NULLIFY(pub_key); + + return ret; +} + +/* ECKCDSA signature update function. Returns 0 on success, -1 on error. */ +int _eckcdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-KCDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECKCDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.eckcdsa), ret, err); + + /* 1. Compute h = H(z||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.eckcdsa.h_ctx), chunk, chunklen); + +err: + return ret; +} + +/* + * ECKCDSA signature finalization function. Returns 0 on success, -1 on + * error. + */ +int _eckcdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + prj_pt_src_t G; + nn_src_t q, x; + prj_pt kG; + unsigned int i; + nn e, tmp, s, k; + u8 hzm[MAX_DIGEST_SIZE]; + u8 r[MAX_DIGEST_SIZE]; + u8 tmp_buf[BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + hash_context r_ctx; + const ec_priv_key *priv_key; + u8 p_len, r_len, s_len, hsize, shift; + bitcnt_t q_bit_len; + int ret, iszero, cmp; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + + kG.magic = WORD(0); + e.magic = tmp.magic = s.magic = k.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-KCDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECKCDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.eckcdsa), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + hsize = ctx->h->digest_size; + p_len = (u8)BYTECEIL(priv_key->params->ec_fp.p_bitlen); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + r_len = (u8)ECKCDSA_R_LEN(hsize, q_bit_len); + s_len = (u8)ECKCDSA_S_LEN(q_bit_len); + x = &(priv_key->x); + + /* Sanity check */ + ret = nn_cmp(x, q, &cmp); EG(ret, err); + /* This should not happen and means that our + * private key is not compliant! + */ + MUST_HAVE((cmp < 0), ret, err); + + MUST_HAVE((siglen == ECKCDSA_SIGLEN(hsize, q_bit_len)), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", G); + + /* 1. Compute h = H(z||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.eckcdsa.h_ctx), hzm); EG(ret, err); + dbg_buf_print("h = H(z||m) pre-mask", hzm, hsize); + + /* + * 2. If |H| > bitlen(q), set h to beta' rightmost bits of + * bitstring h (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + * set h to I2BS(beta', BS2I(|H|, h) mod 2^beta') + */ + shift = (u8)((hsize > r_len) ? (hsize - r_len) : 0); + MUST_HAVE((hsize <= sizeof(hzm)), ret, err); + + ret = buf_lshift(hzm, hsize, shift); EG(ret, err); + dbg_buf_print("h = H(z||m) post-mask", hzm, r_len); + + restart: + /* 3. Get a random value k in ]0,q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE((ctx->rand == nn_get_random_mod), ret, err); +#endif + MUST_HAVE((ctx->rand != NULL), ret, err); + ret = ctx->rand(&k, q); EG(ret, err); + dbg_nn_print("k", &k); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, k and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + /* 4. Compute W = (W_x,W_y) = kG */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 5 Compute r = h(FE2OS(W_x)). */ + ret = local_memset(tmp_buf, 0, sizeof(tmp_buf)); EG(ret, err); + ret = fp_export_to_buf(tmp_buf, p_len, &(kG.X)); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&r_ctx); EG(ret, err); + ret = ctx->h->hfunc_update(&r_ctx, tmp_buf, p_len); EG(ret, err); + ret = ctx->h->hfunc_finalize(&r_ctx, r); EG(ret, err); + ret = local_memset(tmp_buf, 0, p_len); EG(ret, err); + ret = local_memset(&r_ctx, 0, sizeof(hash_context)); EG(ret, err); + + /* + * 6. If |H| > bitlen(q), set r to beta' rightmost bits of + * bitstring r (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + * set r to I2BS(beta', BS2I(|H|, r) mod 2^beta') + */ + dbg_buf_print("r pre-mask", r, hsize); + MUST_HAVE((hsize <= sizeof(r)), ret, err); + + ret = buf_lshift(r, hsize, shift); EG(ret, err); + dbg_buf_print("r post-mask", r, r_len); + + /* 7. Compute e = OS2I(r XOR h) mod q */ + for (i = 0; i < r_len; i++) { + hzm[i] ^= r[i]; + } + ret = nn_init_from_buf(&tmp, hzm, r_len); EG(ret, err); + ret = local_memset(hzm, 0, r_len); EG(ret, err); + ret = nn_mod(&e, &tmp, q); EG(ret, err); + dbg_nn_print("e", &e); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, we compute (k*b - e*b) * x * b^-1 */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* + * 8. Compute s = x(k - e) mod q + * + * This is equivalent to computing s = x(k + (q - e)) mod q. + * This second version avoids checking if k < e before the + * subtraction, because e has already been reduced mod q + */ + ret = nn_mod_neg(&tmp, &e, q); EG(ret, err); + ret = nn_mod_add(&tmp, &k, &tmp, q); EG(ret, err); + ret = nn_mod_mul(&s, x, &tmp, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind s with b^-1 */ + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* 9. if s == 0, restart at step 3. */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + dbg_nn_print("s", &s); + + /* 10. return (r,s) */ + ret = local_memcpy(sig, r, r_len); EG(ret, err); + ret = local_memset(r, 0, r_len); EG(ret, err); + ret = nn_export_to_buf(sig + r_len, s_len, &s); + + err: + prj_pt_uninit(&kG); + nn_uninit(&e); + nn_uninit(&tmp); + nn_uninit(&s); + nn_uninit(&k); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif /* USE_SIG_BLINDING */ + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.eckcdsa), 0, sizeof(eckcdsa_sign_data))); + } + + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + VAR_ZEROIFY(i); + PTR_NULLIFY(priv_key); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* + * Generic *internal* EC-KCDSA verification functions (init, update and + * finalize). Their purpose is to allow passing a specific hash function + * (along with its output size) and the random ephemeral key k, so that + * compliance tests against test vectors can be made without ugly hack + * in the code itself. + * + * Global EC-CKDSA verification process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - EC-KCDSA verification + *| + *| I 1. Check the length of r: + *| - if |H| > bitlen(q), r must be of length + *| beta' = 8 * ceil(bitlen(q) / 8) + *| - if |H| <= bitlen(q), r must be of length hsize + *| I 2. Check that s is in ]0,q[ + *| IUF 3. Compute h = H(z||m) + *| F 4. If |H| > bitlen(q), set h to beta' rightmost bits of + *| bitstring h (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + *| set h to I2BS(beta', BS2I(|H|, h) mod 2^beta') + *| F 5. Compute e = OS2I(r XOR h) mod q + *| F 6. Compute W' = sY + eG, where Y is the public key + *| F 7. Compute r' = h(W'x) + *| F 8. If |H| > bitlen(q), set r' to beta' rightmost bits of + *| bitstring r' (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + *| set r' to I2BS(beta', BS2I(|H|, r') mod 2^beta') + *| F 9. Check if r == r' + * + */ + +#define ECKCDSA_VERIFY_MAGIC ((word_t)(0xa836a75de66643aaULL)) +#define ECKCDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECKCDSA_VERIFY_MAGIC), ret, err) + +/* + * ECKCDSA verification finalization function. Returns 0 on success, -1 on error. + */ +int _eckcdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + u8 tmp_buf[LOCAL_MAX(2 * BYTECEIL(CURVES_MAX_P_BIT_LEN), MAX_BLOCK_SIZE)]; + u8 p_len, r_len, s_len, z_len; + bitcnt_t q_bit_len; + const ec_pub_key *pub_key; + aff_pt y_aff; + nn_src_t q; + u8 hsize; + int ret, iszero, cmp; + nn s; + y_aff.magic = s.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, ECKCDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + pub_key = ctx->pub_key; + p_len = (u8)BYTECEIL(pub_key->params->ec_fp.p_bitlen); + q_bit_len = pub_key->params->ec_gen_order_bitlen; + q = &(pub_key->params->ec_gen_order); + hsize = ctx->h->digest_size; + r_len = (u8)ECKCDSA_R_LEN(hsize, q_bit_len); + s_len = (u8)ECKCDSA_S_LEN(q_bit_len); + z_len = ctx->h->block_size; + + /* + * 1. Check the length of r: + * - if |H| > bitlen(q), r must be of length + * beta' = 8 * ceil(bitlen(q) / 8) + * - if |H| <= bitlen(q), r must be of length hsize + * + * As we expect the signature as the concatenation of r and s, the check + * is done by verifying the length of the signature is the expected one. + */ + MUST_HAVE((siglen == ECKCDSA_SIGLEN(hsize, q_bit_len)), ret, err); + + /* 2. Check that s is in ]0,q[ */ + ret = nn_init_from_buf(&s, sig + r_len, s_len); EG(ret, err); + ret = nn_iszero(&s, &iszero); EG(ret, err); + ret = nn_cmp(&s, q, &cmp); EG(ret, err); + MUST_HAVE((!iszero) && (cmp < 0), ret, err); + dbg_nn_print("s", &s); + + /* + * 3. Compute h = H(z||m) + * + * We first need to compute z, the certificate data that will be + * prepended to the message m prior to hashing. In ISO-14888-3:2016, + * z is basically the concatenation of Yx and Yy (the affine coordinates + * of the public key Y) up to the block size of the hash function. + * If the concatenation of those coordinates is smaller than blocksize, + * 0 are appended. + * + * So, we convert the public key point to its affine representation and + * concatenate the two coordinates in a temporary (zeroized) buffer, of + * which the first z_len (i.e. blocksize) bytes are exported to z. + * + * Message m will be handled during following update() calls. + */ + ret = prj_pt_to_aff(&y_aff, &(pub_key->y)); EG(ret, err); + ret = local_memset(tmp_buf, 0, sizeof(tmp_buf)); EG(ret, err); + ret = fp_export_to_buf(tmp_buf, p_len, &(y_aff.x)); EG(ret, err); + ret = fp_export_to_buf(tmp_buf + p_len, p_len, &(y_aff.y)); EG(ret, err); + + dbg_pub_key_print("Y", pub_key); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.eckcdsa.h_ctx)); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.eckcdsa.h_ctx), tmp_buf, + z_len); EG(ret, err); + ret = local_memset(tmp_buf, 0, sizeof(tmp_buf)); EG(ret, err); + + /* + * Initialize the verify context by storing r and s as imported + * from the signature + */ + ret = local_memcpy(ctx->verify_data.eckcdsa.r, sig, r_len); EG(ret, err); + ret = nn_copy(&(ctx->verify_data.eckcdsa.s), &s); EG(ret, err); + + ctx->verify_data.eckcdsa.magic = ECKCDSA_VERIFY_MAGIC; + + err: + aff_pt_uninit(&y_aff); + nn_uninit(&s); + + if (ret && (ctx != NULL)) { + /* + * Signature is invalid. Clear data part of the context. + * This will clear magic and avoid further reuse of the + * whole context. + */ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.eckcdsa), 0, + sizeof(eckcdsa_verify_data))); + } + + /* Let's also clear what remains on the stack */ + PTR_NULLIFY(q); + PTR_NULLIFY(pub_key); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(z_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* ECKCDSA verification update function. Returns 0 on success, -1 on error. */ +int _eckcdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-KCDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECKCDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.eckcdsa), ret, err); + + /* 3. Compute h = H(z||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.eckcdsa.h_ctx), + chunk, chunklen); + +err: + return ret; +} + +/* + * ECKCDSA verification finalization function. Returns 0 on success, -1 on error. + */ +int _eckcdsa_verify_finalize(struct ec_verify_context *ctx) +{ + u8 tmp_buf[BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + bitcnt_t q_bit_len, p_bit_len; + u8 p_len, r_len; + prj_pt sY, eG; + prj_pt_t Wprime; + prj_pt_src_t G, Y; + u8 r_prime[MAX_DIGEST_SIZE]; + const ec_pub_key *pub_key; + hash_context r_prime_ctx; + u8 hzm[MAX_DIGEST_SIZE]; + unsigned int i; + nn_src_t q; + nn e, tmp; + u8 hsize, shift; + int ret, check; + u8 *r; + nn *s; + + sY.magic = eG.magic = WORD(0); + e.magic = tmp.magic = WORD(0); + + /* NOTE: we reuse eG for Wprime to optimize local variables */ + Wprime = &eG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-KCDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECKCDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.eckcdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&sY, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&eG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + pub_key = ctx->pub_key; + G = &(pub_key->params->ec_gen); + Y = &(pub_key->y); + q = &(pub_key->params->ec_gen_order); + p_bit_len = pub_key->params->ec_fp.p_bitlen; + q_bit_len = pub_key->params->ec_gen_order_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + hsize = ctx->h->digest_size; + r_len = (u8)ECKCDSA_R_LEN(hsize, q_bit_len); + r = ctx->verify_data.eckcdsa.r; + s = &(ctx->verify_data.eckcdsa.s); + + /* 3. Compute h = H(z||m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.eckcdsa.h_ctx), hzm); EG(ret, err); + dbg_buf_print("h = H(z||m) pre-mask", hzm, hsize); + + /* + * 4. If |H| > bitlen(q), set h to beta' rightmost bits of + * bitstring h (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + * set h to I2BS(beta', BS2I(|H|, h) mod 2^beta') + */ + shift = (u8)((hsize > r_len) ? (hsize - r_len) : 0); + MUST_HAVE(hsize <= sizeof(hzm), ret, err); + ret = buf_lshift(hzm, hsize, shift); EG(ret, err); + dbg_buf_print("h = H(z||m) post-mask", hzm, r_len); + + /* 5. Compute e = OS2I(r XOR h) mod q */ + for (i = 0; i < r_len; i++) { + hzm[i] ^= r[i]; + } + ret = nn_init_from_buf(&tmp, hzm, r_len); EG(ret, err); + ret = local_memset(hzm, 0, hsize); EG(ret, err); + ret = nn_mod(&e, &tmp, q); EG(ret, err); + + dbg_nn_print("e", &e); + + /* 6. Compute W' = sY + eG, where Y is the public key */ + ret = prj_pt_mul(&sY, s, Y); EG(ret, err); + ret = prj_pt_mul(&eG, &e, G); EG(ret, err); + ret = prj_pt_add(Wprime, &sY, &eG); EG(ret, err); + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + dbg_nn_print("W'_x", &(Wprime->X.fp_val)); + dbg_nn_print("W'_y", &(Wprime->Y.fp_val)); + + /* 7. Compute r' = h(W'x) */ + ret = local_memset(tmp_buf, 0, sizeof(tmp_buf)); EG(ret, err); + ret = fp_export_to_buf(tmp_buf, p_len, &(Wprime->X)); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&r_prime_ctx); EG(ret, err); + ret = ctx->h->hfunc_update(&r_prime_ctx, tmp_buf, p_len); EG(ret, err); + ret = ctx->h->hfunc_finalize(&r_prime_ctx, r_prime); EG(ret, err); + ret = local_memset(tmp_buf, 0, p_len); EG(ret, err); + ret = local_memset(&r_prime_ctx, 0, sizeof(hash_context)); EG(ret, err); + + /* + * 8. If |H| > bitlen(q), set r' to beta' rightmost bits of + * bitstring r' (w/ beta' = 8 * ceil(bitlen(q) / 8)), i.e. + * set r' to I2BS(beta', BS2I(|H|, r') mod 2^beta') + */ + dbg_buf_print("r' pre-mask", r_prime, hsize); + ret = buf_lshift(r_prime, hsize, shift); EG(ret, err); + dbg_buf_print("r' post-mask", r_prime, r_len); + dbg_buf_print("r", r, r_len); + + /* 9. Check if r == r' */ + ret = are_equal(r, r_prime, r_len, &check); EG(ret, err); + ret = check ? 0 : -1; + +err: + prj_pt_uninit(&sY); + prj_pt_uninit(&eG); + nn_uninit(&e); + nn_uninit(&tmp); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.eckcdsa), 0, + sizeof(eckcdsa_verify_data))); + } + + /* Let's also clear what remains on the stack */ + VAR_ZEROIFY(i); + PTR_NULLIFY(Wprime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(p_bit_len); + PTR_NULLIFY(pub_key); + VAR_ZEROIFY(hsize); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + + return ret; +} + +#else /* WITH_SIG_ECKCDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECKCDSA */ diff --git a/crypto/libecc/src/sig/ecosdsa.c b/crypto/libecc/src/sig/ecosdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecosdsa.c @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECOSDSA + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECOSDSA" +#endif +#include + +/* + * Initialize public key 'out_pub' from input private key 'in_priv'. The + * function returns 0 on success, -1 on error. + */ +int ecosdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + return __ecsdsa_init_pub_key(out_pub, in_priv, ECOSDSA); +} + +/* + * Helper providing ECOSDSA signature length when exported to a buffer based on + * hash algorithm digest and block size, generator point order bit length, and + * underlying prime field order bit length. The function returns 0 on success, + * -1 on error. On success, signature length is provided via 'siglen' out + * parameter. + */ +int ecosdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen) +{ + return __ecsdsa_siglen(p_bit_len, q_bit_len, hsize, blocksize, siglen); +} + +/* + * ECOSDSA signature initialization function. Returns 0 on success, -1 on + * error. + */ +int _ecosdsa_sign_init(struct ec_sign_context *ctx) +{ + return __ecsdsa_sign_init(ctx, ECOSDSA, 1); +} + +/* ECOSDSA signature update function. Returns 0 on success, -1 on error. */ +int _ecosdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecsdsa_sign_update(ctx, chunk, chunklen); +} + +/* + * ECOSDSA signature finalization function. Returns 0 on success, -1 on error. + */ +int _ecosdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + return __ecsdsa_sign_finalize(ctx, sig, siglen); +} + +/* ECOSDSA verify initialization function. Returns 0 on success, -1 on error. */ +int _ecosdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + return __ecsdsa_verify_init(ctx, sig, siglen, ECOSDSA, 1); +} + +/* ECOSDSA verify update function. Returns 0 on success, -1 on error. */ +int _ecosdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecsdsa_verify_update(ctx, chunk, chunklen); +} + +/* ECOSDSA verify finalization function. Returns 0 on success, -1 on error. */ +int _ecosdsa_verify_finalize(struct ec_verify_context *ctx) +{ + return __ecsdsa_verify_finalize(ctx); +} + +#else /* WITH_SIG_ECOSDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECOSDSA */ diff --git a/crypto/libecc/src/sig/ecrdsa.c b/crypto/libecc/src/sig/ecrdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecrdsa.c @@ -0,0 +1,623 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECRDSA + +#include +#include +#include + +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECRDSA" +#endif +#include + + +/* + * NOTE: ISO/IEC 14888-3 standard seems to diverge from the existing implementations + * of ECRDSA when treating the message hash, and from the examples of certificates provided + * in RFC 7091 and draft-deremin-rfc4491-bis. While in ISO/IEC 14888-3 it is explicitely asked + * to proceed with the hash of the message as big endian, the RFCs derived from the Russian + * standard expect the hash value to be treated as little endian when importing it as an integer + * (this discrepancy is exhibited and confirmed by test vectors present in ISO/IEC 14888-3, and + * by X.509 certificates present in the RFCs). This seems (to be confirmed) to be a discrepancy of + * ISO/IEC 14888-3 algorithm description that must be fixed there. + * + * In order to be conservative, libecc uses the Russian standard behavior as expected to be in line with + * other implemetations, but keeps the ISO/IEC 14888-3 behavior if forced/asked by the user using + * the USE_ISO14888_3_ECRDSA toggle. This allows to keep backward compatibility with previous versions of the + * library if needed. + * + */ +#ifndef USE_ISO14888_3_ECRDSA +/* Reverses the endiannes of a buffer in place */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _reverse_endianness(u8 *buf, u16 buf_size) +{ + u16 i; + u8 tmp; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + + if(buf_size > 1){ + for(i = 0; i < (buf_size / 2); i++){ + tmp = buf[i]; + buf[i] = buf[buf_size - 1 - i]; + buf[buf_size - 1 - i] = tmp; + } + } + + ret = 0; +err: + return ret; +} +#endif + +int ecrdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + int ret, cmp; + prj_pt_src_t G; + nn_src_t q; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, ECRDSA); EG(ret, err); + q = &(in_priv->params->ec_gen_order); + + /* Sanity check on key */ + MUST_HAVE((!nn_cmp(&(in_priv->x), q, &cmp)) && (cmp < 0), ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = ECRDSA; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +int ecrdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + (*siglen) = (u8)ECRDSA_SIGLEN(q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* EC-RDSA signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-RDSA signature process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - EC-RDSA signature + *| + *| UF 1. Compute h = H(m) + *| F 2. Get a random value k in ]0,q[ + *| F 3. Compute W = (W_x,W_y) = kG + *| F 4. Compute r = W_x mod q + *| F 5. If r is 0, restart the process at step 2. + *| F 6. Compute e = OS2I(h) mod q. If e is 0, set e to 1. + *| NOTE: here, ISO/IEC 14888-3 and RFCs differ in the way e treated. + *| e = OS2I(h) for ISO/IEC 14888-3, or e = OS2I(reversed(h)) when endianness of h + *| is reversed for RFCs. + *| F 7. Compute s = (rx + ke) mod q + *| F 8. If s is 0, restart the process at step 2. + *| F 11. Return (r,s) + * + */ + +#define ECRDSA_SIGN_MAGIC ((word_t)(0xcc97bbc8ada8973cULL)) +#define ECRDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECRDSA_SIGN_MAGIC), ret, err) + +int _ecrdsa_sign_init(struct ec_sign_context *ctx) +{ + int ret; + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, ECRDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* + * Initialize hash context stored in our private part of context + * and record data init has been done + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.ecrdsa.h_ctx)); EG(ret, err); + + ctx->sign_data.ecrdsa.magic = ECRDSA_SIGN_MAGIC; + +err: + return ret; +} + +int _ecrdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-RDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECRDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecrdsa), ret, err); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecrdsa.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int _ecrdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + bitcnt_t q_bit_len, p_bit_len; + const ec_priv_key *priv_key; + u8 h_buf[MAX_DIGEST_SIZE]; + prj_pt_src_t G; + prj_pt kG; + nn_src_t q, x; + u8 hsize, r_len, s_len; + int ret, iszero, cmp; + nn s, rx, ke, k, r, e; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + + kG.magic = WORD(0); + s.magic = rx.magic = ke.magic = WORD(0); + k.magic = r.magic = e.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-RDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECRDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecrdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + p_bit_len = priv_key->params->ec_fp.p_bitlen; + q_bit_len = priv_key->params->ec_gen_order_bitlen; + x = &(priv_key->x); + r_len = (u8)ECRDSA_R_LEN(q_bit_len); + s_len = (u8)ECRDSA_S_LEN(q_bit_len); + hsize = ctx->h->digest_size; + + /* Sanity check */ + ret = nn_cmp(x, q, &cmp); EG(ret, err); + /* This should not happen and means that our + * private key is not compliant! + */ + MUST_HAVE((cmp < 0) && (p_bit_len <= NN_MAX_BIT_LEN) && (siglen == ECRDSA_SIGLEN(q_bit_len)), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + dbg_ec_point_print("G", G); + + restart: + /* 2. Get a random value k in ]0, q[ ... */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE((ctx->rand == nn_get_random_mod), ret, err); +#endif + MUST_HAVE((ctx->rand != NULL), ret, err); + ret = ctx->rand(&k, q); EG(ret, err); + + dbg_nn_print("k", &k); +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, k and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + /* 3. Compute W = kG = (Wx, Wy) */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 4. Compute r = Wx mod q */ + ret = nn_mod(&r, &(kG.X.fp_val), q); EG(ret, err); + + /* 5. If r is 0, restart the process at step 2. */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + dbg_nn_print("r", &r); + + /* Export r */ + ret = nn_export_to_buf(sig, r_len, &r); EG(ret, err); + + /* 6. Compute e = OS2I(h) mod q. If e is 0, set e to 1. */ + ret = local_memset(h_buf, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.ecrdsa.h_ctx), h_buf); EG(ret, err); + dbg_buf_print("H(m)", h_buf, hsize); + /* NOTE: this handles a discrepancy between ISO/IEC 14888-3 and + * Russian standard based RFCs. + */ +#ifndef USE_ISO14888_3_ECRDSA + ret = _reverse_endianness(h_buf, hsize); EG(ret, err); +#endif + ret = nn_init_from_buf(&e, h_buf, hsize); EG(ret, err); + ret = local_memset(h_buf, 0, hsize); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + ret = nn_iszero(&e, &iszero); EG(ret, err); + if (iszero) { + ret = nn_inc(&e, &e); EG(ret, err); + } + dbg_nn_print("e", &e); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, we blind r and e */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Compute s = (rx + ke) mod q */ + ret = nn_mod_mul(&rx, &r, x, q); EG(ret, err); + ret = nn_mod_mul(&ke, &k, &e, q); EG(ret, err); + ret = nn_mod_add(&s, &rx, &ke, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind s */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* If s is 0, restart the process at step 2. */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + dbg_nn_print("s", &s); + + /* Return (r,s) */ + ret = nn_export_to_buf(sig + r_len, s_len, &s); + + err: + prj_pt_uninit(&kG); + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&s); + nn_uninit(&rx); + nn_uninit(&ke); + nn_uninit(&k); + nn_uninit(&r); + nn_uninit(&e); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecrdsa), 0, sizeof(ecrdsa_sign_data))); + } + + /* Clean what remains on the stack */ + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(hsize); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + + return ret; +} + +#define ECRDSA_VERIFY_MAGIC ((word_t)(0xa8e16b7e8180cb9aULL)) +#define ECRDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECRDSA_VERIFY_MAGIC), ret, err) + +/* + * Generic *internal* EC-RDSA verification functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * their output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global EC-RDSA verification process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + *| IUF - EC-RDSA verification + *| + *| UF 1. Check that r and s are both in ]0,q[ + *| F 2. Compute h = H(m) + *| F 3. Compute e = OS2I(h)^-1 mod q + *| NOTE: here, ISO/IEC 14888-3 and RFCs differ in the way e treated. + *| e = OS2I(h) for ISO/IEC 14888-3, or e = OS2I(reversed(h)) when endianness of h + *| is reversed for RFCs. + *| F 4. Compute u = es mod q + *| F 5. Compute v = -er mod q + *| F 6. Compute W' = uG + vY = (W'_x, W'_y) + *| F 7. Compute r' = W'_x mod q + *| F 8. Check r and r' are the same + * + */ + +int _ecrdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + bitcnt_t q_bit_len; + u8 r_len, s_len; + nn_src_t q; + nn s, r; + int ret, iszero1, iszero2, cmp1, cmp2; + s.magic = r.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, ECRDSA); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + r_len = (u8)ECRDSA_R_LEN(q_bit_len); + s_len = (u8)ECRDSA_S_LEN(q_bit_len); + + MUST_HAVE(siglen == ECRDSA_SIGLEN(q_bit_len), ret, err); + + /* 1. Check that r and s are both in ]0,q[ */ + ret = nn_init_from_buf(&r, sig, r_len); EG(ret, err); + ret = nn_init_from_buf(&s, sig + r_len, s_len); EG(ret, err); + ret = nn_iszero(&s, &iszero1); EG(ret, err); + ret = nn_iszero(&r, &iszero2); EG(ret, err); + ret = nn_cmp(&s, q, &cmp1); EG(ret, err); + ret = nn_cmp(&s, q, &cmp2); EG(ret, err); + MUST_HAVE((!iszero1) && (cmp1 < 0) && (!iszero2) && (cmp2 < 0), ret, err); + + /* Initialize the remaining of verify context. */ + ret = nn_copy(&(ctx->verify_data.ecrdsa.r), &r); EG(ret, err); + ret = nn_copy(&(ctx->verify_data.ecrdsa.s), &s); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.ecrdsa.h_ctx)); EG(ret, err); + + ctx->verify_data.ecrdsa.magic = ECRDSA_VERIFY_MAGIC; + + err: + nn_uninit(&s); + nn_uninit(&r); + + /* Clean what remains on the stack */ + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + PTR_NULLIFY(q); + + return ret; +} + +int _ecrdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-RDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECRDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecrdsa), ret, err); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecrdsa.h_ctx), chunk, + chunklen); + +err: + return ret; +} + +int _ecrdsa_verify_finalize(struct ec_verify_context *ctx) +{ + prj_pt_src_t G, Y; + nn_src_t q; + nn h, r_prime, e, v, u; + prj_pt vY, uG; + prj_pt_t Wprime; + u8 h_buf[MAX_DIGEST_SIZE]; + nn *r, *s; + u8 hsize; + int ret, iszero, cmp; + + h.magic = r_prime.magic = e.magic = v.magic = u.magic = WORD(0); + vY.magic = uG.magic = WORD(0); + + /* NOTE: we reuse uG for Wprime to optimize local variables */ + Wprime = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-RDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECRDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecrdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + r = &(ctx->verify_data.ecrdsa.r); + s = &(ctx->verify_data.ecrdsa.s); + hsize = ctx->h->digest_size; + + /* 2. Compute h = H(m) */ + ret = local_memset(h_buf, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.ecrdsa.h_ctx), h_buf); EG(ret, err); + dbg_buf_print("H(m)", h_buf, hsize); + /* NOTE: this handles a discrepancy between ISO/IEC 14888-3 and + * Russian standard based RFCs. + */ +#ifndef USE_ISO14888_3_ECRDSA + ret = _reverse_endianness(h_buf, hsize); EG(ret, err); +#endif + + /* 3. Compute e = OS2I(h)^-1 mod q */ + ret = nn_init_from_buf(&h, h_buf, hsize); EG(ret, err); + ret = local_memset(h_buf, 0, hsize); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); /* h = OS2I(h) mod q */ + ret = nn_iszero(&h, &iszero); EG(ret, err); + if (iszero) { /* If h is equal to 0, set it to 1 */ + ret = nn_inc(&h, &h); EG(ret, err); + } + ret = nn_modinv(&e, &h, q); EG(ret, err); /* e = h^-1 mod q */ + + /* 4. Compute u = es mod q */ + ret = nn_mod_mul(&u, &e, s, q); EG(ret, err); + + /* 5. Compute v = -er mod q + * + * Because we only support positive integers, we compute + * v = -er mod q = q - (er mod q) (except when er is 0). + * NOTE: we reuse e for er computation to avoid losing + * a variable. + */ + ret = nn_mod_mul(&e, &e, r, q); EG(ret, err); + ret = nn_mod_neg(&v, &e, q); EG(ret, err); + + /* 6. Compute W' = uG + vY = (W'_x, W'_y) */ + ret = prj_pt_mul(&uG, &u, G); EG(ret, err); + ret = prj_pt_mul(&vY, &v, Y); EG(ret, err); + ret = prj_pt_add(Wprime, &uG, &vY); EG(ret, err); + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + dbg_nn_print("W'_x", &(Wprime->X.fp_val)); + dbg_nn_print("W'_y", &(Wprime->Y.fp_val)); + + /* 7. Compute r' = W'_x mod q */ + ret = nn_mod(&r_prime, &(Wprime->X.fp_val), q); EG(ret, err); + + /* 8. Check r and r' are the same */ + ret = nn_cmp(r, &r_prime, &cmp); EG(ret, err); + ret = (cmp == 0) ? 0 : -1; + +err: + nn_uninit(&h); + nn_uninit(&r_prime); + nn_uninit(&e); + nn_uninit(&v); + nn_uninit(&u); + prj_pt_uninit(&vY); + prj_pt_uninit(&uG); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecrdsa), 0, + sizeof(ecrdsa_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(Wprime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + VAR_ZEROIFY(hsize); + + return ret; +} + +#else /* WITH_SIG_ECRDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECRDSA */ diff --git a/crypto/libecc/src/sig/ecsdsa.c b/crypto/libecc/src/sig/ecsdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecsdsa.c @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#ifdef WITH_SIG_ECSDSA + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECSDSA" +#endif +#include + +/* + * Initialize public key 'out_pub' from input private key 'in_priv'. The + * function returns 0 on success, -1 on error. + */ +int ecsdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + return __ecsdsa_init_pub_key(out_pub, in_priv, ECSDSA); +} + +/* + * Helper providing ECSDSA signature length when exported to a buffer based on + * hash algorithm digest and block size, generator point order bit length, and + * underlying prime field order bit length. The function returns 0 on success, + * -1 on error. On success, signature length is provided via 'siglen' out + * parameter. + */ +int ecsdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen) +{ + return __ecsdsa_siglen(p_bit_len, q_bit_len, hsize, blocksize, siglen); +} + +/* + * ECSDSA signature initialization function. Returns 0 on success, -1 on + * error. + */ +int _ecsdsa_sign_init(struct ec_sign_context *ctx) +{ + return __ecsdsa_sign_init(ctx, ECSDSA, 0); +} + +/* ECSDSA signature update function. Returns 0 on success, -1 on error. */ +int _ecsdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecsdsa_sign_update(ctx, chunk, chunklen); +} + +/* ECSDSA signature finalization function. Returns 0 on success, -1 on error. */ +int _ecsdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + return __ecsdsa_sign_finalize(ctx, sig, siglen); +} + +/* ECSDSA verify initialization function. Returns 0 on success, -1 on error. */ +int _ecsdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + return __ecsdsa_verify_init(ctx, sig, siglen, ECSDSA, 0); +} + +/* ECSDSA verify update function. Returns 0 on success, -1 on error. */ +int _ecsdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + return __ecsdsa_verify_update(ctx, chunk, chunklen); +} + +/* ECSDSA verify finalize function. Returns 0 on success, -1 on error. */ +int _ecsdsa_verify_finalize(struct ec_verify_context *ctx) +{ + return __ecsdsa_verify_finalize(ctx); +} + +#else /* WITH_SIG_ECSDSA */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECSDSA */ diff --git a/crypto/libecc/src/sig/ecsdsa_common.c b/crypto/libecc/src/sig/ecsdsa_common.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/ecsdsa_common.c @@ -0,0 +1,632 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "EC[O]SDSA" +#endif +#include + +/* + * Generic *internal* helper for EC-{,O}SDSA public key initialization + * functions. The function returns 0 on success, -1 on error. + */ +int __ecsdsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv, + ec_alg_type key_type) +{ + prj_pt_src_t G; + int ret; + + MUST_HAVE((out_pub != NULL), ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, key_type); EG(ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + /* Use blinding when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = key_type; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + return ret; +} + +/* + * Generic *internal* helper for EC{,O}SDSA signature length functions. + * It provides signature length when exported to a buffer based on hash + * algorithm digest and block size, generator point order bit length, and + * uderlying prime field order bit length. The function returns 0 on success, + * -1 on error. On success, signature length is provided via 'siglen' out + * parameter. The function returns 0 on success, -1 on error. On success, + * 'siglen' out parameter provides the length of signature fonction. It is + * not meaningful on error. + */ +int __ecsdsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, + u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE(((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE)), + ret, err); + + (*siglen) = (u8)ECSDSA_SIGLEN(hsize, q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Generic *internal* EC-{,O}SDSA signature functions. There purpose is to + * allow passing specific hash functions and the random ephemeral + * key k, so that compliance tests against test vector be made + * without ugly hack in the code itself. + * + * The 'optimized' parameter tells the function if the r value of + * the signature is computed using only the x ccordinate of the + * the user's public key (normal version uses both coordinates). + * + * Normal: r = h(Wx || Wy || m) + * Optimized : r = h(Wx || m) + * + *| IUF - ECSDSA/ECOSDSA signature + *| + *| I 1. Get a random value k in ]0, q[ + *| I 2. Compute W = kG = (Wx, Wy) + *| IUF 3. Compute r = H(Wx [|| Wy] || m) + *| - In the normal version (ECSDSA), r = H(Wx || Wy || m). + *| - In the optimized version (ECOSDSA), r = H(Wx || m). + *| F 4. Compute e = OS2I(r) mod q + *| F 5. if e == 0, restart at step 1. + *| F 6. Compute s = (k + ex) mod q. + *| F 7. if s == 0, restart at step 1. + *| F 8. Return (r, s) + * + * In the project, the normal mode is named ECSDSA, the optimized + * one is ECOSDSA. + * + * Implementation note: + * + * In ISO-14888-3, the option is provided to the developer to check + * whether r = 0 and restart the process in that case. Even if + * unlikely to trigger, that check makes a lot of sense because the + * verifier expects a non-zero value for r. In the specification, r + * is a string (r = H(Wx [|| Wy] || m)). But r is used in practice + * - both on the signer and the verifier - after conversion to an + * integer and reduction mod q. The value resulting from that step + * is named e (e = OS2I(r) mod q). The check for the case when r = 0 + * should be replaced by a check for e = 0. This is more conservative + * and what is described above and done below in the implementation. + */ + +#define ECSDSA_SIGN_MAGIC ((word_t)(0x743c03ae409d15c4ULL)) +#define ECSDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && \ + ((A)->magic == ECSDSA_SIGN_MAGIC), ret, err) + +/* + * Generic *internal* helper for EC-{,O}SDSA signature initialization functions. + * The function returns 0 on success, -1 on error. + */ +int __ecsdsa_sign_init(struct ec_sign_context *ctx, + ec_alg_type key_type, int optimized) +{ + u8 Wx[BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + u8 Wy[BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + const ec_priv_key *priv_key; + prj_pt_src_t G; + bitcnt_t p_bit_len; + u8 p_len; + prj_pt kG; + nn_src_t q; + int ret; + nn k; + kG.magic = k.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, key_type); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + p_bit_len = priv_key->params->ec_fp.p_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", G); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* 1. Get a random value k in ]0, q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE((ctx->rand == nn_get_random_mod), ret, err); +#endif + MUST_HAVE((ctx->rand != NULL), ret, err); + ret = ctx->rand(&k, q); EG(ret, err); + dbg_nn_print("k", &k); + + /* 2. Compute W = kG = (Wx, Wy). */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* + * 3. Compute r = H(Wx [|| Wy] || m) + * + * - In the normal version (ECSDSA), r = h(Wx || Wy || m). + * - In the optimized version (ECOSDSA), r = h(Wx || m). + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.ecsdsa.h_ctx)); EG(ret, err); + ret = fp_export_to_buf(Wx, p_len, &(kG.X)); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecsdsa.h_ctx), Wx, p_len); EG(ret, err); + if (!optimized) { + ret = fp_export_to_buf(Wy, p_len, &(kG.Y)); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecsdsa.h_ctx), Wy, + p_len); EG(ret, err); + } + ret = local_memset(Wx, 0, p_len); EG(ret, err); + ret = local_memset(Wy, 0, p_len); EG(ret, err); + + /* Initialize the remaining of sign context. */ + ret = nn_copy(&(ctx->sign_data.ecsdsa.k), &k); EG(ret, err); + ctx->sign_data.ecsdsa.magic = ECSDSA_SIGN_MAGIC; + + err: + prj_pt_uninit(&kG); + nn_uninit(&k); + + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(p_bit_len); + + return ret; +} + +/* + * Generic *internal* helper for EC-{,O}SDSA signature update functions. + * The function returns 0 on success, -1 on error. + */ +int __ecsdsa_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECSDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECSDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecsdsa), ret, err); + + /* 3. Compute r = H(Wx [|| Wy] || m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.ecsdsa.h_ctx), chunk, chunklen); EG(ret, err); + +err: + return ret; +} + +/* + * Generic *internal* helper for EC-{,O}SDSA signature finalization functions. + * The function returns 0 on success, -1 on error. + */ +int __ecsdsa_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + nn_src_t q, x; + nn s, e, ex; + u8 r[MAX_DIGEST_SIZE]; + const ec_priv_key *priv_key; + bitcnt_t q_bit_len; + u8 r_len, s_len; + u8 hsize; + int ret; + int iszero; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + + s.magic = e.magic = ex.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECSDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECSDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecsdsa), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + q = &(priv_key->params->ec_gen_order); + x = &(priv_key->x); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + hsize = ctx->h->digest_size; + r_len = (u8)ECSDSA_R_LEN(hsize); + s_len = (u8)ECSDSA_S_LEN(q_bit_len); + + MUST_HAVE((siglen == ECSDSA_SIGLEN(hsize, q_bit_len)), ret, err); + +#ifdef USE_SIG_BLINDING + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + /* 3. Compute r = H(Wx [|| Wy] || m) */ + ret = local_memset(r, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.ecsdsa.h_ctx), r); EG(ret, err); + + dbg_buf_print("r", r, r_len); + + /* 4. Compute e = OS2I(r) mod q */ + ret = nn_init_from_buf(&e, r, r_len); EG(ret, err); + ret = nn_mod(&e, &e, q); EG(ret, err); + dbg_nn_print("e", &e); + + /* + * 5. if e == 0, restart at step 1. + * + * As we cannot restart at that point (step 1. is in init()), + * we just stop and return an error. + */ + MUST_HAVE(!nn_iszero(&e, &iszero) && !iszero, ret, err); + +#ifdef USE_SIG_BLINDING + /* Blind e with b */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* 6. Compute s = (k + ex) mod q. */ + ret = nn_mod_mul(&ex, x, &e, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Blind k with b */ + ret = nn_mod_mul(&s, &(ctx->sign_data.ecsdsa.k), &b, q); EG(ret, err); + ret = nn_mod_add(&s, &s, &ex, q); EG(ret, err); +#else + ret = nn_mod_add(&s, &(ctx->sign_data.ecsdsa.k), &ex, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + +#ifdef USE_SIG_BLINDING + /* Unblind s */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + dbg_nn_print("s", &s); + + /* + * 7. if s == 0, restart at step 1. + * + * As we cannot restart at that point (step 1. is in init()), + * we just stop and return an error. + */ + MUST_HAVE((!nn_iszero(&s, &iszero)) && (!iszero), ret, err); + + /* 8. Return (r, s) */ + ret = local_memcpy(sig, r, r_len); EG(ret, err); + ret = local_memset(r, 0, r_len); EG(ret, err); + ret = nn_export_to_buf(sig + r_len, s_len, &s); + + err: + nn_uninit(&s); + nn_uninit(&e); + nn_uninit(&ex); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif /* USE_SIG_BLINDING */ + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecsdsa), 0, sizeof(ecsdsa_sign_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(q); + PTR_NULLIFY(x); + PTR_NULLIFY(priv_key); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* local helper for context sanity checks. Returns 0 on success, -1 on error. */ +#define ECSDSA_VERIFY_MAGIC ((word_t)(0x8eac1ff89995bb0aULL)) +#define ECSDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((const void *)(A)) != NULL) && \ + ((A)->magic == ECSDSA_VERIFY_MAGIC), ret, err) + +/* + *| IUF - ECSDSA/ECOSDSA verification + *| + *| I 1. if s is not in ]0,q[, reject the signature. + *| I 2. Compute e = -r mod q + *| I 3. If e == 0, reject the signature. + *| I 4. Compute W' = sG + eY + *| IUF 5. Compute r' = H(W'x [|| W'y] || m) + *| - In the normal version (ECSDSA), r' = H(W'x || W'y || m). + *| - In the optimized version (ECOSDSA), r' = H(W'x || m). + *| F 6. Accept the signature if and only if r and r' are the same + */ + +/* + * Generic *internal* helper for EC-{,O}SDSA verification initialization functions. + * The function returns 0 on success, -1 on error. + */ +int __ecsdsa_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen, + ec_alg_type key_type, int optimized) +{ + prj_pt_src_t G, Y; + const ec_pub_key *pub_key; + nn_src_t q; + nn rmodq, e, r, s; + prj_pt sG, eY; + prj_pt_t Wprime; + u8 Wprimex[BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + u8 Wprimey[BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + u8 p_len, r_len, s_len; + bitcnt_t q_bit_len; + u8 hsize; + int ret, iszero, cmp; + + rmodq.magic = e.magic = r.magic = s.magic = WORD(0); + sG.magic = eY.magic = WORD(0); + + /* NOTE: we reuse sG for Wprime to optimize local variables */ + Wprime = &sG; + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Zero init points */ + ret = local_memset(&sG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&eY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, key_type); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + pub_key = ctx->pub_key; + G = &(pub_key->params->ec_gen); + Y = &(pub_key->y); + q = &(pub_key->params->ec_gen_order); + p_len = (u8)BYTECEIL(pub_key->params->ec_fp.p_bitlen); + q_bit_len = pub_key->params->ec_gen_order_bitlen; + hsize = ctx->h->digest_size; + r_len = (u8)ECSDSA_R_LEN(hsize); + s_len = (u8)ECSDSA_S_LEN(q_bit_len); + + MUST_HAVE((siglen == ECSDSA_SIGLEN(hsize, q_bit_len)), ret, err); + + /* 1. if s is not in ]0,q[, reject the signature. */ + ret = nn_init_from_buf(&s, sig + r_len, s_len); EG(ret, err); + ret = nn_iszero(&s, &iszero); EG(ret, err); + ret = nn_cmp(&s, q, &cmp); EG(ret, err); + MUST_HAVE((!iszero) && (cmp < 0), ret, err); + + /* + * 2. Compute e = -r mod q + * + * To avoid dealing w/ negative numbers, we simply compute + * e = -r mod q = q - (r mod q) (except when r is 0). + */ + ret = nn_init_from_buf(&r, sig, r_len); EG(ret, err); + ret = nn_mod(&rmodq, &r, q); EG(ret, err); + ret = nn_mod_neg(&e, &rmodq, q); EG(ret, err); + + /* 3. If e == 0, reject the signature. */ + ret = nn_iszero(&e, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* 4. Compute W' = sG + eY */ + ret = prj_pt_mul(&sG, &s, G); EG(ret, err); + ret = prj_pt_mul(&eY, &e, Y); EG(ret, err); + ret = prj_pt_add(Wprime, &sG, &eY); EG(ret, err); + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + + /* + * 5. Compute r' = H(W'x [|| W'y] || m) + * + * - In the normal version (ECSDSA), r = h(W'x || W'y || m). + * - In the optimized version (ECOSDSA), r = h(W'x || m). + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.ecsdsa.h_ctx)); EG(ret, err); + ret = fp_export_to_buf(Wprimex, p_len, &(Wprime->X)); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecsdsa.h_ctx), Wprimex, p_len); EG(ret, err); + if (!optimized) { + ret = fp_export_to_buf(Wprimey, p_len, &(Wprime->Y)); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecsdsa.h_ctx), + Wprimey, p_len); EG(ret, err); + } + ret = local_memset(Wprimex, 0, p_len); EG(ret, err); + ret = local_memset(Wprimey, 0, p_len); EG(ret, err); + + /* Initialize the remaining of verify context. */ + ret = local_memcpy(ctx->verify_data.ecsdsa.r, sig, r_len); EG(ret, err); + ret = nn_copy(&(ctx->verify_data.ecsdsa.s), &s); EG(ret, err); + + ctx->verify_data.ecsdsa.magic = ECSDSA_VERIFY_MAGIC; + + err: + nn_uninit(&rmodq); + nn_uninit(&e); + nn_uninit(&r); + nn_uninit(&s); + prj_pt_uninit(&sG); + prj_pt_uninit(&eY); + + /* Clean what remains on the stack */ + PTR_NULLIFY(Wprime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(q); + VAR_ZEROIFY(p_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(hsize); + + return ret; +} + +/* + * Generic *internal* helper for EC-{,O}SDSA verification update functions. + * The function returns 0 on success, -1 on error. + */ +int __ecsdsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECSDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECSDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecsdsa), ret, err); + + /* 5. Compute r' = H(W'x [|| W'y] || m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.ecsdsa.h_ctx), chunk, + chunklen); + +err: + return ret; +} + +/* + * Generic *internal* helper for EC-{,O}SDSA verification finalization + * functions. The function returns 0 on success, -1 on error. + */ +int __ecsdsa_verify_finalize(struct ec_verify_context *ctx) +{ + u8 r_prime[MAX_DIGEST_SIZE]; + u32 r_len; + int ret, check; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECSDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECSDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecsdsa), ret, err); + + r_len = ECSDSA_R_LEN(ctx->h->digest_size); + + /* 5. Compute r' = H(W'x [|| W'y] || m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.ecsdsa.h_ctx), r_prime); EG(ret, err); + + /* 6. Accept the signature if and only if r and r' are the same */ + ret = are_equal(ctx->verify_data.ecsdsa.r, r_prime, r_len, &check); EG(ret, err); + ret = check ? 0 : -1; + +err: + IGNORE_RET_VAL(local_memset(r_prime, 0, sizeof(r_prime))); + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecsdsa), 0, + sizeof(ecsdsa_verify_data))); + } + + /* Clean what remains on the stack */ + VAR_ZEROIFY(r_len); + + return ret; +} + +#else /* (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* (defined(WITH_SIG_ECSDSA) || defined(WITH_SIG_ECOSDSA)) */ diff --git a/crypto/libecc/src/sig/eddsa.c b/crypto/libecc/src/sig/eddsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/eddsa.c @@ -0,0 +1,2935 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) + +/* + * XXX: EdDSA is incompatible with small stack devices for now ... + */ +#if defined(USE_SMALL_STACK) +#error "Error: EDDSA25519 and EDDSA448 are incompatible with USE_SMALL_STACK (devices low on memory)" +#endif + +/* + * Sanity checks on the hash functions and curves depending on the EdDSA variant. + */ +/* EDDSA25519 used SHA-512 as a fixed hash function and WEI25519 as a fixed + * curve. + */ +#if defined(WITH_SIG_EDDSA25519) +#if !defined(WITH_HASH_SHA512) || !defined(WITH_CURVE_WEI25519) +#error "Error: EDDSA25519 needs SHA-512 and WEI25519 to be defined! Please define them in libecc config file" +#endif +#endif +/* EDDSA448 used SHAKE256 as a fixed hash function and WEI448 as a fixed + * curve. + */ +#if defined(WITH_SIG_EDDSA448) +#if !defined(WITH_HASH_SHAKE256) || !defined(WITH_CURVE_WEI448) +#error "Error: EDDSA25519 needs SHAKE256 and WEI448 to be defined! Please define them in libecc config file" +#endif +#endif + +#include +#include +#include +#include +#include +/* Include the "internal" header as we use non public API here */ +#include "../nn/nn_div.h" + + +#include +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "EDDSA" +#endif +#include + + +ATTRIBUTE_WARN_UNUSED_RET static inline int dom(u16 x, const u8 *y, u16 olen_y, const hash_mapping *h, + hash_context *h_ctx, u8 dom_type){ + u8 tmp[2]; + int ret; + + MUST_HAVE((h != NULL) && (h_ctx != NULL), ret, err); + /* Sanity check on ancillary data len, its size must not exceed 255 bytes as per RFC8032 */ + MUST_HAVE((x <= 255) && (olen_y <= 255), ret, err); + + if(dom_type == 2){ + ret = h->hfunc_update(h_ctx, (const u8*)"SigEd25519 no Ed25519 collisions", 32); EG(ret, err); + } + else if(dom_type == 4){ + ret = h->hfunc_update(h_ctx, (const u8*)"SigEd448", 8); EG(ret, err); + } + else{ + ret = -1; + goto err; + } + tmp[0] = (u8)x; + tmp[1] = (u8)olen_y; + ret = h->hfunc_update(h_ctx, tmp, 2); EG(ret, err); + if(y != NULL){ + ret = h->hfunc_update(h_ctx, y, olen_y); EG(ret, err); + } + +err: + return ret; +} + +#if defined(WITH_SIG_EDDSA25519) +/* Helper for dom2(x, y). + * + * See RFC8032: + * + * dom2(x, y) The blank octet string when signing or verifying + * Ed25519. Otherwise, the octet string: "SigEd25519 no + * Ed25519 collisions" || octet(x) || octet(OLEN(y)) || + * y, where x is in range 0-255 and y is an octet string + * of at most 255 octets. "SigEd25519 no Ed25519 + * collisions" is in ASCII (32 octets). + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int dom2(u16 x, const u8 *y, u16 olen_y, const hash_mapping *h, + hash_context *h_ctx){ + return dom(x, y, olen_y, h, h_ctx, 2); +} +#endif /* defined(WITH_SIG_EDDSA25519) */ + +#if defined(WITH_SIG_EDDSA448) +/* Helper for dom4(x, y). + * + * See RFC8032: + * + * dom4(x, y) The octet string "SigEd448" || octet(x) || + * octet(OLEN(y)) || y, where x is in range 0-255 and y + * is an octet string of at most 255 octets. "SigEd448" + * is in ASCII (8 octets). + */ +ATTRIBUTE_WARN_UNUSED_RET static inline int dom4(u16 x, const u8 *y, u16 olen_y, const hash_mapping *h, + hash_context *h_ctx){ + return dom(x, y, olen_y, h, h_ctx, 4); +} +#endif /* defined(WITH_SIG_EDDSA448) */ + +/* EdDSA sanity check on keys. + * EDDSA25519 and variants only support WEI25519 as a curve, and SHA-512 as a hash function. + * EDDSA448 and variants only support WEI448 as a curve, and SHAKE256 as a "hash function". + */ +ATTRIBUTE_WARN_UNUSED_RET static inline hash_alg_type get_eddsa_hash_type(ec_alg_type sig_type){ + hash_alg_type hash_type = UNKNOWN_HASH_ALG; + + switch (sig_type) { +#if defined(WITH_SIG_EDDSA25519) + case EDDSA25519: + case EDDSA25519PH: + case EDDSA25519CTX:{ + hash_type = SHA512; + break; + } +#endif +#if defined(WITH_SIG_EDDSA448) + case EDDSA448: + case EDDSA448PH:{ + hash_type = SHAKE256; + break; + } +#endif + default:{ + hash_type = UNKNOWN_HASH_ALG; + break; + } + } + return hash_type; +} + +/* + * Check given EdDSA key type does match given curve type. Returns 0 on success, + * and -1 on error. + */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_key_type_check_curve(ec_alg_type key_type, + ec_curve_type curve_type) +{ + int ret; + + switch (key_type) { +#if defined(WITH_SIG_EDDSA25519) + case EDDSA25519: + case EDDSA25519PH: + case EDDSA25519CTX:{ + /* Check curve */ + ret = (curve_type == WEI25519) ? 0 : -1; + break; + } +#endif +#if defined(WITH_SIG_EDDSA448) + case EDDSA448: + case EDDSA448PH:{ + /* Check curve */ + ret = (curve_type == WEI448) ? 0 : -1; + break; + } +#endif + default:{ + ret = -1; + break; + } + } + + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_priv_key_sanity_check(const ec_priv_key *in_priv) +{ + int ret; + + ret = priv_key_check_initialized(in_priv); EG(ret, err); + ret = eddsa_key_type_check_curve(in_priv->key_type, + in_priv->params->curve_type); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_pub_key_sanity_check(const ec_pub_key *in_pub) +{ + int ret; + + + ret = pub_key_check_initialized(in_pub); EG(ret, err); + ret = eddsa_key_type_check_curve(in_pub->key_type, + in_pub->params->curve_type); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_key_pair_sanity_check(const ec_key_pair *key_pair) +{ + int ret; + + MUST_HAVE((key_pair != NULL), ret, err); + ret = eddsa_priv_key_sanity_check(&(key_pair->priv_key)); EG(ret, err); + ret = eddsa_pub_key_sanity_check(&(key_pair->pub_key)); EG(ret, err); + MUST_HAVE((key_pair->priv_key.key_type == key_pair->pub_key.key_type), ret, err); + +err: + return ret; +} + +/* + * EdDSA decode an integer from a buffer using little endian format. + */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_decode_integer(nn_t nn_out, const u8 *buf, u16 buf_size) +{ + u16 i; + u8 buf_little_endian[MAX_DIGEST_SIZE]; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + MUST_HAVE((sizeof(buf_little_endian) >= buf_size), ret, err); + + ret = nn_init(nn_out, 0); EG(ret, err); + + ret = local_memset(buf_little_endian, 0, sizeof(buf_little_endian)); EG(ret, err); + if(buf_size > 1){ + /* Inverse endianness of our input buffer */ + for(i = 0; i < buf_size; i++){ + buf_little_endian[i] = buf[buf_size - 1 - i]; + } + } + + /* Compute an integer from the buffer */ + ret = nn_init_from_buf(nn_out, buf_little_endian, buf_size); + +err: + return ret; +} + +/* + * EdDSA encode an integer to a buffer using little endian format. + */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_encode_integer(nn_src_t nn_in, u8 *buf, u16 buf_size) +{ + u16 i; + u8 tmp; + int ret; + bitcnt_t blen; + + MUST_HAVE((buf != NULL), ret, err); + ret = nn_check_initialized(nn_in); EG(ret, err); + + /* Sanity check that we do not lose information */ + ret = nn_bitlen(nn_in, &blen); EG(ret, err); + MUST_HAVE((((u32)blen) <= (8 * (u32)buf_size)), ret, err); + + /* Export the number to our buffer */ + ret = nn_export_to_buf(buf, buf_size, nn_in); EG(ret, err); + + /* Now reverse endianness in place */ + if(buf_size > 1){ + for(i = 0; i < (buf_size / 2); i++){ + tmp = buf[i]; + buf[i] = buf[buf_size - 1 - i]; + buf[buf_size - 1 - i] = tmp; + } + } + +err: + return ret; +} + +/* + * EdDSA encoding of scalar s. + */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_compute_s(nn_t s, const u8 *digest, u16 digest_size) +{ + int ret; + + MUST_HAVE((digest != NULL), ret, err); + MUST_HAVE(((digest_size % 2) == 0), ret, err); + + /* s is half of the digest size encoded in little endian format */ + ret = eddsa_decode_integer(s, digest, (digest_size / 2)); EG(ret, err); + +err: + return ret; +} + +/* Extract the digest from the encoded private key */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_get_digest_from_priv_key(u8 *digest, u8 *digest_size, const ec_priv_key *in_priv) +{ + int ret; + hash_alg_type hash_type; + const hash_mapping *hash; + + MUST_HAVE(((digest != NULL) && (digest_size != NULL)), ret, err); + ret = eddsa_priv_key_sanity_check(in_priv); EG(ret, err); + + MUST_HAVE(((hash_type = get_eddsa_hash_type(in_priv->key_type)) != UNKNOWN_HASH_ALG), ret, err); + ret = get_hash_by_type(hash_type, &hash); EG(ret, err); + MUST_HAVE((hash != NULL), ret, err); + + /* Check real digest size */ + MUST_HAVE(((*digest_size) >= hash->digest_size), ret, err); + + (*digest_size) = hash->digest_size; + ret = nn_export_to_buf(digest, *digest_size, &(in_priv->x)); + +err: + return ret; +} + +/* Encode an Edwards curve affine point in canonical form */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_encode_point(aff_pt_edwards_src_t in, + fp_src_t alpha_edwards, + u8 *buf, u16 buflen, + ec_alg_type sig_alg) +{ + nn out_reduced; + u8 lsb = 0; + int ret; + out_reduced.magic = WORD(0); + + /* Sanity checks */ + MUST_HAVE((buf != NULL), ret, err); + ret = aff_pt_edwards_check_initialized(in); EG(ret, err); + ret = fp_check_initialized(alpha_edwards); EG(ret, err); + + /* Zeroize the buffer */ + ret = local_memset(buf, 0, buflen); EG(ret, err); + ret = nn_init(&out_reduced, 0); EG(ret, err); + + /* Note: we should be reduced modulo Fp for canonical encoding here as + * coordinate elements are in Fp ... + */ +#if defined(WITH_SIG_EDDSA448) + if((sig_alg == EDDSA448) || (sig_alg == EDDSA448PH)){ + /* + * In case of EDDSA448, we apply the 4-isogeny to transfer from + * Ed448 to Edwards448. + * The isogeny maps (x, y) on Ed448 to (x1, y1) on Edwards448 + * using: + * x1 = (4*x*y/c) / (y^2-x^2) + * y1 = (2-x^2-y^2) / (x^2+y^2) = (2 - (x^2+y^2)) / (x^2 + y^2) + * and (0, 1) as well as (0, -1) are mapped to (0, 1) + * We only need to encode our y1 here, but x1 computation is + * unfortunately needed to get its LSB that is necessary for + * the encoding. + */ + fp tmp_x, tmp_y, y1; + tmp_x.magic = tmp_y.magic = y1.magic = WORD(0); + /* Compute x1 to get our LSB */ + ret = fp_init(&y1, in->y.ctx); EG(ret, err1); + ret = fp_copy(&tmp_x, &(in->x)); EG(ret, err1); + ret = fp_sqr(&tmp_x, &tmp_x); EG(ret, err1); + ret = fp_copy(&tmp_y, &(in->y)); EG(ret, err1); + ret = fp_sqr(&tmp_y, &tmp_y); EG(ret, err1); + ret = fp_sub(&tmp_y, &tmp_y, &tmp_x); EG(ret, err1); + /* NOTE: inversion by zero should be caught by lower layers */ + ret = fp_inv(&tmp_y, &tmp_y); EG(ret, err1); + ret = fp_set_word_value(&tmp_x, WORD(4)); EG(ret, err1); + ret = fp_mul(&tmp_x, &tmp_x, &(in->x)); EG(ret, err1); + ret = fp_mul(&tmp_x, &tmp_x, &(in->y)); EG(ret, err1); + ret = fp_mul(&tmp_x, &tmp_x, &tmp_y); EG(ret, err1); + ret = fp_inv(&tmp_y, alpha_edwards); EG(ret, err1); + ret = fp_mul(&tmp_x, &tmp_x, &tmp_y); EG(ret, err1); + ret = nn_getbit(&(tmp_x.fp_val), 0, &lsb); EG(ret, err1); + /* Compute y1 */ + ret = fp_copy(&tmp_x, &(in->x)); EG(ret, err1); + ret = fp_sqr(&tmp_x, &tmp_x); EG(ret, err1); + ret = fp_copy(&tmp_y, &(in->y)); EG(ret, err1); + ret = fp_sqr(&tmp_y, &tmp_y); EG(ret, err1); + ret = fp_set_word_value(&y1, WORD(2)); EG(ret, err1); + ret = fp_sub(&y1, &y1, &tmp_x); EG(ret, err1); + ret = fp_sub(&y1, &y1, &tmp_y); EG(ret, err1); + ret = fp_add(&tmp_x, &tmp_x, &tmp_y); EG(ret, err1); + /* NOTE: inversion by zero should be caught by lower layers */ + ret = fp_inv(&tmp_x, &tmp_x); EG(ret, err1); + ret = fp_mul(&y1, &y1, &tmp_x); EG(ret, err1); + ret = eddsa_encode_integer(&(y1.fp_val), buf, buflen); +err1: + fp_uninit(&tmp_x); + fp_uninit(&tmp_y); + fp_uninit(&y1); + EG(ret, err); + } + else +#endif /* !defined(WITH_SIG_EDDSA448) */ + { /* EDDSA25519 and other cases */ + FORCE_USED_VAR(sig_alg); /* To avoid unused variable error */ + ret = nn_getbit(&(in->x.fp_val), 0, &lsb); EG(ret, err); + ret = eddsa_encode_integer(&(in->y.fp_val), buf, buflen); EG(ret, err); + } + /* + * Now deal with the sign for the last bit: copy the least significant + * bit of the x coordinate in the MSB of the last octet. + */ + MUST_HAVE((buflen > 1), ret, err); + buf[buflen - 1] |= (u8)(lsb << 7); + +err: + nn_uninit(&out_reduced); + + return ret; +} + +/* Decode an Edwards curve affine point from canonical form */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_decode_point(aff_pt_edwards_t out, ec_edwards_crv_src_t edwards_curve, + fp_src_t alpha_edwards, const u8 *buf, u16 buflen, + ec_alg_type sig_type) +{ + fp x, y; + fp sqrt1, sqrt2; + u8 x_0, lsb; + u8 buf_little_endian[MAX_DIGEST_SIZE]; + u16 i; + int ret, iszero; + +#if defined(WITH_SIG_EDDSA448) + fp tmp; + tmp.magic = WORD(0); +#endif + x.magic = y.magic = sqrt1.magic = sqrt2.magic = WORD(0); + + MUST_HAVE((buf != NULL), ret, err); + + ret = ec_edwards_crv_check_initialized(edwards_curve); EG(ret, err); + + ret = fp_check_initialized(alpha_edwards); EG(ret, err); + + /* Extract the sign */ + x_0 = ((buf[buflen - 1] & 0x80) >> 7); + /* Extract the value by reversing endianness */ + MUST_HAVE((sizeof(buf_little_endian) >= buflen), ret, err); + + /* Inverse endianness of our input buffer and mask the sign bit */ + MUST_HAVE((buflen > 1), ret, err); + + for(i = 0; i < buflen; i++){ + buf_little_endian[i] = buf[buflen - 1 - i]; + if(i == 0){ + /* Mask the sign bit */ + buf_little_endian[i] &= 0x7f; + } + } + /* Try to decode the y coordinate */ + ret = fp_init_from_buf(&y, edwards_curve->a.ctx, buf_little_endian, buflen); EG(ret, err); + /* + * If we suceed, try to find our x coordinate that is the square root of + * (y^2 - 1) / (d y^2 + 1) or (y^2 - 1) / (d y^2 - 1) depending on the + * algorithm (EDDSA25519 our EDDSA448). + */ + ret = fp_init(&sqrt1, edwards_curve->a.ctx); EG(ret, err); + ret = fp_init(&sqrt2, edwards_curve->a.ctx); EG(ret, err); + ret = fp_init(&x, edwards_curve->a.ctx); EG(ret, err); +#if defined(WITH_SIG_EDDSA448) + if((sig_type == EDDSA448) || (sig_type == EDDSA448PH)){ + const u8 d_edwards448_buff[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x56 + }; + ec_edwards_crv edwards_curve_edwards448; + + ret = fp_init(&tmp, edwards_curve->a.ctx); EG(ret, err); + /* + * If we deal with EDDSA448 we must handle the point on + * Edwards448 so we use the dedicated d. + */ + ret = fp_init_from_buf(&tmp, edwards_curve->a.ctx, + (const u8*)d_edwards448_buff, sizeof(d_edwards448_buff)); EG(ret, err); + ret = ec_edwards_crv_init(&edwards_curve_edwards448, &(edwards_curve->a), &tmp, &(edwards_curve->order)); EG(ret, err); + /* Compute x from y using the dedicated primitive */ + ret = aff_pt_edwards_x_from_y(&sqrt1, &sqrt2, &y, &edwards_curve_edwards448); EG(ret, err); /* Error or no square root found, this should not happen! */ + ec_edwards_crv_uninit(&edwards_curve_edwards448); + } + else +#endif + { + /* Compute x from y using the dedicated primitive */ + ret = aff_pt_edwards_x_from_y(&sqrt1, &sqrt2, &y, edwards_curve); EG(ret, err); /* Error or no square root found, this should not happen! */ + } + /* Now select the square root of the proper sign */ + ret = nn_getbit(&(sqrt1.fp_val), 0, &lsb); EG(ret, err); + if(lsb == x_0){ + ret = fp_copy(&x, &sqrt1); EG(ret, err); + } + else{ + ret = fp_copy(&x, &sqrt2); EG(ret, err); + } + /* If x = 0 and the sign bit is 1, this is an error */ + ret = fp_iszero(&x, &iszero); EG(ret, err); + MUST_HAVE(!(iszero && (x_0 == 1)), ret, err); + /* + * In case of EDDSA448, we apply the 4-isogeny to transfer from + * Edwards448 to Ed448. + * The isogeny maps (x1, y1) on Edwards448 to (x, y) on Ed448 using: + * x = alpha_edwards * (x1*y1) / (2-x1^2-y1^2) + * y = (x1^2+y1^2) / (y1^2-x1^2) + */ +#if defined(WITH_SIG_EDDSA448) + if((sig_type == EDDSA448) || (sig_type == EDDSA448PH)){ + /* + * Use sqrt1 and sqrt2 as temporary buffers for x and y, and + * tmp as scratch pad buffer + */ + ret = fp_copy(&sqrt1, &x); EG(ret, err); + ret = fp_copy(&sqrt2, &y); EG(ret, err); + + ret = fp_set_word_value(&x, WORD(2)); EG(ret, err); + ret = fp_sqr(&tmp, &sqrt1); EG(ret, err); + ret = fp_sub(&x, &x, &tmp); EG(ret, err); + ret = fp_sqr(&tmp, &sqrt2); EG(ret, err); + ret = fp_sub(&x, &x, &tmp); EG(ret, err); + /* NOTE: inversion by zero should be caught by lower layers */ + ret = fp_inv(&x, &x); EG(ret, err); + ret = fp_mul(&x, &x, &sqrt1); EG(ret, err); + ret = fp_mul(&x, &x, &sqrt2); EG(ret, err); + ret = fp_mul(&x, &x, alpha_edwards); EG(ret, err); + + ret = fp_sqr(&sqrt1, &sqrt1); EG(ret, err); + ret = fp_sqr(&sqrt2, &sqrt2); EG(ret, err); + ret = fp_sub(&y, &sqrt2, &sqrt1); EG(ret, err); + /* NOTE: inversion by zero should be caught by lower layers */ + ret = fp_inv(&y, &y); EG(ret, err); + ret = fp_add(&sqrt1, &sqrt1, &sqrt2); EG(ret, err); + ret = fp_mul(&y, &y, &sqrt1); EG(ret, err); + } +#endif /* !defined(WITH_SIG_EDDSA448) */ + + /* Initialize our point */ + ret = aff_pt_edwards_init_from_coords(out, edwards_curve, &x, &y); + +err: + fp_uninit(&sqrt1); + fp_uninit(&sqrt2); + fp_uninit(&x); + fp_uninit(&y); +#if defined(WITH_SIG_EDDSA448) + fp_uninit(&tmp); +#endif + + return ret; +} + + +/* + * Derive hash from private key. + */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_derive_priv_key_hash(const ec_priv_key *in_priv, + u8 *buf, u16 buflen) +{ + hash_alg_type hash_type = UNKNOWN_HASH_ALG; + const hash_mapping *hash; + u8 x_buf[EC_PRIV_KEY_MAX_SIZE]; + int ret; + const u8 *in[2]; + u32 in_len[2]; + + MUST_HAVE((buf != NULL), ret, err); + ret = eddsa_priv_key_sanity_check(in_priv); EG(ret, err); + + MUST_HAVE(((hash_type = get_eddsa_hash_type(in_priv->key_type)) != UNKNOWN_HASH_ALG), ret, err); + ret = get_hash_by_type(hash_type, &hash); EG(ret, err); + MUST_HAVE((hash != NULL), ret, err); + + /* Get the private key as a buffer and hash it */ + ret = local_memset(x_buf, 0, sizeof(x_buf)); EG(ret, err); + MUST_HAVE((sizeof(x_buf) >= (hash->digest_size / 2)), ret, err); + + ret = ec_priv_key_export_to_buf(in_priv, x_buf, (hash->digest_size / 2)); EG(ret, err); + + ret = hash_mapping_callbacks_sanity_check(hash); EG(ret, err); + + MUST_HAVE((buflen >= hash->digest_size), ret, err); + + in[0] = x_buf; in[1] = NULL; + in_len[0] = (hash->digest_size / 2); in_len[1] = 0; + ret = hash->hfunc_scattered(in, in_len, buf); + +err: + PTR_NULLIFY(hash); + + return ret; +} + +/* + * Derive an EdDSA private key. + * + */ +int eddsa_derive_priv_key(ec_priv_key *priv_key) +{ + int ret, cmp; + u8 digest_size; + u8 digest[MAX_DIGEST_SIZE]; + hash_alg_type hash_type = UNKNOWN_HASH_ALG; + word_t cofactor = WORD(0); + + /* Check if private key is initialized. */ + ret = eddsa_priv_key_sanity_check(priv_key); EG(ret, err); + + /* Check hash function compatibility: + * We must have 2**(b-1) > p with (2*b) the size of the hash function. + */ + MUST_HAVE(((hash_type = get_eddsa_hash_type(priv_key->key_type)) != UNKNOWN_HASH_ALG), ret, err); + + digest_size = 0; + ret = get_hash_sizes(hash_type, &digest_size, NULL); EG(ret, err); + + MUST_HAVE(((2 * priv_key->params->ec_fp.p_bitlen) < (8 * (bitcnt_t)digest_size)), ret, err); + MUST_HAVE(((digest_size % 2) == 0), ret, err); + MUST_HAVE((digest_size <= sizeof(digest)), ret, err); + + /* + * Now that we have our private scalar, derive the hash value of secret + * key + */ + /* Hash the private key */ + ret = eddsa_derive_priv_key_hash(priv_key, digest, digest_size); EG(ret, err); + + /* Get the cofactor as an integer */ + cofactor = priv_key->params->ec_gen_cofactor.val[0]; + ret = nn_cmp_word(&(priv_key->params->ec_gen_cofactor), cofactor, &cmp); EG(ret, err); + MUST_HAVE((cmp == 0), ret, err); + /* Cofactor must be 2**2 or 2**3 as per RFC8032 standard */ + MUST_HAVE((cofactor == (0x1 << 2)) || (cofactor == (0x1 << 3)), ret, err); + + /* Now clear the low bits related to cofactor */ + digest[0] &= (u8)(~(cofactor - 1)); +#if defined(WITH_SIG_EDDSA25519) + if ((priv_key->key_type == EDDSA25519) || + (priv_key->key_type == EDDSA25519CTX) || + (priv_key->key_type == EDDSA25519PH)){ + /* + * MSB of highest octet of half must be cleared, second MSB must + * be set + */ + digest[(digest_size / 2) - 1] &= 0x7f; + digest[(digest_size / 2) - 1] |= 0x40; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if ((priv_key->key_type == EDDSA448) || (priv_key->key_type == EDDSA448PH)) { + MUST_HAVE((digest_size / 2) >= 2, ret, err); + /* + * All eight bits of the last octet are cleared, highest bit + * of the second to last octet is set. + */ + digest[(digest_size / 2) - 1] = 0; + digest[(digest_size / 2) - 2] |= 0x80; + } +#endif +#if !defined(WITH_SIG_EDDSA25519) && !defined(WITH_SIG_EDDSA448) + ret = -1; + goto err; +#endif + /* + * Now that we have derived our hash, store it in place of our secret + * value NOTE: we do not need the secret value anymore since only the + * hash is needed. + */ + ret = nn_init_from_buf(&(priv_key->x), digest, digest_size); + +err: + VAR_ZEROIFY(digest_size); + + return ret; +} + +/* + * Generate an EdDSA private key. + * + */ +int eddsa_gen_priv_key(ec_priv_key *priv_key) +{ + int ret; + u8 digest_size; + hash_alg_type hash_type = UNKNOWN_HASH_ALG; + + /* Check if private key is initialized. */ + ret = eddsa_priv_key_sanity_check(priv_key); EG(ret, err); + + /* Check hash function compatibility: + * We must have 2**(b-1) > p with (2*b) the size of the hash function. + */ + MUST_HAVE(((hash_type = get_eddsa_hash_type(priv_key->key_type)) != UNKNOWN_HASH_ALG), ret, err); + + digest_size = 0; + ret = get_hash_sizes(hash_type, &digest_size, NULL); EG(ret, err); + + MUST_HAVE(((2 * priv_key->params->ec_fp.p_bitlen) < (8 * (bitcnt_t)digest_size)), ret, err); + MUST_HAVE(((digest_size % 2) == 0), ret, err); + + /* Generate a random private key + * An EdDSA secret scalar is a b bit string with (2*b) the size of the hash function + */ + ret = nn_get_random_len(&(priv_key->x), (digest_size / 2)); EG(ret, err); + + /* Derive the private key */ + ret = eddsa_derive_priv_key(priv_key); + +err: + VAR_ZEROIFY(digest_size); + + return ret; +} + + +/* Import an EdDSA private key from a raw buffer. + * NOTE: the private key must be a big number associated to the curve that + * depends on the flavor of EdDSA (Ed25519 or Ed448), and the result is a + * derived private key that can be used by the internal EdDSA functions. + * The derived key is a hash of the private key: we mainly perform this + * derivation early to prevent side-channel attacks and other leaks on the + * "root" private key. + */ +int eddsa_import_priv_key(ec_priv_key *priv_key, const u8 *buf, u16 buflen, + const ec_params *shortw_curve_params, + ec_alg_type sig_type) +{ + int ret; + hash_alg_type hash_type = UNKNOWN_HASH_ALG; + u8 digest_size; + bitcnt_t blen; + + /* Some sanity checks */ + MUST_HAVE((priv_key != NULL) && (buf != NULL) && (shortw_curve_params != NULL), ret, err); + + /* Import the big number from our buffer */ + ret = nn_init_from_buf(&(priv_key->x), buf, buflen); EG(ret, err); + /* The bit length of our big number must be <= b, half the digest size */ + hash_type = get_eddsa_hash_type(sig_type); + MUST_HAVE((hash_type != UNKNOWN_HASH_ALG), ret, err); + + digest_size = 0; + ret = get_hash_sizes(hash_type, &digest_size, NULL); EG(ret, err); + + ret = nn_bitlen(&(priv_key->x), &blen); EG(ret, err); + MUST_HAVE((blen <= (8 * ((bitcnt_t)digest_size / 2))), ret, err); + + /* Initialize stuff */ + priv_key->key_type = sig_type; + priv_key->params = shortw_curve_params; + priv_key->magic = PRIV_KEY_MAGIC; + + /* Now derive the private key. + * NOTE: sanity check on the private key is performed during derivation. + */ + ret = eddsa_derive_priv_key(priv_key); + +err: + if((priv_key != NULL) && ret){ + IGNORE_RET_VAL(local_memset(priv_key, 0, sizeof(ec_priv_key))); + } + VAR_ZEROIFY(digest_size); + VAR_ZEROIFY(blen); + + return ret; +} + +/* NOTE: we perform EDDSA public key computation on the short Weierstrass + * form of the curve thanks to the birational equivalence of curve + * models (the isomorphism allows to perform the scalar multiplication + * on the equivalent curve). + */ +int eddsa_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + prj_pt_src_t G; + u8 digest_size; + u8 digest[MAX_DIGEST_SIZE]; + /* Secret scalar used for public generation */ + nn s; + hash_alg_type hash_type; + u8 digest_size_; + int ret; + s.magic = WORD(0); + + MUST_HAVE(out_pub != NULL, ret, err); + ret = eddsa_priv_key_sanity_check(in_priv); EG(ret, err); + + ret = nn_init(&s, 0); EG(ret, err); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + /* Get the generator G */ + G = &(in_priv->params->ec_gen); + + /* Get the digest in proper format */ + MUST_HAVE(((hash_type = get_eddsa_hash_type(in_priv->key_type)) != UNKNOWN_HASH_ALG), ret, err); + + digest_size_ = 0; + ret = get_hash_sizes(hash_type, &digest_size_, NULL); EG(ret, err); + + /* Extract the digest */ + digest_size = sizeof(digest); + ret = eddsa_get_digest_from_priv_key(digest, &digest_size, in_priv); EG(ret, err); + + /* Sanity check */ + MUST_HAVE((digest_size == digest_size_), ret, err); + + /* Encode the scalar s from the digest */ + ret = eddsa_compute_s(&s, digest, digest_size); EG(ret, err); + + /* Compute s x G where G is the base point */ + /* + * Use blinding when computing point scalar multiplication as we + * manipulate a fixed secret. + */ +#if defined(WITH_SIG_EDDSA448) + if((in_priv->key_type == EDDSA448) || (in_priv->key_type == EDDSA448PH)){ + /* + * NOTE: because of the 4-isogeny between Ed448 and Edwards448, + * we actually multiply by (s/4) since the base point of + * Edwards448 is four times the one of Ed448. + * Here, s/4 can be simply computed by right shifting by 2 as + * we are ensured that our scalar is a multiple of 4 by + * construction. + */ + ret = nn_rshift(&s, &s, 2); EG(ret, err); + } +#endif + ret = prj_pt_mul_blind(&(out_pub->y), &s, G); EG(ret, err); + + out_pub->key_type = in_priv->key_type; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + PTR_NULLIFY(G); + VAR_ZEROIFY(digest_size); + nn_uninit(&s); + + return ret; +} + +/* + * Import a public key in canonical form. + * (imports a public key from a buffer and checks its canonical form.) + * + */ +int eddsa_import_pub_key(ec_pub_key *pub_key, const u8 *buf, u16 buflen, + const ec_params *shortw_curve_params, + ec_alg_type sig_type) +{ + aff_pt_edwards _Tmp; + ec_edwards_crv edwards_curve; + int ret; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + prj_pt_t pub_key_y; + _Tmp.magic = edwards_curve.magic = WORD(0); + +#if defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_EDDSA448) + if((sig_type != EDDSA25519) && (sig_type != EDDSA25519CTX) && (sig_type != EDDSA25519PH) && \ + (sig_type != EDDSA448) && (sig_type != EDDSA448PH)){ +#endif +#if defined(WITH_SIG_EDDSA25519) && !defined(WITH_SIG_EDDSA448) + if((sig_type != EDDSA25519) && (sig_type != EDDSA25519CTX) && (sig_type != EDDSA25519PH)){ +#endif +#if !defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_EDDSA448) + if((sig_type != EDDSA448) && (sig_type != EDDSA448PH)){ +#endif + ret = -1; + goto err; + } + + MUST_HAVE((pub_key != NULL) && (shortw_curve_params != NULL) && (buf != NULL), ret, err); + + /* Check for sizes on the buffer for strict size depending on EdDSA types */ +#if defined(WITH_SIG_EDDSA25519) + if((sig_type == EDDSA25519) || (sig_type == EDDSA25519CTX) || (sig_type == EDDSA25519PH)){ + MUST_HAVE((buflen == EDDSA25519_PUB_KEY_ENCODED_LEN), ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if((sig_type == EDDSA448) || (sig_type == EDDSA448PH)){ + MUST_HAVE((buflen == EDDSA448_PUB_KEY_ENCODED_LEN), ret, err); + } +#endif + + /* Make things more readable */ + shortw_curve = &(shortw_curve_params->ec_curve); + alpha_montgomery = &(shortw_curve_params->ec_alpha_montgomery); + gamma_montgomery = &(shortw_curve_params->ec_gamma_montgomery); + alpha_edwards = &(shortw_curve_params->ec_alpha_edwards); + pub_key_y = &(pub_key->y); + + /* Get the isogenic Edwards curve */ + ret = curve_shortw_to_edwards(shortw_curve, &edwards_curve, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + + /* Decode the point in Edwards */ + ret = eddsa_decode_point(&_Tmp, &edwards_curve, alpha_edwards, buf, buflen, + sig_type); EG(ret, err); + /* Then transfer to short Weierstrass in our public key */ + ret = aff_pt_edwards_to_prj_pt_shortw(&_Tmp, shortw_curve, pub_key_y, + alpha_edwards); EG(ret, err); +#if defined(WITH_SIG_EDDSA448) + if((sig_type == EDDSA448) || (sig_type == EDDSA448PH)){ + nn_src_t gen_order = &(shortw_curve_params->ec_gen_order); + nn tmp; + tmp.magic = WORD(0); + + /* + * NOTE: because of the 4-isogeny between Ed448 and Edwards448, + * we actually multiply by (s/4) since the base point of + * Edwards448 is four times the one of Ed448. + * Here, s/4 is computed by multiplying s by the modular + * inverse of 4. + */ + ret = nn_init(&tmp, 0); EG(ret, err1); + ret = nn_modinv_word(&tmp, WORD(4), gen_order); EG(ret, err1); + ret = prj_pt_mul(&(pub_key->y), &tmp, pub_key_y); EG(ret, err1); +err1: + nn_uninit(&tmp); + PTR_NULLIFY(gen_order); + EG(ret, err); + } +#endif + /* Mark the public key as initialized */ + pub_key->key_type = sig_type; + pub_key->params = shortw_curve_params; + pub_key->magic = PUB_KEY_MAGIC; + + /* Now sanity check our public key before validating the import */ + ret = eddsa_pub_key_sanity_check(pub_key); + +err: + if((pub_key != NULL) && ret){ + IGNORE_RET_VAL(local_memset(pub_key, 0, sizeof(ec_pub_key))); + } + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(pub_key_y); + aff_pt_edwards_uninit(&_Tmp); + ec_edwards_crv_uninit(&edwards_curve); + + return ret; +} + +/* + * Export a public key in canonical form. + * (exports a public key to a buffer in canonical form.) + */ +int eddsa_export_pub_key(const ec_pub_key *in_pub, u8 *buf, u16 buflen) +{ + aff_pt_edwards _Tmp; + ec_edwards_crv edwards_curve; + ec_alg_type sig_type; + int ret; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + prj_pt_src_t pub_key_y; + _Tmp.magic = edwards_curve.magic = WORD(0); + + ret = pub_key_check_initialized(in_pub); EG(ret, err); + MUST_HAVE((buf != NULL), ret, err); + + /* Make things more readable */ + shortw_curve = &(in_pub->params->ec_curve); + alpha_montgomery = &(in_pub->params->ec_alpha_montgomery); + gamma_montgomery = &(in_pub->params->ec_gamma_montgomery); + alpha_edwards = &(in_pub->params->ec_alpha_edwards); + pub_key_y = &(in_pub->y); + sig_type = in_pub->key_type; + + /* Check for sizes on the buffer for strict size depending on EdDSA types */ +#if defined(WITH_SIG_EDDSA25519) + if((sig_type == EDDSA25519) || (sig_type == EDDSA25519CTX) || (sig_type == EDDSA25519PH)){ + MUST_HAVE((buflen == EDDSA25519_PUB_KEY_ENCODED_LEN), ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if((sig_type == EDDSA448) || (sig_type == EDDSA448PH)){ + MUST_HAVE((buflen == EDDSA448_PUB_KEY_ENCODED_LEN), ret, err); + } +#endif + + /* Transfer our short Weierstrass to Edwards representation */ + ret = curve_shortw_to_edwards(shortw_curve, &edwards_curve, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + ret = prj_pt_shortw_to_aff_pt_edwards(pub_key_y, &edwards_curve, &_Tmp, + alpha_edwards); EG(ret, err); + /* Export to buffer canonical form */ + ret = eddsa_encode_point(&_Tmp, alpha_edwards, buf, + buflen, in_pub->key_type); + +err: + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(pub_key_y); + aff_pt_edwards_uninit(&_Tmp); + ec_edwards_crv_uninit(&edwards_curve); + + return ret; +} + +/* Import an EdDSA key pair from a private key buffer */ +int eddsa_import_key_pair_from_priv_key_buf(ec_key_pair *kp, + const u8 *buf, u16 buflen, + const ec_params *shortw_curve_params, + ec_alg_type sig_type) +{ + int ret; + + MUST_HAVE((kp != NULL), ret, err); + + /* Try to import the private key */ + ret = eddsa_import_priv_key(&(kp->priv_key), buf, buflen, + shortw_curve_params, sig_type); EG(ret, err); + + /* Now derive the public key */ + ret = eddsa_init_pub_key(&(kp->pub_key), &(kp->priv_key)); + +err: + return ret; +} + +/* Compute PH(M) with PH being the hash depending on the key type */ +ATTRIBUTE_WARN_UNUSED_RET static int eddsa_compute_pre_hash(const u8 *message, u32 message_size, + u8 *digest, u8 *digest_size, + ec_alg_type sig_type) +{ + hash_alg_type hash_type; + const hash_mapping *hash; + hash_context hash_ctx; + int ret; + + MUST_HAVE((message != NULL) && (digest != NULL) && (digest_size != NULL), ret, err); + + MUST_HAVE(((hash_type = get_eddsa_hash_type(sig_type)) != UNKNOWN_HASH_ALG), ret, err); + + ret = get_hash_by_type(hash_type, &hash); EG(ret, err); + MUST_HAVE((hash != NULL), ret, err); + + /* Sanity check on the size */ + MUST_HAVE(((*digest_size) >= hash->digest_size), ret, err); + + (*digest_size) = hash->digest_size; + /* Hash the message */ + ret = hash_mapping_callbacks_sanity_check(hash); EG(ret, err); + ret = hash->hfunc_init(&hash_ctx); EG(ret, err); + ret = hash->hfunc_update(&hash_ctx, message, message_size); EG(ret, err); + ret = hash->hfunc_finalize(&hash_ctx, digest); EG(ret, err); + +err: + return ret; +} + +/*****************/ + +/* EdDSA signature length */ +int eddsa_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + + (*siglen) = (u8)EDDSA_SIGLEN(hsize); + ret = 0; +err: + return ret; +} + +/* + * Generic *internal* EdDSA signature functions (init, update and finalize). + * + * Global EdDSA signature process is as follows (I,U,F provides + * information in which function(s) (init(), update() or finalize()) + * a specific step is performed): + * + */ + +#define EDDSA_SIGN_MAGIC ((word_t)(0x7632542bf630972bULL)) +#define EDDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == EDDSA_SIGN_MAGIC), ret, err) + +int _eddsa_sign_init_pre_hash(struct ec_sign_context *ctx) +{ + int ret; + bitcnt_t blen; + u8 use_message_pre_hash = 0; + ec_alg_type key_type = UNKNOWN_ALG; + const ec_key_pair *key_pair; + const hash_mapping *h; + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Make things more readable */ + key_pair = ctx->key_pair; + h = ctx->h; + key_type = ctx->key_pair->priv_key.key_type; + + /* Sanity check: this function is only supported in PH mode */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + use_message_pre_hash = 1; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + use_message_pre_hash = 1; + } +#endif + MUST_HAVE((use_message_pre_hash == 1), ret, err); + + /* Additional sanity checks on input params from context */ + ret = eddsa_key_pair_sanity_check(key_pair); EG(ret, err); + + MUST_HAVE((h != NULL) && (h->digest_size <= MAX_DIGEST_SIZE) && (h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* Sanity check on hash types */ + MUST_HAVE((key_type == key_pair->pub_key.key_type) && (h->type == get_eddsa_hash_type(key_type)), ret, err); + + /* + * Sanity check on hash size versus private key size + */ + ret = nn_bitlen(&(key_pair->priv_key.x), &blen); EG(ret, err); + MUST_HAVE(blen <= (8 * h->digest_size), ret, err); + + /* + * Initialize hash context stored in our private part of context + * and record data init has been done + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_init(&(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + + /* Initialize other elements in the context */ + ctx->sign_data.eddsa.magic = EDDSA_SIGN_MAGIC; + +err: + PTR_NULLIFY(key_pair); + PTR_NULLIFY(h); + VAR_ZEROIFY(use_message_pre_hash); + + return ret; +} + +int _eddsa_sign_update_pre_hash(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + ec_alg_type key_type = UNKNOWN_ALG; + u8 use_message_pre_hash = 0; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EDDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + EDDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.eddsa), ret, err); + MUST_HAVE((chunk != NULL), ret, err); + + key_type = ctx->key_pair->priv_key.key_type; + + /* Sanity check: this function is only supported in PH mode */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + use_message_pre_hash = 1; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + use_message_pre_hash = 1; + } +#endif + MUST_HAVE(use_message_pre_hash == 1, ret, err); + + /* Sanity check on hash types */ + MUST_HAVE((ctx->h->type == get_eddsa_hash_type(key_type)), ret, err); + + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + + ret = ctx->h->hfunc_update(&(ctx->sign_data.eddsa.h_ctx), chunk, chunklen); + +err: + VAR_ZEROIFY(use_message_pre_hash); + + return ret; + +} + +int _eddsa_sign_finalize_pre_hash(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + const ec_priv_key *priv_key; + const ec_pub_key *pub_key; + prj_pt_src_t G; + u8 hash[MAX_DIGEST_SIZE]; + u8 ph_hash[MAX_DIGEST_SIZE]; + prj_pt R; + ec_edwards_crv crv_edwards; + aff_pt_edwards Tmp_edwards; + nn_src_t q; + u8 hsize, hash_size; + int ret; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + prj_pt_src_t pub_key_y; + u8 use_message_pre_hash = 0; + u16 use_message_pre_hash_hsize = 0; + ec_alg_type key_type = UNKNOWN_ALG; + u8 r_len, s_len; + const hash_mapping *h; + + nn r, s, S; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* !USE_SIG_BLINDING */ + r.magic = s.magic = S.magic = WORD(0); + R.magic = crv_edwards.magic = Tmp_edwards.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EDDSA + * signature one and we do not update() or finalize() + * before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + EDDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.eddsa), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Zero init out points and data */ + ret = local_memset(&R, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&Tmp_edwards, 0, sizeof(aff_pt_edwards)); EG(ret, err); + ret = local_memset(&crv_edwards, 0, sizeof(ec_edwards_crv)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(ph_hash, 0, sizeof(ph_hash)); EG(ret, err); + + /* Key type */ + key_type = ctx->key_pair->priv_key.key_type; + /* Sanity check on hash types */ + MUST_HAVE((key_type == ctx->key_pair->pub_key.key_type) && (ctx->h->type == get_eddsa_hash_type(key_type)), ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + pub_key = &(ctx->key_pair->pub_key); + q = &(priv_key->params->ec_gen_order); + G = &(priv_key->params->ec_gen); + h = ctx->h; + hsize = h->digest_size; + r_len = EDDSA_R_LEN(hsize); + s_len = EDDSA_S_LEN(hsize); + + shortw_curve = &(priv_key->params->ec_curve); + alpha_montgomery = &(priv_key->params->ec_alpha_montgomery); + gamma_montgomery = &(priv_key->params->ec_gamma_montgomery); + alpha_edwards = &(priv_key->params->ec_alpha_edwards); + pub_key_y = &(pub_key->y); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", &(priv_key->params->ec_gen_order)); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", &(priv_key->params->ec_gen)); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* Check provided signature length */ + MUST_HAVE((siglen == EDDSA_SIGLEN(hsize)) && (siglen == (r_len + s_len)), ret, err); + + /* Is it indeed a PH version of the algorithm? */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + use_message_pre_hash = 1; + use_message_pre_hash_hsize = hsize; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + use_message_pre_hash = 1; + /* NOTE: as per RFC8032, EDDSA448PH uses + * SHAKE256 with 64 bytes output. + */ + use_message_pre_hash_hsize = 64; + } +#endif + /* Sanity check: this function is only supported in PH mode */ + MUST_HAVE((use_message_pre_hash == 1), ret, err); + + /* Finish the message hash session */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + + ret = h->hfunc_finalize(&(ctx->sign_data.eddsa.h_ctx), ph_hash); EG(ret, err); + + /* 1. Finish computing the nonce r = H(h256 || ... || h511 || m) */ + /* Update our hash context with half of the secret key */ + hash_size = sizeof(hash); + ret = eddsa_get_digest_from_priv_key(hash, &hash_size, priv_key); EG(ret, err); + + /* Sanity check */ + MUST_HAVE((hash_size == hsize), ret, err); + + /* Hash half the digest */ + ret = h->hfunc_init(&(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + + /* At this point, we are ensured that we have PH versions of the algorithms */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + ret = dom2(1, ctx->adata, ctx->adata_len, h, + &(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + ret = dom4(1, ctx->adata, ctx->adata_len, h, + &(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + } +#endif + ret = h->hfunc_update(&(ctx->sign_data.eddsa.h_ctx), &hash[hsize / 2], hsize / 2); EG(ret, err); + + /* Update hash h with message hash PH(m) */ + MUST_HAVE((use_message_pre_hash_hsize <= hsize), ret, err); + + ret = h->hfunc_update(&(ctx->sign_data.eddsa.h_ctx), ph_hash, + use_message_pre_hash_hsize); EG(ret, err); + + /* 1. Finish computing the nonce r = H(h256 || ... || h511 || PH(m)) */ + ret = h->hfunc_finalize(&(ctx->sign_data.eddsa.h_ctx), hash); EG(ret, err); + dbg_buf_print("h(h || m)", hash, hsize); + + /* Import r as the hash scalar */ + ret = eddsa_decode_integer(&r, hash, hsize); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Get a random b for blinding the r modular operations before the + * scalar multiplication as we do not want it to leak. + */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + + /* Blind r */ + ret = nn_mul(&r, &r, &b); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Reduce r modulo q for the next computation. + * (this is a blind reduction if USE_SIG_BLINDING). + */ + ret = nn_mod_notrim(&r, &r, q); EG(ret, err); + + /* Now perform our scalar multiplication. + */ +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + /* + * NOTE: in case of EDDSA448, because of the 4-isogeny we must + * divide our scalar by 4. + */ + nn r_tmp; + r_tmp.magic = WORD(0); + + ret = nn_init(&r_tmp, 0); EG(ret, err1); + ret = nn_modinv_word(&r_tmp, WORD(4), q); EG(ret, err1); + ret = nn_mod_mul(&r_tmp, &r_tmp, &r, q); EG(ret, err1); + +#ifdef USE_SIG_BLINDING + /* Unblind r_tmp */ + ret = nn_mod_mul(&r_tmp, &r_tmp, &binv, q); EG(ret, err1); + ret = prj_pt_mul_blind(&R, &r_tmp, G); +#else + ret = prj_pt_mul(&R, &r_tmp, G); +#endif /* !USE_SIG_BLINDING */ +err1: + nn_uninit(&r_tmp); + EG(ret, err); + } + else +#endif /* !defined(WITH_SIG_EDDSA448) */ + { +#ifdef USE_SIG_BLINDING + nn r_tmp; + r_tmp.magic = WORD(0); + + ret = nn_init(&r_tmp, 0); EG(ret, err2); + ret = nn_copy(&r_tmp, &r); EG(ret, err2); + + /* Unblind r_tmp */ + ret = nn_mod_mul(&r_tmp, &r_tmp, &binv, q); EG(ret, err2); + ret = prj_pt_mul_blind(&R, &r_tmp, G); EG(ret, err2); +err2: + nn_uninit(&r_tmp); + EG(ret, err); +#else + ret = prj_pt_mul(&R, &r, G); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + } + + /* Now compute S = (r + H(R || PubKey || PH(m)) * secret) mod q */ + ret = h->hfunc_init(&(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + /* Transfer R to Edwards */ + ret = curve_shortw_to_edwards(shortw_curve, &crv_edwards, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + ret = prj_pt_shortw_to_aff_pt_edwards(&R, &crv_edwards, &Tmp_edwards, + alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("R", &Tmp_edwards); + + MUST_HAVE((r_len <= siglen), ret, err); + /* Encode R and update */ + ret = eddsa_encode_point(&Tmp_edwards, alpha_edwards, &sig[0], + r_len, key_type); EG(ret, err); + /* At this point, we are ensured that we have PH versions of the algorithms */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + ret = dom2(1, ctx->adata, ctx->adata_len, h, + &(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + ret = dom4(1, ctx->adata, ctx->adata_len, h, + &(ctx->sign_data.eddsa.h_ctx)); EG(ret, err); + } +#endif + /* Update the hash with the encoded R point */ + ret = h->hfunc_update(&(ctx->sign_data.eddsa.h_ctx), &sig[0], r_len); EG(ret, err); + /* Encode the public key */ + /* Transfer the public key to Edwards */ + ret = prj_pt_shortw_to_aff_pt_edwards(pub_key_y, &crv_edwards, + &Tmp_edwards, alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("A", &Tmp_edwards); + MUST_HAVE(r_len <= sizeof(hash), ret, err); + + /* NOTE: we use the hash buffer as a temporary buffer */ + ret = eddsa_encode_point(&Tmp_edwards, alpha_edwards, hash, + r_len, key_type); EG(ret, err); + + /* Update the hash with the encoded public key point */ + ret = h->hfunc_update(&(ctx->sign_data.eddsa.h_ctx), hash, r_len); EG(ret, err); + /* Update the hash with PH(m) */ + ret = h->hfunc_update(&(ctx->sign_data.eddsa.h_ctx), ph_hash, + use_message_pre_hash_hsize); EG(ret, err); + /* Finalize the hash */ + ret = h->hfunc_finalize(&(ctx->sign_data.eddsa.h_ctx), hash); EG(ret, err); + dbg_buf_print("h(R || PubKey || PH(m))", hash, hsize); + /* Import our resulting hash as an integer in S */ + ret = eddsa_decode_integer(&S, hash, hsize); EG(ret, err); + ret = nn_mod(&S, &S, q); EG(ret, err); + /* Extract the digest */ + hsize = sizeof(hash); + ret = eddsa_get_digest_from_priv_key(hash, &hsize, priv_key); EG(ret, err); + /* Encode the scalar s from the digest */ + ret = eddsa_compute_s(&s, hash, hsize); EG(ret, err); + ret = nn_mod(&s, &s, q); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* If we use blinding, multiply by b */ + ret = nn_mod_mul(&S, &S, &b, q); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + /* Multiply by the secret */ + ret = nn_mod_mul(&S, &S, &s, q); EG(ret, err); + /* The secret is not needed anymore */ + nn_uninit(&s); + /* Add to r */ + ret = nn_mod_add(&S, &S, &r, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind the result */ + ret = nn_mod_mul(&S, &S, &binv, q); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + /* Store our S in the context as an encoded buffer */ + MUST_HAVE((s_len <= (siglen - r_len)), ret, err); + ret = eddsa_encode_integer(&S, &sig[r_len], s_len); + + err: + /* Clean what remains on the stack */ + PTR_NULLIFY(h); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(pub_key_y); + VAR_ZEROIFY(hsize); + VAR_ZEROIFY(hash_size); + VAR_ZEROIFY(use_message_pre_hash); + VAR_ZEROIFY(use_message_pre_hash_hsize); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + + prj_pt_uninit(&R); + ec_edwards_crv_uninit(&crv_edwards); + aff_pt_edwards_uninit(&Tmp_edwards); + nn_uninit(&s); + nn_uninit(&r); + nn_uninit(&S); + +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif /* !USE_SIG_BLINDING */ + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.eddsa), 0, sizeof(eddsa_sign_data))); + } + IGNORE_RET_VAL(local_memset(ph_hash, 0, sizeof(ph_hash))); + + return ret; +} + + +/******** Signature function specific to pure EdDSA where the message +********* streaming mode via init/update/finalize is not supported. + */ +int _eddsa_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + int ret; + ec_alg_type key_type = UNKNOWN_ALG; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + prj_pt_src_t pub_key_y; + u8 use_message_pre_hash = 0; + u16 use_message_pre_hash_hsize = 0; + prj_pt_src_t G; + prj_pt R; + aff_pt_edwards Tmp_edwards; + ec_edwards_crv crv_edwards; + u8 hash[MAX_DIGEST_SIZE]; + u8 ph_hash[MAX_DIGEST_SIZE]; + const ec_priv_key *priv_key; + const ec_pub_key *pub_key; + nn_src_t q; + u8 hsize, hash_size; + hash_context h_ctx; + u8 r_len, s_len; + bitcnt_t blen; + const hash_mapping *h; + + nn r, s, S; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif + + r.magic = s.magic = S.magic = WORD(0); + R.magic = Tmp_edwards.magic = crv_edwards.magic = WORD(0); + + /* + * NOTE: EdDSA does not use any notion of random Nonce, so no need + * to use 'rand' here: we strictly check that NULL is provided. + */ + MUST_HAVE((rand == NULL), ret, err); + + /* Zero init out points and data */ + ret = local_memset(&R, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&Tmp_edwards, 0, sizeof(aff_pt_edwards)); EG(ret, err); + ret = local_memset(&crv_edwards, 0, sizeof(ec_edwards_crv)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(ph_hash, 0, sizeof(ph_hash)); EG(ret, err); + + /* Sanity check on the key pair */ + ret = eddsa_key_pair_sanity_check(key_pair); EG(ret, err); + + /* Make things more readable */ + ret = get_hash_by_type(hash_type, &h); EG(ret, err); + key_type = key_pair->priv_key.key_type; + + /* Sanity check on the hash type */ + MUST_HAVE((h != NULL), ret, err); + MUST_HAVE((get_eddsa_hash_type(sig_type) == hash_type), ret, err); + /* Sanity check on the key type */ + MUST_HAVE(key_type == sig_type, ret, err); + MUST_HAVE((h != NULL) && (h->digest_size <= MAX_DIGEST_SIZE) && (h->block_size <= MAX_BLOCK_SIZE), ret, err); + /* + * Sanity check on hash size versus private key size + */ + ret = nn_bitlen(&(key_pair->priv_key.x), &blen); EG(ret, err); + MUST_HAVE((blen <= (8 * h->digest_size)), ret, err); + + /* Make things more readable */ + priv_key = &(key_pair->priv_key); + pub_key = &(key_pair->pub_key); + q = &(priv_key->params->ec_gen_order); + G = &(priv_key->params->ec_gen); + hsize = h->digest_size; + r_len = EDDSA_R_LEN(hsize); + s_len = EDDSA_S_LEN(hsize); + + shortw_curve = &(priv_key->params->ec_curve); + alpha_montgomery = &(priv_key->params->ec_alpha_montgomery); + gamma_montgomery = &(priv_key->params->ec_gamma_montgomery); + alpha_edwards = &(priv_key->params->ec_alpha_edwards); + pub_key_y = &(pub_key->y); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", &(priv_key->params->ec_gen_order)); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", &(priv_key->params->ec_gen)); + dbg_pub_key_print("Y", pub_key); + + /* Check provided signature length */ + MUST_HAVE((siglen == EDDSA_SIGLEN(hsize)) && (siglen == (r_len + s_len)), ret, err); + + /* Do we use the raw message or its PH(M) hashed version? */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + use_message_pre_hash = 1; + use_message_pre_hash_hsize = hsize; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + use_message_pre_hash = 1; + /* NOTE: as per RFC8032, EDDSA448PH uses + * SHAKE256 with 64 bytes output. + */ + use_message_pre_hash_hsize = 64; + } +#endif + /* First of all, compute the message hash if necessary */ + if(use_message_pre_hash){ + hash_size = sizeof(ph_hash); + ret = eddsa_compute_pre_hash(m, mlen, ph_hash, &hash_size, sig_type); EG(ret, err); + MUST_HAVE(use_message_pre_hash_hsize <= hash_size, ret, err); + } + /* Initialize our hash context */ + /* Compute half of the secret key */ + hash_size = sizeof(hash); + ret = eddsa_get_digest_from_priv_key(hash, &hash_size, &(key_pair->priv_key)); EG(ret, err); + /* Sanity check */ + MUST_HAVE((hash_size == hsize), ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_init(&h_ctx); EG(ret, err); +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519CTX){ + /* As per RFC8032, for EDDSA25519CTX the context SHOULD NOT be empty */ + MUST_HAVE(adata != NULL, ret, err); + ret = dom2(0, adata, adata_len, h, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA25519PH){ + ret = dom2(1, adata, adata_len, h, &h_ctx); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448){ + ret = dom4(0, adata, adata_len, h, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA448PH){ + ret = dom4(1, adata, adata_len, h, &h_ctx); EG(ret, err); + } +#endif + ret = h->hfunc_update(&h_ctx, &hash[hsize / 2], hsize / 2); EG(ret, err); + + /* Now finish computing the scalar r */ + if(use_message_pre_hash){ + ret = h->hfunc_update(&h_ctx, ph_hash, use_message_pre_hash_hsize); EG(ret, err); + } + else{ + ret = h->hfunc_update(&h_ctx, m, mlen); EG(ret, err); + } + ret = h->hfunc_finalize(&h_ctx, hash); EG(ret, err); + dbg_buf_print("h(h || PH(m))", hash, hsize); + + /* Import r as the hash scalar */ + ret = eddsa_decode_integer(&r, hash, hsize); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Get a random b for blinding the r modular operations before the + * scalar multiplication as we do not want it to leak. + */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + + /* Blind r */ + ret = nn_mul(&r, &r, &b); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + + /* Reduce r modulo q for the next computation. + * (this is a blind reduction if USE_SIG_BLINDING). + */ + ret = nn_mod_notrim(&r, &r, q); EG(ret, err); + + /* Now perform our scalar multiplication. + */ +#if defined(WITH_SIG_EDDSA448) + if((key_type == EDDSA448) || (key_type == EDDSA448PH)){ + /* + * NOTE: in case of EDDSA448, because of the 4-isogeny we must + * divide our scalar by 4. + */ + nn r_tmp; + r_tmp.magic = WORD(0); + + ret = nn_init(&r_tmp, 0); EG(ret, err1); + ret = nn_modinv_word(&r_tmp, WORD(4), q); EG(ret, err1); + ret = nn_mod_mul(&r_tmp, &r_tmp, &r, q); EG(ret, err1); + +#ifdef USE_SIG_BLINDING + /* Unblind r_tmp */ + ret = nn_mod_mul(&r_tmp, &r_tmp, &binv, q); EG(ret, err1); + ret = prj_pt_mul_blind(&R, &r_tmp, G); +#else + ret = prj_pt_mul(&R, &r_tmp, G); +#endif /* !USE_SIG_BLINDING */ +err1: + nn_uninit(&r_tmp); + EG(ret, err); + } + else +#endif /* !defined(WITH_SIG_EDDSA448) */ + { +#ifdef USE_SIG_BLINDING + nn r_tmp; + r_tmp.magic = WORD(0); + + ret = nn_init(&r_tmp, 0); EG(ret, err2); + ret = nn_copy(&r_tmp, &r); EG(ret, err2); + + /* Unblind r_tmp */ + ret = nn_mod_mul(&r_tmp, &r_tmp, &binv, q); EG(ret, err2); + ret = prj_pt_mul_blind(&R, &r_tmp, G); EG(ret, err2); +err2: + nn_uninit(&r_tmp); + EG(ret, err); +#else + ret = prj_pt_mul(&R, &r, G); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + } + + /* Now compute S = (r + H(R || PubKey || PH(m)) * secret) mod q */ + ret = hash_mapping_callbacks_sanity_check(h); EG(ret, err); + ret = h->hfunc_init(&h_ctx); EG(ret, err); + /* Transfer R to Edwards */ + ret = curve_shortw_to_edwards(shortw_curve, &crv_edwards, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + ret = prj_pt_shortw_to_aff_pt_edwards(&R, &crv_edwards, &Tmp_edwards, + alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("R", &Tmp_edwards); + MUST_HAVE((r_len <= siglen), ret, err); + /* Encode R and update */ + ret = eddsa_encode_point(&Tmp_edwards, alpha_edwards, &sig[0], + r_len, key_type); EG(ret, err); +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519CTX){ + /* + * As per RFC8032, for EDDSA25519CTX the context + * SHOULD NOT be empty + */ + MUST_HAVE((adata != NULL), ret, err); + ret = dom2(0, adata, adata_len, h, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA25519PH){ + ret = dom2(1, adata, adata_len, h, &h_ctx); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448){ + ret = dom4(0, adata, adata_len, h, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA448PH){ + ret = dom4(1, adata, adata_len, h, &h_ctx); EG(ret, err); + } +#endif + /* Update the hash with the encoded R point */ + ret = h->hfunc_update(&h_ctx, &sig[0], r_len); EG(ret, err); + /* Transfer the public key to Edwards */ + ret = prj_pt_shortw_to_aff_pt_edwards(pub_key_y, &crv_edwards, &Tmp_edwards, + alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("A", &Tmp_edwards); + MUST_HAVE((r_len <= sizeof(hash)), ret, err); + /* Encode the public key */ + /* NOTE: we use the hash buffer as a temporary buffer */ + ret = eddsa_encode_point(&Tmp_edwards, alpha_edwards, + hash, r_len, key_type); EG(ret, err); + /* Update the hash with the encoded public key point */ + ret = h->hfunc_update(&h_ctx, hash, r_len); EG(ret, err); + /* Update the hash with the message or its hash for the PH versions */ + if(use_message_pre_hash){ + ret = h->hfunc_update(&h_ctx, ph_hash, use_message_pre_hash_hsize); EG(ret, err); + } + else{ + ret = h->hfunc_update(&h_ctx, m, mlen); EG(ret, err); + } + /* Finalize the hash */ + ret = h->hfunc_finalize(&h_ctx, hash); EG(ret, err); + dbg_buf_print("h(R || PubKey || PH(m))", hash, hsize); + /* Import our resulting hash as an integer in S */ + ret = eddsa_decode_integer(&S, hash, hsize); EG(ret, err); + ret = nn_mod(&S, &S, q); EG(ret, err); + /* Extract the digest */ + hsize = sizeof(hash); + ret = eddsa_get_digest_from_priv_key(hash, &hsize, priv_key); EG(ret, err); + ret = eddsa_compute_s(&s, hash, hsize); EG(ret, err); + ret = nn_mod(&s, &s, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* If we use blinding, multiply by b */ + ret = nn_mod_mul(&S, &S, &b, q); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + /* Multiply by the secret */ + ret = nn_mod_mul(&S, &S, &s, q); EG(ret, err); + /* The secret is not needed anymore */ + nn_uninit(&s); + /* Add to r */ + ret = nn_mod_add(&S, &S, &r, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind the result */ + ret = nn_mod_mul(&S, &S, &binv, q); EG(ret, err); +#endif /* !USE_SIG_BLINDING */ + /* Store our S in the context as an encoded buffer */ + MUST_HAVE((s_len <= (siglen - r_len)), ret, err); + /* Encode the scalar s from the digest */ + ret = eddsa_encode_integer(&S, &sig[r_len], s_len); + +err: + /* Clean what remains on the stack */ + PTR_NULLIFY(priv_key); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(h); + VAR_ZEROIFY(hsize); + VAR_ZEROIFY(hash_size); + VAR_ZEROIFY(use_message_pre_hash); + VAR_ZEROIFY(use_message_pre_hash_hsize); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(blen); + IGNORE_RET_VAL(local_memset(&h_ctx, 0, sizeof(h_ctx))); + IGNORE_RET_VAL(local_memset(hash, 0, sizeof(hash))); + IGNORE_RET_VAL(local_memset(ph_hash, 0, sizeof(ph_hash))); + + prj_pt_uninit(&R); + ec_edwards_crv_uninit(&crv_edwards); + aff_pt_edwards_uninit(&Tmp_edwards); + nn_uninit(&s); + nn_uninit(&r); + nn_uninit(&S); + +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif /* USE_SIG_BLINDING */ + + return ret; +} + +/******************************************************************************/ +/* + * Generic *internal* EDDSA verification functions (init, update and finalize). + * + */ + +#define EDDSA_VERIFY_MAGIC ((word_t)(0x3298fe87e77151beULL)) +#define EDDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == EDDSA_VERIFY_MAGIC), ret, err) + +int _eddsa_verify_init(struct ec_verify_context *ctx, const u8 *sig, u8 siglen) +{ + nn_src_t q; + ec_edwards_crv crv_edwards; + aff_pt_edwards R; + prj_pt _Tmp; + prj_pt_t _R; + aff_pt_edwards A; + nn *S; + u8 buff[MAX_DIGEST_SIZE]; + int ret, iszero, cmp; + u16 hsize; + const ec_pub_key *pub_key; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + nn_src_t gen_cofactor; + prj_pt_src_t pub_key_y; + hash_context *h_ctx; + hash_context *h_ctx_pre_hash; + ec_alg_type key_type = UNKNOWN_ALG; + + R.magic = crv_edwards.magic = _Tmp.magic = A.magic = WORD(0); + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Zero init our local data */ + ret = local_memset(&A, 0, sizeof(aff_pt_edwards)); EG(ret, err); + ret = local_memset(&crv_edwards, 0, sizeof(ec_edwards_crv)); EG(ret, err); + ret = local_memset(buff, 0, sizeof(buff)); EG(ret, err); + ret = local_memset(&R, 0, sizeof(R)); EG(ret, err); + ret = local_memset(&_Tmp, 0, sizeof(_Tmp)); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = eddsa_pub_key_sanity_check(ctx->pub_key); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + _R = &(ctx->verify_data.eddsa._R); + S = &(ctx->verify_data.eddsa.S); + hsize = ctx->h->digest_size; + + pub_key = ctx->pub_key; + shortw_curve = &(pub_key->params->ec_curve); + alpha_montgomery = &(pub_key->params->ec_alpha_montgomery); + gamma_montgomery = &(pub_key->params->ec_gamma_montgomery); + alpha_edwards = &(pub_key->params->ec_alpha_edwards); + gen_cofactor = &(pub_key->params->ec_gen_cofactor); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + h_ctx = &(ctx->verify_data.eddsa.h_ctx); + h_ctx_pre_hash = &(ctx->verify_data.eddsa.h_ctx_pre_hash); + + /* Sanity check on hash types */ + MUST_HAVE((ctx->h->type == get_eddsa_hash_type(key_type)), ret, err); + + /* Check given signature length is the expected one */ + MUST_HAVE((siglen == EDDSA_SIGLEN(hsize)), ret, err); + MUST_HAVE((siglen == (EDDSA_R_LEN(hsize) + EDDSA_S_LEN(hsize))), ret, err); + + /* Initialize the hash context */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(h_ctx); EG(ret, err); + ret = ctx->h->hfunc_init(h_ctx_pre_hash); EG(ret, err); +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519CTX){ + /* As per RFC8032, for EDDSA25519CTX the context SHOULD NOT be empty */ + MUST_HAVE((ctx->adata != NULL), ret, err); + ret = dom2(0, ctx->adata, ctx->adata_len, ctx->h, h_ctx); EG(ret, err); + } + if(key_type == EDDSA25519PH){ + ret = dom2(1, ctx->adata, ctx->adata_len, ctx->h, h_ctx); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448){ + ret = dom4(0, ctx->adata, ctx->adata_len, ctx->h, h_ctx); EG(ret, err); + } + if(key_type == EDDSA448PH){ + ret = dom4(1, ctx->adata, ctx->adata_len, ctx->h, h_ctx); EG(ret, err); + } +#endif + /* Import R and S values from signature buffer */ + /*******************************/ + /* Import R as an Edwards point */ + ret = curve_shortw_to_edwards(shortw_curve, &crv_edwards, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + /* NOTE: non canonical R are checked and rejected here */ + ret = eddsa_decode_point(&R, &crv_edwards, alpha_edwards, &sig[0], + EDDSA_R_LEN(hsize), key_type); EG(ret, err); + dbg_ec_edwards_point_print("R", &R); + /* Transfer our public point R to Weierstrass */ + ret = aff_pt_edwards_to_prj_pt_shortw(&R, shortw_curve, _R, alpha_edwards); EG(ret, err); + /* Update the hash with the encoded R */ + ret = ctx->h->hfunc_update(h_ctx, &sig[0], EDDSA_R_LEN(hsize)); EG(ret, err); + + /*******************************/ + /* Import S as an integer */ + ret = eddsa_decode_integer(S, &sig[EDDSA_R_LEN(hsize)], EDDSA_S_LEN(hsize)); EG(ret, err); + /* Reject S if it is not reduced modulo q */ + ret = nn_cmp(S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + dbg_nn_print("S", S); + + /*******************************/ + /* Encode the public key + * NOTE: since we deal with a public key transfered to Weierstrass, + * encoding checking has been handled elsewhere. + */ + /* Reject the signature if the public key is one of small order points. + * We multiply by the cofactor: since this is a public verification, + * we use a basic double and add algorithm. + */ + ret = _prj_pt_unprotected_mult(&_Tmp, gen_cofactor, pub_key_y); EG(ret, err); + /* Reject the signature if we have point at infinity here as this means + * that the public key is of small order. + */ + ret = prj_pt_iszero(&_Tmp, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Transfer the public key to Edwards */ + ret = prj_pt_shortw_to_aff_pt_edwards(pub_key_y, &crv_edwards, &A, alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("A", &A); + MUST_HAVE((EDDSA_R_LEN(hsize) <= sizeof(buff)), ret, err); + /* NOTE: we use the hash buffer as a temporary buffer */ + ret = eddsa_encode_point(&A, alpha_edwards, buff, EDDSA_R_LEN(hsize), key_type); EG(ret, err); + + /* Update the hash with the encoded public key */ + ret = ctx->h->hfunc_update(h_ctx, buff, EDDSA_R_LEN(hsize)); EG(ret, err); + + /* Context magic set */ + ctx->verify_data.eddsa.magic = EDDSA_VERIFY_MAGIC; + + err: + PTR_NULLIFY(q); + PTR_NULLIFY(_R); + PTR_NULLIFY(S); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(gen_cofactor); + PTR_NULLIFY(pub_key_y); + + ec_edwards_crv_uninit(&crv_edwards); + aff_pt_edwards_uninit(&A); + aff_pt_edwards_uninit(&R); + prj_pt_uninit(&_Tmp); + + return ret; +} + +int _eddsa_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + ec_alg_type key_type = UNKNOWN_ALG; + u8 use_message_pre_hash = 0; + hash_context *h_ctx; + hash_context *h_ctx_pre_hash; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EDDSA + * verification one and we do not update() or finalize() + * before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + EDDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.eddsa), ret, err); + + key_type = ctx->pub_key->key_type; + h_ctx = &(ctx->verify_data.eddsa.h_ctx); + h_ctx_pre_hash = &(ctx->verify_data.eddsa.h_ctx_pre_hash); + + /* Sanity check on hash types */ + MUST_HAVE(ctx->h->type == get_eddsa_hash_type(key_type), ret, err); + + /* Do we use the raw message or its PH(M) hashed version? */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + use_message_pre_hash = 1; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + use_message_pre_hash = 1; + } +#endif + /* 2. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + if(use_message_pre_hash == 1){ + /* In PH mode, update the dedicated hash context */ + ret = ctx->h->hfunc_update(h_ctx_pre_hash, + chunk, chunklen); EG(ret, err); + } + else{ + /* In normal mode, update the nominal hash context */ + ret = ctx->h->hfunc_update(h_ctx, chunk, chunklen); EG(ret, err); + } + +err: + VAR_ZEROIFY(use_message_pre_hash); + + return ret; +} + +int _eddsa_verify_finalize(struct ec_verify_context *ctx) +{ + prj_pt_src_t G, _R, A; + prj_pt _Tmp1, _Tmp2; + nn_src_t q, S; + nn h; + u16 hsize; + u8 hash[MAX_DIGEST_SIZE]; + nn_src_t gen_cofactor; + int ret, iszero, cmp; + ec_alg_type key_type = UNKNOWN_ALG; + u8 use_message_pre_hash = 0; + u16 use_message_pre_hash_hsize = 0; + hash_context *h_ctx; + hash_context *h_ctx_pre_hash; + + _Tmp1.magic = _Tmp2.magic = h.magic = WORD(0); + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EDDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + EDDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.eddsa), ret, err); + + /* Zero init points */ + ret = local_memset(&_Tmp1, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&_Tmp2, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + A = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + hsize = ctx->h->digest_size; + S = &(ctx->verify_data.eddsa.S); + _R = &(ctx->verify_data.eddsa._R); + gen_cofactor = &(ctx->pub_key->params->ec_gen_cofactor); + key_type = ctx->pub_key->key_type; + h_ctx = &(ctx->verify_data.eddsa.h_ctx); + h_ctx_pre_hash = &(ctx->verify_data.eddsa.h_ctx_pre_hash); + + /* Sanity check on hash types */ + MUST_HAVE((ctx->h->type == get_eddsa_hash_type(key_type)), ret, err); + + /* Do we use the raw message or its PH(M) hashed version? */ +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519PH){ + use_message_pre_hash = 1; + use_message_pre_hash_hsize = hsize; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448PH){ + use_message_pre_hash = 1; + /* NOTE: as per RFC8032, EDDSA448PH uses + * SHAKE256 with 64 bytes output. + */ + use_message_pre_hash_hsize = 64; + } +#endif + + /* Reject S if it is not reduced modulo q */ + ret = nn_cmp(S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + + MUST_HAVE((hsize <= sizeof(hash)), ret, err); + + /* 2. Finish our computation of h = H(R || A || M) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + /* Update the hash with the message or its hash for the PH versions */ + if(use_message_pre_hash == 1){ + ret = ctx->h->hfunc_finalize(h_ctx_pre_hash, hash); EG(ret, err); + MUST_HAVE((use_message_pre_hash_hsize <= hsize), ret, err); + ret = ctx->h->hfunc_update(h_ctx, hash, use_message_pre_hash_hsize); EG(ret, err); + } + ret = ctx->h->hfunc_finalize(h_ctx, hash); EG(ret, err); + dbg_buf_print("hash = H(R || A || PH(M))", hash, hsize); + + /* 3. Import our hash as a NN and reduce it modulo q */ + ret = eddsa_decode_integer(&h, hash, hsize); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); + dbg_nn_print("h = ", &h); + +#if defined(WITH_SIG_EDDSA448) + if((key_type == EDDSA448) || (key_type == EDDSA448PH)){ + /* When dealing with EDDSA448, because of our 4-isogeny between Edwars448 and Ed448 + * mapping base point to four times base point, we actually multiply our public key by 4 here + * to be inline with the other computations (the public key stored in Weierstrass ) + */ + ret = nn_lshift(&h, &h, 2); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); + } +#endif + /* 4. Compute (S * G) - R - (h * A) */ + ret = prj_pt_mul(&_Tmp1, S, G); EG(ret, err); + ret = prj_pt_neg(&_Tmp2, _R); EG(ret, err); + ret = prj_pt_add(&_Tmp1, &_Tmp1, &_Tmp2); EG(ret, err); + ret = prj_pt_mul(&_Tmp2, &h, A); EG(ret, err); + ret = prj_pt_neg(&_Tmp2, &_Tmp2); EG(ret, err); + ret = prj_pt_add(&_Tmp1, &_Tmp1, &_Tmp2); EG(ret, err); + + /* 5. We use cofactored multiplication, so multiply by the cofactor: + * since this is a public verification, we use a basic double and add + * algorithm. + */ + ret = _prj_pt_unprotected_mult(&_Tmp2, gen_cofactor, &_Tmp1); EG(ret, err); + + /* Reject the signature if we do not have point at infinity here */ + ret = prj_pt_iszero(&_Tmp2, &iszero); EG(ret, err); + ret = iszero ? 0 : -1; + +err: + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.eddsa), 0, sizeof(eddsa_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(G); + PTR_NULLIFY(A); + PTR_NULLIFY(q); + PTR_NULLIFY(S); + PTR_NULLIFY(_R); + PTR_NULLIFY(gen_cofactor); + VAR_ZEROIFY(hsize); + VAR_ZEROIFY(use_message_pre_hash); + VAR_ZEROIFY(use_message_pre_hash_hsize); + + nn_uninit(&h); + prj_pt_uninit(&_Tmp1); + prj_pt_uninit(&_Tmp2); + + return ret; +} + +/* Batch verification function: + * This function takes multiple signatures/messages/public keys, and + * checks all the signatures. + * + * This returns 0 if *all* the signatures are correct, and -1 if at least + * one signature is not correct. + * + * NOTE: the "no_memory" version is not optimized and straightforwardly + * checks for the signature using naive sums. See below for an optimized + * Bos-Coster version (but requiring additional memory to work). + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _eddsa_verify_batch_no_memory(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len) +{ + nn_src_t q = NULL; + ec_edwards_crv crv_edwards; + aff_pt_edwards R, A; + prj_pt_src_t G = NULL; + prj_pt _Tmp, _R_sum, _A_sum; + nn S, S_sum, z, h; + u8 hash[MAX_DIGEST_SIZE]; + int ret, iszero, cmp; + u16 hsize; + const ec_pub_key *pub_key, *pub_key0; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + nn_src_t gen_cofactor = NULL; + prj_pt_src_t pub_key_y; + hash_context h_ctx; + hash_context h_ctx_pre_hash; + u8 use_message_pre_hash = 0; + u16 use_message_pre_hash_hsize = 0; + const hash_mapping *hm; + ec_alg_type key_type = UNKNOWN_ALG; + u32 i; + + R.magic = S.magic = S_sum.magic = crv_edwards.magic = WORD(0); + _Tmp.magic = _R_sum.magic = _A_sum.magic = WORD(0); + z.magic = h.magic = WORD(0); + + /* First, some sanity checks */ + MUST_HAVE((s != NULL) && (pub_keys != NULL) && (m != NULL) && (adata != NULL), ret, err); + /* We need at least one element in our batch data bags */ + MUST_HAVE((num > 0), ret, err); + + + /* Zero init our local data */ + ret = local_memset(&crv_edwards, 0, sizeof(ec_edwards_crv)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(&A, 0, sizeof(aff_pt_edwards)); EG(ret, err); + ret = local_memset(&R, 0, sizeof(aff_pt_edwards)); EG(ret, err); + ret = local_memset(&_R_sum, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&_A_sum, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&_Tmp, 0, sizeof(prj_pt)); EG(ret, err); + + pub_key0 = pub_keys[0]; + MUST_HAVE((pub_key0 != NULL), ret, err); + + /* Get our hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + hsize = hm->digest_size; + MUST_HAVE((hm != NULL), ret, err); + + /* Do we use the raw message or its PH(M) hashed version? */ +#if defined(WITH_SIG_EDDSA25519) + if(sig_type == EDDSA25519PH){ + use_message_pre_hash = 1; + use_message_pre_hash_hsize = hsize; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(sig_type == EDDSA448PH){ + use_message_pre_hash = 1; + /* NOTE: as per RFC8032, EDDSA448PH uses + * SHAKE256 with 64 bytes output. + */ + use_message_pre_hash_hsize = 64; + } +#endif + + for(i = 0; i < num; i++){ + u8 siglen; + const u8 *sig = NULL; + + ret = eddsa_pub_key_sanity_check(pub_keys[i]); EG(ret, err); + + /* Make things more readable */ + pub_key = pub_keys[i]; + + /* Sanity check that all our public keys have the same parameters */ + MUST_HAVE((pub_key->params) == (pub_key0->params), ret, err); + + q = &(pub_key->params->ec_gen_order); + shortw_curve = &(pub_key->params->ec_curve); + alpha_montgomery = &(pub_key->params->ec_alpha_montgomery); + gamma_montgomery = &(pub_key->params->ec_gamma_montgomery); + alpha_edwards = &(pub_key->params->ec_alpha_edwards); + gen_cofactor = &(pub_key->params->ec_gen_cofactor); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + G = &(pub_key->params->ec_gen); + + /* Check the key type versus the algorithm */ + MUST_HAVE((key_type == sig_type), ret, err); + + if(i == 0){ + /* Initialize our sums to zero/point at infinity */ + ret = nn_init(&S_sum, 0); EG(ret, err); + ret = prj_pt_init(&_R_sum, shortw_curve); EG(ret, err); + ret = prj_pt_zero(&_R_sum); EG(ret, err); + ret = prj_pt_init(&_A_sum, shortw_curve); EG(ret, err); + ret = prj_pt_zero(&_A_sum); EG(ret, err); + ret = nn_init(&z, 0); EG(ret, err); + ret = nn_init(&h, 0); EG(ret, err); + } + +gen_z_again: + /* Get a random z for randomizing the linear combination */ + ret = nn_get_random_len(&z, (hsize / 4)); EG(ret, err); + ret = nn_iszero(&z, &iszero); EG(ret, err); + if(iszero){ + goto gen_z_again; + } + + /* Sanity check on hash types */ + MUST_HAVE((hash_type == get_eddsa_hash_type(key_type)), ret, err); + + /* Check given signature length is the expected one */ + siglen = s_len[i]; + sig = s[i]; + MUST_HAVE((siglen == EDDSA_SIGLEN(hsize)), ret, err); + MUST_HAVE((siglen == (EDDSA_R_LEN(hsize) + EDDSA_S_LEN(hsize))), ret, err); + + /* Initialize the hash context */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(hm); EG(ret, err); + ret = hm->hfunc_init(&h_ctx); EG(ret, err); + ret = hm->hfunc_init(&h_ctx_pre_hash); EG(ret, err); +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519CTX){ + /* As per RFC8032, for EDDSA25519CTX the context SHOULD NOT be empty */ + MUST_HAVE((adata[i] != NULL), ret, err); + ret = dom2(0, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA25519PH){ + ret = dom2(1, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448){ + ret = dom4(0, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA448PH){ + ret = dom4(1, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } +#endif + /* Import R and S values from signature buffer */ + /*******************************/ + /* Import R as an Edwards point */ + ret = curve_shortw_to_edwards(shortw_curve, &crv_edwards, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + /* NOTE: non canonical R are checked and rejected here */ + ret = eddsa_decode_point(&R, &crv_edwards, alpha_edwards, &sig[0], + EDDSA_R_LEN(hsize), key_type); EG(ret, err); + dbg_ec_edwards_point_print("R", &R); + /* Transfer our public point R to Weierstrass */ + ret = aff_pt_edwards_to_prj_pt_shortw(&R, shortw_curve, &_Tmp, alpha_edwards); EG(ret, err); + /* Update the hash with the encoded R */ + ret = hm->hfunc_update(&h_ctx, &sig[0], EDDSA_R_LEN(hsize)); EG(ret, err); + /* Multiply by z. + */ + ret = _prj_pt_unprotected_mult(&_Tmp, &z, &_Tmp); EG(ret, err); + /* Add to the sum */ + ret = prj_pt_add(&_R_sum, &_R_sum, &_Tmp); EG(ret, err); + + /*******************************/ + /* Import S as an integer */ + ret = eddsa_decode_integer(&S, &sig[EDDSA_R_LEN(hsize)], EDDSA_S_LEN(hsize)); EG(ret, err); + /* Reject S if it is not reduced modulo q */ + ret = nn_cmp(&S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + dbg_nn_print("S", &S); + + /* Add z S to the sum */ + ret = nn_mul(&S, &S, &z); EG(ret, err); + ret = nn_mod(&S, &S, q); EG(ret, err); + ret = nn_mod_add(&S_sum, &S_sum, &S, q); EG(ret, err); + + /*******************************/ + /* Encode the public key + * NOTE: since we deal with a public key transfered to Weierstrass, + * encoding checking has been handled elsewhere. + */ + /* Reject the signature if the public key is one of small order points. + * We multiply by the cofactor: since this is a public verification, + * we use a basic double and add algorithm. + */ + ret = _prj_pt_unprotected_mult(&_Tmp, gen_cofactor, pub_key_y); EG(ret, err); + /* Reject the signature if we have point at infinity here as this means + * that the public key is of small order. + */ + ret = prj_pt_iszero(&_Tmp, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Transfer the public key to Edwards */ + ret = prj_pt_shortw_to_aff_pt_edwards(pub_key_y, &crv_edwards, &A, alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("A", &A); + MUST_HAVE((EDDSA_R_LEN(hsize) <= sizeof(hash)), ret, err); + /* NOTE: we use the hash buffer as a temporary buffer */ + ret = eddsa_encode_point(&A, alpha_edwards, hash, EDDSA_R_LEN(hsize), key_type); EG(ret, err); + + /* Update the hash with the encoded public key */ + ret = hm->hfunc_update(&h_ctx, hash, EDDSA_R_LEN(hsize)); EG(ret, err); + /* Finish our computation of h = H(R || A || M) */ + /* Update the hash with the message or its hash for the PH versions */ + if(use_message_pre_hash == 1){ + ret = hm->hfunc_update(&h_ctx_pre_hash, m[i], m_len[i]); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx_pre_hash, hash); EG(ret, err); + MUST_HAVE((use_message_pre_hash_hsize <= hsize), ret, err); + ret = hm->hfunc_update(&h_ctx, hash, use_message_pre_hash_hsize); EG(ret, err); + } + else{ + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + } + ret = hm->hfunc_finalize(&h_ctx, hash); EG(ret, err); + dbg_buf_print("hash = H(R || A || PH(M))", hash, hsize); + + /* Import our hash as a NN and reduce it modulo q */ + ret = eddsa_decode_integer(&h, hash, hsize); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); + dbg_nn_print("h = ", &h); +#if defined(WITH_SIG_EDDSA448) + if((key_type == EDDSA448) || (key_type == EDDSA448PH)){ + /* When dealing with EDDSA448, because of our 4-isogeny between Edwars448 and Ed448 + * mapping base point to four times base point, we actually multiply our public key by 4 here + * to be inline with the other computations (the public key stored in Weierstrass ) + */ + ret = nn_lshift(&h, &h, 2); EG(ret, err); + ret = nn_mod(&h, &h, q); EG(ret, err); + } +#endif + + /* Multiply by (z * h) mod q. + * NOTE: we use unprotected scalar multiplication since this is a + * public operation. + */ + ret = nn_mul(&z, &z, &h); EG(ret, err); + ret = nn_mod(&z, &z, q); EG(ret, err); + ret = _prj_pt_unprotected_mult(&_Tmp, &z, &_Tmp); EG(ret, err); + /* Add to the sum */ + ret = prj_pt_add(&_A_sum, &_A_sum, &_Tmp); EG(ret, err); + } + + /* Sanity check */ + MUST_HAVE((gen_cofactor != NULL) && (q != NULL) && (G != NULL), ret, err); + + /* Multiply the S sum by the cofactor */ + ret = nn_mul(&S_sum, &S_sum, gen_cofactor); EG(ret, err); + ret = nn_mod(&S_sum, &S_sum, q); EG(ret, err); + /* Negate it. NOTE: -x mod q is (q - x) mod q, i.e. (q - x) when x is reduced */ + ret = nn_mod_neg(&S_sum, &S_sum, q); EG(ret, err); + /* Multiply this by the generator */ + ret = _prj_pt_unprotected_mult(&_Tmp, &S_sum, G); EG(ret, err); + + /* Multiply the R sum by the cofactor */ + ret = _prj_pt_unprotected_mult(&_R_sum, gen_cofactor, &_R_sum); EG(ret, err); + + /* Now add the three sums */ + ret = prj_pt_add(&_Tmp, &_Tmp, &_A_sum); + ret = prj_pt_add(&_Tmp, &_Tmp, &_R_sum); + + /* Reject the signature if we do not have point at infinity here */ + ret = prj_pt_iszero(&_Tmp, &iszero); EG(ret, err); + ret = iszero ? 0 : -1; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(pub_key0); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(gen_cofactor); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(G); + + ec_edwards_crv_uninit(&crv_edwards); + aff_pt_edwards_uninit(&A); + aff_pt_edwards_uninit(&R); + prj_pt_uninit(&_R_sum); + prj_pt_uninit(&_A_sum); + prj_pt_uninit(&_Tmp); + nn_uninit(&S); + nn_uninit(&S_sum); + nn_uninit(&z); + nn_uninit(&h); + + return ret; + +} + +/* + * The following batch verification uses the Bos-Coster algorithm, presented e.g. in + * https://ed25519.cr.yp.to/ed25519-20110705.pdf + * + * The Bos-Coster algorithm allows to optimize a sum of scalar multiplications using + * addition chains. + * + */ +ATTRIBUTE_WARN_UNUSED_RET static int _eddsa_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + nn_src_t q = NULL; + ec_edwards_crv crv_edwards; + aff_pt_edwards R, A; + prj_pt_src_t G = NULL; + nn S, z; + u8 hash[MAX_DIGEST_SIZE]; + int ret, iszero, cmp; + u16 hsize; + const ec_pub_key *pub_key, *pub_key0; + ec_shortw_crv_src_t shortw_curve; + fp_src_t alpha_montgomery; + fp_src_t gamma_montgomery; + fp_src_t alpha_edwards; + nn_src_t gen_cofactor = NULL; + prj_pt_src_t pub_key_y; + hash_context h_ctx; + hash_context h_ctx_pre_hash; + u8 use_message_pre_hash = 0; + u16 use_message_pre_hash_hsize = 0; + const hash_mapping *hm; + ec_alg_type key_type = UNKNOWN_ALG; + /* NN numbers and points pointers */ + verify_batch_scratch_pad *elements = scratch_pad_area; + u32 i; + u64 expected_len; + bitcnt_t q_bit_len = 0; + + S.magic = z.magic = crv_edwards.magic = WORD(0); + + /* First, some sanity checks */ + MUST_HAVE((s != NULL) && (pub_keys != NULL) && (m != NULL) && (adata != NULL), ret, err); + MUST_HAVE((scratch_pad_area_len != NULL), ret, err); + MUST_HAVE(((2 * num) >= num), ret, err); + MUST_HAVE(((2 * num) + 1) >= num, ret, err); + + /* In oder to apply the algorithm, we must have at least two + * elements to verify. If this is not the case, we fallback to + * the regular "no memory" version. + */ + if(num <= 1){ + if(scratch_pad_area == NULL){ + /* We do not require any memory in this case */ + (*scratch_pad_area_len) = 0; + ret = 0; + goto err; + } + else{ + ret = _eddsa_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); + goto err; + } + } + + expected_len = ((2 * num) + 1) * sizeof(verify_batch_scratch_pad); + MUST_HAVE((expected_len < 0xffffffff), ret, err); + + if(scratch_pad_area == NULL){ + /* Return the needed size: we need to keep track of (2 * num) + 1 NN numbers + * and (2 * num) + 1 projective points, plus (2 * num) + 1 indices + */ + (*scratch_pad_area_len) = (u32)expected_len; + ret = 0; + goto err; + } + else{ + MUST_HAVE((*scratch_pad_area_len) >= expected_len, ret, err); + } + + /********************************************/ + /****** Initialize elements *****************/ + /* Zero init our local data */ + ret = local_memset(&crv_edwards, 0, sizeof(ec_edwards_crv)); EG(ret, err); + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memset(&A, 0, sizeof(aff_pt_edwards)); EG(ret, err); + ret = local_memset(&R, 0, sizeof(aff_pt_edwards)); EG(ret, err); + + pub_key0 = pub_keys[0]; + MUST_HAVE((pub_key0 != NULL), ret, err); + + /* Get our hash mapping */ + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + hsize = hm->digest_size; + MUST_HAVE((hm != NULL), ret, err); + + /* Do we use the raw message or its PH(M) hashed version? */ +#if defined(WITH_SIG_EDDSA25519) + if(sig_type == EDDSA25519PH){ + use_message_pre_hash = 1; + use_message_pre_hash_hsize = hsize; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(sig_type == EDDSA448PH){ + use_message_pre_hash = 1; + /* NOTE: as per RFC8032, EDDSA448PH uses + * SHAKE256 with 64 bytes output. + */ + use_message_pre_hash_hsize = 64; + } +#endif + + /* Compute our original numbers and points */ + MUST_HAVE((num >= 1), ret, err); + for(i = 0; i < num; i++){ + u8 siglen; + const u8 *sig = NULL; + + ret = eddsa_pub_key_sanity_check(pub_keys[i]); EG(ret, err); + + /* Make things more readable */ + pub_key = pub_keys[i]; + + /* Sanity check that all our public keys have the same parameters */ + MUST_HAVE((pub_key->params) == (pub_key0->params), ret, err); + + q = &(pub_key->params->ec_gen_order); + shortw_curve = &(pub_key->params->ec_curve); + alpha_montgomery = &(pub_key->params->ec_alpha_montgomery); + gamma_montgomery = &(pub_key->params->ec_gamma_montgomery); + alpha_edwards = &(pub_key->params->ec_alpha_edwards); + gen_cofactor = &(pub_key->params->ec_gen_cofactor); + pub_key_y = &(pub_key->y); + key_type = pub_key->key_type; + G = &(pub_key->params->ec_gen); + q_bit_len = pub_key->params->ec_gen_order_bitlen; + + /* Check the key type versus the algorithm */ + MUST_HAVE((key_type == sig_type), ret, err); + + if(i == 0){ + /* Initialize our numbers */ + ret = nn_init(&z, 0); EG(ret, err); + ret = nn_init(&S, 0); EG(ret, err); + ret = nn_init(&elements[(2 * num)].number, 0); EG(ret, err); + ret = _prj_pt_unprotected_mult(&elements[(2 * num)].point, gen_cofactor, G); EG(ret, err); + } + +gen_z_again: + /* Get a random z for randomizing the linear combination */ + ret = nn_get_random_len(&z, (hsize / 4)); EG(ret, err); + ret = nn_iszero(&z, &iszero); EG(ret, err); + if(iszero){ + goto gen_z_again; + } + + /* Sanity check on hash types */ + MUST_HAVE((hash_type == get_eddsa_hash_type(key_type)), ret, err); + + /* Check given signature length is the expected one */ + siglen = s_len[i]; + sig = s[i]; + MUST_HAVE((siglen == EDDSA_SIGLEN(hsize)), ret, err); + MUST_HAVE((siglen == (EDDSA_R_LEN(hsize) + EDDSA_S_LEN(hsize))), ret, err); + + /* Initialize the hash context */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(hm); EG(ret, err); + ret = hm->hfunc_init(&h_ctx); EG(ret, err); + ret = hm->hfunc_init(&h_ctx_pre_hash); EG(ret, err); +#if defined(WITH_SIG_EDDSA25519) + if(key_type == EDDSA25519CTX){ + /* As per RFC8032, for EDDSA25519CTX the context SHOULD NOT be empty */ + MUST_HAVE((adata[i] != NULL), ret, err); + ret = dom2(0, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA25519PH){ + ret = dom2(1, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(key_type == EDDSA448){ + ret = dom4(0, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } + if(key_type == EDDSA448PH){ + ret = dom4(1, adata[i], adata_len[i], hm, &h_ctx); EG(ret, err); + } +#endif + /* Import R and S values from signature buffer */ + /*******************************/ + /* Import R as an Edwards point */ + ret = curve_shortw_to_edwards(shortw_curve, &crv_edwards, alpha_montgomery, + gamma_montgomery, alpha_edwards); EG(ret, err); + /* NOTE: non canonical R are checked and rejected here */ + ret = eddsa_decode_point(&R, &crv_edwards, alpha_edwards, &sig[0], + EDDSA_R_LEN(hsize), key_type); EG(ret, err); + dbg_ec_edwards_point_print("R", &R); + /* Transfer our public point R to Weierstrass */ + ret = aff_pt_edwards_to_prj_pt_shortw(&R, shortw_curve, &elements[i].point, alpha_edwards); EG(ret, err); + /* Update the hash with the encoded R */ + ret = hm->hfunc_update(&h_ctx, &sig[0], EDDSA_R_LEN(hsize)); EG(ret, err); + /* Store 8 * z in our number to be multiplied with R */ + ret = nn_init(&elements[i].number, 0); EG(ret, err); + ret = nn_mul(&elements[i].number, gen_cofactor, &z); EG(ret, err); + ret = nn_mod(&elements[i].number, &elements[i].number, q); EG(ret, err); + + /*******************************/ + /* Import S as an integer */ + ret = eddsa_decode_integer(&S, &sig[EDDSA_R_LEN(hsize)], EDDSA_S_LEN(hsize)); EG(ret, err); + /* Reject S if it is not reduced modulo q */ + ret = nn_cmp(&S, q, &cmp); EG(ret, err); + MUST_HAVE((cmp < 0), ret, err); + dbg_nn_print("S", &S); + + /* Add (- z S) to the sum */ + ret = nn_mul(&S, &S, &z); EG(ret, err); + ret = nn_mod(&S, &S, q); EG(ret, err); + ret = nn_mod_neg(&S, &S, q); EG(ret, err); /* Negate S */ + ret = nn_mod_add(&elements[(2 * num)].number, &elements[(2 * num)].number, &S, q); EG(ret, err); + + /*******************************/ + /* Encode the public key + * NOTE: since we deal with a public key transfered to Weierstrass, + * encoding checking has been handled elsewhere. + */ + /* Reject the signature if the public key is one of small order points. + * We multiply by the cofactor: since this is a public verification, + * we use a basic double and add algorithm. + */ + ret = _prj_pt_unprotected_mult(&elements[num + i].point, gen_cofactor, pub_key_y); EG(ret, err); + /* Reject the signature if we have point at infinity here as this means + * that the public key is of small order. + */ + ret = prj_pt_iszero(&elements[num + i].point, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Transfer the public key to Edwards */ + ret = prj_pt_shortw_to_aff_pt_edwards(pub_key_y, &crv_edwards, &A, alpha_edwards); EG(ret, err); + dbg_ec_edwards_point_print("A", &A); + MUST_HAVE((EDDSA_R_LEN(hsize) <= sizeof(hash)), ret, err); + /* NOTE: we use the hash buffer as a temporary buffer */ + ret = eddsa_encode_point(&A, alpha_edwards, hash, EDDSA_R_LEN(hsize), key_type); EG(ret, err); + + /* Update the hash with the encoded public key */ + ret = hm->hfunc_update(&h_ctx, hash, EDDSA_R_LEN(hsize)); EG(ret, err); + /* Finish our computation of h = H(R || A || M) */ + /* Update the hash with the message or its hash for the PH versions */ + if(use_message_pre_hash == 1){ + ret = hm->hfunc_update(&h_ctx_pre_hash, m[i], m_len[i]); EG(ret, err); + ret = hm->hfunc_finalize(&h_ctx_pre_hash, hash); EG(ret, err); + MUST_HAVE((use_message_pre_hash_hsize <= hsize), ret, err); + ret = hm->hfunc_update(&h_ctx, hash, use_message_pre_hash_hsize); EG(ret, err); + } + else{ + ret = hm->hfunc_update(&h_ctx, m[i], m_len[i]); EG(ret, err); + } + ret = hm->hfunc_finalize(&h_ctx, hash); EG(ret, err); + dbg_buf_print("hash = H(R || A || PH(M))", hash, hsize); + + /* Import our hash as a NN and reduce it modulo q */ + ret = eddsa_decode_integer(&elements[num + i].number, hash, hsize); EG(ret, err); + ret = nn_mod(&elements[num + i].number, &elements[num + i].number, q); EG(ret, err); + dbg_nn_print("h = ", &elements[num + i].number); +#if defined(WITH_SIG_EDDSA448) + if((key_type == EDDSA448) || (key_type == EDDSA448PH)){ + /* When dealing with EDDSA448, because of our 4-isogeny between Edwars448 and Ed448 + * mapping base point to four times base point, we actually multiply our public key by 4 here + * to be inline with the other computations (the public key stored in Weierstrass ) + */ + ret = nn_lshift(&elements[num + i].number, &elements[num + i].number, 2); EG(ret, err); + ret = nn_mod(&elements[num + i].number, &elements[num + i].number, q); EG(ret, err); + } +#endif + /* Compute by (z * h) mod q. + */ + ret = nn_mul(&elements[num + i].number, &elements[num + i].number, &z); EG(ret, err); + ret = nn_mod(&elements[num + i].number, &elements[num + i].number, q); EG(ret, err); + } + + /* Sanity check */ + MUST_HAVE((gen_cofactor != NULL) && (q != NULL) && (G != NULL) && (q_bit_len != 0), ret, err); + + /********************************************/ + /****** Bos-Coster algorithm ****************/ + ret = ec_verify_bos_coster(elements, (2 * num) + 1, q_bit_len); + if(ret){ + if(ret == -2){ + /* In case of Bos-Coster time out, we fall back to the + * slower regular batch verification. + */ + ret = _eddsa_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + } + goto err; + } + + /* The first element should contain the sum: it should + * be equal to zero. Reject the signature if this is not + * the case. + */ + ret = prj_pt_iszero(&elements[elements[0].index].point, &iszero); EG(ret, err); + ret = iszero ? 0 : -1; + +err: + PTR_NULLIFY(q); + PTR_NULLIFY(pub_key); + PTR_NULLIFY(pub_key0); + PTR_NULLIFY(shortw_curve); + PTR_NULLIFY(alpha_montgomery); + PTR_NULLIFY(gamma_montgomery); + PTR_NULLIFY(alpha_edwards); + PTR_NULLIFY(gen_cofactor); + PTR_NULLIFY(pub_key_y); + PTR_NULLIFY(G); + PTR_NULLIFY(elements); + + /* Unitialize all our scratch_pad_area */ + if((scratch_pad_area != NULL) && (scratch_pad_area_len != NULL)){ + IGNORE_RET_VAL(local_memset((u8*)scratch_pad_area, 0, (*scratch_pad_area_len))); + } + + ec_edwards_crv_uninit(&crv_edwards); + aff_pt_edwards_uninit(&A); + aff_pt_edwards_uninit(&R); + nn_uninit(&S); + nn_uninit(&z); + + return ret; +} + +int eddsa_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + int ret; + + if(scratch_pad_area != NULL){ + MUST_HAVE((scratch_pad_area_len != NULL), ret, err); + ret = _eddsa_verify_batch(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len, + scratch_pad_area, scratch_pad_area_len); EG(ret, err); + } + else{ + ret = _eddsa_verify_batch_no_memory(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len); EG(ret, err); + } + +err: + return ret; +} + +#else /* !(defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448)) */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) */ diff --git a/crypto/libecc/src/sig/fuzzing_ecdsa.c b/crypto/libecc/src/sig/fuzzing_ecdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/fuzzing_ecdsa.c @@ -0,0 +1,434 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_ECDSA) && defined(USE_CRYPTOFUZZ) + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECDSA" +#endif +#include + +/* NOTE: the following versions of ECDSA are "raw" with + * no hash functions and nonce override. They are DANGEROUS and + * should NOT be used in production mode! They are however useful + * for corner cases tests and fuzzing. + */ + +#define ECDSA_SIGN_MAGIC ((word_t)(0x80299a2bf630945bULL)) +#define ECDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == ECDSA_SIGN_MAGIC), ret, err) + +int ecdsa_sign_raw(struct ec_sign_context *ctx, const u8 *input, u8 inputlen, u8 *sig, u8 siglen, const u8 *nonce, u8 noncelen) +{ + const ec_priv_key *priv_key; + prj_pt_src_t G; + /* NOTE: hash here is not really a hash ... */ + u8 hash[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))]; + bitcnt_t rshift, q_bit_len; + prj_pt kG; + nn_src_t q, x; + u8 hsize, q_len; + int ret, iszero, cmp; + nn k, r, e, tmp, s, kinv; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b; + b.magic = WORD(0); +#endif + k.magic = r.magic = e.magic = WORD(0); + tmp.magic = s.magic = kinv.magic = WORD(0); + kG.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an ECDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecdsa), ret, err); + MUST_HAVE((input != NULL) && (sig != NULL), ret, err); + + /* Zero init out poiny */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + q = &(priv_key->params->ec_gen_order); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + G = &(priv_key->params->ec_gen); + q_len = (u8)BYTECEIL(q_bit_len); + x = &(priv_key->x); + hsize = inputlen; + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", &(priv_key->params->ec_gen_order)); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", &(priv_key->params->ec_gen)); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* Check given signature buffer length has the expected size */ + MUST_HAVE((siglen == ECDSA_SIGLEN(q_bit_len)), ret, err); + + /* 1. Compute h = H(m) */ + /* NOTE: here we have raw ECDSA, this is the raw input */ + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE(((u32)inputlen <= sizeof(hash)), ret, err); +#endif + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memcpy(hash, input, hsize); EG(ret, err); + + dbg_buf_print("h", hash, hsize); + + /* + * 2. If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + * Note that it's easier to check if the truncation has + * to be done here but only implement it using a logical + * shift at the beginning of step 3. below once the hash + * has been converted to an integer. + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + + /* + * 3. Compute e = OS2I(h) mod q, i.e. by converting h to an + * integer and reducing it mod q + */ + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + ret = local_memset(hash, 0, hsize); EG(ret, err); + dbg_nn_print("h initial import as nn", &e); + if (rshift) { + ret = nn_rshift_fixedlen(&e, &e, rshift); EG(ret, err); + } + dbg_nn_print("h final import as nn", &e); + ret = nn_mod(&e, &e, q); EG(ret, err); + dbg_nn_print("e", &e); + +/* + NOTE: the restart label is removed in CRYPTOFUZZ mode as + we trigger MUST_HAVE instead of restarting in this mode. + restart: +*/ + /* 4. get a random value k in ]0,q[ */ + /* NOTE: copy our input nonce if not NULL */ + if(nonce != NULL){ + MUST_HAVE((noncelen <= (u8)(BYTECEIL(q_bit_len))), ret, err); + ret = nn_init_from_buf(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = ctx->rand(&k, q); EG(ret, err); + } + dbg_nn_print("k", &k); + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, r and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + + /* 5. Compute W = (W_x,W_y) = kG */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 6. Compute r = W_x mod q */ + ret = nn_mod(&r, &(kG.X.fp_val), q); EG(ret, err); + dbg_nn_print("r", &r); + + /* 7. If r is 0, restart the process at step 4. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Export r */ + ret = nn_export_to_buf(sig, q_len, &r); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Blind r with b */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + + /* Blind the message e */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* tmp = xr mod q */ + ret = nn_mod_mul(&tmp, x, &r, q); EG(ret, err); + dbg_nn_print("x*r mod q", &tmp); + + /* 8. If e == rx, restart the process at step 4. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_cmp(&e, &tmp, &cmp); EG(ret, err); + MUST_HAVE(cmp, ret, err); + + /* 9. Compute s = k^-1 * (xr + e) mod q */ + + /* tmp2 = (e + xr) mod q */ + ret = nn_mod_add(&tmp, &tmp, &e, q); EG(ret, err); + dbg_nn_print("(xr + e) mod q", &tmp); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, we compute (b*k)^-1, and + * b^-1 will automatically unblind (r*x) in the following + */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); +#endif + /* Compute k^-1 mod q */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&kinv, &k, q); EG(ret, err); + + dbg_nn_print("k^-1 mod q", &kinv); + + /* s = k^-1 * tmp2 mod q */ + ret = nn_mod_mul(&s, &tmp, &kinv, q); EG(ret, err); + + dbg_nn_print("s", &s); + + /* 10. If s is 0, restart the process at step 4. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* 11. return (r,s) */ + ret = nn_export_to_buf(sig + q_len, q_len, &s); + + err: + + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&e); + nn_uninit(&tmp); + nn_uninit(&k); + nn_uninit(&kinv); + prj_pt_uninit(&kG); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecdsa), 0, sizeof(ecdsa_sign_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + VAR_ZEROIFY(q_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(rshift); + VAR_ZEROIFY(hsize); + +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif /* USE_SIG_BLINDING */ + + return ret; +} + +/******************************/ +#define ECDSA_VERIFY_MAGIC ((word_t)(0x5155fe73e7fd51beULL)) +#define ECDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == ECDSA_VERIFY_MAGIC), ret, err) + +int ecdsa_verify_raw(struct ec_verify_context *ctx, const u8 *input, u8 inputlen) +{ + prj_pt uG, vY; + prj_pt_t W_prime; + nn e, sinv, uv, r_prime; + prj_pt_src_t G, Y; + /* NOTE: hash here is not really a hash ... */ + u8 hash[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))]; + bitcnt_t rshift, q_bit_len; + nn_src_t q; + nn *s, *r; + u8 hsize; + int ret, iszero, cmp; + + e.magic = sinv.magic = uv.magic = r_prime.magic = WORD(0); + uG.magic = vY.magic = WORD(0); + + /* NOTE: we reuse uG for W_prime to optimize local variables */ + W_prime = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an ECDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecdsa), ret, err); + MUST_HAVE((input != NULL), ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + hsize = inputlen; + r = &(ctx->verify_data.ecdsa.r); + s = &(ctx->verify_data.ecdsa.s); + + /* 2. Compute h = H(m) */ + /* NOTE: here we have raw ECDSA, this is the raw input */ + MUST_HAVE((input != NULL), ret, err); + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE(((u32)inputlen <= sizeof(hash)), ret, err); +#endif + + ret = local_memset(hash, 0, sizeof(hash)); EG(ret, err); + ret = local_memcpy(hash, input, hsize); EG(ret, err); + + dbg_buf_print("h = H(m)", hash, hsize); + + /* + * 3. If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + * Note that it's easier to check here if the truncation + * needs to be done but implement it using a logical + * shift at the beginning of step 3. below once the hash + * has been converted to an integer. + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + + /* + * 4. Compute e = OS2I(h) mod q, by converting h to an integer + * and reducing it mod q + */ + ret = nn_init_from_buf(&e, hash, hsize); EG(ret, err); + ret = local_memset(hash, 0, hsize); EG(ret, err); + dbg_nn_print("h initial import as nn", &e); + if (rshift) { + ret = nn_rshift_fixedlen(&e, &e, rshift); EG(ret, err); + } + dbg_nn_print("h final import as nn", &e); + + ret = nn_mod(&e, &e, q); EG(ret, err); + dbg_nn_print("e", &e); + + /* Compute s^-1 mod q */ + ret = nn_modinv(&sinv, s, q); EG(ret, err); + dbg_nn_print("s", s); + dbg_nn_print("sinv", &sinv); + nn_uninit(s); + + /* 5. Compute u = (s^-1)e mod q */ + ret = nn_mod_mul(&uv, &e, &sinv, q); EG(ret, err); + dbg_nn_print("u = (s^-1)e mod q", &uv); + ret = prj_pt_mul(&uG, &uv, G); EG(ret, err); + + /* 6. Compute v = (s^-1)r mod q */ + ret = nn_mod_mul(&uv, r, &sinv, q); EG(ret, err); + dbg_nn_print("v = (s^-1)r mod q", &uv); + ret = prj_pt_mul(&vY, &uv, Y); EG(ret, err); + + /* 7. Compute W' = uG + vY */ + ret = prj_pt_add(W_prime, &uG, &vY); EG(ret, err); + + /* 8. If W' is the point at infinity, reject the signature. */ + ret = prj_pt_iszero(W_prime, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* 9. Compute r' = W'_x mod q */ + ret = prj_pt_unique(W_prime, W_prime); EG(ret, err); + dbg_nn_print("W'_x", &(W_prime->X.fp_val)); + dbg_nn_print("W'_y", &(W_prime->Y.fp_val)); + ret = nn_mod(&r_prime, &(W_prime->X.fp_val), q); EG(ret, err); + + /* 10. Accept the signature if and only if r equals r' */ + ret = nn_cmp(&r_prime, r, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + + err: + nn_uninit(&r_prime); + nn_uninit(&uv); + nn_uninit(&e); + nn_uninit(&sinv); + prj_pt_uninit(&uG); + prj_pt_uninit(&vY); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecdsa), 0, sizeof(ecdsa_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(W_prime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + VAR_ZEROIFY(rshift); + VAR_ZEROIFY(q_bit_len); + PTR_NULLIFY(q); + PTR_NULLIFY(s); + PTR_NULLIFY(r); + VAR_ZEROIFY(hsize); + + return ret; +} + + +#else /* WITH_SIG_ECDSA && USE_CRYPTOFUZZ */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECDSA */ diff --git a/crypto/libecc/src/sig/fuzzing_ecgdsa.c b/crypto/libecc/src/sig/fuzzing_ecgdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/fuzzing_ecgdsa.c @@ -0,0 +1,391 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_ECGDSA) && defined(USE_CRYPTOFUZZ) + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECGDSA" +#endif +#include + +/* NOTE: the following versions of ECGDSA are "raw" with + * no hash functions and nonce override. They are DANGEROUS and + * should NOT be used in production mode! They are however useful + * for corner cases tests and fuzzing. + */ +#define ECGDSA_SIGN_MAGIC ((word_t)(0xe2f60ea3353ecc9eULL)) +#define ECGDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((const void *)(A)) != NULL) && \ + ((A)->magic == ECGDSA_SIGN_MAGIC), ret, err) + +int ecgdsa_sign_raw(struct ec_sign_context *ctx, const u8 *input, u8 inputlen, u8 *sig, u8 siglen, const u8 *nonce, u8 noncelen) +{ + nn_src_t q, x; + /* NOTE: hash here is not really a hash ... */ + u8 e_buf[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))]; + const ec_priv_key *priv_key; + prj_pt_src_t G; + u8 hsize, r_len, s_len; + bitcnt_t q_bit_len, p_bit_len, rshift; + prj_pt kG; + int ret, iszero; + nn tmp, tmp2, s, e, kr, k, r; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif + tmp.magic = tmp2.magic = s.magic = e.magic = WORD(0); + kr.magic = k.magic = r.magic = WORD(0); + kG.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-GDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECGDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecgdsa), ret, err); + MUST_HAVE((sig != NULL) && (input != NULL), ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + x = &(priv_key->x); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + p_bit_len = priv_key->params->ec_fp.p_bitlen; + MUST_HAVE(((u32)BYTECEIL(p_bit_len) <= NN_MAX_BYTE_LEN), ret, err); + r_len = (u8)ECGDSA_R_LEN(q_bit_len); + s_len = (u8)ECGDSA_S_LEN(q_bit_len); + hsize = inputlen; + + MUST_HAVE((siglen == ECGDSA_SIGLEN(q_bit_len)), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", G); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* 1. Compute h = H(m) */ + /* NOTE: here we have raw ECGDSA, this is the raw input */ + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE(((u32)inputlen <= sizeof(e_buf)), ret, err); +#endif + ret = local_memset(e_buf, 0, sizeof(e_buf)); EG(ret, err); + ret = local_memcpy(e_buf, input, hsize); EG(ret, err); + dbg_buf_print("H(m)", e_buf, hsize); + + /* + * If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + ret = nn_init_from_buf(&tmp, e_buf, hsize); EG(ret, err); + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&tmp, &tmp, rshift); EG(ret, err); + } + dbg_nn_print("H(m) truncated as nn", &tmp); + + /* + * 2. Convert h to an integer and then compute e = -h mod q, + * i.e. compute e = - OS2I(h) mod q + * + * Because we only support positive integers, we compute + * e = q - (h mod q) (except when h is 0). + */ + ret = nn_mod(&tmp2, &tmp, q); EG(ret, err); + ret = nn_mod_neg(&e, &tmp2, q); EG(ret, err); + +/* + NOTE: the restart label is removed in CRYPTOFUZZ mode as + we trigger MUST_HAVE instead of restarting in this mode. + restart: +*/ + /* 3. Get a random value k in ]0,q[ */ + /* NOTE: copy our input nonce if not NULL */ + if(nonce != NULL){ + MUST_HAVE((noncelen <= (u8)(BYTECEIL(q_bit_len))), ret, err); + ret = nn_init_from_buf(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = ctx->rand(&k, q); EG(ret, err); + } + +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, e and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + + /* 4. Compute W = kG = (Wx, Wy) */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 5. Compute r = Wx mod q */ + ret = nn_mod(&r, &(kG.X.fp_val), q); EG(ret, err); + dbg_nn_print("r", &r); + + /* 6. If r is 0, restart the process at step 4. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* Export r */ + ret = nn_export_to_buf(sig, r_len, &r); EG(ret, err); + +#ifdef USE_SIG_BLINDING + /* Blind e and r with b */ + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + /* 7. Compute s = x(kr + e) mod q */ + ret = nn_mod_mul(&kr, &k, &r, q); EG(ret, err); + ret = nn_mod_add(&tmp2, &kr, &e, q); EG(ret, err); + ret = nn_mod_mul(&s, x, &tmp2, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind s */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif + dbg_nn_print("s", &s); + + /* 8. If s is 0, restart the process at step 4. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* 9. Return (r,s) */ + ret = nn_export_to_buf(sig + r_len, s_len, &s); + + err: + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&tmp2); + nn_uninit(&tmp); + nn_uninit(&e); + nn_uninit(&kr); + nn_uninit(&k); + + prj_pt_uninit(&kG); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecgdsa), 0, sizeof(ecgdsa_sign_data))); + } + + /* Clean what remains on the stack */ + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(hsize); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif /* USE_SIG_BLINDING */ + + return ret; +} + +/******************************/ +#define ECGDSA_VERIFY_MAGIC ((word_t)(0xd4da37527288d1b6ULL)) +#define ECGDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((const void *)(A)) != NULL) && \ + ((A)->magic == ECGDSA_VERIFY_MAGIC), ret, err) + +int ecgdsa_verify_raw(struct ec_verify_context *ctx, const u8 *input, u8 inputlen) +{ + nn tmp, e, r_prime, rinv, uv, *r, *s; + prj_pt uG, vY; + prj_pt_t Wprime; + prj_pt_src_t G, Y; + /* NOTE: hash here is not really a hash ... */ + u8 e_buf[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))]; + nn_src_t q; + u8 hsize; + bitcnt_t q_bit_len, rshift; + int ret, cmp; + + tmp.magic = e.magic = r_prime.magic = rinv.magic = uv.magic = WORD(0); + uG.magic = vY.magic = WORD(0); + + /* NOTE: we reuse uG for Wprime to optimize local variables */ + Wprime = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-GDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECGDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecgdsa), ret, err); + MUST_HAVE((input != NULL), ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + r = &(ctx->verify_data.ecgdsa.r); + s = &(ctx->verify_data.ecgdsa.s); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + hsize = inputlen; + + /* 2. Compute h = H(m) */ + /* NOTE: here we have raw ECGDSA, this is the raw input */ + MUST_HAVE((input != NULL), ret, err); + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE(((u32)inputlen <= sizeof(e_buf)), ret, err); +#endif + + ret = local_memset(e_buf, 0, sizeof(e_buf)); EG(ret, err); + ret = local_memcpy(e_buf, input, hsize); EG(ret, err); + dbg_buf_print("H(m)", e_buf, hsize); + + /* + * If |h| > bitlen(q), set h to bitlen(q) + * leftmost bits of h. + * + */ + rshift = 0; + if ((hsize * 8) > q_bit_len) { + rshift = (bitcnt_t)((hsize * 8) - q_bit_len); + } + ret = nn_init_from_buf(&tmp, e_buf, hsize); EG(ret, err); + ret = local_memset(e_buf, 0, hsize); EG(ret, err); + if (rshift) { + ret = nn_rshift_fixedlen(&tmp, &tmp, rshift); EG(ret, err); + } + dbg_nn_print("H(m) truncated as nn", &tmp); + + /* 3. Compute e by converting h to an integer and reducing it mod q */ + ret = nn_mod(&e, &tmp, q); EG(ret, err); + + /* 4. Compute u = (r^-1)e mod q */ + ret = nn_modinv(&rinv, r, q); EG(ret, err); /* r^-1 */ + ret = nn_mul(&tmp, &rinv, &e); EG(ret, err); /* r^-1 * e */ + ret = nn_mod(&uv, &tmp, q); EG(ret, err); /* (r^-1 * e) mod q */ + ret = prj_pt_mul(&uG, &uv, G); EG(ret, err); + + /* 5. Compute v = (r^-1)s mod q */ + ret = nn_mul(&tmp, &rinv, s); EG(ret, err); /* r^-1 * s */ + ret = nn_mod(&uv, &tmp, q); EG(ret, err); /* (r^-1 * s) mod q */ + ret = prj_pt_mul(&vY, &uv, Y); EG(ret, err); + + /* 6. Compute W' = uG + vY */ + ret = prj_pt_add(Wprime, &uG, &vY); EG(ret, err); + + /* 7. Compute r' = W'_x mod q */ + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + dbg_nn_print("W'_x", &(Wprime->X.fp_val)); + dbg_nn_print("W'_y", &(Wprime->Y.fp_val)); + ret = nn_mod(&r_prime, &(Wprime->X.fp_val), q); EG(ret, err); + + /* 8. Accept the signature if and only if r equals r' */ + ret = nn_cmp(r, &r_prime, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + +err: + nn_uninit(&r_prime); + nn_uninit(&e); + nn_uninit(&uv); + nn_uninit(&tmp); + nn_uninit(&rinv); + + prj_pt_uninit(&uG); + prj_pt_uninit(&vY); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecgdsa), 0, + sizeof(ecgdsa_verify_data))); + } + + PTR_NULLIFY(Wprime); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + VAR_ZEROIFY(hsize); + + return ret; +} + + +#else /* WITH_SIG_ECGDSA && USE_CRYPTOFUZZ */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECGDSA */ diff --git a/crypto/libecc/src/sig/fuzzing_ecrdsa.c b/crypto/libecc/src/sig/fuzzing_ecrdsa.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/fuzzing_ecrdsa.c @@ -0,0 +1,425 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#if defined(WITH_SIG_ECRDSA) && defined(USE_CRYPTOFUZZ) + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "ECRDSA" +#endif +#include + +/* NOTE: the following versions of ECRDSA are "raw" with + * no hash functions and nonce override. They are DANGEROUS and + * should NOT be used in production mode! They are however useful + * for corner cases tests and fuzzing. + */ + +/* + * NOTE: ISO/IEC 14888-3 standard seems to diverge from the existing implementations + * of ECRDSA when treating the message hash, and from the examples of certificates provided + * in RFC 7091 and draft-deremin-rfc4491-bis. While in ISO/IEC 14888-3 it is explicitely asked + * to proceed with the hash of the message as big endian, the RFCs derived from the Russian + * standard expect the hash value to be treated as little endian when importing it as an integer + * (this discrepancy is exhibited and confirmed by test vectors present in ISO/IEC 14888-3, and + * by X.509 certificates present in the RFCs). This seems (to be confirmed) to be a discrepancy of + * ISO/IEC 14888-3 algorithm description that must be fixed there. + * + * In order to be conservative, libecc uses the Russian standard behavior as expected to be in line with + * other implemetations, but keeps the ISO/IEC 14888-3 behavior if forced/asked by the user using + * the USE_ISO14888_3_ECRDSA toggle. This allows to keep backward compatibility with previous versions of the + * library if needed. + * + */ +#ifndef USE_ISO14888_3_ECRDSA +/* Reverses the endiannes of a buffer in place */ +ATTRIBUTE_WARN_UNUSED_RET static inline int _reverse_endianness(u8 *buf, u16 buf_size) +{ + u16 i; + u8 tmp; + int ret; + + MUST_HAVE((buf != NULL), ret, err); + + if(buf_size > 1){ + for(i = 0; i < (buf_size / 2); i++){ + tmp = buf[i]; + buf[i] = buf[buf_size - 1 - i]; + buf[buf_size - 1 - i] = tmp; + } + } + + ret = 0; +err: + return ret; +} +#endif + +#define ECRDSA_SIGN_MAGIC ((word_t)(0xcc97bbc8ada8973cULL)) +#define ECRDSA_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((const void *)(A)) != NULL) && \ + ((A)->magic == ECRDSA_SIGN_MAGIC), ret, err) + +int ecrdsa_sign_raw(struct ec_sign_context *ctx, const u8 *input, u8 inputlen, u8 *sig, u8 siglen, const u8 *nonce, u8 noncelen) +{ + bitcnt_t q_bit_len, p_bit_len; + const ec_priv_key *priv_key; + /* NOTE: hash here is not really a hash ... */ + u8 h_buf[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))]; + prj_pt_src_t G; + prj_pt kG; + nn_src_t q, x; + u8 hsize, r_len, s_len; + int ret, iszero; + nn tmp, s, rx, ke, k, r, e; +#ifdef USE_SIG_BLINDING + /* b is the blinding mask */ + nn b, binv; + b.magic = binv.magic = WORD(0); +#endif /* USE_SIG_BLINDING */ + + tmp.magic = s.magic = rx.magic = ke.magic = WORD(0); + k.magic = r.magic = e.magic = WORD(0); + kG.magic = WORD(0); + + /* + * First, verify context has been initialized and private + * part too. This guarantees the context is an EC-RDSA + * signature one and we do not finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ECRDSA_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.ecrdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + G = &(priv_key->params->ec_gen); + q = &(priv_key->params->ec_gen_order); + p_bit_len = priv_key->params->ec_fp.p_bitlen; + q_bit_len = priv_key->params->ec_gen_order_bitlen; + x = &(priv_key->x); + r_len = (u8)ECRDSA_R_LEN(q_bit_len); + s_len = (u8)ECRDSA_S_LEN(q_bit_len); + hsize = inputlen; + + MUST_HAVE((NN_MAX_BIT_LEN >= p_bit_len), ret, err); + + MUST_HAVE((siglen == ECRDSA_SIGLEN(q_bit_len)), ret, err); + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", q); + dbg_priv_key_print("x", priv_key); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + dbg_ec_point_print("G", G); + +/* + NOTE: the restart label is removed in CRYPTOFUZZ mode as + we trigger MUST_HAVE instead of restarting in this mode. + restart: +*/ + /* 2. Get a random value k in ]0, q[ ... */ + /* NOTE: copy our input nonce if not NULL */ + if(nonce != NULL){ + MUST_HAVE((noncelen <= (u8)(BYTECEIL(q_bit_len))), ret, err); + ret = nn_init_from_buf(&k, nonce, noncelen); EG(ret, err); + } + else{ + ret = ctx->rand(&k, q); EG(ret, err); + } + + dbg_nn_print("k", &k); +#ifdef USE_SIG_BLINDING + /* Note: if we use blinding, k and e are multiplied by + * a random value b in ]0,q[ */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); +#endif /* USE_SIG_BLINDING */ + + /* 3. Compute W = kG = (Wx, Wy) */ +#ifdef USE_SIG_BLINDING + /* We use blinding for the scalar multiplication */ + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 4. Compute r = Wx mod q */ + ret = nn_mod(&r, &(kG.X.fp_val), q); EG(ret, err); + + /* 5. If r is 0, restart the process at step 2. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + dbg_nn_print("r", &r); + + /* Export r */ + ret = nn_export_to_buf(sig, r_len, &r); EG(ret, err); + + /* 6. Compute e = OS2I(h) mod q. If e is 0, set e to 1. */ + /* NOTE: here we have raw ECRDSA, this is the raw input */ + MUST_HAVE((input != NULL), ret, err); + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE(((u32)inputlen <= sizeof(h_buf)), ret, err); +#endif + ret = local_memset(h_buf, 0, sizeof(h_buf)); EG(ret, err); + ret = local_memcpy(h_buf, input, hsize); EG(ret, err); + dbg_buf_print("H(m)", h_buf, hsize); + /* NOTE: this handles a discrepancy between ISO/IEC 14888-3 and + * Russian standard based RFCs. + */ +#ifndef USE_ISO14888_3_ECRDSA + ret = _reverse_endianness(h_buf, hsize); EG(ret, err); +#endif + + ret = nn_init_from_buf(&tmp, h_buf, hsize); EG(ret, err); + ret = local_memset(h_buf, 0, hsize); EG(ret, err); + ret = nn_mod(&e, &tmp, q); EG(ret, err); + ret = nn_iszero(&e, &iszero); EG(ret, err); + if (iszero) { + ret = nn_inc(&e, &e); EG(ret, err); + } + dbg_nn_print("e", &e); + +#ifdef USE_SIG_BLINDING + /* In case of blinding, we blind r and e */ + ret = nn_mod_mul(&r, &r, &b, q); EG(ret, err); + ret = nn_mod_mul(&e, &e, &b, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* Compute s = (rx + ke) mod q */ + ret = nn_mod_mul(&rx, &r, x, q); EG(ret, err); + ret = nn_mod_mul(&ke, &k, &e, q); EG(ret, err); + ret = nn_mod_add(&s, &rx, &ke, q); EG(ret, err); +#ifdef USE_SIG_BLINDING + /* Unblind s */ + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&binv, &b, q); EG(ret, err); + ret = nn_mod_mul(&s, &s, &binv, q); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + + /* If s is 0, restart the process at step 2. */ + /* 10. If s is 0, restart the process at step 4. */ + /* NOTE: for the CRYPTOFUZZ mode, we do not restart + * the procedure but throw an assert exception instead. + */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + dbg_nn_print("s", &s); + + /* Return (r,s) */ + ret = nn_export_to_buf(sig + r_len, s_len, &s); EG(ret, err); + + err: + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&tmp); + nn_uninit(&rx); + nn_uninit(&ke); + nn_uninit(&k); + nn_uninit(&e); + prj_pt_uninit(&kG); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.ecrdsa), 0, sizeof(ecrdsa_sign_data))); + } + + /* Clean what remains on the stack */ + VAR_ZEROIFY(r_len); + VAR_ZEROIFY(s_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(p_bit_len); + VAR_ZEROIFY(hsize); + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + +#ifdef USE_SIG_BLINDING + nn_uninit(&b); + nn_uninit(&binv); +#endif /* USE_SIG_BLINDING */ + + return ret; +} + +/******************************/ +#define ECRDSA_VERIFY_MAGIC ((word_t)(0xa8e16b7e8180cb9aULL)) +#define ECRDSA_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((const void *)(A)) != NULL) && \ + ((A)->magic == ECRDSA_VERIFY_MAGIC), ret, err) + +int ecrdsa_verify_raw(struct ec_verify_context *ctx, const u8 *input, u8 inputlen) +{ + prj_pt_src_t G, Y; + nn_src_t q; + nn tmp, h, r_prime, e, v, u; + prj_pt vY, uG; + prj_pt_t Wprime; + /* NOTE: hash here is not really a hash ... */ + u8 h_buf[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))]; + nn *r, *s; + u8 hsize; + int ret, iszero, cmp; + + tmp.magic = h.magic = r_prime.magic = e.magic = WORD(0); + v.magic = u.magic = WORD(0); + vY.magic = uG.magic = WORD(0); + + /* NOTE: we reuse uG for Wprime to optimize local variables */ + Wprime = &uG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an EC-RDSA + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ECRDSA_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.ecrdsa), ret, err); + + /* Zero init points */ + ret = local_memset(&uG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&vY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + r = &(ctx->verify_data.ecrdsa.r); + s = &(ctx->verify_data.ecrdsa.s); + hsize = inputlen; + + /* 2. Compute h = H(m) */ + /* NOTE: here we have raw ECRDSA, this is the raw input */ + MUST_HAVE((input != NULL), ret, err); + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE(((u32)inputlen <= sizeof(h_buf)), ret, err); +#endif + + ret = local_memset(h_buf, 0, sizeof(h_buf)); EG(ret, err); + ret = local_memcpy(h_buf, input, hsize); EG(ret, err); + dbg_buf_print("H(m)", h_buf, hsize); + /* NOTE: this handles a discrepancy between ISO/IEC 14888-3 and + * Russian standard based RFCs. + */ +#ifndef USE_ISO14888_3_ECRDSA + ret = _reverse_endianness(h_buf, hsize); EG(ret, err); +#endif + + /* 3. Compute e = OS2I(h)^-1 mod q */ + ret = nn_init_from_buf(&tmp, h_buf, hsize); EG(ret, err); + ret = local_memset(h_buf, 0, hsize); EG(ret, err); + ret = nn_mod(&h, &tmp, q); EG(ret, err); /* h = OS2I(h) mod q */ + ret = nn_iszero(&h, &iszero); EG(ret, err); + if (iszero) { /* If h is equal to 0, set it to 1 */ + ret = nn_inc(&h, &h); EG(ret, err); + } + ret = nn_modinv(&e, &h, q); EG(ret, err); /* e = h^-1 mod q */ + + /* 4. Compute u = es mod q */ + ret = nn_mul(&tmp, &e, s); EG(ret, err); + ret = nn_mod(&u, &tmp, q); EG(ret, err); + + /* 5. Compute v = -er mod q + * + * Because we only support positive integers, we compute + * v = -er mod q = q - (er mod q) (except when er is 0). + */ + ret = nn_mul(&tmp, &e, r); EG(ret, err); /* tmp = er */ + ret = nn_mod(&tmp, &tmp, q); EG(ret, err); /* tmp = er mod q */ + ret = nn_mod_neg(&v, &tmp, q); EG(ret, err); /* negate tmp */ + + /* 6. Compute W' = uG + vY = (W'_x, W'_y) */ + ret = prj_pt_mul(&uG, &u, G); EG(ret, err); + ret = prj_pt_mul(&vY, &v, Y); EG(ret, err); + ret = prj_pt_add(Wprime, &uG, &vY); EG(ret, err); + ret = prj_pt_unique(Wprime, Wprime); EG(ret, err); + dbg_nn_print("W'_x", &(Wprime->X.fp_val)); + dbg_nn_print("W'_y", &(Wprime->Y.fp_val)); + + /* 7. Compute r' = W'_x mod q */ + ret = nn_mod(&r_prime, &(Wprime->X.fp_val), q); EG(ret, err); + + /* 8. Check r and r' are the same */ + ret = nn_cmp(r, &r_prime, &cmp); EG(ret, err); + ret = (cmp == 0) ? 0 : -1; + +err: + nn_uninit(&r_prime); + nn_uninit(&tmp); + nn_uninit(&h); + nn_uninit(&e); + nn_uninit(&u); + nn_uninit(&v); + prj_pt_uninit(&vY); + prj_pt_uninit(&uG); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + if(ctx != NULL){ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.ecrdsa), 0, + sizeof(ecrdsa_verify_data))); + } + + /* Clean what remains on the stack */ + PTR_NULLIFY(Wprime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + VAR_ZEROIFY(hsize); + + return ret; +} + +#else /* WITH_SIG_ECRDSA && USE_CRYPTOFUZZ */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_ECRDSA */ diff --git a/crypto/libecc/src/sig/meson.build b/crypto/libecc/src/sig/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/meson.build @@ -0,0 +1,26 @@ +sig_mod_src = files( + 'decdsa.c', + 'ecdsa.c', + 'ecfsdsa.c', + 'ecgdsa.c', + 'eckcdsa.c', + 'ecosdsa.c', + 'ecrdsa.c', + 'ecsdsa.c', + 'eddsa.c', + 'fuzzing_ecdsa.c', + 'fuzzing_ecgdsa.c', + 'fuzzing_ecrdsa.c', + 'ecdsa_common.c', + 'ecsdsa_common.c', + 'sig_algs.c', + 'sm2.c', + 'bign_common.c', + 'bign.c', + 'dbign.c', + 'bip0340.c', + ) + +key_mod_src = files( + 'ec_key.c' + ) diff --git a/crypto/libecc/src/sig/sig_algs.c b/crypto/libecc/src/sig/sig_algs.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/sig_algs.c @@ -0,0 +1,1112 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* + * Generic private key generation (generate a scalar in ]0,q[ + * Common accross many schemes, but might diverge for some. + */ +int generic_gen_priv_key(ec_priv_key *priv_key) +{ + nn_src_t q; + int ret; + + ret = priv_key_check_initialized(priv_key); EG(ret, err); + + q = &(priv_key->params->ec_gen_order); + + /* Get a random value in ]0,q[ where q is the group generator order */ + ret = nn_get_random_mod(&(priv_key->x), q); + +err: + return ret; +} + +/* Private key generation function per signature scheme */ +int gen_priv_key(ec_priv_key *priv_key) +{ + const ec_sig_mapping *sm; + int ret; + u8 i; + + ret = priv_key_check_initialized(priv_key); EG(ret, err); + + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if (sm->type == priv_key->key_type) { + /* NOTE: since sm is initalized with a structure + * coming from a const source, we can safely call + * the callback here, but better safe than sorry. + */ + MUST_HAVE((sm->gen_priv_key != NULL), ret, err); + ret = sm->gen_priv_key(priv_key); + break; + } + } + +err: + return ret; +} + +/* + * Generic function to init a uninitialized public key from an initialized + * private key. The function uses the expected logic to derive the key + * (e.g. Y=xG, Y=(x^-1)G, etc). It returns -1 on error (i.e. if the signature + * alg is unknown) in which case the public key has not been initialized. + * It returns 0 on success. + */ +int init_pubkey_from_privkey(ec_pub_key *pub_key, ec_priv_key *priv_key) +{ + const ec_sig_mapping *sm; + int ret; + u8 i; + + ret = priv_key_check_initialized(priv_key); EG(ret, err); + + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if (sm->type == priv_key->key_type) { + /* NOTE: since sm is initalized with a structure + * coming from a const source, we can safely call + * the callback here, but better safe than sorry. + */ + MUST_HAVE((sm->init_pub_key != NULL), ret, err); + ret = sm->init_pub_key(pub_key, priv_key); + break; + } + } + +err: + return ret; +} + +/* + * On success, 0 is returned and out parameter 'sig_mapping' provides a + * pointer to the ec_sig_mapping matching given input parameter + * 'sig_name' (a null-terminated string, e.g. "ECDSA"). -1 is returned on error + * in which case 'sig_mapping' is not meaningful. + */ +int get_sig_by_name(const char *ec_sig_name, const ec_sig_mapping **sig_mapping) +{ + const ec_sig_mapping *sm; + int ret, check; + u8 i; + + MUST_HAVE((ec_sig_name != NULL), ret, err); + MUST_HAVE((sig_mapping != NULL), ret, err); + + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if((!are_str_equal(ec_sig_name, sm->name, &check)) && check){ + (*sig_mapping) = sm; + ret = 0; + break; + } + } + +err: + return ret; +} + +/* + * On success, 0 is returned and out parameter 'sig_mapping' provides a + * pointer to the ec_sig_mapping matching given input parameter + * 'sig_type' (e.g. ECDSA, ECSDA). -1 is returned on error in which + * case 'sig_mapping' is not meaningful. + */ +int get_sig_by_type(ec_alg_type sig_type, const ec_sig_mapping **sig_mapping) +{ + const ec_sig_mapping *sm; + int ret; + u8 i; + + MUST_HAVE((sig_mapping != NULL), ret, err); + + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if (sm->type == sig_type) { + (*sig_mapping) = sm; + ret = 0; + break; + } + } + +err: + return ret; +} + +/* + * Here, we provide a helper that sanity checks the provided signature + * mapping against the constant ones. 0 is returned on success, -1 on + * error. + */ +int ec_sig_mapping_callbacks_sanity_check(const ec_sig_mapping *sig) +{ + const ec_sig_mapping *sm; + int ret = -1, check; + u8 i; + + MUST_HAVE((sig != NULL), ret, err); + + /* We just check is our mapping is indeed + * one of the registered mappings. + */ + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if (sm->type == sig->type){ + if ((!are_str_equal_nlen(sm->name, sig->name, MAX_SIG_ALG_NAME_LEN, &check)) && (!check)){ + goto err; + } else if (sm->siglen != sig->siglen){ + goto err; + } else if (sm->gen_priv_key != sig->gen_priv_key){ + goto err; + } else if (sm->init_pub_key != sig->init_pub_key){ + goto err; + } else if (sm->sign_init != sig->sign_init){ + goto err; + } else if (sm->sign_update != sig->sign_update){ + goto err; + } else if (sm->sign_finalize != sig->sign_finalize){ + goto err; + } else if (sm->sign != sig->sign){ + goto err; + } else if (sm->verify_init != sig->verify_init){ + goto err; + } else if (sm->verify_update != sig->verify_update){ + goto err; + } else if (sm->verify_finalize != sig->verify_finalize){ + goto err; + } else if (sm->verify != sig->verify){ + goto err; + } else{ + ret = 0; + } + } + } + +err: + return ret; +} + +/* + * Sanity checks of a signature context to see if everything seems OK. 0 is + * returned on cucces, -1 on error. + */ +int ec_sig_ctx_callbacks_sanity_check(const struct ec_sign_context *sig_ctx) +{ + int ret; + + MUST_HAVE((sig_ctx != NULL) && (sig_ctx->ctx_magic == SIG_SIGN_MAGIC), ret, err); + + ret = hash_mapping_callbacks_sanity_check(sig_ctx->h); EG(ret, err); + ret = ec_sig_mapping_callbacks_sanity_check(sig_ctx->sig); + +err: + return ret; +} + +/* + * Sanity check of a verification context to see if everything seems + * OK. 0 is returned on success, -1 on error. + */ +int ec_verify_ctx_callbacks_sanity_check(const struct ec_verify_context *verify_ctx) +{ + int ret; + + MUST_HAVE((verify_ctx != NULL) && (verify_ctx->ctx_magic == SIG_VERIFY_MAGIC), ret, err); + + ret = hash_mapping_callbacks_sanity_check(verify_ctx->h); EG(ret, err); + ret = ec_sig_mapping_callbacks_sanity_check(verify_ctx->sig); + +err: + return ret; +} + + +/* + * Compute generic effective signature length (in bytes) depending on the curve + * parameters, the signature algorithm and the hash function. On success, 0 is + * returned and The signature length is returned using 'siglen' parameter. -1 is + * returned on error. + */ +int ec_get_sig_len(const ec_params *params, ec_alg_type sig_type, + hash_alg_type hash_type, u8 *siglen) +{ + const ec_sig_mapping *sm; + u8 digest_size = 0; + u8 block_size = 0; + int ret; + u8 i; + + MUST_HAVE(((params != NULL) && (siglen != NULL)), ret, err); + + ret = get_hash_sizes(hash_type, &digest_size, &block_size); EG(ret, err); + + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if (sm->type == sig_type) { + /* NOTE: since sm is initalized with a structure + * coming from a const source, we can safely call + * the callback here, but better safe than sorry. + */ + MUST_HAVE((sm->siglen != NULL), ret, err); + ret = sm->siglen(params->ec_fp.p_bitlen, + params->ec_gen_order_bitlen, + digest_size, block_size, siglen); + break; + } + } + +err: + return ret; +} + +/* Generic signature */ + +/* + * Core version of generic signature initialization function. Its purpose + * is to initialize given sign context structure 'ctx' based on given key pair, + * nn random function, signature and hash types. This version allows passing + * a specific nn random function. It returns 0 on success, -1 on error. + * + * The random function is expected to initialize a nn 'out' with a value taken + * uniformly at random in [1, q-1]. It returns 0 on success and -1 on error. See + * nn_get_random_mod() in nn_rand.c for a function that fits the dscription. + */ +int _ec_sign_init(struct ec_sign_context *ctx, + const ec_key_pair *key_pair, + int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + const ec_sig_mapping *sm; + const hash_mapping *hm; + int ret; + u8 i; + + MUST_HAVE((ctx != NULL), ret, err); + + ret = key_pair_check_initialized_and_type(key_pair, sig_type); EG(ret, err); + + /* We first need to get the specific hash structure */ + ret = -1; + for (i = 0, hm = &hash_maps[i]; + hm->type != UNKNOWN_HASH_ALG; hm = &hash_maps[++i]) { + if (hm->type == hash_type) { + ret = 0; + break; + } + } + if (ret) { + goto err; + } + + /* Now, let's try and get the specific key alg which was requested */ + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if ((sm->type == sig_type) && (sm->sign_init != NULL)) { + ret = 0; + break; + } + } + if (ret) { + goto err; + } + +#ifdef NO_KNOWN_VECTORS + /* + * NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * We only use our internal method to provide random integers + * (which avoids honest mistakes ...). + * + * This also allows us to avoid the corruption of such a pointer + * in our signature contexts. + */ + if (rand) { + MUST_HAVE((rand == nn_get_random_mod), ret, err); + } + rand = nn_get_random_mod; +#else + /* Use given random function if provided or fallback to ours */ + if (!rand) { + rand = nn_get_random_mod; + } +#endif + /* Sanity checks on our mappings */ + ret = hash_mapping_sanity_check(hm); EG(ret, err); + ret = sig_mapping_sanity_check(sm); EG(ret, err); + + /* Initialize context for specific signature function */ + ret = local_memset(ctx, 0, sizeof(struct ec_sign_context)); EG(ret, err); + ctx->key_pair = key_pair; + ctx->rand = rand; + ctx->h = hm; + ctx->sig = sm; + ctx->adata = adata; + ctx->adata_len = adata_len; + ctx->ctx_magic = SIG_SIGN_MAGIC; + + /* + * NOTE: since sm has been previously initalized with a structure + * coming from a const source, we can safely call the callback here. + */ + ret = sm->sign_init(ctx); + + err: + if (ret && (ctx != NULL)) { + /* Clear the whole context to prevent future reuse */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(struct ec_sign_context))); + } + + return ret; +} + +/* + * Same as previous but for public use; it forces our internal nn random + * function (nn_get_random_mod()). Returns 0 on success, -1 on error. + */ +int ec_sign_init(struct ec_sign_context *ctx, const ec_key_pair *key_pair, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + return _ec_sign_init(ctx, key_pair, NULL, sig_type, hash_type, + adata, adata_len); +} + +/* + * Signature update function. Returns 0 on success, -1 on error. On error, + * signature context is zeroized and is no more usable. + */ +int ec_sign_update(struct ec_sign_context *ctx, const u8 *chunk, u32 chunklen) +{ + int ret; + + /* Sanity checks */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ret = sig_mapping_sanity_check(ctx->sig); EG(ret, err); + ret = hash_mapping_sanity_check(ctx->h); EG(ret, err); + ret = ec_sig_ctx_callbacks_sanity_check(ctx); EG(ret, err); + ret = ctx->sig->sign_update(ctx, chunk, chunklen); + +err: + if (ret && (ctx != NULL)) { + /* Clear the whole context to prevent future reuse */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(struct ec_sign_context))); + } + + return ret; +} + +/* + * Signature finalization function. Returns 0 on success, -1 on error. + * Upon call, the signature context is cleared to prevent future use. + */ +int ec_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + int ret; + + /* Sanity checks */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + ret = sig_mapping_sanity_check(ctx->sig); EG(ret, err); + ret = hash_mapping_sanity_check(ctx->h); EG(ret, err); + ret = ec_sig_ctx_callbacks_sanity_check(ctx); EG(ret, err); + ret = ctx->sig->sign_finalize(ctx, sig, siglen); + +err: + if (ctx != NULL) { + /* Clear the whole context to prevent future reuse */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(struct ec_sign_context))); + } + + return ret; +} + +/* + * Single call version of signature function (init, update and finalize). It + * returns 0 on success, -1 on error. This version allows passing a custom + * random function. This is useful for test vectors but should be done with + * care. + * + * The random function is expected to initialize a nn 'out' with a value taken + * uniformly at random in [1, q-1]. It returns 0 on success and -1 on error. See + * nn_get_random_mod() in nn_rand.c for a function that fits the dscription. + */ +int generic_ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, + int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + struct ec_sign_context ctx; + int ret; + + ret = _ec_sign_init(&ctx, key_pair, rand, sig_type, + hash_type, adata, adata_len); EG(ret, err); + ret = ec_sign_update(&ctx, m, mlen); EG(ret, err); + ret = ec_sign_finalize(&ctx, sig, siglen); + +err: + return ret; +} + + +int _ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, + int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + const ec_sig_mapping *sm; + int ret; + + ret = get_sig_by_type(sig_type, &sm); EG(ret, err); + MUST_HAVE(((sm != NULL) && (sm->sign != NULL)), ret, err); + + ret = sm->sign(sig, siglen, key_pair, m, mlen, rand, + sig_type, hash_type, adata, adata_len); + +err: + return ret; +} + +/* + * Same as previous but for public use; it forces our internal nn random + * function (nn_get_random_mod()) by pasing NULL for 'rand' argument + * _ec_sign(). Returns 0 on success, -1 on error. + */ +int ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + return _ec_sign(sig, siglen, key_pair, m, mlen, + NULL, sig_type, hash_type, adata, adata_len); +} + +/* + * Generic signature verification initialization function. Returns 0 on success, + * -1 on error. On error, verification context is cleared to prevent further + * reuse. + */ +int ec_verify_init(struct ec_verify_context *ctx, const ec_pub_key *pub_key, + const u8 *sig, u8 siglen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + const ec_sig_mapping *sm; + const hash_mapping *hm; + u8 i; + int ret; + + MUST_HAVE((ctx != NULL), ret, err); + + ret = pub_key_check_initialized_and_type(pub_key, sig_type); EG(ret, err); + + /* We first need to get the specific hash structure */ + ret = -1; + for (i = 0, hm = &hash_maps[i]; + hm->type != UNKNOWN_HASH_ALG; hm = &hash_maps[++i]) { + if (hm->type == hash_type) { + ret = 0; + break; + } + } + if (ret) { + goto err; + } + + /* + * Now, let's try and get the specific key algorithm which was + * requested + */ + ret = -1; + for (i = 0, sm = &ec_sig_maps[i]; + sm->type != UNKNOWN_ALG; sm = &ec_sig_maps[++i]) { + if ((sm->type == sig_type) && (sm->verify_init != NULL)) { + ret = 0; + break; + } + } + if (ret) { + goto err; + } + + /* Sanity checks on our mappings */ + ret = hash_mapping_sanity_check(hm); EG(ret, err); + ret = sig_mapping_sanity_check(sm); EG(ret, err); + + /* Initialize context for specific signature function */ + ret = local_memset(ctx, 0, sizeof(struct ec_verify_context)); EG(ret, err); + ctx->pub_key = pub_key; + ctx->h = hm; + ctx->sig = sm; + ctx->adata = adata; + ctx->adata_len = adata_len; + ctx->ctx_magic = SIG_VERIFY_MAGIC; + + /* + * NOTE: since sm has been previously initalized with a structure + * coming from a const source, we can safely call the callback + * here. + */ + ret = sm->verify_init(ctx, sig, siglen); + + err: + + if (ret && (ctx != NULL)) { + /* Clear the whole context to prevent future reuse */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(struct ec_verify_context))); + } + + return ret; +} + +/* + * Signature verification update function. Returns 0 on success, -1 on error. + * On error, verification context is cleared to prevent further reuse. + */ +int ec_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ret = sig_mapping_sanity_check(ctx->sig); EG(ret, err); + ret = hash_mapping_sanity_check(ctx->h); EG(ret, err); + + /* Since we call a callback, sanity check our contexts */ + ret = ec_verify_ctx_callbacks_sanity_check(ctx); EG(ret, err); + ret = ctx->sig->verify_update(ctx, chunk, chunklen); + +err: + if (ret && (ctx != NULL)) { + /* Clear the whole context to prevent future reuse */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(struct ec_verify_context))); + } + + return ret; +} + +/* + * Signature verification finalize function. Returns 0 on success, -1 on error. + * On error, verification context is cleared to prevent further reuse. + */ +int ec_verify_finalize(struct ec_verify_context *ctx) +{ + int ret; + + ret = sig_verify_check_initialized(ctx); EG(ret, err); + ret = sig_mapping_sanity_check(ctx->sig); EG(ret, err); + ret = hash_mapping_sanity_check(ctx->h); EG(ret, err); + + /* Since we call a callback, sanity check our contexts */ + ret = ec_verify_ctx_callbacks_sanity_check(ctx); EG(ret, err); + ret = ctx->sig->verify_finalize(ctx); + +err: + if (ret && (ctx != NULL)) { + /* Clear the whole context to prevent future reuse */ + IGNORE_RET_VAL(local_memset(ctx, 0, sizeof(struct ec_verify_context))); + } + return ret; +} + +/* + * Single call version of signature verification function (init, update and + * finalize). It returns 0 on success, -1 on error. + */ +int generic_ec_verify(const u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const u8 *m, u32 mlen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + struct ec_verify_context ctx; + int ret; + + ret = ec_verify_init(&ctx, pub_key, sig, siglen, sig_type, + hash_type, adata, adata_len); EG(ret, err); + ret = ec_verify_update(&ctx, m, mlen); EG(ret, err); + ret = ec_verify_finalize(&ctx); + + err: + return ret; +} + +int ec_verify(const u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const u8 *m, u32 mlen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 *adata, u16 adata_len) +{ + + const ec_sig_mapping *sm; + int ret; + + ret = get_sig_by_type(sig_type, &sm); EG(ret, err); + + MUST_HAVE((sm != NULL) && (sm->verify != NULL), ret, err); + + ret = sm->verify(sig, siglen, pub_key, m, mlen, sig_type, + hash_type, adata, adata_len); + +err: + return ret; +} + +int ec_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + + const ec_sig_mapping *sm; + int ret; + + ret = get_sig_by_type(sig_type, &sm); EG(ret, err); + + MUST_HAVE((sm != NULL) && (sm->verify_batch != NULL), ret, err); + + ret = sm->verify_batch(s, s_len, pub_keys, m, m_len, num, sig_type, + hash_type, adata, adata_len, + scratch_pad_area, scratch_pad_area_len); + +err: + return ret; +} + +/* + * Import a signature with structured data containing information about the EC + * algorithm type as well as the hash function used to produce the signature. + * The function returns 0 on success, -1 on error. out parameters (sig_type, + * hash_type, curve_name should only be considered on success. + */ +int ec_structured_sig_import_from_buf(u8 *sig, u32 siglen, + const u8 *out_buf, u32 outlen, + ec_alg_type * sig_type, + hash_alg_type * hash_type, + u8 curve_name[MAX_CURVE_NAME_LEN]) +{ + u32 metadata_len = (3 * sizeof(u8)); + int ret; + + MUST_HAVE((out_buf != NULL) && (sig_type != NULL) && + (hash_type != NULL) && (curve_name != NULL), ret, err); + /* We only deal with signatures of length < 256 */ + MUST_HAVE((siglen <= EC_MAX_SIGLEN) && (sig != NULL), ret, err); + + /* We first import the metadata consisting of: + * - One byte = the EC algorithm type + * - One byte = the hash algorithm type + * - One byte = the curve type (FRP256V1, ...) + */ + MUST_HAVE((outlen <= (siglen + metadata_len)), ret, err); + + *sig_type = (ec_alg_type)out_buf[0]; + *hash_type = (hash_alg_type)out_buf[1]; + ret = ec_get_curve_name_by_type((ec_curve_type) out_buf[2], + curve_name, MAX_CURVE_NAME_LEN); EG(ret, err); + + /* Copy the raw signature */ + ret = local_memcpy(sig, out_buf + metadata_len, siglen); + +err: + return ret; +} + +/* + * Export a signature with structured data containing information about the + * EC algorithm type as well as the hash function used to produce it. The + * function returns 0 on success, -1 on error. + */ +int ec_structured_sig_export_to_buf(const u8 *sig, u32 siglen, + u8 *out_buf, u32 outlen, + ec_alg_type sig_type, + hash_alg_type hash_type, + const u8 + curve_name[MAX_CURVE_NAME_LEN]) +{ + u32 metadata_len = (3 * sizeof(u8)); + u32 len; + u8 curve_name_len; + ec_curve_type curve_type; + int ret; + + MUST_HAVE((out_buf != NULL) && (curve_name != NULL), ret, err); + /* We only deal with signatures of length < 256 */ + MUST_HAVE((siglen <= EC_MAX_SIGLEN) && (sig != NULL), ret, err); + + /* We first export the metadata consisting of: + * - One byte = the EC algorithm type + * - One byte = the hash algorithm type + * - One byte = the curve type (FRP256V1, ...) + * + */ + MUST_HAVE(outlen >= (siglen + metadata_len), ret, err); + + out_buf[0] = (u8)sig_type; + out_buf[1] = (u8)hash_type; + ret = local_strlen((const char *)curve_name, &len); EG(ret, err); + len += 1; + MUST_HAVE((len < 256), ret, err); + curve_name_len = (u8)len; + ret = ec_get_curve_type_by_name(curve_name, curve_name_len, &curve_type); EG(ret, err); + out_buf[2] = (u8)curve_type; + MUST_HAVE((out_buf[2] != UNKNOWN_CURVE), ret, err); + + /* Copy the raw signature */ + ret = local_memcpy(out_buf + metadata_len, sig, siglen); + +err: + return ret; +} + + +/* Signature finalization function */ +int unsupported_sign_init(struct ec_sign_context * ctx) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(ctx); + + /* Return an error in any case here */ + return -1; +} + +int unsupported_sign_update(struct ec_sign_context * ctx, + const u8 *chunk, u32 chunklen) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(ctx); + FORCE_USED_VAR(chunk); + FORCE_USED_VAR(chunklen); + + /* Return an error in any case here */ + return -1; +} + +int unsupported_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(ctx); + FORCE_USED_VAR(sig); + FORCE_USED_VAR(siglen); + + /* Return an error in any case here */ + return -1; +} + +int unsupported_verify_init(struct ec_verify_context * ctx, + const u8 *sig, u8 siglen) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(ctx); + FORCE_USED_VAR(sig); + FORCE_USED_VAR(siglen); + + /* Return an error in any case here */ + return -1; +} + +int unsupported_verify_update(struct ec_verify_context * ctx, + const u8 *chunk, u32 chunklen) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(ctx); + FORCE_USED_VAR(chunk); + FORCE_USED_VAR(chunklen); + + /* Return an error in any case here */ + return -1; +} + +int unsupported_verify_finalize(struct ec_verify_context * ctx) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(ctx); + + /* Return an error in any case here */ + return -1; +} + +/* Unsupported batch verification */ +int unsupported_verify_batch(const u8 **s, const u8 *s_len, const ec_pub_key **pub_keys, + const u8 **m, const u32 *m_len, u32 num, ec_alg_type sig_type, + hash_alg_type hash_type, const u8 **adata, const u16 *adata_len, + verify_batch_scratch_pad *scratch_pad_area, u32 *scratch_pad_area_len) +{ + /* Quirk to avoid unused variables */ + FORCE_USED_VAR(s); + FORCE_USED_VAR(pub_keys); + FORCE_USED_VAR(m); + FORCE_USED_VAR(num); + FORCE_USED_VAR(sig_type); + FORCE_USED_VAR(hash_type); + FORCE_USED_VAR(adata); + FORCE_USED_VAR(s_len); + FORCE_USED_VAR(m_len); + FORCE_USED_VAR(adata_len); + FORCE_USED_VAR(scratch_pad_area); + FORCE_USED_VAR(scratch_pad_area_len); + + /* Return an error in any case here */ + return -1; +} + +/* This function returns 1 in 'check' if the init/update/finalize mode + * is supported by the signature algorithm, 0 otherwise. + * + * Return value is 0 on success, -1 on error. 'check' is only meaningful on + * success. + */ +int is_sign_streaming_mode_supported(ec_alg_type sig_type, int *check) +{ + int ret; + const ec_sig_mapping *sig; + + MUST_HAVE((check != NULL), ret, err); + + ret = get_sig_by_type(sig_type, &sig); EG(ret, err); + MUST_HAVE((sig != NULL), ret, err); + + if ((sig->sign_init == unsupported_sign_init) || + (sig->sign_update == unsupported_sign_update) || + (sig->sign_finalize == unsupported_sign_finalize)) { + (*check) = 0; + } + else{ + (*check) = 1; + } + +err: + return ret; +} + +/* This function returns 1 in 'check' if the init/update/finalize mode + * is supported by the verification algorithm, 0 otherwise. + * + * Return value is 0 on success, -1 on error. 'check' is only meaningful on + * success. + */ +int is_verify_streaming_mode_supported(ec_alg_type sig_type, int *check) +{ + int ret; + const ec_sig_mapping *sig; + + MUST_HAVE((check != NULL), ret, err); + + ret = get_sig_by_type(sig_type, &sig); EG(ret, err); + MUST_HAVE((sig != NULL), ret, err); + + if ((sig->verify_init == unsupported_verify_init) || + (sig->verify_update == unsupported_verify_update) || + (sig->verify_finalize == unsupported_verify_finalize)) { + (*check) = 0; + } + else{ + (*check) = 1; + } + +err: + return ret; +} + +/* This function returns 1 in 'check' if the batch verification mode + * is supported by the verification algorithm, 0 otherwise. + * + * Return value is 0 on success, -1 on error. 'check' is only meaningful on + * success. + */ +int is_verify_batch_mode_supported(ec_alg_type sig_type, int *check) +{ + int ret; + const ec_sig_mapping *sig; + + MUST_HAVE((check != NULL), ret, err); + + ret = get_sig_by_type(sig_type, &sig); EG(ret, err); + MUST_HAVE((sig != NULL), ret, err); + + if (sig->verify_batch == unsupported_verify_batch) { + (*check) = 0; + } + else{ + (*check) = 1; + } + +err: + return ret; +} + +/* Tells if the signature scheme is deterministic or not, + * e.g. if random nonces are used to produce signatures. + * + * 'check' is set to 1 if deterministic, 0 otherwise. + * + * Return value is 0 on success, -1 on error. 'check' is only meaningful on + * success. + + */ +int is_sign_deterministic(ec_alg_type sig_type, int *check) +{ + int ret; + const ec_sig_mapping *sig; + + MUST_HAVE((check != NULL), ret, err); + + ret = get_sig_by_type(sig_type, &sig); EG(ret, err); + MUST_HAVE((sig != NULL), ret, err); + + switch(sig_type) { +#if defined(WITH_SIG_EDDSA25519) + case EDDSA25519: + case EDDSA25519CTX: + case EDDSA25519PH: + (*check) = 1; + break; +#endif +#if defined(WITH_SIG_EDDSA448) + case EDDSA448: + case EDDSA448PH: + (*check) = 1; + break; +#endif +#if defined(WITH_SIG_DECDSA) + case DECDSA: + (*check) = 1; + break; +#endif + default: + (*check) = 0; + break; + } + +err: + return ret; +} + + +/* + * Bubble sort the table of numbers and the table of projective points + * accordingly in ascending order. We only work on index numbers in the table + * to avoid useless copies. + */ +ATTRIBUTE_WARN_UNUSED_RET static int _bubble_sort(verify_batch_scratch_pad *elements, u32 num) +{ + u32 i, j; + int ret, swapped; + + MUST_HAVE((elements != NULL), ret, err); + MUST_HAVE((num >= 1), ret, err); + for(i = 0; i < (num - 1); i++){ + swapped = 0; + for(j = 0; j < (num - i - 1); j++){ + int check; + u32 indexj, indexj_next; + indexj = elements[j].index; + indexj_next = elements[j + 1].index; + ret = nn_cmp(&elements[indexj].number, &elements[indexj_next].number, &check); EG(ret, err); + if(check < 0){ + /* Swap the two elements */ + elements[j].index = indexj_next; + elements[j + 1].index = indexj; + swapped = 1; + } + } + /* If no swap occured in the inner loop, get out */ + if(!swapped){ + break; + } + } + + ret = 0; +err: + return ret; +} + +/* + * Bos-Coster algorithm, presented e.g. in https://ed25519.cr.yp.to/ed25519-20110705.pdf + * + * The Bos-Coster algorithm allows to optimize a sum of multi-scalar multiplications using + * addition chains. This is used for example in batch signature verification of schemes + * that support it. + * + */ +int ec_verify_bos_coster(verify_batch_scratch_pad *elements, u32 num, bitcnt_t bits) +{ + int ret, check; + u32 i, index0, index1, max_bos_coster_iterations; + + MUST_HAVE((elements != NULL), ret, err); + MUST_HAVE((num > 1), ret, err); + + /* We fix our maximum attempts here. + * + * NOTE: this avoids "denial of service" when + * providing scalars with too big discrepancies, as + * the Bos-Coster algorithm supposes uniformly randomized + * numbers ... + * If we are provided with scalars with too big differences, + * we end up looping for a very long time. In this case, we + * rather quit with a specific error. + * + * The limit hereafter is fixed using the mean asymptotic complexity + * of the algorithm in the nominal case (multiplied by the bit size + * of num to be lax). + */ + MUST_HAVE((num * bits) >= num, ret, err); + MUST_HAVE((num * bits) >= bits, ret, err); + max_bos_coster_iterations = (num * bits); + + /********************************************/ + /****** Bos-Coster algorithm ****************/ + for(i = 0; i < num; i++){ + elements[i].index = i; + } + i = 0; + do { + /* Sort the elements in descending order */ + ret = _bubble_sort(elements, num); EG(ret, err); + /* Perform the addition */ + index0 = elements[0].index; + index1 = elements[1].index; + ret = prj_pt_add(&elements[index1].point, &elements[index0].point, + &elements[index1].point); EG(ret, err); + /* Check the two first integers */ + ret = nn_cmp(&elements[index0].number, &elements[index1].number, &check); + /* Subtract the two first numbers */ + ret = nn_sub(&elements[index0].number, &elements[index0].number, + &elements[index1].number); EG(ret, err); + i++; + if(i > max_bos_coster_iterations){ + /* Give up with specific error code */ + ret = -2; + goto err; + } + } while(check > 0); + + index0 = elements[0].index; + /* Proceed with the last scalar multiplication */ + ret = _prj_pt_unprotected_mult(&elements[index0].point, &elements[index0].number, &elements[index0].point); + + /* The result is in point [0] of elements */ +err: + return ret; +} diff --git a/crypto/libecc/src/sig/sm2.c b/crypto/libecc/src/sig/sm2.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/sig/sm2.c @@ -0,0 +1,724 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#include +#ifdef WITH_SIG_SM2 + +#include +#include +#include + +#include +#include +#include +#ifdef VERBOSE_INNER_VALUES +#define EC_SIG_ALG "SM2" +#endif +#include + +/* + * NOTE: SM2 has an oddity in private key generation when compared to + * other EC*DSA style signature algorithms described in ISO14888-3: + * the private key x MUST be in ]0, q-1[ instead of ]0, q[ (this is actually + * explained by the fact that (1 + x) must be inversible modulo q during the + * signature process). + * + * Hence the following specific key generation function. + * + */ +int sm2_gen_priv_key(ec_priv_key *priv_key) +{ + int ret; + nn tmp; + tmp.magic = WORD(0); + + ret = priv_key_check_initialized_and_type(priv_key, SM2); EG(ret, err); + + /* Get a random value in ]0,q-1[ where q is the group generator order */ + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_dec(&tmp, &(priv_key->params->ec_gen_order)); EG(ret, err); + ret = nn_get_random_mod(&(priv_key->x), &tmp); + +err: + nn_uninit(&tmp); + + return ret; +} + +int sm2_init_pub_key(ec_pub_key *out_pub, const ec_priv_key *in_priv) +{ + prj_pt_src_t G; + int ret, cmp; + nn tmp; + tmp.magic = WORD(0); + + MUST_HAVE((out_pub != NULL), ret, err); + + ret = priv_key_check_initialized_and_type(in_priv, SM2); EG(ret, err); + + /* + * We verify that the private key is valid, i.e. in + * ]0, q-1[. This excluded q-1 is an oddity but is what the + * ISO14888-3:2018 has. + */ + ret = nn_init(&tmp, 0); EG(ret, err); + ret = nn_dec(&tmp, &in_priv->params->ec_gen_order); EG(ret, err); + /* If x >= (q - 1), this is an error */ + MUST_HAVE((!nn_cmp(&(in_priv->x), &tmp, &cmp)) && (cmp < 0), ret, err); + + /* Y = xG */ + G = &(in_priv->params->ec_gen); + + /* Zero init public key to be generated */ + ret = local_memset(out_pub, 0, sizeof(ec_pub_key)); EG(ret, err); + + /* Use blinding with scalar_b when computing point scalar multiplication */ + ret = prj_pt_mul_blind(&(out_pub->y), &(in_priv->x), G); EG(ret, err); + + out_pub->key_type = SM2; + out_pub->params = in_priv->params; + out_pub->magic = PUB_KEY_MAGIC; + +err: + nn_uninit(&tmp); + + return ret; +} + +int sm2_siglen(u16 p_bit_len, u16 q_bit_len, u8 hsize, u8 blocksize, u8 *siglen) +{ + int ret; + + MUST_HAVE((siglen != NULL), ret, err); + MUST_HAVE((p_bit_len <= CURVES_MAX_P_BIT_LEN) && + (q_bit_len <= CURVES_MAX_Q_BIT_LEN) && + (hsize <= MAX_DIGEST_SIZE) && (blocksize <= MAX_BLOCK_SIZE), ret, err); + + (*siglen) = (u8)SM2_SIGLEN(q_bit_len); + ret = 0; + +err: + return ret; +} + +/* + * Helper to compute Z from user ID, curve parameters, public key and hash + * function as defined in section 6.12.4.3 of ISO14888-3:2018. The function + * returns 0 on success, -1 on error. On success, the number of bytes + * written to Z is provided using Zlen. On input, Zlen provides the size of + * Z buffer, which must be large enough for selected hash function (Z has + * the digest size of the hash function). 'id' buffer of size 'id_len' must + * be smaller than SM2_MAX_ID_LEN (see sm2.h). + * + * Z = h(ENTL || ID || FE2BS(p, a) || FE2BS(p, b) || FE2BS(p, Gx) || + * FE2BS(p, Gy) || FE2BS(p, Yx) || FE2BS(p, Yy)). + * + * with: + * + * - GF(p), Finite field of cardinality p. + * - Curve Weierstrass Equation y^2 = x^3 + a * x + b. + * - ID string containing an identifier of the signer + * - G = (Gx, Gy) an element of order q in E. + * - entlen is the bit-length of ID and ENTL the two bytes string transformed + * from the integer entlen, i.e. ENTL = I2BS(12, entlen). + * + */ +#define Z_INPUT_MAX_LEN (2 + SM2_MAX_ID_LEN + (6 * BYTECEIL(CURVES_MAX_P_BIT_LEN))) + +ATTRIBUTE_WARN_UNUSED_RET static int sm2_compute_Z(u8 *Z, u16 *Zlen, const u8 *id, u16 id_len, + const ec_pub_key *pub_key, hash_alg_type hash_type) +{ + u16 hsize, entlen, p_len; + u8 buf[2 * BYTECEIL(CURVES_MAX_P_BIT_LEN)]; + const hash_mapping *hm; + prj_pt_src_t G, Y; + hash_context hctx; + bitcnt_t p_bit_len; + fp_src_t a, b; + int ret; + + MUST_HAVE((Z != NULL) && (Zlen != NULL), ret, err); + MUST_HAVE((id != NULL) && (pub_key != NULL), ret, err); + /* Maximum size is Entlen on 16 bits in *bits*, i.e. 8192 bytes */ + MUST_HAVE((id_len <= SM2_MAX_ID_LEN), ret, err); + ret = pub_key_check_initialized_and_type(pub_key, SM2); EG(ret, err); + + ret = get_hash_by_type(hash_type, &hm); EG(ret, err); + MUST_HAVE((hm != NULL), ret, err); + + /* Zlen must be large enough to receive digest */ + hsize = hm->digest_size; + MUST_HAVE((*Zlen) >= hsize, ret, err); + + /* Make things more readable */ + G = &(pub_key->params->ec_gen); + Y = &(pub_key->y); + p_bit_len = pub_key->params->ec_fp.p_bitlen; + p_len = (u8)BYTECEIL(p_bit_len); + entlen = (u16)(id_len * 8); + a = &(pub_key->params->ec_curve.a); + b = &(pub_key->params->ec_curve.b); + + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(hm); EG(ret, err); + ret = hm->hfunc_init(&hctx); EG(ret, err); + + /* ENTL */ + buf[0] = (u8)((entlen >> 8) & 0xff); + buf[1] = (u8)(entlen & 0xff); + ret = hm->hfunc_update(&hctx, buf, 2); EG(ret, err); + + /* ID */ + ret = hm->hfunc_update(&hctx, id, id_len); EG(ret, err); + + /* FE2BS(p, a) */ + ret = fp_export_to_buf(buf, p_len, a); EG(ret, err); + ret = hm->hfunc_update(&hctx, buf, p_len); EG(ret, err); + + /* FE2BS(p, b) */ + ret = fp_export_to_buf(buf, p_len, b); EG(ret, err); + ret = hm->hfunc_update(&hctx, buf, p_len); EG(ret, err); + + /* FE2BS(p, Gx) || FE2BS(p, Gy) */ + ret = prj_pt_export_to_aff_buf(G, buf, (u32)(2 * p_len)); EG(ret, err); + ret = hm->hfunc_update(&hctx, buf, (u32)(2 * p_len)); EG(ret, err); + + /* FE2BS(p, Yx) || FE2BS(p, Yy) */ + ret = prj_pt_export_to_aff_buf(Y, buf, (u32)(2 * p_len)); EG(ret, err); + ret = hm->hfunc_update(&hctx, buf, (u32)(2 * p_len)); EG(ret, err); + + /* Let's now finalize hash computation */ + ret = hm->hfunc_finalize(&hctx, Z); EG(ret, err); + dbg_buf_print("Z", Z, hsize); + + ret = local_memset(buf, 0, sizeof(buf)); EG(ret, err); + ret = local_memset(&hctx, 0, sizeof(hctx)); EG(ret, err); + + (*Zlen) = hsize; + +err: + if (ret && (Zlen != NULL)){ + (*Zlen) = 0; + } + return ret; +} + + +/* + * Generic *internal* SM2 signature functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global SM2 signature process is as follows (I,U,F provides information + * in which function(s) (init(), update() or finalize()) a specific step + * is performed): + * + *| IUF - SM2 signature + *| + *| UF 1. set M1 = Z || M (See (*) below) + *| F 2. Compute H = h(M1) + *| F 3. Get a random value k in ]0,q[ + *| F 4. Compute W = (W_x,W_y) = kG + *| F 5. Compute r = (OS2I(H) + Wx) mod q + *| F 6. If r is 0, restart the process at step 3. + *| F 7. If r + k is q, restart the process at step 3. + *| F 8. Compute s = ((1 + x)^(-1) * (k - rx)) mod q + *| F 9. If s is 0, restart the process at step 3. + *| F 10. Export r and s + * + * (*) It is user responsibility to pass the ID string in the optional ancillary + * data of the API. + */ + +#define SM2_SIGN_MAGIC ((word_t)(0x324300884035dae8ULL)) +#define SM2_SIGN_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SM2_SIGN_MAGIC), ret, err) + +int _sm2_sign_init(struct ec_sign_context *ctx) +{ + int ret; + u8 Z[Z_INPUT_MAX_LEN]; + u16 Zlen; + + /* First, verify context has been initialized */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + + /* Additional sanity checks on input params from context */ + ret = key_pair_check_initialized_and_type(ctx->key_pair, SM2); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + + /* + * Initialize hash context stored in our private part of context + * and record data init has been done + */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->sign_data.sm2.h_ctx)); EG(ret, err); + + /* Compute Z from the ID */ + ret = local_memset(Z, 0, sizeof(Z)); EG(ret, err); + Zlen = sizeof(Z); + ret = sm2_compute_Z(Z, &Zlen, ctx->adata, ctx->adata_len, + &(ctx->key_pair->pub_key), ctx->h->type); EG(ret, err); + + /* Update the hash function with Z */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.sm2.h_ctx), Z, Zlen); EG(ret, err); + + ctx->sign_data.sm2.magic = SM2_SIGN_MAGIC; + +err: + VAR_ZEROIFY(Zlen); + + return ret; +} + +int _sm2_sign_update(struct ec_sign_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and private part too. + * This guarantees the context is an SM2 signature one and we do not + * update() or finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + SM2_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.sm2), ret, err); + + /* 1. Compute h = H(m) */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->sign_data.sm2.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int _sm2_sign_finalize(struct ec_sign_context *ctx, u8 *sig, u8 siglen) +{ + const ec_priv_key *priv_key; + u8 hash[MAX_DIGEST_SIZE]; + bitcnt_t q_bit_len; + u8 hsize, q_len; + prj_pt_src_t G; + nn_src_t q, x; + prj_pt kG; + int ret, iszero, cmp; + nn k, r, s, tmp, tmp2, tmp3; +#ifdef USE_SIG_BLINDING + nn b; /* blinding mask */ + b.magic = WORD(0); +#endif + + kG.magic = WORD(0); + k.magic = r.magic = s.magic = tmp.magic = tmp2.magic = tmp3.magic = WORD(0); + + /* + * First, verify context has been initialized and private part too. + * This guarantees the context is an SM2 signature one and we do not + * update() or finalize() before init(). + */ + ret = sig_sign_check_initialized(ctx); EG(ret, err); + SM2_SIGN_CHECK_INITIALIZED(&(ctx->sign_data.sm2), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Zero init out point */ + ret = local_memset(&kG, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + priv_key = &(ctx->key_pair->priv_key); + q = &(priv_key->params->ec_gen_order); + q_bit_len = priv_key->params->ec_gen_order_bitlen; + G = &(priv_key->params->ec_gen); + q_len = (u8)BYTECEIL(q_bit_len); + x = &(priv_key->x); + hsize = ctx->h->digest_size; + + dbg_nn_print("p", &(priv_key->params->ec_fp.p)); + dbg_nn_print("q", &(priv_key->params->ec_gen_order)); + dbg_priv_key_print("x", priv_key); + dbg_ec_point_print("G", &(priv_key->params->ec_gen)); + dbg_pub_key_print("Y", &(ctx->key_pair->pub_key)); + + /* Check given signature buffer length has the expected size */ + MUST_HAVE((siglen == SM2_SIGLEN(q_bit_len)), ret, err); + + ret = local_memset(hash, 0, hsize); EG(ret, err); + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + + /* 2. Compute H = h(M1) */ + ret = ctx->h->hfunc_finalize(&(ctx->sign_data.sm2.h_ctx), hash); EG(ret, err); + dbg_buf_print("h", hash, hsize); + + restart: + + /* 3. Get a random value k in ]0,q[ */ +#ifdef NO_KNOWN_VECTORS + /* NOTE: when we do not need self tests for known vectors, + * we can be strict about random function handler! + * This allows us to avoid the corruption of such a pointer. + */ + /* Sanity check on the handler before calling it */ + MUST_HAVE(ctx->rand == nn_get_random_mod, ret, err); +#endif + ret = ctx->rand(&k, q); EG(ret, err); + dbg_nn_print("k", &k); + + /* 4. Compute W = (W_x,W_y) = kG */ +#ifdef USE_SIG_BLINDING + ret = prj_pt_mul_blind(&kG, &k, G); EG(ret, err); +#else + ret = prj_pt_mul(&kG, &k, G); EG(ret, err); +#endif /* USE_SIG_BLINDING */ + ret = prj_pt_unique(&kG, &kG); EG(ret, err); + + dbg_nn_print("W_x", &(kG.X.fp_val)); + dbg_nn_print("W_y", &(kG.Y.fp_val)); + + /* 5. Compute r = (OS2I(H) + Wx) mod q */ + ret = nn_init_from_buf(&tmp, hash, hsize); EG(ret, err); + ret = local_memset(hash, 0, hsize); EG(ret, err); + dbg_nn_print("OS2I(H)", &tmp); + ret = nn_add(&tmp2, &tmp, &(kG.X.fp_val)); EG(ret, err); + ret = nn_mod(&r, &tmp2, q); EG(ret, err); + dbg_nn_print("r", &r); + + /* 6. If r is 0, restart the process at step 3. */ + ret = nn_iszero(&r, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* 7. If r + k is q, restart the process at step 3. */ + ret = nn_add(&tmp, &r, q); EG(ret, err); + ret = nn_cmp(&tmp, q, &cmp); EG(ret, err); + if (cmp == 0) { + goto restart; + } + + /* 8. Compute s = ((1 + x)^(-1) * (k - rx)) mod q */ +#ifdef USE_SIG_BLINDING + /* + * With blinding enabled, the computation above is performed in the + * following way s = ((b*(1 + x))^(-1) * (kb - (br)x)) mod q + */ + ret = nn_get_random_mod(&b, q); EG(ret, err); + dbg_nn_print("b", &b); + ret = nn_inc(&tmp2, x); EG(ret, err); + ret = nn_mod_mul(&tmp2, &tmp2, &b, q); EG(ret, err); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&tmp, &tmp2, q); EG(ret, err); /* tmp = (b*(1 + x))^(-1) */ + dbg_nn_print("(b*(1 + x))^(-1)", &tmp); + ret = nn_mod_mul(&tmp3, &r, &b, q); EG(ret, err); /* rb */ + ret = nn_mod_mul(&k, &k, &b, q); EG(ret, err); /* kb */ + ret = nn_mod_mul(&tmp3, &tmp3, x, q); EG(ret, err); /* (rb)x mod q */ + ret = nn_mod_sub(&tmp2, &k, &tmp3, q); EG(ret, err); /* tmp2 = (kb - (rb)x) mod q */ + ret = nn_mod_mul(&s, &tmp, &tmp2, q); EG(ret, err); + dbg_nn_print("s", &s); +#else + ret = nn_inc(&tmp2, x); EG(ret, err); + /* NOTE: we use Fermat's little theorem inversion for + * constant time here. This is possible since q is prime. + */ + ret = nn_modinv_fermat(&tmp, &tmp2, q); EG(ret, err); /* tmp = (1 + x)^(-1) */ + dbg_nn_print("(1 + x)^(-1)", &tmp); + ret = nn_mod_mul(&tmp3, &r, x, q); EG(ret, err); /* rx mod q */ + ret = nn_mod_sub(&tmp2, &k, &tmp3, q); EG(ret, err); /* tmp2 = (k - rx) mod q */ + ret = nn_mod_mul(&s, &tmp, &tmp2, q); EG(ret, err); + dbg_nn_print("s", &s); +#endif + + /* 9. If s is 0, restart the process at step 3. */ + ret = nn_iszero(&s, &iszero); EG(ret, err); + if (iszero) { + goto restart; + } + + /* 10. Export r and s */ + ret = nn_export_to_buf(sig, q_len, &r); EG(ret, err); + ret = nn_export_to_buf(sig + q_len, q_len, &s); + +err: + prj_pt_uninit(&kG); + nn_uninit(&k); + nn_uninit(&r); + nn_uninit(&s); + nn_uninit(&tmp); + nn_uninit(&tmp2); + nn_uninit(&tmp3); +#ifdef USE_SIG_BLINDING + nn_uninit(&b); +#endif + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + IGNORE_RET_VAL(local_memset(&(ctx->sign_data.sm2), 0, sizeof(sm2_sign_data))); + + /* Clean what remains on the stack */ + PTR_NULLIFY(priv_key); + PTR_NULLIFY(G); + PTR_NULLIFY(q); + PTR_NULLIFY(x); + VAR_ZEROIFY(q_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(hsize); + + return ret; +} + + +/* + * Generic *internal* SM2 verification functions (init, update and finalize). + * Their purpose is to allow passing a specific hash function (along with + * its output size) and the random ephemeral key k, so that compliance + * tests against test vectors can be made without ugly hack in the code + * itself. + * + * Global SM2 verification process is as follows (I,U,F provides information + * in which function(s) (init(), update() or finalize()) a specific step is + * performed): + * + *| IUF - SM2 verification + *| + *| I 1. Reject the signature if r or s is 0 or >= q. + *| UF 2. Compute h = H(M1) w/ M1 = Z || M (See (*) below) + *| F 3. Compute t = r + s mod q + *| F 4. Reject signature if t is 0 + *| F 5. Compute e = OS2I(h) mod q + *| F 6. Compute W' = sG + tY + *| F 7. If W' is the point at infinity, reject the signature. + *| F 8. Compute r' = (e + W'_x) mod q + *| F 9. Accept the signature if and only if r equals r' + * + * (*) It is user responsibility to pass the ID string in the optional ancillary + * data of the API. + */ + +#define SM2_VERIFY_MAGIC ((word_t)(0x9177c61e777f9f22ULL)) +#define SM2_VERIFY_CHECK_INITIALIZED(A, ret, err) \ + MUST_HAVE((((void *)(A)) != NULL) && ((A)->magic == SM2_VERIFY_MAGIC), ret, err) + +int _sm2_verify_init(struct ec_verify_context *ctx, + const u8 *sig, u8 siglen) +{ + bitcnt_t q_bit_len; + u8 q_len; + nn_src_t q; + nn *r = NULL, *s = NULL; + int ret, iszero1, iszero2, cmp1, cmp2; + u8 Z[Z_INPUT_MAX_LEN]; + u16 Zlen; + + /* First, verify context has been initialized */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + + /* Do some sanity checks on input params */ + ret = pub_key_check_initialized_and_type(ctx->pub_key, SM2); EG(ret, err); + MUST_HAVE((ctx->h != NULL) && (ctx->h->digest_size <= MAX_DIGEST_SIZE) && + (ctx->h->block_size <= MAX_BLOCK_SIZE), ret, err); + MUST_HAVE((sig != NULL), ret, err); + + /* Make things more readable */ + q = &(ctx->pub_key->params->ec_gen_order); + q_bit_len = ctx->pub_key->params->ec_gen_order_bitlen; + q_len = (u8)BYTECEIL(q_bit_len); + r = &(ctx->verify_data.sm2.r); + s = &(ctx->verify_data.sm2.s); + + /* Check given signature length is the expected one */ + MUST_HAVE((siglen == SM2_SIGLEN(q_bit_len)), ret, err); + + /* Import r and s values from signature buffer */ + ret = nn_init_from_buf(r, sig, q_len); EG(ret, err); + ret = nn_init_from_buf(s, sig + q_len, q_len); EG(ret, err); + dbg_nn_print("r", r); + dbg_nn_print("s", s); + + /* 1. Reject the signature if r or s is 0 or >= q. */ + ret = nn_iszero(r, &iszero1); EG(ret, err); + ret = nn_iszero(s, &iszero2); EG(ret, err); + ret = nn_cmp(r, q, &cmp1); EG(ret, err); + ret = nn_cmp(s, q, &cmp2); EG(ret, err); + MUST_HAVE((!iszero1) && (cmp1 < 0) && (!iszero2) && (cmp2 < 0), ret, err); + + /* Initialize the remaining of verify context. */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_init(&(ctx->verify_data.sm2.h_ctx)); EG(ret, err); + + /* Compute Z from the ID */ + ret = local_memset(Z, 0, sizeof(Z)); EG(ret, err); + Zlen = sizeof(Z); + ret = sm2_compute_Z(Z, &Zlen, ctx->adata, ctx->adata_len, ctx->pub_key, ctx->h->type); EG(ret, err); + + /* Update the hash function with Z */ + ret = ctx->h->hfunc_update(&(ctx->verify_data.sm2.h_ctx), Z, Zlen); EG(ret, err); + + ctx->verify_data.sm2.magic = SM2_VERIFY_MAGIC; + + err: + VAR_ZEROIFY(q_len); + VAR_ZEROIFY(q_bit_len); + VAR_ZEROIFY(Zlen); + PTR_NULLIFY(q); + PTR_NULLIFY(r); + PTR_NULLIFY(s); + + return ret; +} + + +int _sm2_verify_update(struct ec_verify_context *ctx, + const u8 *chunk, u32 chunklen) +{ + int ret; + + /* + * First, verify context has been initialized and public part too. This + * guarantees the context is a SM2 verification one and we do not + * update() or finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + SM2_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.sm2), ret, err); + + /* 2. Compute h = H(M1) w/ M1 = Z || M */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_update(&(ctx->verify_data.sm2.h_ctx), chunk, chunklen); + +err: + return ret; +} + +int _sm2_verify_finalize(struct ec_verify_context *ctx) +{ + prj_pt sG, tY; + prj_pt_t W_prime; + nn e, tmp, r_prime; + prj_pt_src_t G, Y; + u8 hash[MAX_DIGEST_SIZE]; + nn_src_t q; + nn *s, *r; + nn t; + u8 hsize; + int ret, iszero, cmp; + + e.magic = tmp.magic = r_prime.magic = t.magic = WORD(0); + sG.magic = tY.magic = WORD(0); + + /* NOTE: we reuse sG for W_prime to optimize local variables */ + W_prime = &sG; + + /* + * First, verify context has been initialized and public + * part too. This guarantees the context is an SM2 + * verification one and we do not finalize() before init(). + */ + ret = sig_verify_check_initialized(ctx); EG(ret, err); + SM2_VERIFY_CHECK_INITIALIZED(&(ctx->verify_data.sm2), ret, err); + + /* Zero init points */ + ret = local_memset(&sG, 0, sizeof(prj_pt)); EG(ret, err); + ret = local_memset(&tY, 0, sizeof(prj_pt)); EG(ret, err); + + /* Make things more readable */ + G = &(ctx->pub_key->params->ec_gen); + Y = &(ctx->pub_key->y); + q = &(ctx->pub_key->params->ec_gen_order); + hsize = ctx->h->digest_size; + r = &(ctx->verify_data.sm2.r); + s = &(ctx->verify_data.sm2.s); + + /* 2. Compute h = H(M1) w/ M1 = Z || M */ + /* Since we call a callback, sanity check our mapping */ + ret = hash_mapping_callbacks_sanity_check(ctx->h); EG(ret, err); + ret = ctx->h->hfunc_finalize(&(ctx->verify_data.sm2.h_ctx), hash); EG(ret, err); + dbg_buf_print("h = H(m)", hash, hsize); + + /* 3. Compute t = r + s mod q */ + ret = nn_mod_add(&t, r, s, q); EG(ret, err); + + /* 4. Reject signature if t is 0 */ + ret = nn_iszero(&t, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* 5. Compute e = OS2I(h) mod q */ + ret = nn_init_from_buf(&tmp, hash, hsize); EG(ret, err); + ret = local_memset(hash, 0, hsize); EG(ret, err); + dbg_nn_print("h imported as nn", &tmp); + ret = nn_mod(&e, &tmp, q); EG(ret, err); + dbg_nn_print("e", &e); + + /* 6. Compute W' = sG + tY */ + ret = prj_pt_mul(&sG, s, G); EG(ret, err); + ret = prj_pt_mul(&tY, &t, Y); EG(ret, err); + ret = prj_pt_add(W_prime, &sG, &tY); EG(ret, err); + + /* 7. If W' is the point at infinity, reject the signature. */ + ret = prj_pt_iszero(W_prime, &iszero); EG(ret, err); + MUST_HAVE((!iszero), ret, err); + + /* 8. Compute r' = (e + W'_x) mod q */ + ret = prj_pt_unique(W_prime, W_prime); EG(ret, err); + dbg_nn_print("W'_x", &(W_prime->X.fp_val)); + dbg_nn_print("W'_y", &(W_prime->Y.fp_val)); + + /* First, reduce W'_x mod q */ + ret = nn_mod(&r_prime, &(W_prime->X.fp_val), q); EG(ret, err); + /* Then compute r' = (e + W'_x) mod q */ + ret = nn_mod_add(&r_prime, &e, &r_prime, q); EG(ret, err); + + /* 9. Accept the signature if and only if r equals r' */ + ret = nn_cmp(&r_prime, r, &cmp); EG(ret, err); + ret = (cmp != 0) ? -1 : 0; + + err: + nn_uninit(&e); + nn_uninit(&tmp); + nn_uninit(&r_prime); + nn_uninit(&t); + prj_pt_uninit(&sG); + prj_pt_uninit(&tY); + + /* + * We can now clear data part of the context. This will clear + * magic and avoid further reuse of the whole context. + */ + IGNORE_RET_VAL(local_memset(&(ctx->verify_data.sm2), 0, sizeof(sm2_verify_data))); + + /* Clean what remains on the stack */ + PTR_NULLIFY(W_prime); + PTR_NULLIFY(G); + PTR_NULLIFY(Y); + PTR_NULLIFY(q); + PTR_NULLIFY(s); + PTR_NULLIFY(r); + VAR_ZEROIFY(hsize); + + return ret; +} + +#else /* WITH_SIG_SM2 */ + +/* + * Dummy definition to avoid the empty translation unit ISO C warning + */ +typedef int dummy; +#endif /* WITH_SIG_SM2 */ diff --git a/crypto/libecc/src/tests/bign_test_vectors.h b/crypto/libecc/src/tests/bign_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/bign_test_vectors.h @@ -0,0 +1,448 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __BIGN_TEST_VECTORS_H__ +#define __BIGN_TEST_VECTORS_H__ + +#if defined(WITH_HASH_BELT_HASH) && defined(WITH_CURVE_BIGN256V1) +/************************************************/ +static const u8 bign_1_test_vectors_priv_key[] = { + 0x69, 0xe2, 0x73, 0xc2, 0x5f, 0x23, 0x79, 0x0c, 0x9e, 0x42, 0x32, 0x07, 0xed, 0x1f, 0x28, 0x34, 0x18, 0xf2, 0x74, 0x9c, 0x32, 0xf0, 0x33, 0x45, 0x67, 0x39, 0x73, 0x4b, 0xb8, 0xb5, 0x66, 0x1f, + }; +static const u8 bign_1_test_vectors_expected_sig[] = { + 0xE3, 0x6B, 0x7F, 0x03, 0x77, 0xAE, 0x4C, 0x52, 0x40, 0x27, 0xC3, 0x87, 0xFA, 0xDF, 0x1B, 0x20, 0xCE, 0x72, 0xF1, 0x53, 0x0B, 0x71, 0xF2, 0xB5, 0xFD, 0x3A, 0x8C, 0x58, 0x4F, 0xE2, 0xE1, 0xAE, 0xD2, 0x00, 0x82, 0xE3, 0x0C, 0x8A, 0xF6, 0x50, 0x11, 0xF4, 0xFB, 0x54, 0x64, 0x9D, 0xFD, 0x3D, + }; +static int bign_1_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + * test vectors from STB 34.101.45-2013 + */ + const u8 k_buf[] = { + 0xd2, 0xb7, 0x08, 0xa3, 0x7a, 0xa7, 0x33, 0x5c, 0xe1, 0x1c, 0x46, 0x3c, 0x48, 0xec, 0xd6, 0x3e, 0x2c, 0x74, 0xfa, 0xe0, 0xe7, 0x3d, 0xf2, 0x21, 0xad, 0x11, 0x58, 0xcd, 0xb2, 0x74, 0x0e, 0x4c, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_1_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, +}; + +static const ec_test_case bign_1_test_case = { + .name = "BIGN-BELT-HASH/bign256v1 1", + .ec_str_p = &bign256v1_str_params, + .priv_key = bign_1_test_vectors_priv_key, + .priv_key_len = sizeof(bign_1_test_vectors_priv_key), + .nn_random = bign_1_nn_random_belt_hash_test_vector, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58", + .msglen = 13, + .sig_type = BIGN, + .exp_sig = bign_1_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_1_test_vectors_expected_sig), + .adata = bign_1_test_vectors_adata, + .adata_len = sizeof(bign_1_test_vectors_adata) +}; + +/********************************************************************/ +static const u8 bign_2_test_vectors_priv_key[] = { + 0x69, 0xe2, 0x73, 0xc2, 0x5f, 0x23, 0x79, 0x0c, 0x9e, 0x42, 0x32, 0x07, 0xed, 0x1f, 0x28, 0x34, 0x18, 0xf2, 0x74, 0x9c, 0x32, 0xf0, 0x33, 0x45, 0x67, 0x39, 0x73, 0x4b, 0xb8, 0xb5, 0x66, 0x1f, + }; +static const u8 bign_2_test_vectors_expected_sig[] = { + 0x47, 0xA6, 0x3C, 0x8B, 0x9C, 0x93, 0x6E, 0x94, 0xB5, 0xFA, 0xB3, 0xD9, 0xCB, 0xD7, 0x83, 0x66, + 0x29, 0x0F, 0x32, 0x10, 0xE1, 0x63, 0xEE, 0xC8, 0xDB, 0x4E, 0x92, 0x1E, 0x84, 0x79, 0xD4, 0x13, 0x8F, 0x11, 0x2C, 0xC2, 0x3E, 0x6D, 0xCE, 0x65, 0xEC, 0x5F, 0xF2, 0x1D, 0xF4, 0x23, 0x1C, 0x28, + }; +static int bign_2_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + * test vectors from STB 34.101.45-2013 + * NOTE: the ephemeral private key has been recomputed using the private key as + * it is not explicitly provided by the example. + */ + const u8 k_buf[] = { + 0xec, 0xe9, 0xbc, 0x3b, 0xd9, 0x90, 0x03, 0x0f, 0x4f, 0x28, 0x39, 0x0d, 0xdd, 0x51, 0x22, 0x57, 0x15, 0x44, 0x7f, 0x63, 0x9f, 0x40, 0x19, 0x6f, 0xe4, 0x39, 0x08, 0xbe, 0x98, 0x82, 0x4e, 0x0a, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_2_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, +}; + +static const ec_test_case bign_2_test_case = { + .name = "BIGN-BELT-HASH/bign256v1 2", + .ec_str_p = &bign256v1_str_params, + .priv_key = bign_2_test_vectors_priv_key, + .priv_key_len = sizeof(bign_2_test_vectors_priv_key), + .nn_random = bign_2_nn_random_belt_hash_test_vector, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58\x4A\x5D\xE4\x85\x04\xFA\x9D\x1B\xB6\xC7\xAC\x25\x2E\x72\xC2\x02\xFD\xCE\x0D\x5B\xE3\xD6\x12\x17\xB9\x61\x81\xFE\x67\x86\xAD\x71\x6B\x89\x0B", + .msglen = 48, + .sig_type = BIGN, + .exp_sig = bign_2_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_2_test_vectors_expected_sig), + .adata = bign_2_test_vectors_adata, + .adata_len = sizeof(bign_2_test_vectors_adata) +}; + +/************************************************/ +static const u8 bign_3_test_vectors_priv_key[] = { + 0x69, 0xe2, 0x73, 0xc2, 0x5f, 0x23, 0x79, 0x0c, 0x9e, 0x42, 0x32, 0x07, 0xed, 0x1f, 0x28, 0x34, 0x18, 0xf2, 0x74, 0x9c, 0x32, 0xf0, 0x33, 0x45, 0x67, 0x39, 0x73, 0x4b, 0xb8, 0xb5, 0x66, 0x1f, + }; +static const u8 bign_3_test_vectors_expected_sig[] = { + 0x19, 0xD3, 0x2B, 0x7E, 0x01, 0xE2, 0x5B, 0xAE, 0x4A, 0x70, 0xEB, 0x6B, 0xCA, 0x42, 0x60, 0x2C, + 0xCA, 0x6A, 0x13, 0x94, 0x44, 0x51, 0xBC, 0xC5, 0xD4, 0xC5, 0x4C, 0xFD, 0x87, 0x37, 0x61, 0x9C, 0x32, 0x8B, 0x8A, 0x58, 0xFB, 0x9C, 0x68, 0xFD, 0x17, 0xD5, 0x69, 0xF7, 0xD0, 0x64, 0x95, 0xFB, + }; +static int bign_3_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + */ + const u8 k_buf[] = { + 0x1e, 0x11, 0x97, 0xae, 0x17, 0xe4, 0x5c, 0xa4, 0xa1, 0xb6, 0xfa, 0x53, 0x95, 0x8c, 0xfd, 0x40, 0x64, 0x58, 0x04, 0x40, 0x1a, 0x47, 0xf2, 0xe1, 0xc4, 0xbb, 0x1d, 0x41, 0xd8, 0x14, 0x96, 0x82, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_3_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, +}; + +static const ec_test_case bign_3_test_case = { + .name = "BIGN-BELT-HASH/bign256v1 3", + .ec_str_p = &bign256v1_str_params, + .priv_key = bign_3_test_vectors_priv_key, + .priv_key_len = sizeof(bign_3_test_vectors_priv_key), + .nn_random = bign_3_nn_random_belt_hash_test_vector, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58", + .msglen = 13, + .sig_type = BIGN, + .exp_sig = bign_3_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_3_test_vectors_expected_sig), + .adata = bign_3_test_vectors_adata, + .adata_len = sizeof(bign_3_test_vectors_adata) +}; + +/********************************************************************/ +static const u8 bign_4_test_vectors_priv_key[] = { + 0x69, 0xe2, 0x73, 0xc2, 0x5f, 0x23, 0x79, 0x0c, 0x9e, 0x42, 0x32, 0x07, 0xed, 0x1f, 0x28, 0x34, 0x18, 0xf2, 0x74, 0x9c, 0x32, 0xf0, 0x33, 0x45, 0x67, 0x39, 0x73, 0x4b, 0xb8, 0xb5, 0x66, 0x1f, + }; +static const u8 bign_4_test_vectors_expected_sig[] = { + 0x47, 0xA6, 0x3C, 0x8B, 0x9C, 0x93, 0x6E, 0x94, 0xB5, 0xFA, 0xB3, 0xD9, 0xCB, 0xD7, 0x83, 0x66, + 0x29, 0x0F, 0x32, 0x10, 0xE1, 0x63, 0xEE, 0xC8, 0xDB, 0x4E, 0x92, 0x1E, 0x84, 0x79, 0xD4, 0x13, 0x8F, 0x11, 0x2C, 0xC2, 0x3E, 0x6D, 0xCE, 0x65, 0xEC, 0x5F, 0xF2, 0x1D, 0xF4, 0x23, 0x1C, 0x28, + }; +static int bign_4_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + * test vectors from STB 34.101.45-2013 + * NOTE: the ephemeral private key has been recomputed using the private key as + * it is not explicitly provided by the example. + */ + const u8 k_buf[] = { + 0xec, 0xe9, 0xbc, 0x3b, 0xd9, 0x90, 0x03, 0x0f, 0x4f, 0x28, 0x39, 0x0d, 0xdd, 0x51, 0x22, 0x57, 0x15, 0x44, 0x7f, 0x63, 0x9f, 0x40, 0x19, 0x6f, 0xe4, 0x39, 0x08, 0xbe, 0x98, 0x82, 0x4e, 0x0a, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_4_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, +}; + +static const ec_test_case bign_4_test_case = { + .name = "BIGN-BELT-HASH/bign256v1 4", + .ec_str_p = &bign256v1_str_params, + .priv_key = bign_4_test_vectors_priv_key, + .priv_key_len = sizeof(bign_4_test_vectors_priv_key), + .nn_random = bign_4_nn_random_belt_hash_test_vector, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58\x4A\x5D\xE4\x85\x04\xFA\x9D\x1B\xB6\xC7\xAC\x25\x2E\x72\xC2\x02\xFD\xCE\x0D\x5B\xE3\xD6\x12\x17\xB9\x61\x81\xFE\x67\x86\xAD\x71\x6B\x89\x0B", + .msglen = 48, + .sig_type = BIGN, + .exp_sig = bign_4_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_4_test_vectors_expected_sig), + .adata = bign_4_test_vectors_adata, + .adata_len = sizeof(bign_4_test_vectors_adata) +}; +#endif + +#if defined(WITH_HASH_BASH384) && defined(WITH_CURVE_BIGN384V1) +/********************************************************************/ +static const u8 bign_5_test_vectors_priv_key[] = { + 0x0e, 0xb5, 0x93, 0x2d, 0x23, 0x1a, 0xe1, 0x37, 0x61, 0x41, 0x80, 0xec, 0x3b, 0xbe, 0x08, 0x0f, 0x93, 0xba, 0x80, 0x27, 0x8f, 0x05, 0xd8, 0x2f, 0x87, 0x6a, 0xf9, 0xf9, 0xea, 0x0a, 0xf1, 0x9e, 0x6c, 0xa1, 0x6f, 0x21, 0x6c, 0x38, 0x21, 0xdc, 0x72, 0x23, 0x3c, 0x7b, 0xbf, 0x1d, 0xc2, 0x84, + }; +static const u8 bign_5_test_vectors_expected_sig[] = { + 0xA7, 0xFC, 0x9D, 0x62, 0xB6, 0x85, 0x9E, 0xBB, 0x0A, 0x98, 0xAA, 0xE3, 0x6B, 0xE4, 0x79, 0x69, + 0xC3, 0x62, 0xB6, 0x66, 0x95, 0x75, 0x0D, 0xDD, 0x2C, 0xA1, 0x75, 0x32, 0x18, 0x26, 0xD4, 0xBC, + 0x8F, 0x78, 0xEB, 0xF5, 0x55, 0xA8, 0x71, 0x21, 0x3F, 0xEC, 0x6B, 0x50, 0xA6, 0x3D, 0x30, 0xC5, + 0x89, 0x73, 0x3B, 0x0A, 0x56, 0xF6, 0xC0, 0xC2, 0xBC, 0x03, 0xA3, 0x53, 0x29, 0x69, 0xCD, 0xF0, + 0x11, 0xDC, 0x28, 0xD4, 0x84, 0x4E, 0x79, 0xEC, + }; +static int bign_5_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + */ + const u8 k_buf[] = { + 0x15, 0xf4, 0x26, 0x4c, 0xa3, 0x51, 0x9a, 0xa6, 0x0a, 0xd8, 0xae, 0x14, 0x79, 0x31, 0x73, + 0x19, 0x80, 0xa8, 0xe1, 0xc3, 0x61, 0x0d, 0xa5, 0xdd, 0xa3, 0x17, 0xea, 0x54, 0xca, 0x73, + 0x3a, 0xa1, 0xe7, 0x1d, 0x1a, 0x5b, 0x0a, 0xc1, 0xae, 0x49, 0xbc, 0xd0, 0x90, 0x02, 0xc1, + 0x9d, 0x3c, 0x19, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_5_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0c, +}; + +static const ec_test_case bign_5_test_case = { + .name = "BIGN-BASH384/bign384v1 5", + .ec_str_p = &bign384v1_str_params, + .priv_key = bign_5_test_vectors_priv_key, + .priv_key_len = sizeof(bign_5_test_vectors_priv_key), + .nn_random = bign_5_nn_random_belt_hash_test_vector, + .hash_type = BASH384, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f\x99\xe1\x2b\xdc\x1a\xe2\x82\x57\xec\x70\x3f\xcc\xf0\x95\xee\x8d\xf1\xc1\xab\x76\x38\x9f\xe6\x78\xca\xf7\xc6\xf8\x60\xd5\xbb\x9c", + .msglen = 95, + .sig_type = BIGN, + .exp_sig = bign_5_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_5_test_vectors_expected_sig), + .adata = bign_5_test_vectors_adata, + .adata_len = sizeof(bign_5_test_vectors_adata) +}; +/********************************************************************/ +static const u8 bign_6_test_vectors_priv_key[] = { + 0x0e, 0xb5, 0x93, 0x2d, 0x23, 0x1a, 0xe1, 0x37, 0x61, 0x41, 0x80, 0xec, 0x3b, 0xbe, 0x08, 0x0f, 0x93, 0xba, 0x80, 0x27, 0x8f, 0x05, 0xd8, 0x2f, 0x87, 0x6a, 0xf9, 0xf9, 0xea, 0x0a, 0xf1, 0x9e, 0x6c, 0xa1, 0x6f, 0x21, 0x6c, 0x38, 0x21, 0xdc, 0x72, 0x23, 0x3c, 0x7b, 0xbf, 0x1d, 0xc2, 0x84, + }; +static const u8 bign_6_test_vectors_expected_sig[] = { + 0x51, 0xD1, 0x1A, 0xBB, 0x63, 0x92, 0xD9, 0x04, 0x06, 0x85, 0xC4, 0xCC, 0x3A, 0x87, 0x55, 0x3B, + 0xAF, 0x47, 0x44, 0x81, 0x19, 0x86, 0x02, 0xFC, 0xF1, 0x80, 0xDD, 0x0E, 0x0F, 0x00, 0x76, 0xB7, + 0x5A, 0x9B, 0x87, 0x52, 0x69, 0x56, 0x09, 0x30, 0x80, 0xDA, 0x21, 0xAC, 0xFE, 0x73, 0xA7, 0x0E, + 0xEF, 0x4E, 0x5C, 0xEA, 0xE8, 0xC0, 0x7C, 0xDB, 0xA5, 0x26, 0xCF, 0xA3, 0xF6, 0xC5, 0x0D, 0xFD, + 0x4E, 0x8E, 0x88, 0x17, 0xC1, 0xAE, 0x62, 0x4B, + }; +static int bign_6_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + */ + const u8 k_buf[] = { + 0x15, 0xf4, 0x26, 0x4c, 0xa3, 0x51, 0x9a, 0xa6, 0x0a, 0xd8, 0xae, 0x14, 0x79, 0x31, 0x73, + 0x19, 0x80, 0xa8, 0xe1, 0xc3, 0x61, 0x0d, 0xa5, 0xdd, 0xa3, 0x17, 0xea, 0x54, 0xca, 0x73, + 0x3a, 0xa1, 0xe7, 0x1d, 0x1a, 0x5b, 0x0a, 0xc1, 0xae, 0x49, 0xbc, 0xd0, 0x90, 0x02, 0xc1, + 0x9d, 0x3c, 0x19, + + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_6_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0c, +}; + +static const ec_test_case bign_6_test_case = { + .name = "BIGN-BASH384/bign384v1 6", + .ec_str_p = &bign384v1_str_params, + .priv_key = bign_6_test_vectors_priv_key, + .priv_key_len = sizeof(bign_6_test_vectors_priv_key), + .nn_random = bign_6_nn_random_belt_hash_test_vector, + .hash_type = BASH384, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f\x99\xe1\x2b\xdc\x1a\xe2\x82\x57\xec\x70\x3f\xcc\xf0\x95\xee\x8d\xf1\xc1\xab\x76\x38\x9f\xe6\x78\xca\xf7\xc6\xf8\x60\xd5\xbb\x9c\x4f", + .msglen = 96, + .sig_type = BIGN, + .exp_sig = bign_6_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_6_test_vectors_expected_sig), + .adata = bign_6_test_vectors_adata, + .adata_len = sizeof(bign_6_test_vectors_adata) +}; + +#endif + + +#if defined(WITH_HASH_BASH512) && defined(WITH_CURVE_BIGN512V1) +/********************************************************************/ +static const u8 bign_7_test_vectors_priv_key[] = { + 0xb8, 0xb9, 0x4a, 0xd2, 0xe5, 0x05, 0x02, 0xc5, 0x21, 0xe8, 0x8f, 0x1b, 0xcf, 0x97, 0x0b, 0x1b, 0x47, 0x78, 0x02, 0x31, 0x5b, 0xfe, 0x1f, 0x71, 0xd8, 0x55, 0x71, 0xa2, 0xd1, 0xc1, 0x90, 0x60, 0xba, 0xa2, 0xf1, 0xe0, 0x7d, 0x73, 0xd5, 0x2f, 0x37, 0x31, 0x0b, 0x04, 0x02, 0x3a, 0xbf, 0x33, 0x63, 0xb5, 0xf2, 0x95, 0x2a, 0x62, 0x17, 0xa4, 0x8a, 0x56, 0xf4, 0x3e, 0x35, 0x96, 0xc0, 0xbe, + }; +static const u8 bign_7_test_vectors_expected_sig[] = { + 0xF9, 0x22, 0xD7, 0x01, 0x48, 0xC5, 0x5A, 0xD5, 0x47, 0xEB, 0x0A, 0x19, 0x30, 0xE5, 0x2C, 0xC5, 0x52, 0xD9, 0x28, 0xDC, 0x76, 0xE4, 0x03, 0x0C, 0x9E, 0xE5, 0x7D, 0xE8, + 0xDE, 0xD1, 0xB5, 0xF9, 0x5D, 0x4E, 0x33, 0xF4, 0x7C, 0xD3, 0x61, 0xDA, 0xCB, 0x1F, 0x26, 0xB2, 0x01, 0x32, 0xE4, 0x5D, 0x49, 0x88, 0xFB, 0x86, 0xAF, 0x1B, 0x54, 0x65, + 0x8F, 0xE2, 0xFE, 0x97, 0x11, 0x61, 0x77, 0xF5, 0xD3, 0x11, 0x7C, 0xE0, 0x63, 0x2D, 0xDF, 0xAA, 0x8E, 0xDE, 0x10, 0xDA, 0x7D, 0xF8, 0x35, 0xD2, 0x72, 0x5E, 0x2B, 0x83, 0x4C, 0xA9, 0x6C, 0x8C, 0x06, 0x1B, 0xC8, 0x31, 0xDF, 0xA5, 0xB3, 0x16, + }; +static int bign_7_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + */ + const u8 k_buf[] = { + 0x62, 0x64, 0x5d, 0x68, 0xca, 0x6f, 0xb3, 0x52, 0x10, 0xf6, 0xdb, 0x92, 0xe2, + 0xe7, 0x86, 0xee, 0x34, 0x65, 0xdd, 0xc9, 0x62, 0xbe, 0x99, 0x70, 0xfe, 0x1c, + 0x12, 0xe6, 0xe7, 0xca, 0x95, 0xe9, 0x1a, 0xe0, 0x7b, 0x65, 0x9a, 0x8b, 0x7c, + 0x03, 0xf9, 0xb7, 0x2e, 0x64, 0x1f, 0xef, 0xdc, 0x5b, 0x7a, 0xb6, 0xcd, 0x8c, + 0x03, 0x95, 0xe3, 0x80, 0xb9, 0x2c, 0x2f, 0xfd, 0x19, 0xe7, 0x83, 0x2c, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_7_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0d, +}; + +static const ec_test_case bign_7_test_case = { + .name = "BIGN-BASH512/bign512v1 7", + .ec_str_p = &bign512v1_str_params, + .priv_key = bign_7_test_vectors_priv_key, + .priv_key_len = sizeof(bign_7_test_vectors_priv_key), + .nn_random = bign_7_nn_random_belt_hash_test_vector, + .hash_type = BASH512, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f", + .msglen = 63, + .sig_type = BIGN, + .exp_sig = bign_7_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_7_test_vectors_expected_sig), + .adata = bign_7_test_vectors_adata, + .adata_len = sizeof(bign_7_test_vectors_adata) +}; + +/********************************************************************/ +static const u8 bign_8_test_vectors_priv_key[] = { + 0xb8, 0xb9, 0x4a, 0xd2, 0xe5, 0x05, 0x02, 0xc5, 0x21, 0xe8, 0x8f, 0x1b, 0xcf, 0x97, 0x0b, 0x1b, 0x47, 0x78, 0x02, 0x31, 0x5b, 0xfe, 0x1f, 0x71, 0xd8, 0x55, 0x71, 0xa2, 0xd1, 0xc1, 0x90, 0x60, 0xba, 0xa2, 0xf1, 0xe0, 0x7d, 0x73, 0xd5, 0x2f, 0x37, 0x31, 0x0b, 0x04, 0x02, 0x3a, 0xbf, 0x33, 0x63, 0xb5, 0xf2, 0x95, 0x2a, 0x62, 0x17, 0xa4, 0x8a, 0x56, 0xf4, 0x3e, 0x35, 0x96, 0xc0, 0xbe, + }; +static const u8 bign_8_test_vectors_expected_sig[] = { + 0x4B, 0x47, 0x8B, 0x2B, 0x28, 0x79, 0x5A, 0x43, 0x8C, 0x3F, 0x4A, 0x70, 0xD7, 0xF3, 0x02, 0xD3, + 0xD1, 0xB6, 0x15, 0xE9, 0x85, 0xCE, 0x22, 0xDA, 0x71, 0x22, 0xAE, 0x1E, 0xAB, 0x0D, 0xD9, 0x87, + 0x92, 0x39, 0x94, 0x96, 0x8A, 0x24, 0xBF, 0x15, 0xC2, 0xE6, 0x59, 0xB4, 0x54, 0x6F, 0x83, 0xCF, + 0x16, 0x49, 0x33, 0x38, 0x79, 0xD4, 0x79, 0x54, 0xC4, 0xAB, 0x7E, 0x41, 0x04, 0x6E, 0xB3, 0xD9, + 0x27, 0x87, 0xF7, 0x85, 0xC9, 0x12, 0x30, 0xCD, 0x7E, 0x65, 0xE4, 0x55, 0x26, 0xD4, 0x56, 0x50, + 0x92, 0x1D, 0x77, 0x2D, 0xD4, 0x2B, 0xD3, 0x52, 0x2C, 0xF7, 0xBD, 0x5F, 0x7D, 0x79, 0xAB, 0x65, + }; +static int bign_8_nn_random_belt_hash_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for bign signature + */ + const u8 k_buf[] = { + 0x62, 0x64, 0x5d, 0x68, 0xca, 0x6f, 0xb3, 0x52, 0x10, 0xf6, 0xdb, 0x92, 0xe2, + 0xe7, 0x86, 0xee, 0x34, 0x65, 0xdd, 0xc9, 0x62, 0xbe, 0x99, 0x70, 0xfe, 0x1c, + 0x12, 0xe6, 0xe7, 0xca, 0x95, 0xe9, 0x1a, 0xe0, 0x7b, 0x65, 0x9a, 0x8b, 0x7c, + 0x03, 0xf9, 0xb7, 0x2e, 0x64, 0x1f, 0xef, 0xdc, 0x5b, 0x7a, 0xb6, 0xcd, 0x8c, + 0x03, 0x95, 0xe3, 0x80, 0xb9, 0x2c, 0x2f, 0xfd, 0x19, 0xe7, 0x83, 0x2c, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 bign_8_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0d, +}; + +static const ec_test_case bign_8_test_case = { + .name = "BIGN-BASH512/bign512v1 8", + .ec_str_p = &bign512v1_str_params, + .priv_key = bign_8_test_vectors_priv_key, + .priv_key_len = sizeof(bign_8_test_vectors_priv_key), + .nn_random = bign_8_nn_random_belt_hash_test_vector, + .hash_type = BASH512, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f\x99", + .msglen = 64, + .sig_type = BIGN, + .exp_sig = bign_8_test_vectors_expected_sig, + .exp_siglen = sizeof(bign_8_test_vectors_expected_sig), + .adata = bign_8_test_vectors_adata, + .adata_len = sizeof(bign_8_test_vectors_adata) +}; +#endif + +/************************************************/ +#define BIGN_ALL_TESTS() \ + &bign_1_test_case, \ + &bign_2_test_case, \ + &bign_3_test_case, \ + &bign_4_test_case, \ + &bign_5_test_case, \ + &bign_6_test_case, \ + &bign_7_test_case, \ + &bign_8_test_case, + +#endif /* __BIGN_TEST_VECTORS_H__ */ diff --git a/crypto/libecc/src/tests/bip0340_test_vectors.h b/crypto/libecc/src/tests/bip0340_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/bip0340_test_vectors.h @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __BIP0340_TEST_VECTORS_H__ +#define __BIP0340_TEST_VECTORS_H__ + +#if defined(WITH_HASH_SHA256) && defined(WITH_CURVE_SECP256K1) +/************************************************/ +static const u8 bip0340_1_test_vectors_priv_key[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + }; +static const u8 bip0340_1_test_vectors_expected_sig[] = { + 0xE9, 0x07, 0x83, 0x1F, 0x80, 0x84, 0x8D, 0x10, 0x69, 0xA5, 0x37, 0x1B, 0x40, 0x24, 0x10, 0x36, 0x4B, 0xDF, 0x1C, 0x5F, 0x83, 0x07, 0xB0, 0x08, 0x4C, 0x55, 0xF1, 0xCE, 0x2D, 0xCA, 0x82, 0x15, 0x25, 0xF6, 0x6A, 0x4A, 0x85, 0xEA, 0x8B, 0x71, 0xE4, 0x82, 0xA7, 0x4F, 0x38, 0x2D, 0x2C, 0xE5, 0xEB, 0xEE, 0xE8, 0xFD, 0xB2, 0x17, 0x2F, 0x47, 0x7D, 0xF4, 0x90, 0x0D, 0x31, 0x05, 0x36, 0xC0, + }; +static int bip0340_1_nn_random_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed auxiliary random for BIP0340 + * Test vectors from: + * https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv + */ + const u8 k_buf[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const ec_test_case bip0340_1_test_case = { + .name = "BIP0340-SHA256/secp256k1 1", + .ec_str_p = &secp256k1_str_params, + .priv_key = bip0340_1_test_vectors_priv_key, + .priv_key_len = sizeof(bip0340_1_test_vectors_priv_key), + .nn_random = bip0340_1_nn_random_test_vector, + .hash_type = SHA256, + .msg = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .msglen = 32, + .sig_type = BIP0340, + .exp_sig = bip0340_1_test_vectors_expected_sig, + .exp_siglen = sizeof(bip0340_1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 bip0340_2_test_vectors_priv_key[] = { + 0xB7, 0xE1, 0x51, 0x62, 0x8A, 0xED, 0x2A, 0x6A, 0xBF, 0x71, 0x58, 0x80, 0x9C, 0xF4, 0xF3, 0xC7, 0x62, 0xE7, 0x16, 0x0F, 0x38, 0xB4, 0xDA, 0x56, 0xA7, 0x84, 0xD9, 0x04, 0x51, 0x90, 0xCF, 0xEF, + }; +static const u8 bip0340_2_test_vectors_expected_sig[] = { + 0x68, 0x96, 0xBD, 0x60, 0xEE, 0xAE, 0x29, 0x6D, 0xB4, 0x8A, 0x22, 0x9F, 0xF7, 0x1D, 0xFE, 0x07, 0x1B, 0xDE, 0x41, 0x3E, 0x6D, 0x43, 0xF9, 0x17, 0xDC, 0x8D, 0xCF, 0x8C, 0x78, 0xDE, 0x33, 0x41, 0x89, 0x06, 0xD1, 0x1A, 0xC9, 0x76, 0xAB, 0xCC, 0xB2, 0x0B, 0x09, 0x12, 0x92, 0xBF, 0xF4, 0xEA, 0x89, 0x7E, 0xFC, 0xB6, 0x39, 0xEA, 0x87, 0x1C, 0xFA, 0x95, 0xF6, 0xDE, 0x33, 0x9E, 0x4B, 0x0A, + }; +static int bip0340_2_nn_random_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed auxiliary random for BIP0340 + * Test vectors from: + * https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv + */ + const u8 k_buf[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const ec_test_case bip0340_2_test_case = { + .name = "BIP0340-SHA256/secp256k1 2", + .ec_str_p = &secp256k1_str_params, + .priv_key = bip0340_2_test_vectors_priv_key, + .priv_key_len = sizeof(bip0340_2_test_vectors_priv_key), + .nn_random = bip0340_2_nn_random_test_vector, + .hash_type = SHA256, + .msg = "\x24\x3F\x6A\x88\x85\xA3\x08\xD3\x13\x19\x8A\x2E\x03\x70\x73\x44\xA4\x09\x38\x22\x29\x9F\x31\xD0\x08\x2E\xFA\x98\xEC\x4E\x6C\x89", + .msglen = 32, + .sig_type = BIP0340, + .exp_sig = bip0340_2_test_vectors_expected_sig, + .exp_siglen = sizeof(bip0340_2_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 bip0340_3_test_vectors_priv_key[] = { + 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x14, 0xE5, 0xC9, + }; +static const u8 bip0340_3_test_vectors_expected_sig[] = { + 0x58, 0x31, 0xAA, 0xEE, 0xD7, 0xB4, 0x4B, 0xB7, 0x4E, 0x5E, 0xAB, 0x94, 0xBA, 0x9D, 0x42, 0x94, 0xC4, 0x9B, 0xCF, 0x2A, 0x60, 0x72, 0x8D, 0x8B, 0x4C, 0x20, 0x0F, 0x50, 0xDD, 0x31, 0x3C, 0x1B, 0xAB, 0x74, 0x58, 0x79, 0xA5, 0xAD, 0x95, 0x4A, 0x72, 0xC4, 0x5A, 0x91, 0xC3, 0xA5, 0x1D, 0x3C, 0x7A, 0xDE, 0xA9, 0x8D, 0x82, 0xF8, 0x48, 0x1E, 0x0E, 0x1E, 0x03, 0x67, 0x4A, 0x6F, 0x3F, 0xB7, + }; +static int bip0340_3_nn_random_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed auxiliary random for BIP0340 + * Test vectors from: + * https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv + */ + const u8 k_buf[] = { + 0xC8, 0x7A, 0xA5, 0x38, 0x24, 0xB4, 0xD7, 0xAE, 0x2E, 0xB0, 0x35, 0xA2, 0xB5, 0xBB, 0xBC, 0xCC, 0x08, 0x0E, 0x76, 0xCD, 0xC6, 0xD1, 0x69, 0x2C, 0x4B, 0x0B, 0x62, 0xD7, 0x98, 0xE6, 0xD9, 0x06, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const ec_test_case bip0340_3_test_case = { + .name = "BIP0340-SHA256/secp256k1 3", + .ec_str_p = &secp256k1_str_params, + .priv_key = bip0340_3_test_vectors_priv_key, + .priv_key_len = sizeof(bip0340_3_test_vectors_priv_key), + .nn_random = bip0340_3_nn_random_test_vector, + .hash_type = SHA256, + .msg = "\x7E\x2D\x58\xD8\xB3\xBC\xDF\x1A\xBA\xDE\xC7\x82\x90\x54\xF9\x0D\xDA\x98\x05\xAA\xB5\x6C\x77\x33\x30\x24\xB9\xD0\xA5\x08\xB7\x5C", + .msglen = 32, + .sig_type = BIP0340, + .exp_sig = bip0340_3_test_vectors_expected_sig, + .exp_siglen = sizeof(bip0340_3_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 bip0340_4_test_vectors_priv_key[] = { + 0x0B, 0x43, 0x2B, 0x26, 0x77, 0x93, 0x73, 0x81, 0xAE, 0xF0, 0x5B, 0xB0, 0x2A, 0x66, 0xEC, 0xD0, 0x12, 0x77, 0x30, 0x62, 0xCF, 0x3F, 0xA2, 0x54, 0x9E, 0x44, 0xF5, 0x8E, 0xD2, 0x40, 0x17, 0x10, + }; +static const u8 bip0340_4_test_vectors_expected_sig[] = { + 0x7E, 0xB0, 0x50, 0x97, 0x57, 0xE2, 0x46, 0xF1, 0x94, 0x49, 0x88, 0x56, 0x51, 0x61, 0x1C, 0xB9, 0x65, 0xEC, 0xC1, 0xA1, 0x87, 0xDD, 0x51, 0xB6, 0x4F, 0xDA, 0x1E, 0xDC, 0x96, 0x37, 0xD5, 0xEC, 0x97, 0x58, 0x2B, 0x9C, 0xB1, 0x3D, 0xB3, 0x93, 0x37, 0x05, 0xB3, 0x2B, 0xA9, 0x82, 0xAF, 0x5A, 0xF2, 0x5F, 0xD7, 0x88, 0x81, 0xEB, 0xB3, 0x27, 0x71, 0xFC, 0x59, 0x22, 0xEF, 0xC6, 0x6E, 0xA3, + }; +static int bip0340_4_nn_random_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed auxiliary random for BIP0340 + * Test vectors from: + * https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv + */ + const u8 k_buf[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const ec_test_case bip0340_4_test_case = { + .name = "BIP0340-SHA256/secp256k1 4", + .ec_str_p = &secp256k1_str_params, + .priv_key = bip0340_4_test_vectors_priv_key, + .priv_key_len = sizeof(bip0340_4_test_vectors_priv_key), + .nn_random = bip0340_4_nn_random_test_vector, + .hash_type = SHA256, + .msg = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", + .msglen = 32, + .sig_type = BIP0340, + .exp_sig = bip0340_4_test_vectors_expected_sig, + .exp_siglen = sizeof(bip0340_4_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif + +/************************************************/ +#define BIP0340_ALL_TESTS() \ + &bip0340_1_test_case, \ + &bip0340_2_test_case, \ + &bip0340_3_test_case, \ + &bip0340_4_test_case, + +#endif /* __BIP0340_TEST_VECTORS_H__ */ diff --git a/crypto/libecc/src/tests/dbign_test_vectors.h b/crypto/libecc/src/tests/dbign_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/dbign_test_vectors.h @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2022 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __DBIGN_TEST_VECTORS_H__ +#define __DBIGN_TEST_VECTORS_H__ + +#if defined(WITH_HASH_BELT_HASH) && defined(WITH_CURVE_BIGN256V1) +/************************************************/ +static const u8 dbign_1_test_vectors_priv_key[] = { + 0x69, 0xe2, 0x73, 0xc2, 0x5f, 0x23, 0x79, 0x0c, 0x9e, 0x42, 0x32, 0x07, 0xed, 0x1f, 0x28, 0x34, 0x18, 0xf2, 0x74, 0x9c, 0x32, 0xf0, 0x33, 0x45, 0x67, 0x39, 0x73, 0x4b, 0xb8, 0xb5, 0x66, 0x1f, + }; +static const u8 dbign_1_test_vectors_expected_sig[] = { + 0x19, 0xd3, 0x2b, 0x7e, 0x01, 0xe2, 0x5b, 0xae, 0x4a, 0x70, 0xeb, 0x6b, 0xca, 0x42, 0x60, 0x2c, + 0xca, 0x6a, 0x13, 0x94, 0x44, 0x51, 0xbc, 0xc5, 0xd4, 0xc5, 0x4c, 0xfd, 0x87, 0x37, 0x61, 0x9c, 0x32, 0x8b, 0x8a, 0x58, 0xfb, 0x9c, 0x68, 0xfd, 0x17, 0xd5, 0x69, 0xf7, 0xd0, 0x64, 0x95, 0xfb, + }; +static const u8 dbign_1_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, +}; + +static const ec_test_case dbign_1_test_case = { + .name = "DBIGN-BELT-HASH/dbign256v1 1", + .ec_str_p = &bign256v1_str_params, + .priv_key = dbign_1_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_1_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58", + .msglen = 13, + .sig_type = DBIGN, + .exp_sig = dbign_1_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_1_test_vectors_expected_sig), + .adata = dbign_1_test_vectors_adata, + .adata_len = sizeof(dbign_1_test_vectors_adata) +}; + +/********************************************************************/ +static const u8 dbign_2_test_vectors_priv_key[] = { + 0x69, 0xe2, 0x73, 0xc2, 0x5f, 0x23, 0x79, 0x0c, 0x9e, 0x42, 0x32, 0x07, 0xed, 0x1f, 0x28, 0x34, 0x18, 0xf2, 0x74, 0x9c, 0x32, 0xf0, 0x33, 0x45, 0x67, 0x39, 0x73, 0x4b, 0xb8, 0xb5, 0x66, 0x1f, + }; +static const u8 dbign_2_test_vectors_expected_sig[] = { + 0x2a, 0x0e, 0xf2, 0x4b, 0xa6, 0x2d, 0x63, 0xa3, 0x34, 0x10, 0x3f, 0x47, 0x0d, 0xc7, 0x55, 0xeb, + 0x2c, 0x51, 0xba, 0x3d, 0x57, 0xaa, 0x4e, 0xfe, 0xd5, 0x61, 0x76, 0x19, 0x04, 0xf9, 0x39, 0x9e, 0x0f, 0xf6, 0x18, 0x04, 0xfb, 0x46, 0xec, 0xa1, 0x74, 0xe1, 0xdd, 0xd9, 0xe5, 0x5e, 0x25, 0x64, + }; +static const u8 dbign_2_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x17, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, + 0xBE, 0x32, 0x97, 0x13, 0x43, 0xFC, 0x9A, 0x48, 0xA0, 0x2A, 0x88, 0x5F, 0x19, 0x4B, 0x09, 0xA1, 0x7E, 0xCD, 0xA4, 0xD0, 0x15, 0x44, 0xAF, +}; + +static const ec_test_case dbign_2_test_case = { + .name = "DBIGN-BELT-HASH/dbign256v1 2", + .ec_str_p = &bign256v1_str_params, + .priv_key = dbign_2_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_2_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58\x4A\x5D\xE4\x85\x04\xFA\x9D\x1B\xB6\xC7\xAC\x25\x2E\x72\xC2\x02\xFD\xCE\x0D\x5B\xE3\xD6\x12\x17\xB9\x61\x81\xFE\x67\x86\xAD\x71\x6B\x89\x0B", + .msglen = 48, + .sig_type = DBIGN, + .exp_sig = dbign_2_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_2_test_vectors_expected_sig), + .adata = dbign_2_test_vectors_adata, + .adata_len = sizeof(dbign_2_test_vectors_adata) +}; + +/********************************************************************/ +static const u8 dbign_3_test_vectors_priv_key[] = { + 0xb3, 0x8a, 0x57, 0x70, 0xaa, 0xe8, 0x97, 0x73, 0x1a, 0xe3, 0x69, 0xaa, 0x48, 0x91, 0xf3, 0x14, 0xd4, 0xae, 0x76, 0x94, 0x29, 0xf3, 0xde, 0x94, 0xeb, 0x9b, 0x36, 0xdf, 0x79, 0x89, 0x62, 0x79, + }; + +static const u8 dbign_3_test_vectors_expected_sig[] = { + 0x3d, 0xcf, 0xf8, 0x86, 0x87, 0xa9, 0x8a, 0xbb, 0x01, 0xce, 0x2d, 0xe8, 0x3e, 0x3a, 0x65, 0xeb, + 0x69, 0xd1, 0x6a, 0x47, 0x50, 0x87, 0x50, 0xfb, 0x6f, 0x18, 0x64, 0x2c, 0x1b, 0x48, 0xb4, 0xaf, 0xff, 0xcd, 0x59, 0xcf, 0xd9, 0x98, 0x6f, 0xe9, 0xf2, 0xbb, 0xea, 0x99, 0xb9, 0x65, 0xb0, 0x1b, + }; +static const u8 dbign_3_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x1F, 0x51, +}; + +static const ec_test_case dbign_3_test_case = { + .name = "DBIGN-BELT-HASH/dbign256v1 3", + .ec_str_p = &bign256v1_str_params, + .priv_key = dbign_3_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_3_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BELT_HASH, + .msg = "\xB1\x94\xBA\xC8\x0A\x08\xF5\x3B\x36\x6D\x00\x8E\x58\x4A\x5D\xE4\x85\x04\xFA\x9D\x1B\xB6\xC7\xAC\x25\x2E\x72\xC2\x02\xFD\xCE\x0D\x5B\xE3\xD6\x12\x17\xB9\x61\x81\xFE\x67\x86\xAD\x71\x6B\x89\x0B", + .msglen = 48, + .sig_type = DBIGN, + .exp_sig = dbign_3_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_3_test_vectors_expected_sig), + .adata = dbign_3_test_vectors_adata, + .adata_len = sizeof(dbign_3_test_vectors_adata) +}; +#endif + +#if defined(WITH_HASH_BASH384) && defined(WITH_CURVE_BIGN384V1) +/********************************************************************/ +static const u8 dbign_4_test_vectors_priv_key[] = { + 0x0e, 0xb5, 0x93, 0x2d, 0x23, 0x1a, 0xe1, 0x37, 0x61, 0x41, 0x80, 0xec, 0x3b, 0xbe, 0x08, 0x0f, 0x93, 0xba, 0x80, 0x27, 0x8f, 0x05, 0xd8, 0x2f, 0x87, 0x6a, 0xf9, 0xf9, 0xea, 0x0a, 0xf1, 0x9e, 0x6c, 0xa1, 0x6f, 0x21, 0x6c, 0x38, 0x21, 0xdc, 0x72, 0x23, 0x3c, 0x7b, 0xbf, 0x1d, 0xc2, 0x84, + }; +static const u8 dbign_4_test_vectors_expected_sig[] = { + 0xc2, 0xf6, 0x0f, 0x84, 0x00, 0xc1, 0xe4, 0xdd, 0xc4, 0x7f, 0x05, 0xd9, 0x6c, 0x0f, 0xed, 0x1e, 0xe3, 0x0a, 0xb2, 0x29, 0x87, 0x5d, 0xff, 0xb3, + 0xfa, 0xd2, 0xd7, 0x0e, 0xb8, 0x05, 0x56, 0x64, 0x12, 0xff, 0x35, 0xef, 0x62, 0xc0, 0x6f, 0xa6, 0x6b, 0x42, 0x5f, 0x21, 0x30, 0x60, 0x40, 0x9c, 0x6c, 0x06, 0xfc, 0x04, 0xf5, 0x0c, 0x63, 0x7e, 0x84, 0xbb, 0x3e, 0x7a, 0x29, 0x81, 0x51, 0xaa, 0xb1, 0x1a, 0x50, 0xb8, 0xe1, 0x52, 0x91, 0xbc, + }; +static const u8 dbign_4_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0c, +}; +static const ec_test_case dbign_4_test_case = { + .name = "BIGN-BASH384/dbign384v1 4", + .ec_str_p = &bign384v1_str_params, + .priv_key = dbign_4_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_4_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BASH384, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f\x99\xe1\x2b\xdc\x1a\xe2\x82\x57\xec\x70\x3f\xcc\xf0\x95\xee\x8d\xf1\xc1\xab\x76\x38\x9f\xe6\x78\xca\xf7\xc6\xf8\x60\xd5\xbb\x9c", + .msglen = 95, + .sig_type = DBIGN, + .exp_sig = dbign_4_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_4_test_vectors_expected_sig), + .adata = dbign_4_test_vectors_adata, + .adata_len = sizeof(dbign_4_test_vectors_adata) +}; +/********************************************************************/ +static const u8 dbign_5_test_vectors_priv_key[] = { + 0x2d, 0x27, 0xc3, 0x89, 0x27, 0x29, 0xfd, 0xb6, 0xf0, 0xee, 0xa7, 0xf8, 0x4e, 0x15, 0x2d, 0x30, 0x24, 0x60, 0xc9, 0x84, 0xde, 0xcb, 0xf6, 0xe6, 0xff, 0x4b, 0xce, 0xfb, 0x89, 0xb1, 0x5d, 0xd2, 0xe8, 0x4d, 0x10, 0xd6, 0x09, 0x92, 0x80, 0x2d, 0x66, 0x6b, 0xb8, 0x05, 0x5f, 0x31, 0xe1, 0x04, + }; +static const u8 dbign_5_test_vectors_expected_sig[] = { + 0x50, 0x0d, 0x4d, 0x66, 0xd4, 0xa6, 0x8a, 0xfc, 0xbb, 0x1d, 0xa7, 0x04, 0xa8, 0xc3, 0xdb, 0x4d, 0x97, 0xb6, 0x2f, 0x71, 0xe8, 0xcb, 0xfd, 0x06, + 0x27, 0xa8, 0x45, 0x1b, 0x30, 0x3f, 0x1b, 0x00, 0x84, 0xb3, 0xab, 0xf0, 0x21, 0x6e, 0x8c, 0x1d, 0x2f, 0x24, 0x75, 0x78, 0x0a, 0x50, 0x6d, 0xc8, 0x29, 0x7e, 0xb7, 0xab, 0x58, 0x73, 0x03, 0xd9, 0x9a, 0x1f, 0x9b, 0x90, 0x7e, 0xec, 0x1a, 0x0d, 0xf8, 0x41, 0x16, 0x53, 0x57, 0xcd, 0x92, 0x6a, + }; +static const u8 dbign_5_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0c, +}; +static const ec_test_case dbign_5_test_case = { + .name = "BIGN-BASH384/dbign384v1 5", + .ec_str_p = &bign384v1_str_params, + .priv_key = dbign_5_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_5_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BASH384, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f\x99\xe1\x2b\xdc\x1a\xe2\x82\x57\xec\x70\x3f\xcc\xf0\x95\xee\x8d\xf1\xc1\xab\x76\x38\x9f\xe6\x78\xca\xf7\xc6\xf8\x60\xd5\xbb\x9c\x4f", + .msglen = 96, + .sig_type = DBIGN, + .exp_sig = dbign_5_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_5_test_vectors_expected_sig), + .adata = dbign_5_test_vectors_adata, + .adata_len = sizeof(dbign_5_test_vectors_adata) +}; + +#endif + +#if defined(WITH_HASH_BASH512) && defined(WITH_CURVE_BIGN512V1) +/********************************************************************/ +static const u8 dbign_6_test_vectors_priv_key[] = { + 0xb8, 0xb9, 0x4a, 0xd2, 0xe5, 0x05, 0x02, 0xc5, 0x21, 0xe8, 0x8f, 0x1b, 0xcf, 0x97, 0x0b, 0x1b, 0x47, 0x78, 0x02, 0x31, 0x5b, 0xfe, 0x1f, 0x71, 0xd8, 0x55, 0x71, 0xa2, 0xd1, 0xc1, 0x90, 0x60, 0xba, 0xa2, 0xf1, 0xe0, 0x7d, 0x73, 0xd5, 0x2f, 0x37, 0x31, 0x0b, 0x04, 0x02, 0x3a, 0xbf, 0x33, 0x63, 0xb5, 0xf2, 0x95, 0x2a, 0x62, 0x17, 0xa4, 0x8a, 0x56, 0xf4, 0x3e, 0x35, 0x96, 0xc0, 0xbe, + }; +static const u8 dbign_6_test_vectors_expected_sig[] = { + 0x6e, 0x40, 0xef, 0x8f, 0xf9, 0x9e, 0x26, 0x86, 0xc8, 0x88, 0x53, 0xbb, 0x89, 0xd4, 0xbb, 0x92, 0x33, 0xe8, 0x07, 0x36, 0x5a, 0x32, 0x57, 0x57, 0x1d, 0x53, 0x68, 0xbf, 0x5d, 0x83, 0xd1, 0x5e, + 0x21, 0x83, 0x5b, 0xd6, 0xfa, 0x3b, 0x3d, 0xae, 0x93, 0x30, 0xc2, 0x79, 0x6c, 0x80, 0x3e, 0xee, 0xc9, 0x70, 0x3a, 0x81, 0xe7, 0x40, 0xfd, 0x6d, 0xd8, 0x51, 0xd0, 0x7d, 0xb9, 0x55, 0x72, 0x6c, 0x60, 0x86, 0x8d, 0x61, 0x4b, 0x23, 0x54, 0xe6, 0xd6, 0x4c, 0xf0, 0xd8, 0xdc, 0x9e, 0xf4, 0x79, 0x63, 0xf7, 0x0b, 0xb0, 0xd6, 0xf4, 0x21, 0x67, 0x54, 0x56, 0xbf, 0xbb, 0xb2, 0x03, 0xf2, 0x43, + }; +static const u8 dbign_6_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0d, +}; +static const ec_test_case dbign_6_test_case = { + .name = "BIGN-BASH512/dbign512v1 6", + .ec_str_p = &bign512v1_str_params, + .priv_key = dbign_6_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_6_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BASH512, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f", + .msglen = 63, + .sig_type = DBIGN, + .exp_sig = dbign_6_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_6_test_vectors_expected_sig), + .adata = dbign_6_test_vectors_adata, + .adata_len = sizeof(dbign_6_test_vectors_adata) +}; +/********************************************************************/ +static const u8 dbign_7_test_vectors_priv_key[] = { + 0x33, 0x0e, 0xea, 0x5c, 0xcd, 0xc8, 0x96, 0x5a, 0x4c, 0x05, 0xfc, 0x9c, 0x44, 0xde, 0x84, 0xd4, 0x53, 0x45, 0xd8, 0xdd, 0x5e, 0x04, 0xc3, 0x02, 0xff, 0xb9, 0x35, 0x76, 0xbd, 0x20, 0x7a, 0x56, 0x6c, 0x00, 0x7c, 0x95, 0x3b, 0x1f, 0x95, 0xb9, 0x88, 0x7c, 0x2d, 0x64, 0x14, 0x7a, 0x57, 0xf1, 0xeb, 0x0f, 0xe1, 0x02, 0x3e, 0x4f, 0xd5, 0x1f, 0xb3, 0xd5, 0xa8, 0xea, 0xd4, 0x88, 0x01, 0xa9, + }; +static const u8 dbign_7_test_vectors_expected_sig[] = { + 0x3d, 0x2e, 0x3b, 0x3e, 0x2a, 0x2a, 0xed, 0x58, 0x34, 0x7e, 0x87, 0xf2, 0x8c, 0xf8, 0xde, 0xe9, 0xd3, 0xfd, 0x6f, 0x91, 0x07, 0xe6, 0xf9, 0x0b, 0xd6, 0x75, 0x4a, 0x37, 0xe7, 0x8d, 0x8f, 0x63, + 0xfb, 0x5c, 0xc4, 0xdc, 0x39, 0xfb, 0x56, 0x7f, 0xa8, 0x54, 0x1b, 0x7f, 0x62, 0x86, 0x42, 0x02, 0xbb, 0x53, 0x62, 0x6c, 0xb2, 0x40, 0x70, 0x14, 0xea, 0x40, 0xef, 0x04, 0xbd, 0x20, 0xae, 0x19, 0x21, 0x39, 0xae, 0x24, 0x76, 0x9b, 0x20, 0x00, 0x9b, 0x7c, 0x99, 0x75, 0x1e, 0xbc, 0xef, 0x52, 0xf6, 0xfe, 0xfa, 0xe0, 0xc3, 0xaa, 0xd8, 0xf1, 0x2e, 0x78, 0xb2, 0x5e, 0x9b, 0xcc, 0x21, 0xec, + }; +static const u8 dbign_7_test_vectors_adata[] = { + 0x00, 0x0b, 0x00, 0x00, + 0x06, 0x09, 0x2A, 0x70, 0x00, 0x02, 0x00, 0x22, 0x65, 0x4d, 0x0d, +}; +static const ec_test_case dbign_7_test_case = { + .name = "BIGN-BASH512/dbign512v1 7", + .ec_str_p = &bign512v1_str_params, + .priv_key = dbign_7_test_vectors_priv_key, + .priv_key_len = sizeof(dbign_7_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = BASH512, + .msg = "\xb1\x94\xba\xc8\x0a\x08\xf5\x3b\x36\x6d\x00\x8e\x58\x4a\x5d\xe4\x85\x04\xfa\x9d\x1b\xb6\xc7\xac\x25\x2e\x72\xc2\x02\xfd\xce\x0d\x5b\xe3\xd6\x12\x17\xb9\x61\x81\xfe\x67\x86\xad\x71\x6b\x89\x0b\x5c\xb0\xc0\xff\x33\xc3\x56\xb8\x35\xc4\x05\xae\xd8\xe0\x7f\x99", + .msglen = 64, + .sig_type = DBIGN, + .exp_sig = dbign_7_test_vectors_expected_sig, + .exp_siglen = sizeof(dbign_7_test_vectors_expected_sig), + .adata = dbign_7_test_vectors_adata, + .adata_len = sizeof(dbign_7_test_vectors_adata) +}; + +#endif + + +/************************************************/ +#define DBIGN_ALL_TESTS() \ + &dbign_1_test_case, \ + &dbign_2_test_case, \ + &dbign_3_test_case, \ + &dbign_4_test_case, \ + &dbign_5_test_case, \ + &dbign_6_test_case, \ + &dbign_7_test_case, + +#endif /* __DBIGN_TEST_VECTORS_H__ */ diff --git a/crypto/libecc/src/tests/decdsa_test_vectors.h b/crypto/libecc/src/tests/decdsa_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/decdsa_test_vectors.h @@ -0,0 +1,1362 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA224_SECP192R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA224/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA224_0_test_vector_expected_sig[] = { + 0xa1, 0xf0, 0x0d, 0xad, 0x97, 0xae, 0xec, 0x91, + 0xc9, 0x55, 0x85, 0xf3, 0x62, 0x00, 0xc6, 0x5f, + 0x3c, 0x01, 0x81, 0x2a, 0xa6, 0x03, 0x78, 0xf5, + 0xe0, 0x7e, 0xc1, 0x30, 0x4c, 0x7c, 0x6c, 0x9d, + 0xeb, 0xbe, 0x98, 0x0b, 0x96, 0x92, 0x66, 0x8f, + 0x81, 0xd4, 0xde, 0x79, 0x22, 0xa0, 0xf9, 0x7a +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA224_0_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA224_0_test_case = { + .name="DECDSA-SHA224/SECP192R1 0", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA224_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA224_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA224_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA224_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA256_SECP192R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA256/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA256_0_test_vector_expected_sig[] = { + 0x4b, 0x0b, 0x8c, 0xe9, 0x8a, 0x92, 0x86, 0x6a, + 0x28, 0x20, 0xe2, 0x0a, 0xa6, 0xb7, 0x5b, 0x56, + 0x38, 0x2e, 0x0f, 0x9b, 0xfd, 0x5e, 0xcb, 0x55, + 0xcc, 0xdb, 0x00, 0x69, 0x26, 0xea, 0x95, 0x65, + 0xcb, 0xad, 0xc8, 0x40, 0x82, 0x9d, 0x8c, 0x38, + 0x4e, 0x06, 0xde, 0x1f, 0x1e, 0x38, 0x1b, 0x85 +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA256_0_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA256_0_test_case = { + .name="DECDSA-SHA256/SECP192R1 0", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA256_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA256_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA256_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA256_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA384_SECP192R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA384/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA384_0_test_vector_expected_sig[] = { + 0xda, 0x63, 0xbf, 0x0b, 0x9a, 0xbc, 0xf9, 0x48, + 0xfb, 0xb1, 0xe9, 0x16, 0x7f, 0x13, 0x61, 0x45, + 0xf7, 0xa2, 0x04, 0x26, 0xdc, 0xc2, 0x87, 0xd5, + 0xc3, 0xaa, 0x2c, 0x96, 0x09, 0x72, 0xbd, 0x7a, + 0x20, 0x03, 0xa5, 0x7e, 0x1c, 0x4c, 0x77, 0xf0, + 0x57, 0x8f, 0x8a, 0xe9, 0x5e, 0x31, 0xec, 0x5e +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA384_0_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA384_0_test_case = { + .name="DECDSA-SHA384/SECP192R1 0", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA384_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA384_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA384_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA384_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA512_SECP192R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA512/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA512_0_test_vector_expected_sig[] = { + 0x4d, 0x60, 0xc5, 0xab, 0x19, 0x96, 0xbd, 0x84, + 0x83, 0x43, 0xb3, 0x1c, 0x00, 0x85, 0x02, 0x05, + 0xe2, 0xea, 0x69, 0x22, 0xda, 0xc2, 0xe4, 0xb8, + 0x3f, 0x6e, 0x83, 0x74, 0x48, 0xf0, 0x27, 0xa1, + 0xbf, 0x4b, 0x34, 0xe7, 0x96, 0xe3, 0x2a, 0x81, + 0x1c, 0xbb, 0x40, 0x50, 0x90, 0x8d, 0x8f, 0x67 +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA512_0_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA512_0_test_case = { + .name="DECDSA-SHA512/SECP192R1 0", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA512_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA512_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA512_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA512_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA224_SECP192R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA224/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA224_1_test_vector_expected_sig[] = { + 0x69, 0x45, 0xa1, 0xc1, 0xd1, 0xb2, 0x20, 0x6b, + 0x81, 0x45, 0x54, 0x8f, 0x63, 0x3b, 0xb6, 0x1c, + 0xef, 0x04, 0x89, 0x1b, 0xaf, 0x26, 0xed, 0x34, + 0xb7, 0xfb, 0x7f, 0xdf, 0xc3, 0x39, 0xc0, 0xb9, + 0xbd, 0x61, 0xa9, 0xf5, 0xa8, 0xea, 0xf9, 0xbe, + 0x58, 0xfc, 0x5c, 0xba, 0x2c, 0xb1, 0x52, 0x93 +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA224_1_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA224_1_test_case = { + .name="DECDSA-SHA224/SECP192R1 1", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA224_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA224_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA224_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA224_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA256_SECP192R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA256/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA256_1_test_vector_expected_sig[] = { + 0x3a, 0x71, 0x8b, 0xd8, 0xb4, 0x92, 0x6c, 0x3b, + 0x52, 0xee, 0x6b, 0xbe, 0x67, 0xef, 0x79, 0xb1, + 0x8c, 0xb6, 0xeb, 0x62, 0xb1, 0xad, 0x97, 0xae, + 0x56, 0x62, 0xe6, 0x84, 0x8a, 0x4a, 0x19, 0xb1, + 0xf1, 0xae, 0x2f, 0x72, 0xac, 0xd4, 0xb8, 0xbb, + 0xe5, 0x0f, 0x1e, 0xac, 0x65, 0xd9, 0x12, 0x4f +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA256_1_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA256_1_test_case = { + .name="DECDSA-SHA256/SECP192R1 1", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA256_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA256_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA256_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA256_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA384_SECP192R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA384/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA384_1_test_vector_expected_sig[] = { + 0xb2, 0x34, 0xb6, 0x0b, 0x4d, 0xb7, 0x5a, 0x73, + 0x3e, 0x19, 0x28, 0x0a, 0x7a, 0x60, 0x34, 0xbd, + 0x6b, 0x1e, 0xe8, 0x8a, 0xf5, 0x33, 0x23, 0x67, + 0x79, 0x94, 0x09, 0x0b, 0x2d, 0x59, 0xbb, 0x78, + 0x2b, 0xe5, 0x7e, 0x74, 0xa4, 0x4c, 0x9a, 0x1c, + 0x70, 0x04, 0x13, 0xf8, 0xab, 0xef, 0xe7, 0x7a +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA384_1_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA384_1_test_case = { + .name="DECDSA-SHA384/SECP192R1 1", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA384_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA384_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA384_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA384_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP192R1 +#define DECDSA_SHA512_SECP192R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA512/SECP192R1 ***/ +static const u8 decdsa_rfc6979_SECP192R1_SHA512_1_test_vector_expected_sig[] = { + 0xfe, 0x4f, 0x4a, 0xe8, 0x6a, 0x58, 0xb6, 0x50, + 0x79, 0x46, 0x71, 0x59, 0x34, 0xfe, 0x2d, 0x8f, + 0xf9, 0xd9, 0x5b, 0x6b, 0x09, 0x8f, 0xe7, 0x39, + 0x74, 0xcf, 0x56, 0x05, 0xc9, 0x8f, 0xba, 0x0e, + 0x1e, 0xf3, 0x4d, 0x4b, 0x5a, 0x15, 0x77, 0xa7, + 0xdc, 0xf5, 0x94, 0x57, 0xca, 0xe5, 0x22, 0x90 +}; +static const u8 decdsa_rfc6979_SECP192R1_SHA512_1_test_vector_priv_key[] = { + 0x6f, 0xab, 0x03, 0x49, 0x34, 0xe4, 0xc0, 0xfc, + 0x9a, 0xe6, 0x7f, 0x5b, 0x56, 0x59, 0xa9, 0xd7, + 0xd1, 0xfe, 0xfd, 0x18, 0x7e, 0xe0, 0x9f, 0xd4 +}; +static const ec_test_case decdsa_rfc6979_SECP192R1_SHA512_1_test_case = { + .name="DECDSA-SHA512/SECP192R1 1", + .ec_str_p = &secp192r1_str_params, + .priv_key = decdsa_rfc6979_SECP192R1_SHA512_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP192R1_SHA512_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP192R1_SHA512_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP192R1_SHA512_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA224_SECP256R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA224/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA224_0_test_vector_expected_sig[] = { + 0x53, 0xb2, 0xff, 0xf5, 0xd1, 0x75, 0x2b, 0x2c, + 0x68, 0x9d, 0xf2, 0x57, 0xc0, 0x4c, 0x40, 0xa5, + 0x87, 0xfa, 0xba, 0xbb, 0x3f, 0x6f, 0xc2, 0x70, + 0x2f, 0x13, 0x43, 0xaf, 0x7c, 0xa9, 0xaa, 0x3f, + 0xb9, 0xaf, 0xb6, 0x4f, 0xdc, 0x03, 0xdc, 0x1a, + 0x13, 0x1c, 0x7d, 0x23, 0x86, 0xd1, 0x1e, 0x34, + 0x9f, 0x07, 0x0a, 0xa4, 0x32, 0xa4, 0xac, 0xc9, + 0x18, 0xbe, 0xa9, 0x88, 0xbf, 0x75, 0xc7, 0x4c +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA224_0_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA224_0_test_case = { + .name="DECDSA-SHA224/SECP256R1 0", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA224_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA224_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA224_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA224_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA256_SECP256R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA256/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA256_0_test_vector_expected_sig[] = { + 0xef, 0xd4, 0x8b, 0x2a, 0xac, 0xb6, 0xa8, 0xfd, + 0x11, 0x40, 0xdd, 0x9c, 0xd4, 0x5e, 0x81, 0xd6, + 0x9d, 0x2c, 0x87, 0x7b, 0x56, 0xaa, 0xf9, 0x91, + 0xc3, 0x4d, 0x0e, 0xa8, 0x4e, 0xaf, 0x37, 0x16, + 0xf7, 0xcb, 0x1c, 0x94, 0x2d, 0x65, 0x7c, 0x41, + 0xd4, 0x36, 0xc7, 0xa1, 0xb6, 0xe2, 0x9f, 0x65, + 0xf3, 0xe9, 0x00, 0xdb, 0xb9, 0xaf, 0xf4, 0x06, + 0x4d, 0xc4, 0xab, 0x2f, 0x84, 0x3a, 0xcd, 0xa8 +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA256_0_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA256_0_test_case = { + .name="DECDSA-SHA256/SECP256R1 0", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA256_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA256_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA256_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA256_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA384_SECP256R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA384/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA384_0_test_vector_expected_sig[] = { + 0x0e, 0xaf, 0xea, 0x03, 0x9b, 0x20, 0xe9, 0xb4, + 0x23, 0x09, 0xfb, 0x1d, 0x89, 0xe2, 0x13, 0x05, + 0x7c, 0xbf, 0x97, 0x3d, 0xc0, 0xcf, 0xc8, 0xf1, + 0x29, 0xed, 0xdd, 0xc8, 0x00, 0xef, 0x77, 0x19, + 0x48, 0x61, 0xf0, 0x49, 0x1e, 0x69, 0x98, 0xb9, + 0x45, 0x51, 0x93, 0xe3, 0x4e, 0x7b, 0x0d, 0x28, + 0x4d, 0xdd, 0x71, 0x49, 0xa7, 0x4b, 0x95, 0xb9, + 0x26, 0x1f, 0x13, 0xab, 0xde, 0x94, 0x09, 0x54 +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA384_0_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA384_0_test_case = { + .name="DECDSA-SHA384/SECP256R1 0", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA384_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA384_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA384_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA384_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA512_SECP256R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA512/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA512_0_test_vector_expected_sig[] = { + 0x84, 0x96, 0xa6, 0x0b, 0x5e, 0x9b, 0x47, 0xc8, + 0x25, 0x48, 0x88, 0x27, 0xe0, 0x49, 0x5b, 0x0e, + 0x3f, 0xa1, 0x09, 0xec, 0x45, 0x68, 0xfd, 0x3f, + 0x8d, 0x10, 0x97, 0x67, 0x8e, 0xb9, 0x7f, 0x00, + 0x23, 0x62, 0xab, 0x1a, 0xdb, 0xe2, 0xb8, 0xad, + 0xf9, 0xcb, 0x9e, 0xda, 0xb7, 0x40, 0xea, 0x60, + 0x49, 0xc0, 0x28, 0x11, 0x4f, 0x24, 0x60, 0xf9, + 0x65, 0x54, 0xf6, 0x1f, 0xae, 0x33, 0x02, 0xfe +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA512_0_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA512_0_test_case = { + .name="DECDSA-SHA512/SECP256R1 0", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA512_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA512_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA512_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA512_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA224_SECP256R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA224/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA224_1_test_vector_expected_sig[] = { + 0xc3, 0x7e, 0xdb, 0x6f, 0x0a, 0xe7, 0x9d, 0x47, + 0xc3, 0xc2, 0x7e, 0x96, 0x2f, 0xa2, 0x69, 0xbb, + 0x4f, 0x44, 0x17, 0x70, 0x35, 0x7e, 0x11, 0x4e, + 0xe5, 0x11, 0xf6, 0x62, 0xec, 0x34, 0xa6, 0x92, + 0xc8, 0x20, 0x05, 0x3a, 0x05, 0x79, 0x1e, 0x52, + 0x1f, 0xca, 0xad, 0x60, 0x42, 0xd4, 0x0a, 0xea, + 0x1d, 0x6b, 0x1a, 0x54, 0x01, 0x38, 0x55, 0x8f, + 0x47, 0xd0, 0x71, 0x98, 0x00, 0xe1, 0x8f, 0x2d +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA224_1_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA224_1_test_case = { + .name="DECDSA-SHA224/SECP256R1 1", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA224_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA224_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA224_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA224_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA256_SECP256R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA256/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA256_1_test_vector_expected_sig[] = { + 0xf1, 0xab, 0xb0, 0x23, 0x51, 0x83, 0x51, 0xcd, + 0x71, 0xd8, 0x81, 0x56, 0x7b, 0x1e, 0xa6, 0x63, + 0xed, 0x3e, 0xfc, 0xf6, 0xc5, 0x13, 0x2b, 0x35, + 0x4f, 0x28, 0xd3, 0xb0, 0xb7, 0xd3, 0x83, 0x67, + 0x01, 0x9f, 0x41, 0x13, 0x74, 0x2a, 0x2b, 0x14, + 0xbd, 0x25, 0x92, 0x6b, 0x49, 0xc6, 0x49, 0x15, + 0x5f, 0x26, 0x7e, 0x60, 0xd3, 0x81, 0x4b, 0x4c, + 0x0c, 0xc8, 0x42, 0x50, 0xe4, 0x6f, 0x00, 0x83 +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA256_1_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA256_1_test_case = { + .name="DECDSA-SHA256/SECP256R1 1", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA256_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA256_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA256_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA256_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA384_SECP256R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA384/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA384_1_test_vector_expected_sig[] = { + 0x83, 0x91, 0x0e, 0x8b, 0x48, 0xbb, 0x0c, 0x74, + 0x24, 0x4e, 0xbd, 0xf7, 0xf0, 0x7a, 0x1c, 0x54, + 0x13, 0xd6, 0x14, 0x72, 0xbd, 0x94, 0x1e, 0xf3, + 0x92, 0x0e, 0x62, 0x3f, 0xbc, 0xce, 0xbe, 0xb6, + 0x8d, 0xdb, 0xec, 0x54, 0xcf, 0x8c, 0xd5, 0x87, + 0x48, 0x83, 0x84, 0x1d, 0x71, 0x21, 0x42, 0xa5, + 0x6a, 0x8d, 0x0f, 0x21, 0x8f, 0x50, 0x03, 0xcb, + 0x02, 0x96, 0xb6, 0xb5, 0x09, 0x61, 0x9f, 0x2c +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA384_1_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA384_1_test_case = { + .name="DECDSA-SHA384/SECP256R1 1", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA384_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA384_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA384_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA384_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP256R1 +#define DECDSA_SHA512_SECP256R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA512/SECP256R1 ***/ +static const u8 decdsa_rfc6979_SECP256R1_SHA512_1_test_vector_expected_sig[] = { + 0x46, 0x1d, 0x93, 0xf3, 0x1b, 0x65, 0x40, 0x89, + 0x47, 0x88, 0xfd, 0x20, 0x6c, 0x07, 0xcf, 0xa0, + 0xcc, 0x35, 0xf4, 0x6f, 0xa3, 0xc9, 0x18, 0x16, + 0xff, 0xf1, 0x04, 0x0a, 0xd1, 0x58, 0x1a, 0x04, + 0x39, 0xaf, 0x9f, 0x15, 0xde, 0x0d, 0xb8, 0xd9, + 0x7e, 0x72, 0x71, 0x9c, 0x74, 0x82, 0x0d, 0x30, + 0x4c, 0xe5, 0x22, 0x6e, 0x32, 0xde, 0xda, 0xe6, + 0x75, 0x19, 0xe8, 0x40, 0xd1, 0x19, 0x4e, 0x55 +}; +static const u8 decdsa_rfc6979_SECP256R1_SHA512_1_test_vector_priv_key[] = { + 0xc9, 0xaf, 0xa9, 0xd8, 0x45, 0xba, 0x75, 0x16, + 0x6b, 0x5c, 0x21, 0x57, 0x67, 0xb1, 0xd6, 0x93, + 0x4e, 0x50, 0xc3, 0xdb, 0x36, 0xe8, 0x9b, 0x12, + 0x7b, 0x8a, 0x62, 0x2b, 0x12, 0x0f, 0x67, 0x21 +}; +static const ec_test_case decdsa_rfc6979_SECP256R1_SHA512_1_test_case = { + .name="DECDSA-SHA512/SECP256R1 1", + .ec_str_p = &secp256r1_str_params, + .priv_key = decdsa_rfc6979_SECP256R1_SHA512_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP256R1_SHA512_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP256R1_SHA512_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP256R1_SHA512_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA224_SECP384R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA224/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA224_0_test_vector_expected_sig[] = { + 0x42, 0x35, 0x6e, 0x76, 0xb5, 0x5a, 0x6d, 0x9b, + 0x46, 0x31, 0xc8, 0x65, 0x44, 0x5d, 0xbe, 0x54, + 0xe0, 0x56, 0xd3, 0xb3, 0x43, 0x17, 0x66, 0xd0, + 0x50, 0x92, 0x44, 0x79, 0x3c, 0x3f, 0x93, 0x66, + 0x45, 0x0f, 0x76, 0xee, 0x3d, 0xe4, 0x3f, 0x5a, + 0x12, 0x53, 0x33, 0xa6, 0xbe, 0x06, 0x01, 0x22, + 0x9d, 0xa0, 0xc8, 0x17, 0x87, 0x06, 0x40, 0x21, + 0xe7, 0x8d, 0xf6, 0x58, 0xf2, 0xfb, 0xb0, 0xb0, + 0x42, 0xbf, 0x30, 0x46, 0x65, 0xdb, 0x72, 0x1f, + 0x07, 0x7a, 0x42, 0x98, 0xb0, 0x95, 0xe4, 0x83, + 0x4c, 0x08, 0x2c, 0x03, 0xd8, 0x30, 0x28, 0xef, + 0xbf, 0x93, 0xa3, 0xc2, 0x39, 0x40, 0xca, 0x8d +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA224_0_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA224_0_test_case = { + .name="DECDSA-SHA224/SECP384R1 0", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA224_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA224_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA224_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA224_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA256_SECP384R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA256/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA256_0_test_vector_expected_sig[] = { + 0x21, 0xb1, 0x3d, 0x1e, 0x01, 0x3c, 0x7f, 0xa1, + 0x39, 0x2d, 0x03, 0xc5, 0xf9, 0x9a, 0xf8, 0xb3, + 0x0c, 0x57, 0x0c, 0x6f, 0x98, 0xd4, 0xea, 0x8e, + 0x35, 0x4b, 0x63, 0xa2, 0x1d, 0x3d, 0xaa, 0x33, + 0xbd, 0xe1, 0xe8, 0x88, 0xe6, 0x33, 0x55, 0xd9, + 0x2f, 0xa2, 0xb3, 0xc3, 0x6d, 0x8f, 0xb2, 0xcd, + 0xf3, 0xaa, 0x44, 0x3f, 0xb1, 0x07, 0x74, 0x5b, + 0xf4, 0xbd, 0x77, 0xcb, 0x38, 0x91, 0x67, 0x46, + 0x32, 0x06, 0x8a, 0x10, 0xca, 0x67, 0xe3, 0xd4, + 0x5d, 0xb2, 0x26, 0x6f, 0xa7, 0xd1, 0xfe, 0xeb, + 0xef, 0xdc, 0x63, 0xec, 0xcd, 0x1a, 0xc4, 0x2e, + 0xc0, 0xcb, 0x86, 0x68, 0xa4, 0xfa, 0x0a, 0xb0 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA256_0_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA256_0_test_case = { + .name="DECDSA-SHA256/SECP384R1 0", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA256_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA256_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA256_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA256_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA384_SECP384R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA384/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA384_0_test_vector_expected_sig[] = { + 0x94, 0xed, 0xbb, 0x92, 0xa5, 0xec, 0xb8, 0xaa, + 0xd4, 0x73, 0x6e, 0x56, 0xc6, 0x91, 0x91, 0x6b, + 0x3f, 0x88, 0x14, 0x06, 0x66, 0xce, 0x9f, 0xa7, + 0x3d, 0x64, 0xc4, 0xea, 0x95, 0xad, 0x13, 0x3c, + 0x81, 0xa6, 0x48, 0x15, 0x2e, 0x44, 0xac, 0xf9, + 0x6e, 0x36, 0xdd, 0x1e, 0x80, 0xfa, 0xbe, 0x46, + 0x99, 0xef, 0x4a, 0xeb, 0x15, 0xf1, 0x78, 0xce, + 0xa1, 0xfe, 0x40, 0xdb, 0x26, 0x03, 0x13, 0x8f, + 0x13, 0x0e, 0x74, 0x0a, 0x19, 0x62, 0x45, 0x26, + 0x20, 0x3b, 0x63, 0x51, 0xd0, 0xa3, 0xa9, 0x4f, + 0xa3, 0x29, 0xc1, 0x45, 0x78, 0x6e, 0x67, 0x9e, + 0x7b, 0x82, 0xc7, 0x1a, 0x38, 0x62, 0x8a, 0xc8 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA384_0_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA384_0_test_case = { + .name="DECDSA-SHA384/SECP384R1 0", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA384_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA384_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA384_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA384_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA512_SECP384R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA512/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA512_0_test_vector_expected_sig[] = { + 0xed, 0x09, 0x59, 0xd5, 0x88, 0x0a, 0xb2, 0xd8, + 0x69, 0xae, 0x7f, 0x6c, 0x29, 0x15, 0xc6, 0xd6, + 0x0f, 0x96, 0x50, 0x7f, 0x9c, 0xb3, 0xe0, 0x47, + 0xc0, 0x04, 0x68, 0x61, 0xda, 0x4a, 0x79, 0x9c, + 0xfe, 0x30, 0xf3, 0x5c, 0xc9, 0x00, 0x05, 0x6d, + 0x7c, 0x99, 0xcd, 0x78, 0x82, 0x43, 0x37, 0x09, + 0x51, 0x2c, 0x8c, 0xce, 0xee, 0x38, 0x90, 0xa8, + 0x40, 0x58, 0xce, 0x1e, 0x22, 0xdb, 0xc2, 0x19, + 0x8f, 0x42, 0x32, 0x3c, 0xe8, 0xac, 0xa9, 0x13, + 0x53, 0x29, 0xf0, 0x3c, 0x06, 0x8e, 0x51, 0x12, + 0xdc, 0x7c, 0xc3, 0xef, 0x34, 0x46, 0xde, 0xfc, + 0xeb, 0x01, 0xa4, 0x5c, 0x26, 0x67, 0xfd, 0xd5 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA512_0_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA512_0_test_case = { + .name="DECDSA-SHA512/SECP384R1 0", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA512_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA512_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA512_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA512_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA224_SECP384R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA224/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA224_1_test_vector_expected_sig[] = { + 0xe8, 0xc9, 0xd0, 0xb6, 0xea, 0x72, 0xa0, 0xe7, + 0x83, 0x7f, 0xea, 0x1d, 0x14, 0xa1, 0xa9, 0x55, + 0x7f, 0x29, 0xfa, 0xa4, 0x5d, 0x3e, 0x7e, 0xe8, + 0x88, 0xfc, 0x5b, 0xf9, 0x54, 0xb5, 0xe6, 0x24, + 0x64, 0xa9, 0xa8, 0x17, 0xc4, 0x7f, 0xf7, 0x8b, + 0x8c, 0x11, 0x06, 0x6b, 0x24, 0x08, 0x0e, 0x72, + 0x07, 0x04, 0x1d, 0x4a, 0x7a, 0x03, 0x79, 0xac, + 0x72, 0x32, 0xff, 0x72, 0xe6, 0xf7, 0x7b, 0x6d, + 0xdb, 0x8f, 0x09, 0xb1, 0x6c, 0xce, 0x0e, 0xc3, + 0x28, 0x6b, 0x2b, 0xd4, 0x3f, 0xa8, 0xc6, 0x14, + 0x1c, 0x53, 0xea, 0x5a, 0xbe, 0xf0, 0xd8, 0x23, + 0x10, 0x77, 0xa0, 0x45, 0x40, 0xa9, 0x6b, 0x66 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA224_1_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA224_1_test_case = { + .name="DECDSA-SHA224/SECP384R1 1", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA224_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA224_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA224_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA224_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA256_SECP384R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA256/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA256_1_test_vector_expected_sig[] = { + 0x6d, 0x6d, 0xef, 0xac, 0x9a, 0xb6, 0x4d, 0xab, + 0xaf, 0xe3, 0x6c, 0x6b, 0xf5, 0x10, 0x35, 0x2a, + 0x4c, 0xc2, 0x70, 0x01, 0x26, 0x36, 0x38, 0xe5, + 0xb1, 0x6d, 0x9b, 0xb5, 0x1d, 0x45, 0x15, 0x59, + 0xf9, 0x18, 0xee, 0xda, 0xf2, 0x29, 0x3b, 0xe5, + 0xb4, 0x75, 0xcc, 0x8f, 0x01, 0x88, 0x63, 0x6b, + 0x2d, 0x46, 0xf3, 0xbe, 0xcb, 0xcc, 0x52, 0x3d, + 0x5f, 0x1a, 0x12, 0x56, 0xbf, 0x0c, 0x9b, 0x02, + 0x4d, 0x87, 0x9b, 0xa9, 0xe8, 0x38, 0x14, 0x4c, + 0x8b, 0xa6, 0xba, 0xeb, 0x4b, 0x53, 0xb4, 0x7d, + 0x51, 0xab, 0x37, 0x3f, 0x98, 0x45, 0xc0, 0x51, + 0x4e, 0xef, 0xb1, 0x40, 0x24, 0x78, 0x72, 0x65 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA256_1_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA256_1_test_case = { + .name="DECDSA-SHA256/SECP384R1 1", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA256_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA256_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA256_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA256_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA384_SECP384R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA384/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA384_1_test_vector_expected_sig[] = { + 0x82, 0x03, 0xb6, 0x3d, 0x3c, 0x85, 0x3e, 0x8d, + 0x77, 0x22, 0x7f, 0xb3, 0x77, 0xbc, 0xf7, 0xb7, + 0xb7, 0x72, 0xe9, 0x78, 0x92, 0xa8, 0x0f, 0x36, + 0xab, 0x77, 0x5d, 0x50, 0x9d, 0x7a, 0x5f, 0xeb, + 0x05, 0x42, 0xa7, 0xf0, 0x81, 0x29, 0x98, 0xda, + 0x8f, 0x1d, 0xd3, 0xca, 0x3c, 0xf0, 0x23, 0xdb, + 0xdd, 0xd0, 0x76, 0x04, 0x48, 0xd4, 0x2d, 0x8a, + 0x43, 0xaf, 0x45, 0xaf, 0x83, 0x6f, 0xce, 0x4d, + 0xe8, 0xbe, 0x06, 0xb4, 0x85, 0xe9, 0xb6, 0x1b, + 0x82, 0x7c, 0x2f, 0x13, 0x17, 0x39, 0x23, 0xe0, + 0x6a, 0x73, 0x9f, 0x04, 0x06, 0x49, 0xa6, 0x67, + 0xbf, 0x3b, 0x82, 0x82, 0x46, 0xba, 0xa5, 0xa5 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA384_1_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA384_1_test_case = { + .name="DECDSA-SHA384/SECP384R1 1", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA384_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA384_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA384_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA384_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP384R1 +#define DECDSA_SHA512_SECP384R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA512/SECP384R1 ***/ +static const u8 decdsa_rfc6979_SECP384R1_SHA512_1_test_vector_expected_sig[] = { + 0xa0, 0xd5, 0xd0, 0x90, 0xc9, 0x98, 0x0f, 0xaf, + 0x3c, 0x2c, 0xe5, 0x7b, 0x7a, 0xe9, 0x51, 0xd3, + 0x19, 0x77, 0xdd, 0x11, 0xc7, 0x75, 0xd3, 0x14, + 0xaf, 0x55, 0xf7, 0x6c, 0x67, 0x64, 0x47, 0xd0, + 0x6f, 0xb6, 0x49, 0x5c, 0xd2, 0x1b, 0x4b, 0x6e, + 0x34, 0x0f, 0xc2, 0x36, 0x58, 0x4f, 0xb2, 0x77, + 0x97, 0x69, 0x84, 0xe5, 0x9b, 0x4c, 0x77, 0xb0, + 0xe8, 0xe4, 0x46, 0x0d, 0xca, 0x3d, 0x9f, 0x20, + 0xe0, 0x7b, 0x9b, 0xb1, 0xf6, 0x3b, 0xee, 0xfa, + 0xf5, 0x76, 0xf6, 0xb2, 0xe8, 0xb2, 0x24, 0x63, + 0x4a, 0x20, 0x92, 0xcd, 0x37, 0x92, 0xe0, 0x15, + 0x9a, 0xd9, 0xce, 0xe3, 0x76, 0x59, 0xc7, 0x36 +}; +static const u8 decdsa_rfc6979_SECP384R1_SHA512_1_test_vector_priv_key[] = { + 0x6b, 0x9d, 0x3d, 0xad, 0x2e, 0x1b, 0x8c, 0x1c, + 0x05, 0xb1, 0x98, 0x75, 0xb6, 0x65, 0x9f, 0x4d, + 0xe2, 0x3c, 0x3b, 0x66, 0x7b, 0xf2, 0x97, 0xba, + 0x9a, 0xa4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xd8, + 0x96, 0xd5, 0x72, 0x4e, 0x4c, 0x70, 0xa8, 0x25, + 0xf8, 0x72, 0xc9, 0xea, 0x60, 0xd2, 0xed, 0xf5 +}; +static const ec_test_case decdsa_rfc6979_SECP384R1_SHA512_1_test_case = { + .name="DECDSA-SHA512/SECP384R1 1", + .ec_str_p = &secp384r1_str_params, + .priv_key = decdsa_rfc6979_SECP384R1_SHA512_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP384R1_SHA512_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP384R1_SHA512_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP384R1_SHA512_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA224_SECP521R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA224/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA224_0_test_vector_expected_sig[] = { + 0x01, 0x77, 0x63, 0x31, 0xcf, 0xcd, 0xf9, 0x27, + 0xd6, 0x66, 0xe0, 0x32, 0xe0, 0x0c, 0xf7, 0x76, + 0x18, 0x7b, 0xc9, 0xfd, 0xd8, 0xe6, 0x9d, 0x0d, + 0xab, 0xb4, 0x10, 0x9f, 0xfe, 0x1b, 0x5e, 0x2a, + 0x30, 0x71, 0x5f, 0x4c, 0xc9, 0x23, 0xa4, 0xa5, + 0xe9, 0x4d, 0x25, 0x03, 0xe9, 0xac, 0xfe, 0xd9, + 0x28, 0x57, 0xb7, 0xf3, 0x1d, 0x71, 0x52, 0xe0, + 0xf8, 0xc0, 0x0c, 0x15, 0xff, 0x3d, 0x87, 0xe2, + 0xed, 0x2e, 0x00, 0x50, 0xcb, 0x52, 0x65, 0x41, + 0x7f, 0xe2, 0x32, 0x0b, 0xbb, 0x5a, 0x12, 0x2b, + 0x8e, 0x1a, 0x32, 0xbd, 0x69, 0x90, 0x89, 0x85, + 0x11, 0x28, 0xe3, 0x60, 0xe6, 0x20, 0xa3, 0x0c, + 0x7e, 0x17, 0xba, 0x41, 0xa6, 0x66, 0xaf, 0x12, + 0x6c, 0xe1, 0x00, 0xe5, 0x79, 0x9b, 0x15, 0x3b, + 0x60, 0x52, 0x8d, 0x53, 0x00, 0xd0, 0x84, 0x89, + 0xca, 0x91, 0x78, 0xfb, 0x61, 0x0a, 0x20, 0x06, + 0xc2, 0x54, 0xb4, 0x1f +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA224_0_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA224_0_test_case = { + .name="DECDSA-SHA224/SECP521R1 0", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA224_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA224_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA224_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA224_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA256_SECP521R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA256/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA256_0_test_vector_expected_sig[] = { + 0x01, 0x51, 0x1b, 0xb4, 0xd6, 0x75, 0x11, 0x4f, + 0xe2, 0x66, 0xfc, 0x43, 0x72, 0xb8, 0x76, 0x82, + 0xba, 0xec, 0xc0, 0x1d, 0x3c, 0xc6, 0x2c, 0xf2, + 0x30, 0x3c, 0x92, 0xb3, 0x52, 0x60, 0x12, 0x65, + 0x9d, 0x16, 0x87, 0x6e, 0x25, 0xc7, 0xc1, 0xe5, + 0x76, 0x48, 0xf2, 0x3b, 0x73, 0x56, 0x4d, 0x67, + 0xf6, 0x1c, 0x6f, 0x14, 0xd5, 0x27, 0xd5, 0x49, + 0x72, 0x81, 0x04, 0x21, 0xe7, 0xd8, 0x75, 0x89, + 0xe1, 0xa7, 0x00, 0x4a, 0x17, 0x11, 0x43, 0xa8, + 0x31, 0x63, 0xd6, 0xdf, 0x46, 0x0a, 0xaf, 0x61, + 0x52, 0x26, 0x95, 0xf2, 0x07, 0xa5, 0x8b, 0x95, + 0xc0, 0x64, 0x4d, 0x87, 0xe5, 0x2a, 0xa1, 0xa3, + 0x47, 0x91, 0x6e, 0x4f, 0x7a, 0x72, 0x93, 0x0b, + 0x1b, 0xc0, 0x6d, 0xbe, 0x22, 0xce, 0x3f, 0x58, + 0x26, 0x4a, 0xfd, 0x23, 0x70, 0x4c, 0xbb, 0x63, + 0xb2, 0x9b, 0x93, 0x1f, 0x7d, 0xe6, 0xc9, 0xd9, + 0x49, 0xa7, 0xec, 0xfc +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA256_0_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA256_0_test_case = { + .name="DECDSA-SHA256/SECP521R1 0", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA256_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA256_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA256_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA256_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA384_SECP521R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA384/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA384_0_test_vector_expected_sig[] = { + 0x01, 0xea, 0x84, 0x2a, 0x0e, 0x17, 0xd2, 0xde, + 0x4f, 0x92, 0xc1, 0x53, 0x15, 0xc6, 0x3d, 0xdf, + 0x72, 0x68, 0x5c, 0x18, 0x19, 0x5c, 0x2b, 0xb9, + 0x5e, 0x57, 0x2b, 0x9c, 0x51, 0x36, 0xca, 0x4b, + 0x4b, 0x57, 0x6a, 0xd7, 0x12, 0xa5, 0x2b, 0xe9, + 0x73, 0x06, 0x27, 0xd1, 0x60, 0x54, 0xba, 0x40, + 0xcc, 0x0b, 0x8d, 0x3f, 0xf0, 0x35, 0xb1, 0x2a, + 0xe7, 0x51, 0x68, 0x39, 0x7f, 0x5d, 0x50, 0xc6, + 0x74, 0x51, 0x01, 0xf2, 0x1a, 0x3c, 0xee, 0x06, + 0x6e, 0x19, 0x61, 0x02, 0x5f, 0xb0, 0x48, 0xbd, + 0x5f, 0xe2, 0xb7, 0x92, 0x4d, 0x0c, 0xd7, 0x97, + 0xba, 0xbe, 0x0a, 0x83, 0xb6, 0x6f, 0x1e, 0x35, + 0xee, 0xaf, 0x5f, 0xde, 0x14, 0x3f, 0xa8, 0x5d, + 0xc3, 0x94, 0xa7, 0xde, 0xe7, 0x66, 0x52, 0x33, + 0x93, 0x78, 0x44, 0x84, 0xbd, 0xf3, 0xe0, 0x01, + 0x14, 0xa1, 0xc8, 0x57, 0xcd, 0xe1, 0xaa, 0x20, + 0x3d, 0xb6, 0x5d, 0x61 +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA384_0_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA384_0_test_case = { + .name="DECDSA-SHA384/SECP521R1 0", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA384_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA384_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA384_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA384_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA512_SECP521R1_SELF_TEST_0 +/*** Tests for DECDSA-SHA512/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA512_0_test_vector_expected_sig[] = { + 0x00, 0xc3, 0x28, 0xfa, 0xfc, 0xbd, 0x79, 0xdd, + 0x77, 0x85, 0x03, 0x70, 0xc4, 0x63, 0x25, 0xd9, + 0x87, 0xcb, 0x52, 0x55, 0x69, 0xfb, 0x63, 0xc5, + 0xd3, 0xbc, 0x53, 0x95, 0x0e, 0x6d, 0x4c, 0x5f, + 0x17, 0x4e, 0x25, 0xa1, 0xee, 0x90, 0x17, 0xb5, + 0xd4, 0x50, 0x60, 0x6a, 0xdd, 0x15, 0x2b, 0x53, + 0x49, 0x31, 0xd7, 0xd4, 0xe8, 0x45, 0x5c, 0xc9, + 0x1f, 0x9b, 0x15, 0xbf, 0x05, 0xec, 0x36, 0xe3, + 0x77, 0xfa, 0x00, 0x61, 0x7c, 0xce, 0x7c, 0xf5, + 0x06, 0x48, 0x06, 0xc4, 0x67, 0xf6, 0x78, 0xd3, + 0xb4, 0x08, 0x0d, 0x6f, 0x1c, 0xc5, 0x0a, 0xf2, + 0x6c, 0xa2, 0x09, 0x41, 0x73, 0x08, 0x28, 0x1b, + 0x68, 0xaf, 0x28, 0x26, 0x23, 0xea, 0xa6, 0x3e, + 0x5b, 0x5c, 0x07, 0x23, 0xd8, 0xb8, 0xc3, 0x7f, + 0xf0, 0x77, 0x7b, 0x1a, 0x20, 0xf8, 0xcc, 0xb1, + 0xdc, 0xcc, 0x43, 0x99, 0x7f, 0x1e, 0xe0, 0xe4, + 0x4d, 0xa4, 0xa6, 0x7a +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA512_0_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA512_0_test_case = { + .name="DECDSA-SHA512/SECP521R1 0", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA512_0_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA512_0_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "sample", + .msglen = 6, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA512_0_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA512_0_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA224_SECP521R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA224/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA224_1_test_vector_expected_sig[] = { + 0x01, 0xc7, 0xed, 0x90, 0x2e, 0x12, 0x3e, 0x68, + 0x15, 0x54, 0x60, 0x65, 0xa2, 0xc4, 0xaf, 0x97, + 0x7b, 0x22, 0xaa, 0x8e, 0xad, 0xdb, 0x68, 0xb2, + 0xc1, 0x11, 0x0e, 0x7e, 0xa4, 0x4d, 0x42, 0x08, + 0x6b, 0xfe, 0x4a, 0x34, 0xb6, 0x7d, 0xdc, 0x0e, + 0x17, 0xe9, 0x65, 0x36, 0xe3, 0x58, 0x21, 0x9b, + 0x23, 0xa7, 0x06, 0xc6, 0xa6, 0xe1, 0x6b, 0xa7, + 0x7b, 0x65, 0xe1, 0xc5, 0x95, 0xd4, 0x3c, 0xae, + 0x17, 0xfb, 0x01, 0x77, 0x33, 0x66, 0x76, 0x30, + 0x4f, 0xcb, 0x34, 0x3c, 0xe0, 0x28, 0xb3, 0x8e, + 0x7b, 0x4f, 0xba, 0x76, 0xc1, 0xc1, 0xb2, 0x77, + 0xda, 0x18, 0xca, 0xd2, 0xa8, 0x47, 0x8b, 0x2a, + 0x9a, 0x9f, 0x5b, 0xec, 0x0f, 0x3b, 0xa0, 0x4f, + 0x35, 0xdb, 0x3e, 0x42, 0x63, 0x56, 0x9e, 0xc6, + 0xaa, 0xde, 0x8c, 0x92, 0x74, 0x6e, 0x4c, 0x82, + 0xf8, 0x29, 0x9a, 0xe1, 0xb8, 0xf1, 0x73, 0x9f, + 0x8f, 0xd5, 0x19, 0xa4 +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA224_1_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA224_1_test_case = { + .name="DECDSA-SHA224/SECP521R1 1", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA224_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA224_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA224, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA224_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA224_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA256_SECP521R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA256/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA256_1_test_vector_expected_sig[] = { + 0x00, 0x0e, 0x87, 0x1c, 0x4a, 0x14, 0xf9, 0x93, + 0xc6, 0xc7, 0x36, 0x95, 0x01, 0x90, 0x0c, 0x4b, + 0xc1, 0xe9, 0xc7, 0xb0, 0xb4, 0xba, 0x44, 0xe0, + 0x48, 0x68, 0xb3, 0x0b, 0x41, 0xd8, 0x07, 0x10, + 0x42, 0xeb, 0x28, 0xc4, 0xc2, 0x50, 0x41, 0x1d, + 0x0c, 0xe0, 0x8c, 0xd1, 0x97, 0xe4, 0x18, 0x8e, + 0xa4, 0x87, 0x6f, 0x27, 0x9f, 0x90, 0xb3, 0xd8, + 0xd7, 0x4a, 0x3c, 0x76, 0xe6, 0xf1, 0xe4, 0x65, + 0x6a, 0xa8, 0x00, 0xcd, 0x52, 0xdb, 0xaa, 0x33, + 0xb0, 0x63, 0xc3, 0xa6, 0xcd, 0x80, 0x58, 0xa1, + 0xfb, 0x0a, 0x46, 0xa4, 0x75, 0x4b, 0x03, 0x4f, + 0xcc, 0x64, 0x47, 0x66, 0xca, 0x14, 0xda, 0x8c, + 0xa5, 0xca, 0x9f, 0xde, 0x00, 0xe8, 0x8c, 0x1a, + 0xd6, 0x0c, 0xcb, 0xa7, 0x59, 0x02, 0x52, 0x99, + 0x07, 0x9d, 0x7a, 0x42, 0x7e, 0xc3, 0xcc, 0x5b, + 0x61, 0x9b, 0xfb, 0xc8, 0x28, 0xe7, 0x76, 0x9b, + 0xcd, 0x69, 0x4e, 0x86 +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA256_1_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA256_1_test_case = { + .name="DECDSA-SHA256/SECP521R1 1", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA256_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA256_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA256, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA256_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA256_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA384_SECP521R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA384/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA384_1_test_vector_expected_sig[] = { + 0x01, 0x4b, 0xee, 0x21, 0xa1, 0x8b, 0x6d, 0x8b, + 0x3c, 0x93, 0xfa, 0xb0, 0x8d, 0x43, 0xe7, 0x39, + 0x70, 0x79, 0x53, 0x24, 0x4f, 0xdb, 0xe9, 0x24, + 0xfa, 0x92, 0x6d, 0x76, 0x66, 0x9e, 0x7a, 0xc8, + 0xc8, 0x9d, 0xf6, 0x2e, 0xd8, 0x97, 0x5c, 0x2d, + 0x83, 0x97, 0xa6, 0x5a, 0x49, 0xdc, 0xc0, 0x9f, + 0x6b, 0x0a, 0xc6, 0x22, 0x72, 0x74, 0x19, 0x24, + 0xd4, 0x79, 0x35, 0x4d, 0x74, 0xff, 0x60, 0x75, + 0x57, 0x8c, 0x01, 0x33, 0x33, 0x08, 0x65, 0xc0, + 0x67, 0xa0, 0xea, 0xf7, 0x23, 0x62, 0xa6, 0x5e, + 0x2d, 0x7b, 0xc4, 0xe4, 0x61, 0xe8, 0xc8, 0x99, + 0x5c, 0x3b, 0x62, 0x26, 0xa2, 0x1b, 0xd1, 0xaa, + 0x78, 0xf0, 0xed, 0x94, 0xfe, 0x53, 0x6a, 0x0d, + 0xca, 0x35, 0x53, 0x4f, 0x0c, 0xd1, 0x51, 0x0c, + 0x41, 0x52, 0x5d, 0x16, 0x3f, 0xe9, 0xd7, 0x4d, + 0x13, 0x48, 0x81, 0xe3, 0x51, 0x41, 0xed, 0x5e, + 0x8e, 0x95, 0xb9, 0x79 +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA384_1_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA384_1_test_case = { + .name="DECDSA-SHA384/SECP521R1 1", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA384_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA384_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA384, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA384_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA384_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define DECDSA_SHA512_SECP521R1_SELF_TEST_1 +/*** Tests for DECDSA-SHA512/SECP521R1 ***/ +static const u8 decdsa_rfc6979_SECP521R1_SHA512_1_test_vector_expected_sig[] = { + 0x01, 0x3e, 0x99, 0x02, 0x0a, 0xbf, 0x5c, 0xee, + 0x75, 0x25, 0xd1, 0x6b, 0x69, 0xb2, 0x29, 0x65, + 0x2a, 0xb6, 0xbd, 0xf2, 0xaf, 0xfc, 0xae, 0xf3, + 0x87, 0x73, 0xb4, 0xb7, 0xd0, 0x87, 0x25, 0xf1, + 0x0c, 0xdb, 0x93, 0x48, 0x2f, 0xdc, 0xc5, 0x4e, + 0xdc, 0xee, 0x91, 0xec, 0xa4, 0x16, 0x6b, 0x2a, + 0x7c, 0x62, 0x65, 0xef, 0x0c, 0xe2, 0xbd, 0x70, + 0x51, 0xb7, 0xce, 0xf9, 0x45, 0xba, 0xbd, 0x47, + 0xee, 0x6d, 0x01, 0xfb, 0xd0, 0x01, 0x3c, 0x67, + 0x4a, 0xa7, 0x9c, 0xb3, 0x98, 0x49, 0x52, 0x79, + 0x16, 0xce, 0x30, 0x1c, 0x66, 0xea, 0x7c, 0xe8, + 0xb8, 0x06, 0x82, 0x78, 0x6a, 0xd6, 0x0f, 0x98, + 0xf7, 0xe7, 0x8a, 0x19, 0xca, 0x69, 0xef, 0xf5, + 0xc5, 0x74, 0x00, 0xe3, 0xb3, 0xa0, 0xad, 0x66, + 0xce, 0x09, 0x78, 0x21, 0x4d, 0x13, 0xba, 0xf4, + 0xe9, 0xac, 0x60, 0x75, 0x2f, 0x7b, 0x15, 0x5e, + 0x2d, 0xe4, 0xdc, 0xe3 +}; +static const u8 decdsa_rfc6979_SECP521R1_SHA512_1_test_vector_priv_key[] = { + 0x00, 0xfa, 0xd0, 0x6d, 0xaa, 0x62, 0xba, 0x3b, + 0x25, 0xd2, 0xfb, 0x40, 0x13, 0x3d, 0xa7, 0x57, + 0x20, 0x5d, 0xe6, 0x7f, 0x5b, 0xb0, 0x01, 0x8f, + 0xee, 0x8c, 0x86, 0xe1, 0xb6, 0x8c, 0x7e, 0x75, + 0xca, 0xa8, 0x96, 0xeb, 0x32, 0xf1, 0xf4, 0x7c, + 0x70, 0x85, 0x58, 0x36, 0xa6, 0xd1, 0x6f, 0xcc, + 0x14, 0x66, 0xf6, 0xd8, 0xfb, 0xec, 0x67, 0xdb, + 0x89, 0xec, 0x0c, 0x08, 0xb0, 0xe9, 0x96, 0xb8, + 0x35, 0x38 +}; +static const ec_test_case decdsa_rfc6979_SECP521R1_SHA512_1_test_case = { + .name="DECDSA-SHA512/SECP521R1 1", + .ec_str_p = &secp521r1_str_params, + .priv_key = decdsa_rfc6979_SECP521R1_SHA512_1_test_vector_priv_key, + .priv_key_len = sizeof(decdsa_rfc6979_SECP521R1_SHA512_1_test_vector_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = "test", + .msglen = 4, + .sig_type = DECDSA, + .exp_sig = decdsa_rfc6979_SECP521R1_SHA512_1_test_vector_expected_sig, + .exp_siglen = sizeof(decdsa_rfc6979_SECP521R1_SHA512_1_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + diff --git a/crypto/libecc/src/tests/ec_self_tests.h b/crypto/libecc/src/tests/ec_self_tests.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ec_self_tests.h @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_SELF_TESTS_H__ +#define __EC_SELF_TESTS_H__ + +int dummy; + +#endif diff --git a/crypto/libecc/src/tests/ec_self_tests.c b/crypto/libecc/src/tests/ec_self_tests.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ec_self_tests.c @@ -0,0 +1,302 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include + +/* + * Use extern declarations to avoid including + * ec_self_tests_core.h, which has all fixed + * test vectors definitions. We only need the + * three functions below. + */ +extern ATTRIBUTE_WARN_UNUSED_RET int perform_known_test_vectors_test(const char *sig, const char *hash, const char *curve); +extern ATTRIBUTE_WARN_UNUSED_RET int perform_random_sig_verif_test(const char *sig, const char *hash, const char *curve); +extern ATTRIBUTE_WARN_UNUSED_RET int perform_performance_test(const char *sig, const char *hash, const char *curve); + +/* Tests kinds */ +#define KNOWN_TEST_VECTORS (1) +#define RANDOM_SIG_VERIF (1 << 2) +#define PERFORMANCE (1 << 3) + +typedef struct { + const char *type_name; + const char *type_help; + unsigned int type_mask; +} test_type; + +static const test_type test_types[] = { + { + .type_name = "vectors", + .type_help = "Perform known test vectors", + .type_mask = KNOWN_TEST_VECTORS, + }, + { + .type_name = "rand", + .type_help = "Perform random sign/verify tests", + .type_mask = RANDOM_SIG_VERIF, + }, + { + .type_name = "perf", + .type_help = "Performance tests", + .type_mask = PERFORMANCE, + }, +}; + +ATTRIBUTE_WARN_UNUSED_RET static int perform_tests(unsigned int tests, const char *sig, const char *hash, const char *curve) +{ + /* KNOWN_TEST_VECTORS tests */ + if (tests & KNOWN_TEST_VECTORS) { + if (perform_known_test_vectors_test(sig, hash, curve)) { + goto err; + } + } + /* RANDOM_SIG_VERIF tests */ + if (tests & RANDOM_SIG_VERIF) { + if (perform_random_sig_verif_test(sig, hash, curve)) { + goto err; + } + } + /* PERFORMANCE tests */ + if (tests & PERFORMANCE) { + if (perform_performance_test(sig, hash, curve)) { + goto err; + } + } + + return 0; + + err: + return -1; +} + +static void print_curves(void) +{ + u8 i; + + /* Print all the available curves */ + for (i = 0; i < EC_CURVES_NUM; i++) { + ext_printf("%s ", (const char *)(ec_maps[i].params->name->buf)); + } + + return; +} + +static void print_hash_algs(void) +{ + int i; + + /* Print all the available hash functions */ + for (i = 0; hash_maps[i].type != UNKNOWN_HASH_ALG; i++) { + ext_printf("%s ", hash_maps[i].name); + } + + return; +} + +static void print_sig_algs(void) +{ + int i; + + /* Print all the available signature schemes */ + for (i = 0; ec_sig_maps[i].type != UNKNOWN_ALG; i++) { + ext_printf("%s ", ec_sig_maps[i].name); + } + + return; +} + +static void print_help(const char *bad_arg) +{ + int j; + if(bad_arg != NULL){ + ext_printf("Argument %s is unknown. Possible args are:\n", bad_arg); + } + for (j = 0; j < (int)(sizeof(test_types) / sizeof(test_type)); j++) { + ext_printf("\t%20s:\t%s\n", test_types[j].type_name, + test_types[j].type_help); + } + ext_printf("-------------------\n"); + ext_printf("NOTE: you can filter signatures with 'sign=', hash algorithms with 'hash=', curves with 'curve='\n"); + ext_printf("\tExample: sign=ECDSA hash=SHA256 hash=SHA512 curve=FRP256V1\n"); + ext_printf("\tPossible signatures: "); + print_sig_algs(); + ext_printf("\n\tPossible hash algorithms: "); + print_hash_algs(); + ext_printf("\n\tPossible curves: "); + print_curves(); + ext_printf("\n"); +} + +#if defined(USE_SMALL_STACK) +#define MAX_FILTERS 1 +#else +#define MAX_FILTERS 100 +#endif + +#ifdef __cplusplus +/* In case of a C++ compiler, preserve our "main" + * linkage. + */ +extern "C" { +int main(int argc, char *argv[]); +} +#endif + +int main(int argc, char *argv[]) +{ + int ret; + unsigned int tests_to_do; + const char *sign_filters[MAX_FILTERS] = { NULL }; + const char *hash_filters[MAX_FILTERS] = { NULL }; + const char *curve_filters[MAX_FILTERS] = { NULL }; + int sign_filters_num = 0, hash_filters_num = 0, curve_filters_num = 0; + int i, j, k; + + /* By default, perform all tests */ + tests_to_do = KNOWN_TEST_VECTORS | RANDOM_SIG_VERIF | PERFORMANCE; + + /* Sanity check */ + if(MAX_FILTERS < 1){ + ext_printf("Error: MAX_FILTERS too small\n"); + ret = -1; + goto err; + } + + /* If we have one or more arguments, only perform specific test */ + if (argc > 1) { + unsigned char found = 0, found_filter = 0; + unsigned int found_ops = 0; + int check; + u32 len; + /* Check of the args */ + for (i = 1; i < argc; i++) { + found = found_filter = 0; + for (j = 0; + j < (int)(sizeof(test_types) / sizeof(test_type)); + j++) { + ret = local_strlen(test_types[j].type_name, &len); EG(ret, err); + ret = are_equal(argv[i], test_types[j].type_name, len + 1, &check); EG(ret, err); + if (check) { + found_ops++; + found = 1; + break; + } + ret = are_equal(argv[i], "sign=", sizeof("sign=")-1, &check); EG(ret, err); + if(check){ + if(sign_filters_num >= MAX_FILTERS){ + ext_printf("Maximum number of sign filters %d exceeded!\n", sign_filters_num); + ret = -1; + goto err; + } + sign_filters[sign_filters_num++] = argv[i]+sizeof("sign=")-1; + found_filter = 1; + break; + } + ret = are_equal(argv[i], "hash=", sizeof("hash=")-1, &check); EG(ret, err); + if(check){ + if(hash_filters_num >= MAX_FILTERS){ + ext_printf("Maximum number of hash filters %d exceeded!\n", hash_filters_num); + ret = -1; + goto err; + } + hash_filters[hash_filters_num++] = argv[i]+sizeof("hash=")-1; + found_filter = 1; + break; + } + ret = are_equal(argv[i], "curve=", sizeof("curve=")-1, &check); EG(ret, err); + if(check){ + if(curve_filters_num >= MAX_FILTERS){ + ext_printf("Maximum number of curve filters %d exceeded!\n", curve_filters_num); + return -1; + } + curve_filters[curve_filters_num++] = argv[i]+sizeof("curve=")-1; + found_filter = 1; + break; + } + } + if ((found == 0) && (found_filter == 0)) { + print_help(argv[i]); + ret = -1; + goto err; + } + } + if (found_ops == 0) { + if(found_filter == 0){ + ext_printf("Error: no operation asked ...\n"); + print_help(NULL); + ret = -1; + goto err; + } + } + else{ + tests_to_do = 0; + for (i = 1; i < argc; i++) { + for (j = 0; + j < (int)(sizeof(test_types) / sizeof(test_type)); + j++) { + ret = local_strlen(test_types[j].type_name, &len); EG(ret, err); + ret = are_equal(argv[i], test_types[j].type_name, len + 1, &check); EG(ret, err); + if (check){ + tests_to_do |= test_types[j].type_mask; + } + } + } + } + } + /* If we do not have filters, we put NULL to tell that we do not filter */ + if(sign_filters_num == 0){ + sign_filters_num = 1; + sign_filters[0] = NULL; + } + if(hash_filters_num == 0){ + hash_filters_num = 1; + hash_filters[0] = NULL; + } + if(curve_filters_num == 0){ + curve_filters_num = 1; + curve_filters[0] = NULL; + } + for(i = 0; i < sign_filters_num; i++){ + for(j = 0; j < hash_filters_num; j++){ + for(k = 0; k < curve_filters_num; k++){ + if(perform_tests(tests_to_do, sign_filters[i], hash_filters[j], curve_filters[k])){ + const char *curr_sign_filters = sign_filters[i]; + const char *curr_hash_filters = hash_filters[j]; + const char *curr_curve_filters = curve_filters[k]; + const char *all = "all"; + if(curr_sign_filters == NULL){ + curr_sign_filters = all; + } + if(curr_hash_filters == NULL){ + curr_hash_filters = all; + } + if(curr_curve_filters == NULL){ + curr_curve_filters = all; + } + ext_printf("Test for sign=%s/hash=%s/curve=%s failed!\n", curr_sign_filters, curr_hash_filters, curr_curve_filters); + ret = -1; + goto err; + } + } + } + } + + ret = 0; + +err: + return ret; +} diff --git a/crypto/libecc/src/tests/ec_self_tests_core.h b/crypto/libecc/src/tests/ec_self_tests_core.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ec_self_tests_core.h @@ -0,0 +1,5757 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __EC_SELF_TESTS_CORE_H__ +#define __EC_SELF_TESTS_CORE_H__ + +#include + +/* A test is fully defined by the attributes pointed in this structure. */ +typedef struct { + /* Test case name */ + const char *name; + + /* Curve params */ + const ec_str_params *ec_str_p; + + /* Private key */ + const u8 *priv_key; + u8 priv_key_len; + + /* Function returning a fixed random value */ + int (*nn_random) (nn_t out, nn_src_t q); + + /* Hash function */ + hash_alg_type hash_type; + + /* Message */ + const char *msg; + u32 msglen; + + /* Expected signature and associated length */ + ec_alg_type sig_type; + const u8 *exp_sig; + u8 exp_siglen; + + /* Optional ancillary data */ + const u8 *adata; + u16 adata_len; +} ec_test_case; + +/* ECDH test case */ +typedef struct { + /* Test case name */ + const char *name; + + /* ECDH type */ + ec_alg_type ecdh_type; + + /* Curve params */ + const ec_str_params *ec_str_p; + + /* Our private key */ + const u8 *our_priv_key; + u8 our_priv_key_len; + + /* Peer public key */ + const u8 *peer_pub_key; + u8 peer_pub_key_len; + + /* Our expected public key */ + const u8 *exp_our_pub_key; + u8 exp_our_pub_key_len; + + /* Expected shared secret */ + const u8 *exp_shared_secret; + u8 exp_shared_secret_len; +} ecdh_test_case; + +/******************************************************************* + ************** ECDSA tests **************************************** + *******************************************************************/ +#if (defined(WITH_HASH_SHA3_224) || defined(WITH_HASH_SHA3_256) || \ + defined(WITH_HASH_SHA3_384) || defined(WITH_HASH_SHA3_512)) + +/* + * This test message is the 1600 bits message used by NIST in its + * test vectors for SHA3. We reuse it for sig/verif test vectors + * using SHA3. + */ +static const u8 sha3_1600_bit_msg[] = { + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, + 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3 +}; +#endif + +#ifdef WITH_SIG_ECDSA +#ifdef WITH_HASH_SHA3_224 +#ifdef WITH_CURVE_SECP224R1 +#define ECDSA_SHA3_224_SECP224R1_SELF_TEST + +/* ECDSA secp224r1 test vectors */ + +static int ecdsa_nn_random_secp224r1_sha3_224_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp224r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0xb7, 0x63, 0x8a, 0x22, 0xe5, 0xee, 0xe7, 0x76, + 0xa4, 0x25, 0x3f, 0x97, 0xe8, 0x35, 0x1a, 0x3c, + 0x94, 0xb0, 0x19, 0x37, 0x66, 0x2a, 0x0e, 0xbd, + 0xd6, 0xe7, 0xae, 0xe0 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp224r1_sha3_224_test_vectors_priv_key[] = { + 0xc3, 0x1a, 0x15, 0x2d, 0x2c, 0x62, 0x40, 0x21, + 0x80, 0x87, 0x55, 0xb2, 0xcb, 0xdf, 0x80, 0xd3, + 0x09, 0xe3, 0x6a, 0xea, 0xc1, 0xcc, 0xd9, 0xdb, + 0x82, 0xb1, 0xd7, 0xc3 +}; + +static const u8 ecdsa_secp224r1_sha3_224_test_vectors_expected_sig[] = { + 0x56, 0xa6, 0x93, 0xe1, 0x20, 0x0a, 0xa8, 0xe3, + 0xd2, 0x78, 0x07, 0xba, 0x5c, 0xe7, 0xb8, 0xf7, + 0xdf, 0x24, 0xa6, 0x65, 0x1e, 0xb8, 0x70, 0x6e, + 0x65, 0x52, 0x49, 0xd4, + 0x14, 0xd0, 0x4b, 0x6b, 0xb9, 0x32, 0x58, 0x7d, + 0xc0, 0xc6, 0x1c, 0xa1, 0x44, 0xf8, 0x4b, 0xf4, + 0x6e, 0x7a, 0xbd, 0xcf, 0xa7, 0xa7, 0xa1, 0xee, + 0x56, 0x06, 0x9a, 0x37 +}; + +static const ec_test_case ecdsa_secp224r1_sha3_224_test_case = { + .name = "ECDSA-SHA3_224/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = ecdsa_secp224r1_sha3_224_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp224r1_sha3_224_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp224r1_sha3_224_test_vector, + .hash_type = SHA3_224, + .msg = (const char *)sha3_1600_bit_msg, + .msglen = sizeof(sha3_1600_bit_msg), + .sig_type = ECDSA, + .exp_sig = ecdsa_secp224r1_sha3_224_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecdsa_secp224r1_sha3_224_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA3_224 */ + +#ifdef WITH_HASH_SHA3_256 +#ifdef WITH_CURVE_SECP256R1 +#define ECDSA_SHA3_256_SECP256R1_SELF_TEST + +/* ECDSA secp256r1 test vectors */ + +static int ecdsa_nn_random_secp256r1_sha3_256_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp256r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp256r1_sha3_256_test_vectors_priv_key[] = { + 0xDC, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecdsa_secp256r1_sha3_256_test_vectors_expected_sig[] = { + 0xCB, 0x28, 0xE0, 0x99, 0x9B, 0x9C, 0x77, 0x15, + 0xFD, 0x0A, 0x80, 0xD8, 0xE4, 0x7A, 0x77, 0x07, + 0x97, 0x16, 0xCB, 0xBF, 0x91, 0x7D, 0xD7, 0x2E, + 0x97, 0x56, 0x6E, 0xA1, 0xC0, 0x66, 0x95, 0x7C, + + 0x1d, 0x5d, 0x46, 0x09, 0xa2, 0xf9, 0x69, 0xa1, + 0x90, 0xeb, 0x6b, 0x84, 0x51, 0xdd, 0x43, 0x0d, + 0x65, 0x07, 0x10, 0x4d, 0xb6, 0x46, 0x61, 0x68, + 0xec, 0x7a, 0x73, 0xdb, 0x8c, 0x96, 0xe9, 0x1b +}; + +static const ec_test_case ecdsa_secp256r1_sha3_256_test_case = { + .name = "ECDSA-SHA3_256/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecdsa_secp256r1_sha3_256_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp256r1_sha3_256_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp256r1_sha3_256_test_vector, + .hash_type = SHA3_256, + .msg = (const char *)sha3_1600_bit_msg, + .msglen = sizeof(sha3_1600_bit_msg), + .sig_type = ECDSA, + .exp_sig = ecdsa_secp256r1_sha3_256_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecdsa_secp256r1_sha3_256_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA3_256 */ + +#ifdef WITH_HASH_SHA3_512 +#ifdef WITH_CURVE_SECP256R1 +#define ECDSA_SHA3_512_SECP256R1_SELF_TEST + +/* + * ECDSA secp256r1 test vector using SHA3_512. This test vector is intended + * to test truncation (right shift) step in signature and verification + * code when the output size of the hash function is larger than the + * bit size of q (order of the group generated by the base point). + */ + +static int ecdsa_nn_random_secp256r1_sha3_512_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp256r1_sha3_512_test_vectors_priv_key[] = { + 0xDC, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecdsa_secp256r1_sha3_512_test_vectors_expected_sig[] = { + 0xcb, 0x28, 0xe0, 0x99, 0x9b, 0x9c, 0x77, 0x15, + 0xfd, 0x0a, 0x80, 0xd8, 0xe4, 0x7a, 0x77, 0x07, + 0x97, 0x16, 0xcb, 0xbf, 0x91, 0x7d, 0xd7, 0x2e, + 0x97, 0x56, 0x6e, 0xa1, 0xc0, 0x66, 0x95, 0x7c, + + 0x88, 0x48, 0x1a, 0x4f, 0x5b, 0xd4, 0xf6, 0x8f, + 0xcf, 0xe0, 0xb3, 0x15, 0xc4, 0xd4, 0x0a, 0xf9, + 0xd5, 0x31, 0x76, 0x97, 0xae, 0x29, 0x45, 0x47, + 0xef, 0x7c, 0x8f, 0x01, 0x41, 0x24, 0xea, 0xff +}; + +static const ec_test_case ecdsa_secp256r1_sha3_512_test_case = { + .name = "ECDSA-SHA3_512/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecdsa_secp256r1_sha3_512_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp256r1_sha3_512_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp256r1_sha3_512_test_vector, + .hash_type = SHA3_512, + .msg = (const char *)sha3_1600_bit_msg, + .msglen = sizeof(sha3_1600_bit_msg), + .sig_type = ECDSA, + .exp_sig = ecdsa_secp256r1_sha3_512_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecdsa_secp256r1_sha3_512_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA3_512 */ + +#ifdef WITH_HASH_SHA3_384 +#ifdef WITH_CURVE_SECP384R1 +#define ECDSA_SHA3_384_SECP384R1_SELF_TEST + +/* ECDSA secp384r1 test vectors */ + +static int ecdsa_nn_random_secp384r1_sha3_384_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp384r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0xB4, 0xB7, 0x4E, 0x44, 0xD7, 0x1A, 0x13, 0xD5, + 0x68, 0x00, 0x3D, 0x74, 0x89, 0x90, 0x8D, 0x56, + 0x4C, 0x77, 0x61, 0xE2, 0x29, 0xC5, 0x8C, 0xBF, + 0xA1, 0x89, 0x50, 0x09, 0x6E, 0xB7, 0x46, 0x3B, + 0x85, 0x4D, 0x7F, 0xA9, 0x92, 0xF9, 0x34, 0xD9, + 0x27, 0x37, 0x62, 0x85, 0xE6, 0x34, 0x14, 0xFA + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp384r1_sha3_384_test_vectors_priv_key[] = { + 0x0B, 0xEB, 0x64, 0x66, 0x34, 0xBA, 0x87, 0x73, + 0x5D, 0x77, 0xAE, 0x48, 0x09, 0xA0, 0xEB, 0xEA, + 0x86, 0x55, 0x35, 0xDE, 0x4C, 0x1E, 0x1D, 0xCB, + 0x69, 0x2E, 0x84, 0x70, 0x8E, 0x81, 0xA5, 0xAF, + 0x62, 0xE5, 0x28, 0xC3, 0x8B, 0x2A, 0x81, 0xB3, + 0x53, 0x09, 0x66, 0x8D, 0x73, 0x52, 0x4D, 0x9F +}; + +static const u8 ecdsa_secp384r1_sha3_384_test_vectors_expected_sig[] = { + 0xfb, 0x01, 0x7b, 0x91, 0x4e, 0x29, 0x14, 0x94, + 0x32, 0xd8, 0xba, 0xc2, 0x9a, 0x51, 0x46, 0x40, + 0xb4, 0x6f, 0x53, 0xdd, 0xab, 0x2c, 0x69, 0x94, + 0x80, 0x84, 0xe2, 0x93, 0x0f, 0x1c, 0x8f, 0x7e, + 0x08, 0xe0, 0x7c, 0x9c, 0x63, 0xf2, 0xd2, 0x1a, + 0x07, 0xdc, 0xb5, 0x6a, 0x6a, 0xf5, 0x6e, 0xb3, + + 0xbe, 0x9b, 0x4f, 0x2b, 0x7b, 0x02, 0xca, 0xd3, + 0xd0, 0xb4, 0x7c, 0xf6, 0x20, 0xfa, 0x26, 0xae, + 0x24, 0x6c, 0x95, 0x86, 0x1d, 0xbe, 0x6b, 0x5d, + 0xc5, 0xb3, 0xb3, 0xfb, 0xea, 0x96, 0x4f, 0xef, + 0x48, 0xb7, 0x4b, 0x07, 0x4a, 0xdd, 0x6a, 0xc8, + 0x8f, 0x4f, 0x3f, 0x9d, 0xdd, 0x3a, 0xa4, 0x1c +}; + +static const ec_test_case ecdsa_secp384r1_sha3_384_test_case = { + .name = "ECDSA-SHA3_384/secp384r1", + .ec_str_p = &secp384r1_str_params, + .priv_key = ecdsa_secp384r1_sha3_384_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp384r1_sha3_384_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp384r1_sha3_384_test_vector, + .hash_type = SHA3_384, + .msg = (const char *)sha3_1600_bit_msg, + .msglen = sizeof(sha3_1600_bit_msg), + .sig_type = ECDSA, + .exp_sig = ecdsa_secp384r1_sha3_384_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecdsa_secp384r1_sha3_384_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA3_384 */ + +#ifdef WITH_HASH_SHA3_512 +#ifdef WITH_CURVE_SECP521R1 +#define ECDSA_SHA3_512_SECP521R1_SELF_TEST + +/* ECDSA secp521r1 test vectors */ + +static int ecdsa_nn_random_secp521r1_sha3_512_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp521r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x00, 0xC1, 0xC2, 0xB3, 0x05, 0x41, 0x9F, 0x5A, + 0x41, 0x34, 0x4D, 0x7E, 0x43, 0x59, 0x93, 0x3D, + 0x73, 0x40, 0x96, 0xF5, 0x56, 0x19, 0x7A, 0x9B, + 0x24, 0x43, 0x42, 0xB8, 0xB6, 0x2F, 0x46, 0xF9, + 0x37, 0x37, 0x78, 0xF9, 0xDE, 0x6B, 0x64, 0x97, + 0xB1, 0xEF, 0x82, 0x5F, 0xF2, 0x4F, 0x42, 0xF9, + 0xB4, 0xA4, 0xBD, 0x73, 0x82, 0xCF, 0xC3, 0x37, + 0x8A, 0x54, 0x0B, 0x1B, 0x7F, 0x0C, 0x1B, 0x95, + 0x6C, 0x2F + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp521r1_sha3_512_test_vectors_priv_key[] = { + 0x00, 0x65, 0xFD, 0xA3, 0x40, 0x94, 0x51, 0xDC, + 0xAB, 0x0A, 0x0E, 0xAD, 0x45, 0x49, 0x51, 0x12, + 0xA3, 0xD8, 0x13, 0xC1, 0x7B, 0xFD, 0x34, 0xBD, + 0xF8, 0xC1, 0x20, 0x9D, 0x7D, 0xF5, 0x84, 0x91, + 0x20, 0x59, 0x77, 0x79, 0x06, 0x0A, 0x7F, 0xF9, + 0xD7, 0x04, 0xAD, 0xF7, 0x8B, 0x57, 0x0F, 0xFA, + 0xD6, 0xF0, 0x62, 0xE9, 0x5C, 0x7E, 0x0C, 0x5D, + 0x54, 0x81, 0xC5, 0xB1, 0x53, 0xB4, 0x8B, 0x37, + 0x5F, 0xA1 +}; + +static const u8 ecdsa_secp521r1_sha3_512_test_vectors_expected_sig[] = { + 0x01, 0x54, 0xfd, 0x38, 0x36, 0xaf, 0x92, 0xd0, + 0xdc, 0xa5, 0x7d, 0xd5, 0x34, 0x1d, 0x30, 0x53, + 0x98, 0x85, 0x34, 0xfd, 0xe8, 0x31, 0x8f, 0xc6, + 0xaa, 0xaa, 0xb6, 0x8e, 0x2e, 0x6f, 0x43, 0x39, + 0xb1, 0x9f, 0x2f, 0x28, 0x1a, 0x7e, 0x0b, 0x22, + 0xc2, 0x69, 0xd9, 0x3c, 0xf8, 0x79, 0x4a, 0x92, + 0x78, 0x88, 0x0e, 0xd7, 0xdb, 0xb8, 0xd9, 0x36, + 0x2c, 0xae, 0xac, 0xee, 0x54, 0x43, 0x20, 0x55, + 0x22, 0x51, + 0x00, 0x15, 0xeb, 0xfd, 0xad, 0xf3, 0xf8, 0x00, + 0x11, 0x51, 0x47, 0x9e, 0xec, 0xf4, 0x19, 0x53, + 0x01, 0x56, 0xc2, 0x85, 0x62, 0x69, 0xc5, 0x24, + 0x4c, 0x7a, 0xbd, 0xac, 0x36, 0xab, 0x45, 0xd0, + 0xdc, 0xf5, 0xa5, 0xb5, 0x33, 0xff, 0xff, 0xa2, + 0xa8, 0xbe, 0xea, 0xea, 0xda, 0x04, 0xc1, 0xc5, + 0xc8, 0x1e, 0x99, 0xa1, 0xd7, 0x88, 0xc9, 0x24, + 0x03, 0xe1, 0x78, 0x4a, 0x82, 0xcd, 0xd5, 0xe5, + 0xfb, 0x27 +}; + +static const ec_test_case ecdsa_secp521r1_sha3_512_test_case = { + .name = "ECDSA-SHA3_512/secp521r1", + .ec_str_p = &secp521r1_str_params, + .priv_key = ecdsa_secp521r1_sha3_512_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp521r1_sha3_512_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp521r1_sha3_512_test_vector, + .hash_type = SHA3_512, + .msg = (const char *)sha3_1600_bit_msg, + .msglen = sizeof(sha3_1600_bit_msg), + .sig_type = ECDSA, + .exp_sig = ecdsa_secp521r1_sha3_512_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecdsa_secp521r1_sha3_512_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA3_512 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP192R1 +#define ECDSA_SHA224_SECP192R1_SELF_TEST + +/* ECDSA secp192r1 w/ sha224 test vectors to test truncation steps */ + +static int ecdsa_nn_random_secp192r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0xFA, 0x6D, 0xE2, 0x97, 0x46, 0xBB, 0xEB, 0x7F, + 0x8B, 0xB1, 0xE7, 0x61, 0xF8, 0x5F, 0x7D, 0xFB, + 0x29, 0x83, 0x16, 0x9D, 0x82, 0xFA, 0x2F, 0x4E + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp192r1_test_vectors_priv_key[] = { + 0x1A, 0x8D, 0x59, 0x8F, 0xC1, 0x5B, 0xF0, 0xFD, + 0x89, 0x03, 0x0B, 0x5C, 0xB1, 0x11, 0x1A, 0xEB, + 0x92, 0xAE, 0x8B, 0xAF, 0x5E, 0xA4, 0x75, 0xFB +}; + +static const u8 ecdsa_secp192r1_test_vectors_expected_sig[] = { + 0x88, 0x50, 0x52, 0x38, 0x0F, 0xF1, 0x47, 0xB7, + 0x34, 0xC3, 0x30, 0xC4, 0x3D, 0x39, 0xB2, 0xC4, + 0xA8, 0x9F, 0x29, 0xB0, 0xF7, 0x49, 0xFE, 0xAD, + + 0x66, 0x63, 0xF2, 0x78, 0x36, 0x98, 0x7E, 0xED, + 0x45, 0x85, 0x82, 0xD1, 0xF4, 0x43, 0x29, 0x3A, + 0x5E, 0xD8, 0x88, 0x49, 0xB2, 0xFC, 0x5C, 0xD9 +}; + +static const ec_test_case ecdsa_secp192r1_test_case = { + .name = "ECDSA-SHA224/secp192r1", + .ec_str_p = &secp192r1_str_params, + .priv_key = ecdsa_secp192r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp192r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp192r1_test_vector, + .hash_type = SHA224, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_secp192r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_secp192r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP192R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP224R1 +#define ECDSA_SHA224_SECP224R1_SELF_TEST + +/* ECDSA secp224r1 test vectors */ + +static int ecdsa_nn_random_rfc4754_secp224r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp224r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0xb7, 0x63, 0x8a, 0x22, 0xe5, 0xee, 0xe7, 0x76, + 0xa4, 0x25, 0x3f, 0x97, 0xe8, 0x35, 0x1a, 0x3c, + 0x94, 0xb0, 0x19, 0x37, 0x66, 0x2a, 0x0e, 0xbd, + 0xd6, 0xe7, 0xae, 0xe0 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp224r1_test_vectors_priv_key[] = { + 0xc3, 0x1a, 0x15, 0x2d, 0x2c, 0x62, 0x40, 0x21, + 0x80, 0x87, 0x55, 0xb2, 0xcb, 0xdf, 0x80, 0xd3, + 0x09, 0xe3, 0x6a, 0xea, 0xc1, 0xcc, 0xd9, 0xdb, + 0x82, 0xb1, 0xd7, 0xc3 +}; + +static const u8 ecdsa_secp224r1_test_vectors_expected_sig[] = { + 0x56, 0xa6, 0x93, 0xe1, 0x20, 0x0a, 0xa8, 0xe3, + 0xd2, 0x78, 0x07, 0xba, 0x5c, 0xe7, 0xb8, 0xf7, + 0xdf, 0x24, 0xa6, 0x65, 0x1e, 0xb8, 0x70, 0x6e, + 0x65, 0x52, 0x49, 0xd4, + 0x4e, 0x49, 0xa0, 0x37, 0x9d, 0x04, 0x4f, 0x34, + 0x82, 0xe5, 0x68, 0x32, 0x45, 0x84, 0x23, 0xcf, + 0x0a, 0xef, 0xef, 0xe9, 0x08, 0x1b, 0x6b, 0xc7, + 0x80, 0x5e, 0x18, 0xea +}; + +static const ec_test_case ecdsa_secp224r1_test_case = { + .name = "ECDSA-SHA224/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = ecdsa_secp224r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp224r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_rfc4754_secp224r1_test_vector, + .hash_type = SHA224, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_secp224r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_secp224r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define ECDSA_SHA256_SECP256R1_SELF_TEST + +/* ECDSA secp256r1 test vectors */ + +static int ecdsa_nn_random_rfc4754_secp256r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp256r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp256r1_test_vectors_priv_key[] = { + 0xDC, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecdsa_secp256r1_test_vectors_expected_sig[] = { + 0xCB, 0x28, 0xE0, 0x99, 0x9B, 0x9C, 0x77, 0x15, + 0xFD, 0x0A, 0x80, 0xD8, 0xE4, 0x7A, 0x77, 0x07, + 0x97, 0x16, 0xCB, 0xBF, 0x91, 0x7D, 0xD7, 0x2E, + 0x97, 0x56, 0x6E, 0xA1, 0xC0, 0x66, 0x95, 0x7C, + 0x86, 0xFA, 0x3B, 0xB4, 0xE2, 0x6C, 0xAD, 0x5B, + 0xF9, 0x0B, 0x7F, 0x81, 0x89, 0x92, 0x56, 0xCE, + 0x75, 0x94, 0xBB, 0x1E, 0xA0, 0xC8, 0x92, 0x12, + 0x74, 0x8B, 0xFF, 0x3B, 0x3D, 0x5B, 0x03, 0x15 +}; + +static const ec_test_case ecdsa_secp256r1_test_case = { + .name = "ECDSA-SHA256/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecdsa_secp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp256r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_rfc4754_secp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_secp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_secp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP256R1 +#define ECDSA_SHA512_SECP256R1_SELF_TEST + +/* + * ECDSA secp256r1 test vector using SHA512. This test vector is intended + * to test truncation (right shift) step in signature and verification + * code when the output size of the hash function is larger than the + * bit size of q (order of the group generated by the base point). + */ + +static int ecdsa_nn_random_secp256r1_sha512_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp256r1_sha512_test_vectors_priv_key[] = { + 0xDC, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecdsa_secp256r1_sha512_test_vectors_expected_sig[] = { + 0xcb, 0x28, 0xe0, 0x99, 0x9b, 0x9c, 0x77, 0x15, + 0xfd, 0x0a, 0x80, 0xd8, 0xe4, 0x7a, 0x77, 0x07, + 0x97, 0x16, 0xcb, 0xbf, 0x91, 0x7d, 0xd7, 0x2e, + 0x97, 0x56, 0x6e, 0xa1, 0xc0, 0x66, 0x95, 0x7c, + 0x78, 0x84, 0x35, 0x83, 0x06, 0xaf, 0xd1, 0xc8, + 0xa2, 0xa5, 0xf8, 0xee, 0x73, 0xe4, 0x22, 0x6f, + 0x1f, 0x6a, 0x14, 0xec, 0xaf, 0x2d, 0xe3, 0x0e, + 0xde, 0x1e, 0xb4, 0xe9, 0xe2, 0xf6, 0x8d, 0x3a +}; + +static const ec_test_case ecdsa_secp256r1_sha512_test_case = { + .name = "ECDSA-SHA512/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecdsa_secp256r1_sha512_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp256r1_sha512_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp256r1_sha512_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_secp256r1_sha512_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_secp256r1_sha512_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define ECDSA_SHA384_SECP384R1_SELF_TEST + +/* ECDSA secp384r1 test vectors */ + +static int ecdsa_nn_random_rfc4754_secp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp384r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0xB4, 0xB7, 0x4E, 0x44, 0xD7, 0x1A, 0x13, 0xD5, + 0x68, 0x00, 0x3D, 0x74, 0x89, 0x90, 0x8D, 0x56, + 0x4C, 0x77, 0x61, 0xE2, 0x29, 0xC5, 0x8C, 0xBF, + 0xA1, 0x89, 0x50, 0x09, 0x6E, 0xB7, 0x46, 0x3B, + 0x85, 0x4D, 0x7F, 0xA9, 0x92, 0xF9, 0x34, 0xD9, + 0x27, 0x37, 0x62, 0x85, 0xE6, 0x34, 0x14, 0xFA + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp384r1_test_vectors_priv_key[] = { + 0x0B, 0xEB, 0x64, 0x66, 0x34, 0xBA, 0x87, 0x73, + 0x5D, 0x77, 0xAE, 0x48, 0x09, 0xA0, 0xEB, 0xEA, + 0x86, 0x55, 0x35, 0xDE, 0x4C, 0x1E, 0x1D, 0xCB, + 0x69, 0x2E, 0x84, 0x70, 0x8E, 0x81, 0xA5, 0xAF, + 0x62, 0xE5, 0x28, 0xC3, 0x8B, 0x2A, 0x81, 0xB3, + 0x53, 0x09, 0x66, 0x8D, 0x73, 0x52, 0x4D, 0x9F +}; + +static const u8 ecdsa_secp384r1_test_vectors_expected_sig[] = { + 0xFB, 0x01, 0x7B, 0x91, 0x4E, 0x29, 0x14, 0x94, + 0x32, 0xD8, 0xBA, 0xC2, 0x9A, 0x51, 0x46, 0x40, + 0xB4, 0x6F, 0x53, 0xDD, 0xAB, 0x2C, 0x69, 0x94, + 0x80, 0x84, 0xE2, 0x93, 0x0F, 0x1C, 0x8F, 0x7E, + 0x08, 0xE0, 0x7C, 0x9C, 0x63, 0xF2, 0xD2, 0x1A, + 0x07, 0xDC, 0xB5, 0x6A, 0x6A, 0xF5, 0x6E, 0xB3, + 0xB2, 0x63, 0xA1, 0x30, 0x5E, 0x05, 0x7F, 0x98, + 0x4D, 0x38, 0x72, 0x6A, 0x1B, 0x46, 0x87, 0x41, + 0x09, 0xF4, 0x17, 0xBC, 0xA1, 0x12, 0x67, 0x4C, + 0x52, 0x82, 0x62, 0xA4, 0x0A, 0x62, 0x9A, 0xF1, + 0xCB, 0xB9, 0xF5, 0x16, 0xCE, 0x0F, 0xA7, 0xD2, + 0xFF, 0x63, 0x08, 0x63, 0xA0, 0x0E, 0x8B, 0x9F +}; + +static const ec_test_case ecdsa_secp384r1_test_case = { + .name = "ECDSA-SHA384/secp384r1", + .ec_str_p = &secp384r1_str_params, + .priv_key = ecdsa_secp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp384r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_rfc4754_secp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_secp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_secp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define ECDSA_SHA512_SECP521R1_SELF_TEST + +/* ECDSA secp521r1 test vectors */ + +static int ecdsa_nn_random_secp521r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp521r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x00, 0xC1, 0xC2, 0xB3, 0x05, 0x41, 0x9F, 0x5A, + 0x41, 0x34, 0x4D, 0x7E, 0x43, 0x59, 0x93, 0x3D, + 0x73, 0x40, 0x96, 0xF5, 0x56, 0x19, 0x7A, 0x9B, + 0x24, 0x43, 0x42, 0xB8, 0xB6, 0x2F, 0x46, 0xF9, + 0x37, 0x37, 0x78, 0xF9, 0xDE, 0x6B, 0x64, 0x97, + 0xB1, 0xEF, 0x82, 0x5F, 0xF2, 0x4F, 0x42, 0xF9, + 0xB4, 0xA4, 0xBD, 0x73, 0x82, 0xCF, 0xC3, 0x37, + 0x8A, 0x54, 0x0B, 0x1B, 0x7F, 0x0C, 0x1B, 0x95, + 0x6C, 0x2F + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_secp521r1_test_vectors_priv_key[] = { + 0x00, 0x65, 0xFD, 0xA3, 0x40, 0x94, 0x51, 0xDC, + 0xAB, 0x0A, 0x0E, 0xAD, 0x45, 0x49, 0x51, 0x12, + 0xA3, 0xD8, 0x13, 0xC1, 0x7B, 0xFD, 0x34, 0xBD, + 0xF8, 0xC1, 0x20, 0x9D, 0x7D, 0xF5, 0x84, 0x91, + 0x20, 0x59, 0x77, 0x79, 0x06, 0x0A, 0x7F, 0xF9, + 0xD7, 0x04, 0xAD, 0xF7, 0x8B, 0x57, 0x0F, 0xFA, + 0xD6, 0xF0, 0x62, 0xE9, 0x5C, 0x7E, 0x0C, 0x5D, + 0x54, 0x81, 0xC5, 0xB1, 0x53, 0xB4, 0x8B, 0x37, + 0x5F, 0xA1 +}; + +static const u8 ecdsa_secp521r1_test_vectors_expected_sig[] = { + 0x01, 0x54, 0xFD, 0x38, 0x36, 0xAF, 0x92, 0xD0, + 0xDC, 0xA5, 0x7D, 0xD5, 0x34, 0x1D, 0x30, 0x53, + 0x98, 0x85, 0x34, 0xFD, 0xE8, 0x31, 0x8F, 0xC6, + 0xAA, 0xAA, 0xB6, 0x8E, 0x2E, 0x6F, 0x43, 0x39, + 0xB1, 0x9F, 0x2F, 0x28, 0x1A, 0x7E, 0x0B, 0x22, + 0xC2, 0x69, 0xD9, 0x3C, 0xF8, 0x79, 0x4A, 0x92, + 0x78, 0x88, 0x0E, 0xD7, 0xDB, 0xB8, 0xD9, 0x36, + 0x2C, 0xAE, 0xAC, 0xEE, 0x54, 0x43, 0x20, 0x55, + 0x22, 0x51, 0x01, 0x77, 0x05, 0xA7, 0x03, 0x02, + 0x90, 0xD1, 0xCE, 0xB6, 0x05, 0xA9, 0xA1, 0xBB, + 0x03, 0xFF, 0x9C, 0xDD, 0x52, 0x1E, 0x87, 0xA6, + 0x96, 0xEC, 0x92, 0x6C, 0x8C, 0x10, 0xC8, 0x36, + 0x2D, 0xF4, 0x97, 0x53, 0x67, 0x10, 0x1F, 0x67, + 0xD1, 0xCF, 0x9B, 0xCC, 0xBF, 0x2F, 0x3D, 0x23, + 0x95, 0x34, 0xFA, 0x50, 0x9E, 0x70, 0xAA, 0xC8, + 0x51, 0xAE, 0x01, 0xAA, 0xC6, 0x8D, 0x62, 0xF8, + 0x66, 0x47, 0x26, 0x60 +}; + +static const ec_test_case ecdsa_secp521r1_test_case = { + .name = "ECDSA-SHA512/secp521r1", + .ec_str_p = &secp521r1_str_params, + .priv_key = ecdsa_secp521r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_secp521r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_secp521r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_secp521r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_secp521r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP256R1 +#define ECDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + +/* ECDSA Brainpoolp256r1 test vectors */ + +static int ecdsa_nn_random_brainpoolp256r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp256r1 signature + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_brainpoolp256r1_test_vectors_priv_key[] = { + 0x00, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecdsa_brainpoolp256r1_test_vectors_expected_sig[] = { + 0xa3, 0xfa, 0x53, 0x9a, 0xc2, 0xcf, 0xfb, 0xd5, + 0xc5, 0xad, 0xb6, 0x64, 0x8c, 0xb3, 0xb5, 0xe3, + 0x6a, 0x08, 0x7d, 0xcc, 0xd5, 0xda, 0xae, 0x8a, + 0x05, 0x87, 0xac, 0x37, 0x88, 0x78, 0x79, 0xb5, + 0xa7, 0xff, 0x72, 0xa9, 0xd8, 0x5c, 0x6e, 0xdd, + 0x48, 0x56, 0x2e, 0x8c, 0xd8, 0xf7, 0x6d, 0xab, + 0xe3, 0xdb, 0xc3, 0x96, 0x05, 0x69, 0xdf, 0x5d, + 0x13, 0xf9, 0x83, 0x5c, 0xf4, 0xca, 0x72, 0x3b +}; + +static const ec_test_case ecdsa_brainpoolp256r1_test_case = { + .name = "ECDSA-SHA256/brainpoolp256r1", + .ec_str_p = &brainpoolp256r1_str_params, + .priv_key = ecdsa_brainpoolp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_brainpoolp256r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_brainpoolp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_brainpoolp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_brainpoolp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_BRAINPOOLP384R1 +#define ECDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + +/* ECDSA Brainpoolp384r1 test vectors */ + +static int ecdsa_nn_random_brainpoolp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp384r1 signature + */ + const u8 k_buf[] = { + 0x87, 0x77, 0x2f, 0x94, 0x81, 0x26, 0xe2, 0x38, + 0x04, 0xec, 0x30, 0x71, 0x34, 0x94, 0x74, 0x84, + 0x2c, 0x21, 0x08, 0x6b, 0xf2, 0x91, 0xfb, 0x33, + 0x02, 0xc2, 0x54, 0x82, 0x6c, 0x14, 0xc0, 0xa8, + 0x5d, 0x66, 0x03, 0x0b, 0xe9, 0x0b, 0xfe, 0x51, + 0xd4, 0x53, 0x0a, 0x55, 0xfd, 0x61, 0x51, 0x21 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_brainpoolp384r1_test_vectors_priv_key[] = { + 0x22, 0xde, 0x1b, 0x4e, 0x46, 0xdf, 0x58, 0x37, + 0xe0, 0x08, 0xa2, 0x67, 0x7a, 0xc6, 0x25, 0x6a, + 0xf3, 0x0e, 0xd1, 0xd9, 0x58, 0xe8, 0xa4, 0xee, + 0xd5, 0x02, 0x0a, 0xef, 0xbb, 0xf7, 0x90, 0x6e, + 0x35, 0x99, 0x43, 0xda, 0x81, 0xcc, 0x37, 0xdf, + 0xcf, 0x03, 0x83, 0x64, 0xf3, 0x96, 0x13, 0x5a +}; + +static const u8 ecdsa_brainpoolp384r1_test_vectors_expected_sig[] = { + 0x84, 0xa4, 0xe3, 0xa5, 0xdb, 0x1a, 0x93, 0x1f, + 0x77, 0x3e, 0x55, 0xfb, 0xa3, 0x69, 0xc3, 0x6d, + 0x21, 0x92, 0xb4, 0x7d, 0xf8, 0x5d, 0x05, 0x20, + 0x80, 0x23, 0xdb, 0xaa, 0x15, 0x5f, 0xfe, 0xcc, + 0xf9, 0xc0, 0x8f, 0xf1, 0xba, 0x79, 0xe0, 0x13, + 0x1e, 0xb4, 0x2c, 0x13, 0xa8, 0x17, 0x99, 0xd6, + + 0x06, 0x9e, 0x3e, 0x95, 0x40, 0x80, 0xba, 0xef, + 0xfe, 0x3b, 0x73, 0xb1, 0xb9, 0x35, 0xa5, 0x60, + 0x27, 0x21, 0xa1, 0xd0, 0x0e, 0xe1, 0x12, 0xc0, + 0x86, 0x0b, 0xfc, 0xea, 0x93, 0x37, 0x33, 0xca, + 0x48, 0xd3, 0xae, 0xd8, 0xf7, 0x02, 0xdc, 0x86, + 0x2b, 0x18, 0x2b, 0x12, 0x8c, 0x8f, 0x3a, 0x4c, +}; + +static const ec_test_case ecdsa_brainpoolp384r1_test_case = { + .name = "ECDSA-SHA384/brainpoolp384r1", + .ec_str_p = &brainpoolp384r1_str_params, + .priv_key = ecdsa_brainpoolp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_brainpoolp384r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_brainpoolp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_brainpoolp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_brainpoolp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_BRAINPOOLP512R1 +#define ECDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + +/* ECDSA Brainpoolp512r1 test vectors */ + +static int ecdsa_nn_random_brainpoolp512r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp512r1 signature + */ + const u8 k_buf[] = { + 0x00, 0xC1, 0xC2, 0xB3, 0x05, 0x41, 0x9F, 0x5A, + 0x41, 0x34, 0x4D, 0x7E, 0x43, 0x59, 0x93, 0x3D, + 0x73, 0x40, 0x96, 0xF5, 0x56, 0x19, 0x7A, 0x9B, + 0x24, 0x43, 0x42, 0xB8, 0xB6, 0x2F, 0x46, 0xF9, + 0x37, 0x37, 0x78, 0xF9, 0xDE, 0x6B, 0x64, 0x97, + 0xB1, 0xEF, 0x82, 0x5F, 0xF2, 0x4F, 0x42, 0xF9, + 0xB4, 0xA4, 0xBD, 0x73, 0x82, 0xCF, 0xC3, 0x37, + 0x8A, 0x54, 0x0B, 0x1B, 0x7F, 0x0C, 0x1B, 0x95 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_brainpoolp512r1_test_vectors_priv_key[] = { + 0x01, 0xA3, 0x40, 0x94, 0x51, 0xDC, 0xAB, 0x0A, + 0x0E, 0xAD, 0x45, 0x49, 0x51, 0x12, 0xA3, 0xD8, + 0x13, 0xC1, 0x7B, 0xFD, 0x34, 0xBD, 0xF8, 0xC1, + 0x20, 0x9D, 0x7D, 0xF5, 0x84, 0x91, 0x20, 0x59, + 0x77, 0x79, 0x06, 0x0A, 0x7F, 0xF9, 0xD7, 0x04, + 0xAD, 0xF7, 0x8B, 0x57, 0x0F, 0xFA, 0xD6, 0xF0, + 0x62, 0xE9, 0x5C, 0x7E, 0x0C, 0x5D, 0x54, 0x81, + 0xC5, 0xB1, 0x53, 0xB4, 0x8B, 0x37, 0x5F, 0xA1 +}; + +static const u8 ecdsa_brainpoolp512r1_test_vectors_expected_sig[] = { + 0x34, 0x83, 0xdd, 0x62, 0x64, 0xab, 0x50, 0xc3, + 0x7c, 0x01, 0x89, 0x96, 0xf2, 0x18, 0x3f, 0x31, + 0x19, 0xb4, 0xd5, 0x8a, 0x71, 0xba, 0x96, 0xee, + 0x4f, 0x1d, 0x69, 0x0d, 0x06, 0xff, 0x04, 0xe7, + 0x62, 0xc3, 0x7c, 0x87, 0xac, 0xcb, 0x1b, 0xcb, + 0xc6, 0xe1, 0x50, 0x57, 0x7f, 0xd9, 0xa5, 0xd5, + 0xfc, 0x64, 0xc9, 0xaa, 0x21, 0x2f, 0x43, 0xac, + 0x36, 0xeb, 0xaa, 0xb1, 0x10, 0x5b, 0xe0, 0x37, + 0xa9, 0x70, 0xb3, 0xd3, 0x80, 0x1d, 0x51, 0x3d, + 0x38, 0x9d, 0x9c, 0x80, 0x76, 0xd9, 0x99, 0x6f, + 0xad, 0x0f, 0xc7, 0xf8, 0x67, 0x40, 0xc2, 0x28, + 0x1c, 0xe3, 0xfb, 0xae, 0x71, 0x82, 0xd3, 0xe8, + 0x5c, 0xb2, 0x24, 0xec, 0x88, 0xb5, 0x81, 0x2a, + 0xb1, 0x15, 0x32, 0xfd, 0x01, 0x7c, 0x94, 0xed, + 0xd7, 0x8c, 0xa6, 0x32, 0x1e, 0x24, 0x94, 0xa7, + 0x38, 0xd0, 0xea, 0xc8, 0x34, 0x05, 0xb9, 0x9b +}; + +static const ec_test_case ecdsa_brainpoolp512r1_test_case = { + .name = "ECDSA-SHA512/brainpoolp512r1", + .ec_str_p = &brainpoolp512r1_str_params, + .priv_key = ecdsa_brainpoolp512r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_brainpoolp512r1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_brainpoolp512r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_brainpoolp512r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_brainpoolp512r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_FRP256V1 +#define ECDSA_SHA256_FRP256V1_SELF_TEST + +/* ECDSA frp256v1 test vectors */ + +static int ecdsa_nn_random_frp256v1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for frp256v1 signature + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecdsa_frp256v1_test_vectors_priv_key[] = { + 0x00, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecdsa_frp256v1_test_vectors_expected_sig[] = { + 0x22, 0xb1, 0xd0, 0x0d, 0xc8, 0x28, 0xa5, 0xcb, + 0xa2, 0x64, 0x31, 0x9f, 0x05, 0x93, 0x3a, 0xc8, + 0xed, 0xe6, 0x32, 0x3d, 0x69, 0xd0, 0x2b, 0x31, + 0x4e, 0x10, 0xca, 0xa5, 0xf1, 0x3b, 0x29, 0x96, + 0xbd, 0xef, 0x27, 0xe6, 0x3c, 0x16, 0xee, 0x46, + 0xf8, 0x14, 0x22, 0x9d, 0x3c, 0xf2, 0x3f, 0x08, + 0xc7, 0x96, 0x26, 0x13, 0x55, 0xe7, 0xd4, 0x4c, + 0x9d, 0xd9, 0xd6, 0xba, 0x08, 0x57, 0x1f, 0xd8 +}; + +static const ec_test_case ecdsa_frp256v1_test_case = { + .name = "ECDSA-SHA256/frp256v1", + .ec_str_p = &frp256v1_str_params, + .priv_key = ecdsa_frp256v1_test_vectors_priv_key, + .priv_key_len = sizeof(ecdsa_frp256v1_test_vectors_priv_key), + .nn_random = ecdsa_nn_random_frp256v1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECDSA, + .exp_sig = ecdsa_frp256v1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecdsa_frp256v1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_FRP256V1 */ +#endif /* WITH_HASH_SHA256 */ +#endif /* WITH_SIG_ECDSA */ + +/******************************************************************* + ************** ECKDSA tests *************************************** + *******************************************************************/ + +#ifdef WITH_SIG_ECKCDSA +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP224R1 +#define ECKCDSA_SHA224_SECP224R1_SELF_TEST + +/* ECKCDSA secp224r1 test vectors */ + +static int eckcdsa_nn_random_iso14888_3_secp224r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x76, 0xA0, 0xAF, 0xC1, 0x86, 0x46, 0xD1, 0xB6, + 0x20, 0xA0, 0x79, 0xFB, 0x22, 0x38, 0x65, 0xA7, + 0xBC, 0xB4, 0x47, 0xF3, 0xC0, 0x3A, 0x35, 0xD8, + 0x78, 0xEA, 0x4C, 0xDA + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_secp224r1_test_vectors_priv_key[] = { + 0x56, 0x2A, 0x6F, 0x64, 0xE1, 0x62, 0xFF, 0xCB, + 0x51, 0xCD, 0x47, 0x07, 0x77, 0x4A, 0xE3, 0x66, + 0x81, 0xB6, 0xCE, 0xF2, 0x05, 0xFE, 0x5D, 0x43, + 0x91, 0x29, 0x56, 0xA2 +}; + +static const u8 eckcdsa_secp224r1_test_vectors_expected_sig[] = { + 0xEE, 0xA5, 0x8C, 0x91, 0xE0, 0xCD, 0xCE, 0xB5, + 0x79, 0x9B, 0x00, 0xD2, 0x41, 0x2D, 0x92, 0x8F, + 0xDD, 0x23, 0x12, 0x2A, 0x1C, 0x2B, 0xDF, 0x43, + 0xC2, 0xF8, 0xDA, 0xFA, 0xAE, 0xBA, 0xB5, 0x3C, + 0x7A, 0x44, 0xA8, 0xB2, 0x2F, 0x35, 0xFD, 0xB9, + 0xDE, 0x26, 0x5F, 0x23, 0xB8, 0x9F, 0x65, 0xA6, + 0x9A, 0x8B, 0x7B, 0xD4, 0x06, 0x19, 0x11, 0xA6 +}; + +static const ec_test_case eckcdsa_secp224r1_test_case = { + .name = "ECKCDSA-SHA224/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = eckcdsa_secp224r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_secp224r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_iso14888_3_secp224r1_test_vector, + .hash_type = SHA224, + .msg = "This is a sample message for EC-KCDSA implementation validation.", + .msglen = 64, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_secp224r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_secp224r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP224R1 +#define ECKCDSA_SHA256_SECP224R1_SELF_TEST + +/* ECKCDSA secp224r1 w/ SHA-256 test vectors (specific for truncation test) */ + +static int eckcdsa_nn_random_iso14888_3_secp224r1_sha256_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0xEE, 0xC7, 0x9D, 0x8D, 0x46, 0x48, 0xDF, 0x3A, + 0x83, 0x2A, 0x66, 0xE3, 0x77, 0x55, 0x37, 0xE0, + 0x00, 0xCC, 0x9B, 0x95, 0x7E, 0x13, 0x19, 0xC5, + 0xDB, 0x9D, 0xD4, 0xF7 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_secp224r1_sha256_test_vectors_priv_key[] = { + 0x61, 0x58, 0x58, 0x27, 0x44, 0x9D, 0xBC, 0x0E, + 0xC1, 0x61, 0xB2, 0xCF, 0x85, 0x75, 0xC9, 0xDF, + 0x14, 0x9F, 0x41, 0xDD, 0x02, 0x89, 0xBE, 0x4F, + 0xF1, 0x10, 0x77, 0x3D +}; + +static const u8 eckcdsa_secp224r1_sha256_test_vectors_expected_sig[] = { + 0x64, 0xB4, 0x9E, 0x97, 0x7E, 0x65, 0x34, 0xF8, + 0x77, 0xCB, 0x68, 0xA3, 0x80, 0x6F, 0x6A, 0x98, + 0x93, 0x11, 0xCE, 0xAA, 0x8A, 0x64, 0xA0, 0x55, + 0x80, 0x77, 0xC0, 0x4B, + + 0xAF, 0xF2, 0x3D, 0x40, 0xB1, 0x77, 0x95, 0x11, + 0x51, 0xBE, 0x32, 0xF6, 0x56, 0x1B, 0x1B, 0x73, + 0x9E, 0x3E, 0x8F, 0x82, 0x2C, 0xC5, 0x2D, 0x4C, + 0xB3, 0x90, 0x9A, 0x93 +}; + +static const ec_test_case eckcdsa_secp224r1_sha256_test_case = { + .name = "ECKCDSA-SHA256/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = eckcdsa_secp224r1_sha256_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_secp224r1_sha256_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_iso14888_3_secp224r1_sha256_test_vector, + .hash_type = SHA256, + .msg = "This is a sample message for EC-KCDSA implementation validation.", + .msglen = 64, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_secp224r1_sha256_test_vectors_expected_sig, + .exp_siglen = + sizeof(eckcdsa_secp224r1_sha256_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define ECKCDSA_SHA256_SECP256R1_SELF_TEST + +/* ECKCDSA secp256r1 test vectors */ + +static int eckcdsa_nn_random_iso14888_3_secp256r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x71, 0xB8, 0x8F, 0x39, 0x89, 0x16, 0xDA, 0x9C, + 0x90, 0xF5, 0x55, 0xF1, 0xB5, 0x73, 0x2B, 0x7D, + 0xC6, 0x36, 0xB4, 0x9C, 0x63, 0x81, 0x50, 0xBA, + 0xC1, 0x1B, 0xF0, 0x5C, 0xFE, 0x16, 0x59, 0x6A + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_secp256r1_test_vectors_priv_key[] = { + 0x90, 0x51, 0xA2, 0x75, 0xAA, 0x4D, 0x98, 0x43, + 0x9E, 0xDD, 0xED, 0x13, 0xFA, 0x1C, 0x6C, 0xBB, + 0xCC, 0xE7, 0x75, 0xD8, 0xCC, 0x94, 0x33, 0xDE, + 0xE6, 0x9C, 0x59, 0x84, 0x8B, 0x35, 0x94, 0xDF +}; + +static const u8 eckcdsa_secp256r1_test_vectors_expected_sig[] = { + 0x0e, 0xdd, 0xf6, 0x80, 0x60, 0x12, 0x66, 0xee, + 0x1d, 0xa8, 0x3e, 0x55, 0xa6, 0xd9, 0x44, 0x5f, + 0xc7, 0x81, 0xda, 0xeb, 0x14, 0xc7, 0x65, 0xe7, + 0xe5, 0xd0, 0xcd, 0xba, 0xf1, 0xf1, 0x4a, 0x68, + 0x9b, 0x33, 0x34, 0x57, 0x66, 0x1c, 0x7c, 0xf7, + 0x41, 0xbd, 0xdb, 0xc0, 0x83, 0x55, 0x53, 0xdf, + 0xbb, 0x37, 0xee, 0x74, 0xf5, 0x3d, 0xb6, 0x99, + 0xe0, 0xa1, 0x77, 0x80, 0xc7, 0xb6, 0xf1, 0xd0 +}; + +static const ec_test_case eckcdsa_secp256r1_test_case = { + .name = "ECKCDSA-SHA256/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = eckcdsa_secp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_secp256r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_iso14888_3_secp256r1_test_vector, + .hash_type = SHA256, + .msg = "This is a sample message for EC-KCDSA implementation validation.", + .msglen = 64, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_secp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_secp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define ECKCDSA_SHA384_SECP384R1_SELF_TEST + +/* ECKCDSA secp384r1 test vectors */ + +static int eckcdsa_nn_random_secp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x08, 0x16, 0x2e, 0xf8, 0x24, 0xd2, 0xd5, 0x11, + 0x4e, 0x08, 0x61, 0xf3, 0x93, 0xb4, 0x6f, 0xb6, + 0x02, 0xa4, 0x95, 0xa2, 0xca, 0x17, 0x7f, 0x47, + 0xda, 0x4e, 0x6f, 0x2d, 0x23, 0xa1, 0x85, 0xc5, + 0xb8, 0x8f, 0x1b, 0x7e, 0x2c, 0xba, 0x8d, 0x77, + 0x37, 0x16, 0x09, 0x3a, 0xf5, 0x97, 0x9a, 0x7e + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_secp384r1_test_vectors_priv_key[] = { + 0x4f, 0xdb, 0xf2, 0xe7, 0x4e, 0x56, 0x81, 0x4e, + 0x4c, 0x2f, 0x40, 0x87, 0x90, 0x9c, 0xe9, 0xc4, + 0x73, 0x1b, 0xff, 0x06, 0x1a, 0x78, 0x82, 0x73, + 0x84, 0x1b, 0xf5, 0x68, 0xce, 0x63, 0x21, 0x3e, + 0x47, 0x04, 0x04, 0xea, 0x3e, 0xb6, 0x78, 0xc5, + 0x00, 0xba, 0x37, 0x92, 0xf2, 0x4a, 0x7a, 0x51 +}; + +static const u8 eckcdsa_secp384r1_test_vectors_expected_sig[] = { + + 0xd0, 0x37, 0x26, 0x47, 0x44, 0xe3, 0x8a, 0x38, + 0xca, 0xcc, 0xdc, 0x8f, 0xcb, 0x08, 0xd8, 0xcb, + 0x52, 0x18, 0x7d, 0x38, 0x3c, 0xc0, 0xb6, 0x29, + 0xf6, 0x27, 0x71, 0xd9, 0x3f, 0x5a, 0xfc, 0xd3, + 0xc1, 0x44, 0xc1, 0x53, 0xef, 0x06, 0xd9, 0x9a, + 0xc9, 0x20, 0x58, 0x81, 0xde, 0x03, 0xd1, 0x71, + 0xf1, 0xff, 0xc1, 0x43, 0xb9, 0x4e, 0x44, 0xdc, + 0xec, 0xd1, 0x61, 0xfd, 0xc5, 0x27, 0x0a, 0x32, + 0x71, 0x3e, 0x59, 0x38, 0xfb, 0x35, 0x60, 0x0e, + 0xdd, 0xd0, 0x0c, 0x63, 0x89, 0xfb, 0x33, 0xb0, + 0x3e, 0x77, 0xd2, 0xf7, 0x69, 0x4a, 0x04, 0x08, + 0x5a, 0xf9, 0x85, 0x31, 0xdf, 0xe6, 0xf1, 0x73 +}; + +static const ec_test_case eckcdsa_secp384r1_test_case = { + .name = "ECKCDSA-SHA384/secp384r1", + .ec_str_p = &secp384r1_str_params, + .priv_key = eckcdsa_secp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_secp384r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_secp384r1_test_vector, + .hash_type = SHA384, + .msg = "This is a sample message for EC-KCDSA implementation validation.", + .msglen = 64, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_secp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_secp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP256R1 +#define ECKCDSA_SHA512_SECP256R1_SELF_TEST + +/* + * ECKCDSA secp256r1 test vector using SHA512. This test vector is intended + * to test truncation (left shift) steps in signature and verification + * code when the output size of the hash function is larger than the + * bit size of q (order of the group generated by the base point). + */ + +static int eckcdsa_nn_random_secp256r1_sha512_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_secp256r1_sha512_test_vectors_priv_key[] = { + 0xDC, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 eckcdsa_secp256r1_sha512_test_vectors_expected_sig[] = { + 0x70, 0x02, 0x1d, 0x6d, 0x5a, 0x5e, 0x99, 0x59, + 0x43, 0x18, 0xa3, 0xba, 0x8d, 0x27, 0xa5, 0x39, + 0xa5, 0x73, 0x76, 0x80, 0x73, 0xc8, 0x4d, 0xa0, + 0xdb, 0xcc, 0xf9, 0x24, 0x9a, 0xfe, 0x78, 0x54, + + 0xb6, 0x97, 0x28, 0xe1, 0x7b, 0x9e, 0x85, 0xb0, + 0x30, 0x05, 0x8f, 0x28, 0x54, 0xbf, 0x34, 0xd1, + 0xdd, 0x1d, 0xf6, 0x7a, 0x02, 0x64, 0x23, 0x76, + 0x9e, 0xb4, 0xfd, 0x0f, 0x4c, 0x2e, 0x15, 0x6b +}; + +static const ec_test_case eckcdsa_secp256r1_sha512_test_case = { + .name = "ECKCDSA-SHA512/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = eckcdsa_secp256r1_sha512_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_secp256r1_sha512_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_secp256r1_sha512_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_secp256r1_sha512_test_vectors_expected_sig, + .exp_siglen = + sizeof(eckcdsa_secp256r1_sha512_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define ECKCDSA_SHA512_SECP521R1_SELF_TEST + +/* ECKCDSA secp521r1 test vectors */ + +static int eckcdsa_nn_random_secp521r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x01, 0xb6, 0xfa, 0xf4, 0x5f, 0xb8, 0x6f, 0x57, + 0x9c, 0x4b, 0x54, 0xae, 0xc7, 0xa7, 0xf2, 0x95, + 0x6e, 0x4d, 0x93, 0x94, 0xb3, 0x62, 0x82, 0x0a, + 0xa5, 0x3f, 0x1b, 0x6c, 0x07, 0x3b, 0xbe, 0xc0, + 0x24, 0x33, 0x14, 0xdb, 0x11, 0xb6, 0x20, 0x21, + 0x35, 0x50, 0x20, 0xe8, 0x05, 0xad, 0x8e, 0x6d, + 0x0e, 0xa2, 0x7c, 0x04, 0x35, 0x9a, 0xd3, 0xf8, + 0x44, 0xd6, 0x5b, 0xbb, 0x73, 0xb7, 0x91, 0xd5, + 0x9a, 0x1c + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_secp521r1_test_vectors_priv_key[] = { + 0x01, 0x65, 0xe1, 0xf1, 0xf2, 0xe7, 0xae, 0x6b, + 0x50, 0x2a, 0x19, 0x4e, 0xf0, 0x3a, 0xd0, 0x50, + 0xe3, 0xa5, 0xae, 0x31, 0xfc, 0xb4, 0xf7, 0x0d, + 0x58, 0xf5, 0xc6, 0xdf, 0x28, 0x66, 0x71, 0x7f, + 0x44, 0x09, 0xe7, 0x78, 0x02, 0x4d, 0xe5, 0x2b, + 0xef, 0xc9, 0x6d, 0xb9, 0xfb, 0xba, 0x21, 0x30, + 0x6d, 0x12, 0x5a, 0x27, 0xcf, 0xcd, 0xce, 0x91, + 0x00, 0x09, 0x79, 0x63, 0xbf, 0x0c, 0x40, 0xe6, + 0x96, 0xdc +}; + +static const u8 eckcdsa_secp521r1_test_vectors_expected_sig[] = { + 0x90, 0x52, 0xbb, 0xc4, 0xdf, 0xe8, 0x80, 0xfb, + 0x25, 0xcb, 0xa7, 0xa7, 0x47, 0xa0, 0xd0, 0xe9, + 0x0e, 0x10, 0x63, 0x5b, 0xe1, 0xc2, 0x03, 0xc0, + 0x5e, 0x6d, 0x1c, 0x7d, 0x3d, 0x07, 0x1c, 0xe0, + 0x5a, 0xd7, 0xd5, 0x1c, 0x38, 0xe6, 0xa5, 0x7a, + 0x85, 0x58, 0x01, 0x79, 0xb0, 0x32, 0x2e, 0x66, + 0xdc, 0x95, 0x7f, 0xe6, 0xd3, 0xf3, 0xa3, 0x0a, + 0x05, 0x37, 0xfb, 0xf0, 0xd1, 0x24, 0xb4, 0x49, + 0x01, 0x36, 0x43, 0x43, 0xdf, 0xd8, 0x52, 0x64, + 0x15, 0xe0, 0x25, 0x79, 0xd5, 0xe1, 0x11, 0xee, + 0x5a, 0x8e, 0x50, 0xf3, 0x41, 0x90, 0x3d, 0x5f, + 0x28, 0xa0, 0x78, 0xac, 0x17, 0x82, 0xfe, 0x7d, + 0xbf, 0xf7, 0xd8, 0xcc, 0x3f, 0x51, 0x17, 0x76, + 0x59, 0x37, 0xd4, 0x92, 0xc3, 0x6a, 0x00, 0xb3, + 0x0b, 0x70, 0xb1, 0xdb, 0xd3, 0x95, 0x34, 0x02, + 0x2a, 0xa6, 0x50, 0x7a, 0xfd, 0xe6, 0x15, 0xbe, + 0xec, 0xba +}; + +static const ec_test_case eckcdsa_secp521r1_test_case = { + .name = "ECKCDSA-SHA512/secp521r1", + .ec_str_p = &secp521r1_str_params, + .priv_key = eckcdsa_secp521r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_secp521r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_secp521r1_test_vector, + .hash_type = SHA512, + .msg = "This is a sample message for EC-KCDSA implementation validation.", + .msglen = 64, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_secp521r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_secp521r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP256R1 +#define ECKCDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + +/* ECKCDSA brainpoolp256r1 test vectors */ + +static int eckcdsa_nn_random_brainpoolp256r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x09, 0x8a, 0x5b, 0x7c, 0xfa, 0x31, 0x7b, 0x79, + 0x6a, 0xf4, 0x46, 0xc4, 0x0e, 0x3e, 0xb5, 0x28, + 0x79, 0x03, 0x42, 0x2c, 0x56, 0x62, 0x49, 0x78, + 0xd9, 0x02, 0xc5, 0x9b, 0x7a, 0x92, 0xfe, 0x9b + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_brainpoolp256r1_test_vectors_priv_key[] = { + 0xa1, 0x45, 0x67, 0x88, 0x20, 0x4e, 0x69, 0xba, + 0xf3, 0x84, 0x88, 0xca, 0xe7, 0x77, 0x63, 0xca, + 0xde, 0xe5, 0xd0, 0xd9, 0x1a, 0xa0, 0xe5, 0xe6, + 0x0d, 0x19, 0xb0, 0x0d, 0x3a, 0x67, 0xed, 0x48 +}; + +static const u8 eckcdsa_brainpoolp256r1_test_vectors_expected_sig[] = { + 0xec, 0xc8, 0x2e, 0x85, 0x66, 0x90, 0x05, 0xaf, + 0x07, 0x7c, 0x67, 0xde, 0xba, 0xea, 0x8e, 0xbb, + 0x33, 0x26, 0x14, 0xe6, 0x61, 0xef, 0xc7, 0xff, + 0xd1, 0xf4, 0x52, 0xe1, 0xc4, 0x42, 0x23, 0xcd, + + 0x2f, 0x53, 0xb0, 0x9d, 0xdf, 0x97, 0xa8, 0x22, + 0x42, 0x55, 0x29, 0x65, 0xe1, 0xa2, 0x09, 0x27, + 0x8b, 0xe1, 0x4d, 0xde, 0x16, 0xfd, 0x54, 0xbc, + 0x16, 0xf1, 0xf0, 0x9d, 0x28, 0xe7, 0xfd, 0x11, +}; + +static const ec_test_case eckcdsa_brainpoolp256r1_test_case = { + .name = "ECKCDSA-SHA256/brainpoolp256r1", + .ec_str_p = &brainpoolp256r1_str_params, + .priv_key = eckcdsa_brainpoolp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_brainpoolp256r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_brainpoolp256r1_test_vector, + .hash_type = SHA256, + .msg = "brainpoolP256r1", + .msglen = 15, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_brainpoolp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_brainpoolp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_BRAINPOOLP384R1 +#define ECKCDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + +/* ECKCDSA brainpoolp384r1 test vectors */ + +static int eckcdsa_nn_random_brainpoolp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x07, 0x0f, 0x21, 0xec, 0xa6, 0xef, 0x53, 0xd8, + 0x81, 0x75, 0x33, 0xe8, 0x9c, 0xb6, 0xb7, 0x4f, + 0xb8, 0x2f, 0x4c, 0x23, 0x00, 0x80, 0x8c, 0xab, + 0x19, 0x9e, 0x6f, 0xfe, 0x96, 0xe6, 0x1d, 0x29, + 0x22, 0x7d, 0x76, 0x43, 0x3c, 0x34, 0x33, 0xc3, + 0x4d, 0x18, 0x5a, 0x8f, 0x01, 0x21, 0x38, 0x5b + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_brainpoolp384r1_test_vectors_priv_key[] = { + 0x21, 0x24, 0x1d, 0x99, 0x52, 0xcb, 0x23, 0x67, + 0x21, 0xcd, 0x02, 0xd4, 0xd5, 0xe0, 0xfd, 0xbe, + 0x22, 0xd7, 0xab, 0x69, 0xaf, 0xc1, 0x22, 0x12, + 0x16, 0xc6, 0x09, 0x96, 0x05, 0x14, 0xec, 0x3b, + 0xe6, 0x5f, 0x52, 0x73, 0xdd, 0x06, 0x9f, 0xdf, + 0x63, 0x7e, 0xd9, 0x5c, 0x6c, 0xe5, 0x4f, 0x08 +}; + +static const u8 eckcdsa_brainpoolp384r1_test_vectors_expected_sig[] = { + 0xe4, 0x9a, 0x76, 0x4e, 0xeb, 0x13, 0x1e, 0xa1, + 0xba, 0x0c, 0xef, 0xa5, 0xd6, 0x79, 0xa1, 0xf9, + 0x63, 0x5b, 0x93, 0x41, 0xa6, 0xb1, 0x3c, 0x40, + 0xbb, 0xd5, 0x5c, 0x38, 0x20, 0xe5, 0x09, 0xfa, + 0x15, 0x8c, 0x5a, 0x1a, 0xf1, 0xb9, 0x29, 0x26, + 0x8b, 0xe1, 0x06, 0xbe, 0xb2, 0x08, 0xc4, 0xc9, + + 0x3b, 0xa4, 0x36, 0xa6, 0x8e, 0x1e, 0xe9, 0x25, + 0x97, 0xdd, 0x12, 0x5e, 0x6e, 0xfb, 0xe5, 0x28, + 0x18, 0x47, 0x41, 0x75, 0xdb, 0x2f, 0x47, 0xa5, + 0xd0, 0xd0, 0x2b, 0xd7, 0xc0, 0x81, 0x43, 0xf1, + 0xc3, 0xe9, 0xbf, 0x2f, 0xf1, 0x4c, 0x18, 0x46, + 0xff, 0xbc, 0xdf, 0x39, 0x93, 0x88, 0x59, 0x6b +}; + +static const ec_test_case eckcdsa_brainpoolp384r1_test_case = { + .name = "ECKCDSA-SHA384/brainpoolp384r1", + .ec_str_p = &brainpoolp384r1_str_params, + .priv_key = eckcdsa_brainpoolp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_brainpoolp384r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_brainpoolp384r1_test_vector, + .hash_type = SHA384, + .msg = "brainpoolP384r1", + .msglen = 15, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_brainpoolp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_brainpoolp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_BRAINPOOLP512R1 +#define ECKCDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + +/* ECKCDSA brainpoolp512r1 test vectors */ + +static int eckcdsa_nn_random_brainpoolp512r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x46, 0x3d, 0x92, 0x92, 0x3f, 0xe3, 0x37, 0xd8, + 0xe5, 0xfc, 0x5a, 0xbe, 0x76, 0xf6, 0x3d, 0x9e, + 0xec, 0x9a, 0xaf, 0x57, 0x48, 0x7d, 0xef, 0xe1, + 0xfa, 0xe1, 0x76, 0x5d, 0x7e, 0xf7, 0x2f, 0x5d, + 0x10, 0x64, 0xe1, 0xbe, 0x65, 0x68, 0x5c, 0x08, + 0x40, 0x59, 0x7e, 0x98, 0x79, 0x75, 0x1b, 0xda, + 0xc8, 0x42, 0xcf, 0xbb, 0xb0, 0x8e, 0x5c, 0x42, + 0x8d, 0x1c, 0xa6, 0xe7, 0x63, 0x4b, 0x37, 0xea + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_brainpoolp512r1_test_vectors_priv_key[] = { + 0xa9, 0xeb, 0x22, 0xd4, 0x1a, 0x8a, 0xa1, 0x0d, + 0xdf, 0xec, 0xd3, 0x1f, 0x93, 0xc8, 0xaf, 0x9a, + 0x38, 0x7f, 0xf5, 0x29, 0xb9, 0x81, 0xeb, 0x8e, + 0x3a, 0x73, 0xbe, 0x90, 0x70, 0x51, 0x99, 0x50, + 0xc2, 0x8d, 0x81, 0xce, 0x31, 0x84, 0x79, 0x67, + 0x18, 0xbf, 0xe4, 0x39, 0x17, 0x8c, 0x38, 0xe9, + 0xa8, 0x10, 0x99, 0xf7, 0xd2, 0x60, 0x7c, 0xbf, + 0x53, 0xa7, 0x12, 0xc8, 0xb8, 0xb3, 0x35, 0xcb +}; + +static const u8 eckcdsa_brainpoolp512r1_test_vectors_expected_sig[] = { + 0xc0, 0x0d, 0x74, 0xbe, 0x19, 0x03, 0x45, 0xe3, + 0xd9, 0x73, 0x90, 0xfc, 0xcf, 0xa1, 0x27, 0x1d, + 0x5e, 0x8d, 0x8f, 0xfb, 0x15, 0x31, 0x49, 0xf6, + 0xa7, 0xc5, 0x69, 0xa8, 0x78, 0x63, 0x7b, 0xf5, + 0xcd, 0x02, 0x78, 0xf9, 0x2b, 0xce, 0x8c, 0x64, + 0x4c, 0xd3, 0xd4, 0x25, 0xc9, 0x50, 0x14, 0x34, + 0xfe, 0xdb, 0x1e, 0xc8, 0xf6, 0x55, 0x60, 0x79, + 0xce, 0x51, 0xf8, 0xa4, 0xcc, 0x2e, 0xa9, 0xe3, + + 0x45, 0xd8, 0xcf, 0x97, 0x8c, 0x15, 0x58, 0xbd, + 0x11, 0xba, 0xbe, 0x41, 0x97, 0xe1, 0x06, 0x19, + 0x0d, 0x60, 0x58, 0x53, 0x5e, 0xbd, 0xf4, 0x00, + 0x06, 0xbd, 0xf2, 0x2b, 0x11, 0x2c, 0x87, 0x7e, + 0xe4, 0x4c, 0xa2, 0xdc, 0xf9, 0x0a, 0xfe, 0x21, + 0x04, 0xbd, 0xf6, 0xd8, 0xb9, 0x07, 0xaa, 0x4c, + 0x75, 0xbd, 0x2e, 0x55, 0x65, 0xa3, 0xca, 0x8f, + 0xae, 0xb1, 0x10, 0x7e, 0x85, 0x39, 0xe2, 0x1f +}; + +static const ec_test_case eckcdsa_brainpoolp512r1_test_case = { + .name = "ECKCDSA-SHA512/brainpoolp512r1", + .ec_str_p = &brainpoolp512r1_str_params, + .priv_key = eckcdsa_brainpoolp512r1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_brainpoolp512r1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_brainpoolp512r1_test_vector, + .hash_type = SHA512, + .msg = "brainpoolP512r1", + .msglen = 15, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_brainpoolp512r1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_brainpoolp512r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_FRP256V1 +#define ECKCDSA_SHA256_FRP256V1_SELF_TEST + +/* ECKCDSA frp256v1 test vectors */ + +static int eckcdsa_nn_random_frp256v1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x71, 0xB8, 0x8F, 0x39, 0x89, 0x16, 0xDA, 0x9C, + 0x90, 0xF5, 0x55, 0xF1, 0xB5, 0x73, 0x2B, 0x7D, + 0xC6, 0x36, 0xB4, 0x9C, 0x63, 0x81, 0x50, 0xBA, + 0xC1, 0x1B, 0xF0, 0x5C, 0xFE, 0x16, 0x59, 0x6A + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 eckcdsa_frp256v1_test_vectors_priv_key[] = { + 0x90, 0x51, 0xA2, 0x75, 0xAA, 0x4D, 0x98, 0x43, + 0x9E, 0xDD, 0xED, 0x13, 0xFA, 0x1C, 0x6C, 0xBB, + 0xCC, 0xE7, 0x75, 0xD8, 0xCC, 0x94, 0x33, 0xDE, + 0xE6, 0x9C, 0x59, 0x84, 0x8B, 0x35, 0x94, 0xDF +}; + +static const u8 eckcdsa_frp25v1_test_vectors_expected_sig[] = { + 0x37, 0x58, 0xd0, 0x27, 0x18, 0x11, 0x16, 0xe9, + 0x2b, 0xaf, 0x70, 0xbf, 0x16, 0x48, 0x64, 0x34, + 0x9e, 0x75, 0x60, 0x3e, 0x89, 0xa4, 0xc6, 0xc1, + 0xbd, 0xb8, 0x01, 0x52, 0x2d, 0xca, 0x20, 0x31, + 0x2d, 0x20, 0x6f, 0x3e, 0x70, 0x5e, 0x5e, 0xfc, + 0x32, 0xd4, 0x3c, 0xb0, 0xe1, 0xf7, 0xb2, 0xc7, + 0x0c, 0xc2, 0xb0, 0x26, 0x93, 0xcb, 0x69, 0xb7, + 0x29, 0xb7, 0x97, 0x5c, 0x67, 0xd6, 0xa3, 0xe6 +}; + +static const ec_test_case eckcdsa_frp256v1_test_case = { + .name = "ECKCDSA-SHA256/frp256v1", + .ec_str_p = &frp256v1_str_params, + .priv_key = eckcdsa_frp256v1_test_vectors_priv_key, + .priv_key_len = sizeof(eckcdsa_frp256v1_test_vectors_priv_key), + .nn_random = eckcdsa_nn_random_frp256v1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECKCDSA, + .exp_sig = eckcdsa_frp25v1_test_vectors_expected_sig, + .exp_siglen = sizeof(eckcdsa_frp25v1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_FRP256V1 */ +#endif /* WITH_HASH_SHA256 */ +#endif /* WITH_SIG_ECKCDSA */ + +/******************************************************************* + ************** ECSDSA tests *************************************** + *******************************************************************/ + +#ifdef WITH_SIG_ECSDSA +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP224R1 +#define ECSDSA_SHA224_SECP224R1_SELF_TEST + +/* ECSDSA secp224r1 test vectors */ + +static int ecsdsa_nn_random_secp224r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x89, 0x99, 0x80, 0x6e, 0x0f, 0x68, 0x10, 0x9d, + 0x31, 0x56, 0x1b, 0x41, 0xbf, 0x1a, 0x56, 0x6e, + 0xfb, 0x13, 0x2c, 0x3e, 0xd7, 0x1e, 0x29, 0x5e, + 0x5d, 0x9b, 0x2e, 0x68 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_secp224r1_test_vectors_priv_key[] = { + 0xda, 0x71, 0x2d, 0x9b, 0x6f, 0xdb, 0xf7, 0x8f, + 0x92, 0x51, 0xcc, 0x3a, 0xe4, 0xc7, 0xce, 0xd3, + 0x87, 0x1a, 0x19, 0x9e, 0xf5, 0x91, 0xd1, 0x23, + 0xa9, 0x36, 0x44, 0x57 +}; + +static const u8 ecsdsa_secp224r1_test_vectors_expected_sig[] = { + 0x41, 0x69, 0xd3, 0xec, 0x93, 0x7b, 0x15, 0xce, + 0x15, 0x34, 0x53, 0x8d, 0x37, 0xe8, 0xc5, 0x7e, + 0x12, 0x1f, 0xd5, 0x9f, 0x90, 0x1b, 0x5e, 0xf8, + 0xd0, 0x0d, 0x62, 0x04, + 0xf0, 0xfe, 0xbe, 0x28, 0x36, 0xb0, 0x87, 0xec, + 0x44, 0x98, 0x94, 0x7a, 0x6c, 0x4c, 0x8a, 0xea, + 0x5a, 0x5a, 0x19, 0x8a, 0xce, 0x95, 0x2f, 0x75, + 0x07, 0x37, 0x23, 0x1b +}; + +static const ec_test_case ecsdsa_secp224r1_test_case = { + .name = "ECSDSA-SHA224/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = ecsdsa_secp224r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_secp224r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_secp224r1_test_vector, + .hash_type = SHA224, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_secp224r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_secp224r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define ECSDSA_SHA256_SECP256R1_SELF_TEST + +/* ECSDSA secp256r1 test vectors */ + +static int ecsdsa_nn_random_iso14888_3_secp256r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0xDE, 0x7E, 0x0E, 0x5E, 0x66, 0x3F, 0x24, 0x18, + 0x34, 0x14, 0xB7, 0xC7, 0x2F, 0x24, 0x54, 0x6B, + 0x81, 0xE9, 0xE5, 0xF4, 0x10, 0xBE, 0xBF, 0x26, + 0xF3, 0xCA, 0x5F, 0xA8, 0x2F, 0x51, 0x92, 0xC8 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_secp256r1_test_vectors_priv_key[] = { + 0x52, 0x02, 0xA3, 0xD8, 0xAC, 0xAF, 0x69, 0x09, + 0xD1, 0x2C, 0x9A, 0x77, 0x4C, 0xD8, 0x86, 0xF9, + 0xFB, 0xA6, 0x11, 0x37, 0xFF, 0xD3, 0xE8, 0xE7, + 0x6A, 0xED, 0x36, 0x3F, 0xB4, 0x7A, 0xC4, 0x92 +}; + +static const u8 ecsdsa_secp256r1_test_vectors_expected_sig[] = { + 0x5A, 0x79, 0xA0, 0xAA, 0x9B, 0x24, 0x1E, 0x38, + 0x1A, 0x59, 0x4B, 0x22, 0x05, 0x54, 0xD0, 0x96, + 0xA5, 0xF0, 0x9F, 0xA6, 0x28, 0xAD, 0x9A, 0x33, + 0xC3, 0xCE, 0x43, 0x93, 0xAD, 0xE1, 0xDE, 0xF7, + 0x5C, 0x0E, 0xB7, 0x8B, 0x67, 0xA5, 0x13, 0xC3, + 0xE5, 0x3B, 0x26, 0x19, 0xF9, 0x68, 0x55, 0xE2, + 0x91, 0xD5, 0x14, 0x1C, 0x7C, 0xD0, 0x91, 0x5E, + 0x1D, 0x04, 0xB3, 0x47, 0x45, 0x7C, 0x96, 0x01 +}; + +static const ec_test_case ecsdsa_secp256r1_test_case = { + .name = "ECSDSA-SHA256/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecsdsa_secp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_secp256r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_iso14888_3_secp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_secp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_secp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define ECSDSA_SHA384_SECP384R1_SELF_TEST + +/* ECSDSA secp384r1 test vectors */ + +static int ecsdsa_nn_random_iso14888_3_secp384r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x8A, 0x29, 0xE7, 0x72, 0x35, 0x7B, 0xBA, 0x6F, + 0x5C, 0x9E, 0xA7, 0x65, 0xD5, 0x08, 0x2B, 0x9B, + 0xC7, 0xA7, 0x4C, 0x33, 0xE9, 0xD9, 0x4D, 0x49, + 0xFB, 0x2C, 0x9D, 0x3B, 0x52, 0x3A, 0x82, 0x16, + 0x96, 0x82, 0xEC, 0xF1, 0x6F, 0x1D, 0x06, 0x26, + 0x90, 0x42, 0xF3, 0xAF, 0x04, 0x4B, 0x4D, 0xE8 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_secp384r1_test_vectors_priv_key[] = { + 0x7E, 0x49, 0x14, 0xFE, 0x4B, 0x61, 0x70, 0x89, + 0xF9, 0xFE, 0x80, 0xAD, 0x91, 0x3D, 0x55, 0x30, + 0xEE, 0xC4, 0xF3, 0x0B, 0xCA, 0x1A, 0xD6, 0x6E, + 0x7B, 0x5A, 0xEA, 0xCF, 0x29, 0xD2, 0xF5, 0x67, + 0xD9, 0xA8, 0xF4, 0xA4, 0x55, 0x2A, 0x1A, 0x1A, + 0xF3, 0xE0, 0xB6, 0xD0, 0xA4, 0x9D, 0xFC, 0xC8 +}; + +static const u8 ecsdsa_secp384r1_test_vectors_expected_sig[] = { + 0xF9, 0x07, 0x55, 0x3B, 0xB5, 0xC7, 0xDE, 0x02, + 0x9A, 0x2A, 0x56, 0x70, 0x78, 0xDF, 0xF9, 0xB8, + 0x03, 0xEC, 0x64, 0x96, 0x0D, 0x75, 0xBA, 0x73, + 0xA8, 0x55, 0x90, 0xAC, 0xC0, 0xAC, 0x44, 0x79, + 0xAC, 0x52, 0xE5, 0x1D, 0x56, 0x91, 0xFC, 0xB0, + 0x69, 0xDC, 0x5C, 0xD2, 0x4E, 0x0B, 0xCE, 0xC7, + 0x0B, 0x9D, 0x66, 0xD5, 0xDE, 0x70, 0xFA, 0xA8, + 0xB3, 0x56, 0x34, 0xA3, 0x7B, 0x33, 0xC2, 0xC4, + 0x60, 0xB8, 0xDC, 0x0B, 0xD4, 0xC8, 0x74, 0x5B, + 0xB8, 0x4D, 0xC1, 0x5C, 0xA8, 0x57, 0x0B, 0x07, + 0x92, 0x58, 0xF9, 0x77, 0xDA, 0x8B, 0x40, 0x61, + 0xF3, 0xDA, 0x6E, 0xBD, 0x7C, 0x42, 0x9A, 0x89 +}; + +static const ec_test_case ecsdsa_secp384r1_test_case = { + .name = "ECSDSA-SHA384/secp384r1", + .ec_str_p = &secp384r1_str_params, + .priv_key = ecsdsa_secp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_secp384r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_iso14888_3_secp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_secp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_secp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define ECSDSA_SHA512_SECP521R1_SELF_TEST + +/* ECSDSA secp521r1 test vectors */ + +static int ecsdsa_nn_random_secp521r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp521r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x01, 0xad, 0xb3, 0xfd, 0xcf, 0x67, 0x5e, 0x25, + 0x3c, 0xfe, 0xac, 0x56, 0x1f, 0x21, 0x67, 0x67, + 0xa4, 0xba, 0xa7, 0x90, 0xac, 0x68, 0x1c, 0x74, + 0xf3, 0xdd, 0x83, 0x33, 0x5c, 0x9b, 0x37, 0x41, + 0xc8, 0x88, 0x77, 0x77, 0x33, 0xf7, 0xc7, 0xea, + 0x15, 0xd4, 0x5f, 0xa0, 0x7f, 0xba, 0x60, 0x39, + 0x4b, 0x3e, 0x16, 0xcd, 0xce, 0x1b, 0x02, 0xef, + 0xbc, 0x59, 0xba, 0xb0, 0xbd, 0x77, 0xa6, 0x50, + 0x07, 0xd4 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_secp521r1_test_vectors_priv_key[] = { + 0x01, 0x82, 0x1f, 0x88, 0xbd, 0xe6, 0x75, 0x1c, + 0x06, 0x29, 0xfb, 0x75, 0x3b, 0xb1, 0xc7, 0xec, + 0x07, 0xbe, 0x64, 0x82, 0x88, 0x4a, 0x77, 0x4e, + 0x18, 0x3e, 0x1d, 0xcf, 0x95, 0x49, 0x4f, 0x81, + 0x7e, 0x71, 0x5b, 0xfe, 0x1d, 0xe3, 0x17, 0x24, + 0xc2, 0x93, 0x24, 0x67, 0xb1, 0x39, 0x90, 0x02, + 0x4c, 0x25, 0xc5, 0x54, 0x13, 0xbc, 0xe1, 0x24, + 0xa5, 0x35, 0x83, 0xf7, 0x3a, 0x86, 0xed, 0xc4, + 0x39, 0xb0 +}; + +static const u8 ecsdsa_secp521r1_test_vectors_expected_sig[] = { + 0xe7, 0x3a, 0xe5, 0x72, 0x50, 0x29, 0x9b, 0x19, + 0x26, 0xbc, 0x79, 0x8a, 0x84, 0x6b, 0xd3, 0xbb, + 0x29, 0x15, 0x9d, 0x0d, 0xcb, 0x50, 0x87, 0xbb, + 0xd1, 0x72, 0xbd, 0x4a, 0x4b, 0x42, 0x3f, 0xb8, + 0xf1, 0x8b, 0xc2, 0x30, 0x1c, 0xa3, 0x1b, 0x94, + 0xef, 0x1a, 0xa0, 0x87, 0x71, 0x81, 0x0b, 0x37, + 0xa5, 0xd5, 0x4f, 0x0c, 0xde, 0xf1, 0xb1, 0xee, + 0xb0, 0x7b, 0x6c, 0xca, 0x35, 0xcf, 0xb2, 0x04, + 0x00, 0xba, 0xbf, 0x93, 0x78, 0xea, 0x91, 0x23, + 0x57, 0x49, 0xe1, 0x05, 0x52, 0x92, 0x2a, 0xff, + 0xb3, 0x32, 0x51, 0x6f, 0x59, 0xd9, 0xe1, 0x78, + 0x61, 0xfe, 0xb5, 0x43, 0x37, 0x40, 0xf3, 0xb8, + 0x18, 0x8c, 0x95, 0x2e, 0xd6, 0xb3, 0xea, 0x1a, + 0x37, 0x48, 0xfb, 0xa5, 0x77, 0xba, 0x69, 0xe2, + 0x12, 0x6b, 0x2c, 0xc9, 0x4e, 0x4c, 0x59, 0xe7, + 0x86, 0xe2, 0xfa, 0xdd, 0x5b, 0x79, 0xab, 0x15, + 0x5c, 0xf6 +}; + +static const ec_test_case ecsdsa_secp521r1_test_case = { + .name = "ECSDSA-SHA512/secp521r1", + .ec_str_p = &secp521r1_str_params, + .priv_key = ecsdsa_secp521r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_secp521r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_secp521r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_secp521r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_secp521r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP256R1 +#define ECSDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + +/* ECSDSA Brainpoolp256r1 test vectors */ + +static int ecsdsa_nn_random_brainpoolp256r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp256r1 signature + */ + const u8 k_buf[] = { + 0x29, 0xa5, 0xc2, 0x64, 0xba, 0x76, 0x37, 0x9d, + 0x86, 0x49, 0x8a, 0x64, 0x16, 0xfc, 0x7f, 0xba, + 0x9d, 0x4f, 0x62, 0x75, 0x64, 0xc6, 0x98, 0xab, + 0x4d, 0x95, 0xd1, 0x90, 0x6c, 0x8c, 0x61, 0xe4 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_brainpoolp256r1_test_vectors_priv_key[] = { + 0xa9, 0x35, 0x71, 0x33, 0x4a, 0xc3, 0x2b, 0x50, + 0x26, 0x8d, 0xdc, 0xa0, 0x95, 0x23, 0x89, 0x3a, + 0x8f, 0x29, 0x89, 0xa9, 0x4f, 0x9f, 0x44, 0xa9, + 0x1b, 0x77, 0x43, 0xf7, 0xe1, 0x45, 0xae, 0xb7 +}; + +static const u8 ecsdsa_brainpoolp256r1_test_vectors_expected_sig[] = { + 0x0e, 0x7a, 0xf5, 0x0b, 0xf4, 0xe0, 0x8b, 0xf8, + 0x51, 0x00, 0x44, 0x24, 0xee, 0x9d, 0x65, 0x02, + 0xfc, 0xd1, 0x16, 0x4e, 0xe3, 0xd9, 0x9a, 0x00, + 0xa8, 0x4f, 0xd5, 0xdb, 0x81, 0x48, 0x00, 0xeb, + 0x64, 0x7a, 0x24, 0xe6, 0x07, 0xb6, 0xfc, 0x09, + 0xd8, 0x8b, 0x1b, 0x57, 0x2c, 0xfc, 0x4c, 0xe2, + 0x9e, 0x25, 0xfa, 0xe1, 0x43, 0x1f, 0x0d, 0xfa, + 0x58, 0x6b, 0xd1, 0x6d, 0xee, 0xff, 0x92, 0xb6 +}; + +static const ec_test_case ecsdsa_brainpoolp256r1_test_case = { + .name = "ECSDSA-SHA256/brainpoolp256r1", + .ec_str_p = &brainpoolp256r1_str_params, + .priv_key = ecsdsa_brainpoolp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_brainpoolp256r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_brainpoolp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_brainpoolp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_brainpoolp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_BRAINPOOLP384R1 +#define ECSDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + +/* ECSDSA Brainpoolp384r1 test vectors */ + +static int ecsdsa_nn_random_brainpoolp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp384r1 signature + */ + const u8 k_buf[] = { + 0x4f, 0x71, 0xb2, 0x3e, 0x7f, 0xbb, 0x47, 0xa8, + 0x8d, 0xaf, 0xdb, 0xea, 0xdc, 0x78, 0x14, 0x50, + 0xa9, 0x3b, 0xc8, 0x4b, 0x5b, 0xd4, 0xd5, 0x38, + 0x6b, 0x1e, 0x19, 0x5f, 0x5c, 0x29, 0xe7, 0x9f, + 0x9e, 0xfe, 0x66, 0x1d, 0x02, 0x7b, 0xef, 0xbb, + 0xb1, 0xca, 0x1d, 0xa2, 0xfe, 0xa2, 0xab, 0x75 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_brainpoolp384r1_test_vectors_priv_key[] = { + 0x71, 0xa8, 0x85, 0x7e, 0x32, 0x14, 0x5f, 0x02, + 0x90, 0x02, 0xbe, 0xdc, 0x68, 0x77, 0x78, 0x1d, + 0xd9, 0x34, 0x6d, 0x5f, 0x4f, 0x7d, 0x0f, 0x96, + 0xe3, 0x1d, 0x6f, 0x41, 0x42, 0x36, 0x37, 0x1d, + 0x42, 0x2e, 0x97, 0xa9, 0x21, 0xc5, 0x04, 0x9c, + 0xb4, 0xbf, 0x49, 0x46, 0x8a, 0x99, 0x0a, 0x16 +}; + +static const u8 ecsdsa_brainpoolp384r1_test_vectors_expected_sig[] = { + 0x97, 0x27, 0x3d, 0x1b, 0x4a, 0x56, 0xe5, 0x55, + 0x77, 0xe0, 0x9c, 0xd4, 0xe0, 0x78, 0x2f, 0x6e, + 0x8d, 0x8b, 0x2e, 0xe0, 0xde, 0xef, 0x84, 0x44, + 0xd1, 0x3a, 0xc3, 0x5c, 0xe5, 0xf3, 0x5f, 0xae, + 0x49, 0xc2, 0x6a, 0x31, 0x26, 0xb4, 0x44, 0x88, + 0xc1, 0x4e, 0x3e, 0xcf, 0x78, 0x4c, 0xd8, 0xe5, + + 0x1b, 0x71, 0x79, 0x37, 0x89, 0x3a, 0x77, 0x90, + 0xa8, 0x80, 0x01, 0x19, 0x87, 0xb6, 0x47, 0x1e, + 0x4b, 0xb4, 0x56, 0xc9, 0x08, 0x79, 0x32, 0x29, + 0x2f, 0x28, 0x35, 0x09, 0xcb, 0x39, 0x6c, 0x68, + 0x13, 0x84, 0xcc, 0xb0, 0xc3, 0x97, 0x72, 0x86, + 0x4c, 0xb5, 0x18, 0x5e, 0xaa, 0x59, 0xf4, 0x3d +}; + +static const ec_test_case ecsdsa_brainpoolp384r1_test_case = { + .name = "ECSDSA-SHA384/brainpoolp384r1", + .ec_str_p = &brainpoolp384r1_str_params, + .priv_key = ecsdsa_brainpoolp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_brainpoolp384r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_brainpoolp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_brainpoolp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_brainpoolp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_BRAINPOOLP512R1 +#define ECSDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + +/* ECSDSA Brainpoolp512r1 test vectors */ + +static int ecsdsa_nn_random_brainpoolp512r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp512r1 signature + */ + const u8 k_buf[] = { + 0x65, 0xe7, 0x6d, 0xe3, 0x2e, 0x77, 0x21, 0x67, + 0x3a, 0x99, 0x1d, 0x95, 0xda, 0x6f, 0x7e, 0x0a, + 0x5a, 0x72, 0x72, 0xf8, 0xde, 0x4a, 0xae, 0xfe, + 0xd9, 0x7b, 0x49, 0x07, 0xda, 0x0e, 0xe8, 0x4d, + 0x66, 0xdd, 0x51, 0x8e, 0x6e, 0x75, 0xd3, 0x28, + 0x54, 0x08, 0xaf, 0x82, 0xeb, 0xf2, 0x5a, 0x5e, + 0x3c, 0x14, 0x9b, 0x6e, 0xba, 0xba, 0x2b, 0x7b, + 0xdf, 0x6d, 0x26, 0x0e, 0x3a, 0xea, 0xae, 0xbc + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_brainpoolp512r1_test_vectors_priv_key[] = { + 0x20, 0xe6, 0xe2, 0x08, 0x67, 0xf7, 0x29, 0x0c, + 0x04, 0xfc, 0x00, 0x7e, 0x77, 0x34, 0x9e, 0x30, + 0x09, 0xaa, 0xc0, 0x3d, 0xfa, 0xf0, 0xd2, 0x56, + 0x70, 0x86, 0x73, 0x86, 0xca, 0xce, 0xdb, 0xcd, + 0x55, 0x3d, 0xd0, 0x1b, 0x86, 0xdd, 0x50, 0x17, + 0xe1, 0xdc, 0x45, 0xa1, 0xa5, 0xae, 0xd3, 0x80, + 0x72, 0xef, 0x04, 0xe7, 0x9f, 0x36, 0xc3, 0xe7, + 0x84, 0xd5, 0xdf, 0x80, 0x39, 0xc2, 0x5d, 0x18 +}; + +static const u8 ecsdsa_brainpoolp512r1_test_vectors_expected_sig[] = { + 0x7f, 0xf5, 0x12, 0x0a, 0xaa, 0x8f, 0x7a, 0x31, + 0xe9, 0xaf, 0x44, 0x4b, 0xdf, 0x97, 0x1e, 0x80, + 0x0c, 0xb8, 0x3c, 0x4c, 0x45, 0x39, 0xa1, 0xa6, + 0x51, 0x53, 0xc2, 0x32, 0x48, 0x62, 0x7a, 0x12, + 0xf5, 0xf3, 0xb1, 0xd6, 0xdf, 0x07, 0x78, 0x14, + 0xa0, 0x53, 0xcb, 0x6e, 0xef, 0x07, 0x20, 0xc3, + 0x9f, 0xf2, 0x34, 0x20, 0x31, 0x21, 0x5e, 0xea, + 0x55, 0xd7, 0xff, 0xd6, 0x4f, 0x18, 0xc2, 0x64, + + 0x45, 0xdb, 0xd2, 0xae, 0xf5, 0x0c, 0x14, 0x8b, + 0xad, 0xaa, 0x2d, 0x1e, 0x04, 0x06, 0xaf, 0xb9, + 0x1f, 0x17, 0x20, 0x3f, 0x29, 0x8c, 0xc6, 0x63, + 0xb6, 0xf9, 0xc4, 0x56, 0x4f, 0xa7, 0x76, 0x31, + 0xe5, 0x46, 0x6b, 0x86, 0x80, 0x59, 0xdf, 0x01, + 0x27, 0x38, 0x0f, 0x17, 0x8c, 0x59, 0xcc, 0xad, + 0x8c, 0x63, 0xe4, 0xa6, 0x48, 0x84, 0x88, 0x95, + 0x0e, 0x6f, 0xa6, 0x2a, 0xbf, 0x4b, 0xff, 0x30 +}; + +static const ec_test_case ecsdsa_brainpoolp512r1_test_case = { + .name = "ECSDSA-SHA512/brainpoolp512r1", + .ec_str_p = &brainpoolp512r1_str_params, + .priv_key = ecsdsa_brainpoolp512r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_brainpoolp512r1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_brainpoolp512r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_brainpoolp512r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_brainpoolp512r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_FRP256V1 +#define ECSDSA_SHA256_FRP256V1_SELF_TEST + +/* ECSDSA frp256v1 test vectors */ + +static int ecsdsa_nn_random_frp256v1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for frp256v1 signature + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecsdsa_frp256v1_test_vectors_priv_key[] = { + 0x00, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecsdsa_frp256v1_test_vectors_expected_sig[] = { + 0x9e, 0x57, 0x81, 0x73, 0xf9, 0x7b, 0xbe, 0xb1, + 0xdc, 0xc4, 0x4f, 0xe6, 0xc1, 0x7a, 0x40, 0x9e, + 0x22, 0xad, 0x13, 0xa1, 0xa9, 0x69, 0x14, 0x62, + 0x0d, 0x08, 0x76, 0x0f, 0xe0, 0xd7, 0xc6, 0x75, + + 0x9b, 0x3a, 0xb9, 0xd5, 0xb6, 0x7f, 0xf2, 0xb9, + 0xaa, 0xe8, 0xc5, 0xed, 0xf9, 0x82, 0xd4, 0xf7, + 0x6d, 0x7c, 0x61, 0x36, 0x56, 0xe7, 0x73, 0xaa, + 0x1a, 0xab, 0xa6, 0x30, 0x90, 0x1d, 0x56, 0xa6, +}; + +static const ec_test_case ecsdsa_frp256v1_test_case = { + .name = "ECSDSA-SHA256/frp256v1", + .ec_str_p = &frp256v1_str_params, + .priv_key = ecsdsa_frp256v1_test_vectors_priv_key, + .priv_key_len = sizeof(ecsdsa_frp256v1_test_vectors_priv_key), + .nn_random = ecsdsa_nn_random_frp256v1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECSDSA, + .exp_sig = ecsdsa_frp256v1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecsdsa_frp256v1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_FRP256V1 */ +#endif /* WITH_HASH_SHA256 */ +#endif /* WITH_SIG_ECSDSA */ + +/******************************************************************* + ************** ECOSDSA tests ************************************** + *******************************************************************/ + +#ifdef WITH_SIG_ECOSDSA +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP224R1 +#define ECOSDSA_SHA224_SECP224R1_SELF_TEST + +/* ECOSDSA secp224r1 test vectors */ + +static int ecosdsa_nn_random_secp224r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0xc1, 0xbe, 0x08, 0xf7, 0xa6, 0xda, 0x95, 0xea, + 0xda, 0xc9, 0x2b, 0x7a, 0x8d, 0xfa, 0x4b, 0x8c, + 0x0b, 0x09, 0x9a, 0xf3, 0xa3, 0x0a, 0x23, 0xb5, + 0xa7, 0x6a, 0xa4, 0xc5 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_secp224r1_test_vectors_priv_key[] = { + 0xfd, 0x22, 0xee, 0x55, 0x5f, 0x4a, 0xb5, 0x40, + 0x1b, 0xbd, 0x53, 0x65, 0xec, 0x8a, 0xec, 0x37, + 0xf3, 0xb4, 0xcb, 0xe4, 0xeb, 0xdd, 0x55, 0x40, + 0xad, 0x92, 0x29, 0xf0 +}; + +static const u8 ecosdsa_secp224r1_test_vectors_expected_sig[] = { + 0x48, 0x33, 0x6d, 0x3d, 0x8d, 0xa5, 0x3b, 0x5d, + 0xff, 0xca, 0x3e, 0x36, 0x24, 0x7b, 0xeb, 0x07, + 0x0c, 0x32, 0x53, 0x21, 0xf3, 0x7e, 0xb3, 0xf7, + 0xe3, 0xb1, 0xaa, 0xb3, + 0x28, 0x39, 0xe8, 0x80, 0xbe, 0x1a, 0x2e, 0xd8, + 0x31, 0x4f, 0x85, 0x2d, 0xf6, 0x6b, 0x1a, 0xc0, + 0xb7, 0x22, 0x89, 0xa9, 0xf8, 0x70, 0xd5, 0x19, + 0xbb, 0x80, 0x11, 0x16 +}; + +static const ec_test_case ecosdsa_secp224r1_test_case = { + .name = "ECOSDSA-SHA224/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = ecosdsa_secp224r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_secp224r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_secp224r1_test_vector, + .hash_type = SHA224, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_secp224r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_secp224r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define ECOSDSA_SHA256_SECP256R1_SELF_TEST + +/* ECOSDSA secp256r1 test vectors */ + +static int ecosdsa_nn_random_iso14888_3_secp256r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0xDE, 0x7E, 0x0E, 0x5E, 0x66, 0x3F, 0x24, 0x18, + 0x34, 0x14, 0xB7, 0xC7, 0x2F, 0x24, 0x54, 0x6B, + 0x81, 0xE9, 0xE5, 0xF4, 0x10, 0xBE, 0xBF, 0x26, + 0xF3, 0xCA, 0x5F, 0xA8, 0x2F, 0x51, 0x92, 0xC8 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_secp256r1_test_vectors_priv_key[] = { + 0x52, 0x02, 0xA3, 0xD8, 0xAC, 0xAF, 0x69, 0x09, + 0xD1, 0x2C, 0x9A, 0x77, 0x4C, 0xD8, 0x86, 0xF9, + 0xFB, 0xA6, 0x11, 0x37, 0xFF, 0xD3, 0xE8, 0xE7, + 0x6A, 0xED, 0x36, 0x3F, 0xB4, 0x7A, 0xC4, 0x92 +}; + +static const u8 ecosdsa_secp256r1_test_vectors_expected_sig[] = { + 0xD7, 0xFB, 0x81, 0x35, 0xD8, 0xEA, 0x45, 0xE8, + 0xFB, 0x3C, 0x90, 0x59, 0xF1, 0x46, 0xE2, 0x63, + 0x0E, 0xF4, 0xBD, 0x51, 0xC4, 0x00, 0x6A, 0x92, + 0xED, 0xB4, 0xC8, 0xB0, 0x84, 0x99, 0x63, 0xFB, + 0xB4, 0x6D, 0x15, 0x25, 0x37, 0x9E, 0x02, 0xE2, + 0x32, 0xD9, 0x79, 0x28, 0x26, 0x5B, 0x72, 0x54, + 0xEA, 0x2E, 0xD9, 0x78, 0x13, 0x45, 0x43, 0x88, + 0xC1, 0xA0, 0x8F, 0x62, 0xDC, 0xCD, 0x70, 0xB3 +}; + +static const ec_test_case ecosdsa_secp256r1_test_case = { + .name = "ECOSDSA-SHA256/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecosdsa_secp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_secp256r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_iso14888_3_secp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_secp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_secp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define ECOSDSA_SHA384_SECP384R1_SELF_TEST + +/* ECOSDSA secp384r1 test vectors */ + +static int ecosdsa_nn_random_iso14888_3_secp384r1_test_vector(nn_t out, + nn_src_t q) + +{ + int ret, cmp; + const u8 k_buf[] = { + 0x8A, 0x29, 0xE7, 0x72, 0x35, 0x7B, 0xBA, 0x6F, + 0x5C, 0x9E, 0xA7, 0x65, 0xD5, 0x08, 0x2B, 0x9B, + 0xC7, 0xA7, 0x4C, 0x33, 0xE9, 0xD9, 0x4D, 0x49, + 0xFB, 0x2C, 0x9D, 0x3B, 0x52, 0x3A, 0x82, 0x16, + 0x96, 0x82, 0xEC, 0xF1, 0x6F, 0x1D, 0x06, 0x26, + 0x90, 0x42, 0xF3, 0xAF, 0x04, 0x4B, 0x4D, 0xE8 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_secp384r1_test_vectors_priv_key[] = { + 0x7E, 0x49, 0x14, 0xFE, 0x4B, 0x61, 0x70, 0x89, + 0xF9, 0xFE, 0x80, 0xAD, 0x91, 0x3D, 0x55, 0x30, + 0xEE, 0xC4, 0xF3, 0x0B, 0xCA, 0x1A, 0xD6, 0x6E, + 0x7B, 0x5A, 0xEA, 0xCF, 0x29, 0xD2, 0xF5, 0x67, + 0xD9, 0xA8, 0xF4, 0xA4, 0x55, 0x2A, 0x1A, 0x1A, + 0xF3, 0xE0, 0xB6, 0xD0, 0xA4, 0x9D, 0xFC, 0xC8 +}; + +static const u8 ecosdsa_secp384r1_test_vectors_expected_sig[] = { + 0x27, 0xD2, 0xF5, 0xB9, 0x62, 0xA3, 0xAC, 0xF6, + 0x39, 0x0A, 0x47, 0x18, 0xEA, 0x54, 0x0D, 0xA7, + 0x96, 0x12, 0xA6, 0x0E, 0xAA, 0x15, 0xBE, 0xBB, + 0x00, 0xB9, 0xE1, 0x66, 0x57, 0x83, 0xF7, 0xC7, + 0x91, 0xCC, 0xAC, 0x42, 0x2C, 0xEE, 0x81, 0x5A, + 0x9C, 0x5D, 0xA3, 0x67, 0x8A, 0xC8, 0xD1, 0xF0, + 0x22, 0xCC, 0x89, 0xCE, 0xB9, 0xE6, 0xBE, 0x84, + 0x15, 0xCC, 0x14, 0xB3, 0x99, 0xBC, 0x66, 0xE6, + 0xF3, 0xA2, 0x1E, 0x5B, 0xA3, 0x8E, 0x09, 0xA6, + 0xDE, 0x8D, 0xE6, 0x70, 0xA1, 0x45, 0xC0, 0xE4, + 0x74, 0xD5, 0xCC, 0x88, 0xBE, 0x88, 0x78, 0xF0, + 0x12, 0x3C, 0xC6, 0x62, 0x25, 0xA1, 0xBA, 0x12 +}; + +static const ec_test_case ecosdsa_secp384r1_test_case = { + .name = "ECOSDSA-SHA384/secp384r1", + .ec_str_p = &secp384r1_str_params, + .priv_key = ecosdsa_secp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_secp384r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_iso14888_3_secp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_secp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_secp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define ECOSDSA_SHA512_SECP521R1_SELF_TEST + +/* ECOSDSA secp521r1 test vectors */ + +static int ecosdsa_nn_random_secp521r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp521r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x01, 0x73, 0x03, 0x00, 0x16, 0x30, 0x79, 0x94, + 0x9b, 0xb6, 0xe3, 0x60, 0x3c, 0x96, 0xf6, 0xf0, + 0x90, 0x23, 0xa6, 0xf7, 0x48, 0xc5, 0xa6, 0xfc, + 0x41, 0xec, 0x39, 0xf5, 0x24, 0x04, 0x59, 0x59, + 0xa8, 0xfe, 0x4c, 0xc1, 0x9b, 0x01, 0x47, 0x5a, + 0xac, 0xc5, 0xf3, 0x92, 0xab, 0x50, 0x60, 0x1f, + 0x39, 0x8b, 0xc3, 0xb8, 0x01, 0x4a, 0x63, 0x91, + 0x1b, 0xce, 0x30, 0xe7, 0xcc, 0x0f, 0x3d, 0x82, + 0x3b, 0x05 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_secp521r1_test_vectors_priv_key[] = { + 0x01, 0x08, 0xb9, 0x4c, 0x21, 0x92, 0x06, 0xb8, + 0xd8, 0x92, 0x16, 0x90, 0xa5, 0x15, 0x76, 0xae, + 0x70, 0x3d, 0x46, 0x4b, 0x71, 0xbd, 0xf5, 0x68, + 0xf9, 0xf6, 0x70, 0x92, 0x95, 0x67, 0x85, 0x80, + 0x55, 0xb9, 0x16, 0xdb, 0xce, 0x5d, 0xb5, 0x6a, + 0x25, 0xb7, 0x91, 0x33, 0x25, 0xf5, 0x14, 0xf7, + 0x2a, 0x22, 0xbe, 0x4e, 0xfb, 0x4d, 0xb7, 0x9e, + 0x2f, 0x01, 0xb5, 0x71, 0xa9, 0x3f, 0x21, 0x79, + 0x82, 0xc5 +}; + +static const u8 ecosdsa_secp521r1_test_vectors_expected_sig[] = { + 0xbd, 0x54, 0xe8, 0xd7, 0x27, 0x1c, 0xcc, 0x1e, + 0x0a, 0xdd, 0xc3, 0x33, 0x8a, 0x99, 0xeb, 0x94, + 0x5e, 0x65, 0x40, 0x18, 0x05, 0x6f, 0xaf, 0x7e, + 0xc7, 0x6c, 0x0a, 0xa6, 0xb4, 0xd2, 0x62, 0x89, + 0x00, 0xe0, 0x5c, 0x05, 0x24, 0x95, 0xa0, 0x91, + 0x7d, 0x80, 0x85, 0x14, 0xd9, 0x1e, 0x41, 0x42, + 0xc5, 0xae, 0x53, 0x06, 0x24, 0x31, 0xe2, 0x31, + 0x05, 0x8d, 0xb5, 0x19, 0x2e, 0x35, 0x90, 0xe3, + + 0x00, 0x52, 0x7b, 0xab, 0x84, 0xc9, 0xaf, 0x15, + 0xcf, 0xa7, 0xd9, 0x25, 0x29, 0xdc, 0x15, 0xd2, + 0x17, 0x45, 0xee, 0x04, 0x88, 0x91, 0xf5, 0xe0, + 0x6a, 0x06, 0x65, 0xe5, 0xcb, 0x16, 0x2e, 0x62, + 0x2a, 0x0a, 0x62, 0xc3, 0x12, 0x23, 0xcc, 0x21, + 0x6d, 0x8f, 0xfe, 0xc3, 0x3a, 0xcd, 0xdd, 0xe5, + 0x0d, 0x58, 0xef, 0xe3, 0x87, 0x89, 0x3a, 0x5c, + 0xbc, 0xe2, 0xea, 0x07, 0x6e, 0x3b, 0x7c, 0xe7, + 0x95, 0x00, +}; + +static const ec_test_case ecosdsa_secp521r1_test_case = { + .name = "ECOSDSA-SHA512/secp521r1", + .ec_str_p = &secp521r1_str_params, + .priv_key = ecosdsa_secp521r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_secp521r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_secp521r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_secp521r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_secp521r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP256R1 +#define ECOSDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + +/* ECOSDSA Brainpoolp256r1 test vectors */ + +static int ecosdsa_nn_random_brainpoolp256r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp256r1 signature + */ + const u8 k_buf[] = { + 0x3f, 0x80, 0xde, 0x27, 0x3e, 0xef, 0xc9, 0x53, + 0xc9, 0x25, 0xab, 0x53, 0xdd, 0xba, 0xd4, 0xb3, + 0x23, 0x98, 0xb7, 0xcc, 0x39, 0xb1, 0xda, 0xe4, + 0xbe, 0x68, 0x37, 0xd4, 0xd9, 0x9e, 0xa0, 0x49 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_brainpoolp256r1_test_vectors_priv_key[] = { + 0xa8, 0x44, 0x22, 0x5a, 0xf8, 0xae, 0xb6, 0xa7, + 0x66, 0x10, 0x93, 0xe5, 0x44, 0xd8, 0x47, 0xa0, + 0x63, 0x82, 0x08, 0xcf, 0xc6, 0x4f, 0x6e, 0xa8, + 0x1c, 0xbb, 0x0d, 0xbb, 0xcf, 0x16, 0x4d, 0xa2 +}; + +static const u8 ecosdsa_brainpoolp256r1_test_vectors_expected_sig[] = { + 0xc1, 0x5a, 0x0e, 0xd2, 0x9c, 0x39, 0x3b, 0x04, + 0x14, 0xaa, 0x40, 0xe5, 0x1c, 0xe6, 0x45, 0x28, + 0x19, 0xa9, 0x7f, 0x66, 0x1b, 0x4f, 0x11, 0x50, + 0x13, 0x8f, 0xc4, 0xe6, 0x96, 0x47, 0xe1, 0xa4, + + 0x1c, 0x26, 0x9e, 0x5e, 0xd2, 0x9d, 0x38, 0x1a, + 0xc4, 0xa0, 0xed, 0x86, 0xe4, 0x73, 0x68, 0x46, + 0xa4, 0x34, 0x72, 0x6a, 0xb5, 0x36, 0x0d, 0x3a, + 0x7e, 0x2b, 0x1c, 0x44, 0x0a, 0x69, 0xfe, 0xde +}; + +static const ec_test_case ecosdsa_brainpoolp256r1_test_case = { + .name = "ECOSDSA-SHA256/brainpoolp256r1", + .ec_str_p = &brainpoolp256r1_str_params, + .priv_key = ecosdsa_brainpoolp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_brainpoolp256r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_brainpoolp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_brainpoolp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_brainpoolp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_BRAINPOOLP384R1 +#define ECOSDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + +/* ECOSDSA Brainpoolp384r1 test vectors */ + +static int ecosdsa_nn_random_brainpoolp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp384r1 signature + */ + const u8 k_buf[] = { + 0x4c, 0x0f, 0xa0, 0xfb, 0xd2, 0xec, 0x92, 0x0f, + 0x70, 0x32, 0xb2, 0xd5, 0xa4, 0xb0, 0xe5, 0xb0, + 0x88, 0xc1, 0x70, 0x6a, 0xe1, 0x4a, 0xc7, 0x49, + 0xc3, 0x14, 0x8a, 0x09, 0x9d, 0x3f, 0x0e, 0xde, + 0xe6, 0xf9, 0x73, 0x36, 0x76, 0x3b, 0xa7, 0x53, + 0x4c, 0xf5, 0x29, 0xa3, 0xd6, 0xe4, 0x60, 0x3e + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_brainpoolp384r1_test_vectors_priv_key[] = { + 0x84, 0x27, 0xc5, 0xc6, 0xb1, 0x95, 0x1a, 0x87, + 0x4a, 0x00, 0x02, 0xfc, 0xeb, 0x8b, 0x8f, 0x46, + 0x53, 0x2a, 0x82, 0xff, 0xac, 0x72, 0x78, 0x70, + 0x6a, 0x04, 0xe6, 0x25, 0x6b, 0x0f, 0xbd, 0x6e, + 0x10, 0xab, 0x74, 0x9d, 0xee, 0x3e, 0x02, 0x7d, + 0xc5, 0x2e, 0x3c, 0x55, 0x25, 0xc0, 0x1e, 0x7d +}; + +static const u8 ecosdsa_brainpoolp384r1_test_vectors_expected_sig[] = { + 0xf8, 0x8e, 0x7c, 0x39, 0xcf, 0x98, 0xa5, 0x7d, + 0xb1, 0x6f, 0x3b, 0xea, 0x31, 0x61, 0xd5, 0x8a, + 0x9d, 0x90, 0xfe, 0x4b, 0xa8, 0xc0, 0x71, 0x65, + 0x93, 0x63, 0x34, 0x99, 0x0b, 0x06, 0xaf, 0x5e, + 0x86, 0xb1, 0x10, 0x53, 0x39, 0xfd, 0xf1, 0x52, + 0xda, 0x28, 0x9f, 0x6b, 0x4c, 0xd4, 0x20, 0x43, + + 0x69, 0x4e, 0x23, 0x7e, 0xc4, 0x5a, 0x83, 0x22, + 0x61, 0x53, 0xfd, 0x08, 0xc7, 0x5e, 0xdc, 0x69, + 0xc0, 0x22, 0x3f, 0x59, 0x8b, 0xf1, 0x9e, 0x8d, + 0x07, 0xb0, 0xb2, 0x38, 0x8a, 0xe2, 0xb7, 0x79, + 0x46, 0xda, 0xa2, 0x39, 0x4d, 0x7a, 0xce, 0x38, + 0x2a, 0xc6, 0xbe, 0xda, 0x21, 0x67, 0x81, 0xbf +}; + +static const ec_test_case ecosdsa_brainpoolp384r1_test_case = { + .name = "ECOSDSA-SHA384/brainpoolp384r1", + .ec_str_p = &brainpoolp384r1_str_params, + .priv_key = ecosdsa_brainpoolp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_brainpoolp384r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_brainpoolp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_brainpoolp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_brainpoolp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_BRAINPOOLP512R1 +#define ECOSDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + +/* ECOSDSA Brainpoolp512r1 test vectors */ + +static int ecosdsa_nn_random_brainpoolp512r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp512r1 signature + */ + const u8 k_buf[] = { + 0x70, 0x82, 0xf3, 0x1a, 0xb1, 0x06, 0x2d, 0x5b, + 0xb8, 0x16, 0x87, 0xd5, 0x65, 0x34, 0x74, 0xc3, + 0x53, 0x23, 0x0a, 0xc0, 0x09, 0xde, 0xd1, 0x44, + 0xad, 0x47, 0x86, 0xda, 0x89, 0xbf, 0x33, 0x0e, + 0x34, 0xd2, 0x12, 0x40, 0x44, 0xa5, 0x8b, 0x08, + 0x5a, 0x7e, 0x70, 0xbc, 0xfd, 0xed, 0x72, 0x03, + 0x07, 0x66, 0xc5, 0x41, 0x49, 0x1a, 0xda, 0x73, + 0x34, 0x3e, 0x7d, 0xf9, 0x0f, 0x0a, 0x4e, 0x38 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_brainpoolp512r1_test_vectors_priv_key[] = { + 0x9d, 0xf5, 0xaa, 0xf5, 0xdb, 0xc9, 0x8d, 0x6b, + 0x55, 0xf2, 0xa0, 0x8c, 0xd7, 0xea, 0x7f, 0x7b, + 0x19, 0xdb, 0xc7, 0x8c, 0x28, 0x0d, 0x76, 0xd5, + 0xd1, 0xd2, 0x71, 0xf1, 0x73, 0xc3, 0xca, 0x1e, + 0xf8, 0xfa, 0x96, 0x87, 0x10, 0xd6, 0x14, 0x06, + 0xff, 0xce, 0x74, 0x89, 0x34, 0x27, 0x19, 0x57, + 0x5d, 0x8a, 0x9e, 0x3f, 0x0a, 0xcc, 0xf4, 0x53, + 0xfa, 0x51, 0x5a, 0x8d, 0xcd, 0x3f, 0x5a, 0xf6 +}; + +static const u8 ecosdsa_brainpoolp512r1_test_vectors_expected_sig[] = { + 0xb2, 0x08, 0xeb, 0xa4, 0xf6, 0x87, 0x2b, 0xd6, + 0xcd, 0xef, 0xad, 0x6e, 0x72, 0x50, 0xb0, 0xb1, + 0x43, 0xb1, 0x4d, 0xfd, 0xf6, 0x10, 0xe8, 0xb5, + 0x95, 0x60, 0xec, 0xe6, 0xf7, 0x03, 0x56, 0xf6, + 0xac, 0xc0, 0x69, 0x57, 0xb5, 0x31, 0x30, 0x60, + 0x0f, 0x58, 0x3f, 0x6a, 0x8d, 0xf8, 0x1d, 0x4b, + 0xb0, 0xe3, 0x05, 0xe8, 0xdb, 0x5a, 0xee, 0x7f, + 0x15, 0xdb, 0xa8, 0xac, 0xbc, 0x3e, 0xba, 0x5d, + + 0x79, 0xc7, 0xad, 0xc8, 0x4a, 0x09, 0xd2, 0x84, + 0x30, 0x9b, 0x09, 0xdc, 0xe3, 0x79, 0x69, 0x33, + 0x4b, 0xb5, 0x3e, 0x57, 0x4c, 0x57, 0x1f, 0xf7, + 0x41, 0x48, 0xeb, 0x27, 0xf9, 0xcc, 0xb9, 0x9c, + 0x23, 0xd7, 0xed, 0xd2, 0x7e, 0x46, 0xb6, 0xd9, + 0x1e, 0x59, 0xc3, 0xb5, 0x62, 0x66, 0x6a, 0x88, + 0xab, 0x3c, 0x66, 0x48, 0x96, 0x57, 0xbb, 0xd4, + 0xd7, 0x4c, 0xac, 0x91, 0x59, 0xfc, 0xb2, 0x08 +}; + +static const ec_test_case ecosdsa_brainpoolp512r1_test_case = { + .name = "ECOSDSA-SHA512/brainpoolp512r1", + .ec_str_p = &brainpoolp512r1_str_params, + .priv_key = ecosdsa_brainpoolp512r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_brainpoolp512r1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_brainpoolp512r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_brainpoolp512r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_brainpoolp512r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_FRP256V1 +#define ECOSDSA_SHA256_FRP256V1_SELF_TEST + +/* ECOSDSA frp256v1 test vectors */ + +static int ecosdsa_nn_random_frp256v1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for frp256v1 signature + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecosdsa_frp256v1_test_vectors_priv_key[] = { + 0x00, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecosdsa_frp256v1_test_vectors_expected_sig[] = { + 0xae, 0xc2, 0x3f, 0x82, 0x0f, 0x4c, 0x50, 0x80, + 0xf4, 0xcd, 0x15, 0xd1, 0xd4, 0x7d, 0x68, 0x51, + 0x5e, 0x98, 0xb2, 0x85, 0xe2, 0x6f, 0x6a, 0x08, + 0x61, 0x46, 0x4b, 0x7e, 0x2b, 0xe0, 0xa4, 0x61, + + 0xd7, 0xa4, 0x22, 0x5f, 0x29, 0x79, 0x8c, 0x78, + 0x97, 0x2f, 0x1b, 0xce, 0x6b, 0x35, 0x97, 0x7d, + 0x85, 0x9b, 0x7e, 0x22, 0x9b, 0xde, 0xa4, 0x19, + 0xc9, 0xbe, 0x26, 0x35, 0x9e, 0x54, 0xea, 0x14 +}; + +static const ec_test_case ecosdsa_frp256v1_test_case = { + .name = "ECOSDSA-SHA256/frp256v1", + .ec_str_p = &frp256v1_str_params, + .priv_key = ecosdsa_frp256v1_test_vectors_priv_key, + .priv_key_len = sizeof(ecosdsa_frp256v1_test_vectors_priv_key), + .nn_random = ecosdsa_nn_random_frp256v1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECOSDSA, + .exp_sig = ecosdsa_frp256v1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecosdsa_frp256v1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_FRP256V1 */ +#endif /* WITH_HASH_SHA256 */ +#endif /* WITH_SIG_ECOSDSA */ + +/******************************************************************* + ************** ECFSDSA tests ************************************** + *******************************************************************/ + +#ifdef WITH_SIG_ECFSDSA +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_SECP224R1 +#define ECFSDSA_SHA224_SECP224R1_SELF_TEST + +/* ECFSDSA secp224r1 test vectors */ + +static int ecfsdsa_nn_random_secp224r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x42, 0xcf, 0xfe, 0x41, 0xf5, 0x01, 0xb4, 0x99, + 0x45, 0xe3, 0xd1, 0x03, 0xe9, 0x00, 0x48, 0xb9, + 0x6f, 0x47, 0xee, 0xb3, 0xb7, 0x37, 0xdc, 0x6a, + 0x79, 0xc7, 0xa4, 0x2e + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_secp224r1_test_vectors_priv_key[] = { + 0xda, 0xd8, 0x0f, 0xfb, 0x64, 0x35, 0x6b, 0xd5, + 0x3b, 0x66, 0x3b, 0x6e, 0x20, 0xa8, 0x08, 0x94, + 0xb7, 0x93, 0x9a, 0xde, 0x21, 0xc7, 0x1e, 0xb8, + 0x09, 0xf7, 0xb5, 0x39 +}; + +static const u8 ecfsdsa_secp224r1_test_vectors_expected_sig[] = { + 0x55, 0x49, 0x93, 0x3b, 0xb2, 0x5d, 0x21, 0xc6, + 0x10, 0x84, 0xc1, 0xa4, 0x92, 0xed, 0x95, 0x30, + 0x0b, 0x50, 0x78, 0xd9, 0xa9, 0x5c, 0xac, 0x43, + 0xfd, 0xeb, 0x94, 0x9f, 0x32, 0xc2, 0xa1, 0xb1, + 0x67, 0x56, 0x3a, 0x6b, 0xe9, 0xdd, 0x77, 0x4e, + 0xa6, 0x5a, 0x29, 0xb1, 0x9f, 0xf3, 0xd8, 0x3b, + 0xdc, 0xa4, 0xf0, 0x3b, 0x7b, 0xc5, 0x27, 0x67, + + 0xb4, 0xe9, 0xf2, 0x03, 0x1a, 0x98, 0xbe, 0x55, + 0xf1, 0xa9, 0xb3, 0x8b, 0x23, 0x31, 0x98, 0x6c, + 0x3a, 0xfd, 0x97, 0x2a, 0xed, 0xcd, 0x80, 0x5a, + 0x3c, 0x6e, 0x3a, 0x8c +}; + +static const ec_test_case ecfsdsa_secp224r1_test_case = { + .name = "ECFSDSA-SHA224/secp224r1", + .ec_str_p = &secp224r1_str_params, + .priv_key = ecfsdsa_secp224r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_secp224r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_secp224r1_test_vector, + .hash_type = SHA224, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_secp224r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_secp224r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP224R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_SECP256R1 +#define ECFSDSA_SHA256_SECP256R1_SELF_TEST + +/* ECFSDSA secp256r1 test vectors */ + +static int ecfsdsa_nn_random_iso14888_3_secp256r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x89, 0x4D, 0xEA, 0xB4, 0x4D, 0x88, 0x45, 0x0F, + 0xE8, 0xDA, 0xC6, 0x63, 0xF0, 0xE5, 0x86, 0x50, + 0x31, 0xE8, 0x75, 0xBA, 0x22, 0x4C, 0x06, 0x01, + 0x3C, 0x53, 0xD0, 0xE3, 0x01, 0x09, 0xC2, 0x07 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_secp256r1_test_vectors_priv_key[] = { + 0xAC, 0xCA, 0x7F, 0x0D, 0xD3, 0xAC, 0x53, 0x5F, + 0x48, 0x9B, 0x34, 0x0F, 0x6B, 0xD7, 0xF5, 0x03, + 0x61, 0xB0, 0xEE, 0x09, 0x5A, 0xE6, 0xA2, 0x28, + 0x9A, 0x6A, 0xB3, 0x29, 0x23, 0x81, 0x23, 0xE5 +}; + +static const u8 ecfsdsa_secp256r1_test_vectors_expected_sig[] = { + 0xAF, 0x31, 0x2F, 0xBD, 0x77, 0x92, 0x12, 0x5C, + 0x5C, 0xDF, 0xBA, 0x69, 0xE6, 0xD3, 0x69, 0x90, + 0x0A, 0xCE, 0x9A, 0x70, 0xBA, 0x65, 0x3F, 0xFF, + 0xBD, 0x91, 0x40, 0xE0, 0x00, 0x79, 0xFA, 0xE8, + 0xB7, 0xCE, 0xC5, 0x70, 0x16, 0xA0, 0xB9, 0x7A, + 0xA0, 0x69, 0xD5, 0x4E, 0x0D, 0xA9, 0x5E, 0x45, + 0xFB, 0x50, 0xB6, 0x77, 0x1F, 0xB6, 0x9F, 0x53, + 0xFE, 0xF0, 0x0F, 0xC8, 0xB0, 0x0E, 0x1F, 0xEC, + 0x25, 0x84, 0x70, 0x40, 0x23, 0x04, 0xBC, 0x2D, + 0xB4, 0x4F, 0x3B, 0x2A, 0x20, 0xC0, 0x8F, 0xF2, + 0xA6, 0x4F, 0x56, 0x6B, 0xAA, 0x2E, 0xB7, 0xBF, + 0x37, 0xE1, 0x61, 0x9B, 0x6A, 0xE0, 0x98, 0x44 +}; + +static const ec_test_case ecfsdsa_secp256r1_test_case = { + .name = "ECFSDSA-SHA256/secp256r1", + .ec_str_p = &secp256r1_str_params, + .priv_key = ecfsdsa_secp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_secp256r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_iso14888_3_secp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_secp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_secp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_SECP384R1 +#define ECFSDSA_SHA384_SECP384R1_SELF_TEST + +/* ECFSDSA secp384r1 test vectors */ + +static int ecfsdsa_nn_random_iso14888_3_secp384r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x51, 0xC5, 0xB8, 0xB2, 0xE5, 0x9C, 0xF7, 0x8F, + 0x54, 0xE7, 0x7C, 0xDB, 0x0B, 0x2E, 0x26, 0x69, + 0xB6, 0x6B, 0x32, 0x84, 0x8B, 0x7B, 0x53, 0x78, + 0x01, 0x48, 0x3D, 0xE2, 0x39, 0x42, 0x27, 0x45, + 0x6F, 0x49, 0x30, 0xC8, 0x53, 0xFB, 0xFF, 0x6C, + 0x58, 0xFA, 0x6E, 0x1C, 0xC5, 0xD9, 0x74, 0x66 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_secp384r1_test_vectors_priv_key[] = { + 0x95, 0xA4, 0xD2, 0x57, 0xA7, 0x29, 0x8C, 0x66, + 0x10, 0xA3, 0x75, 0x58, 0x78, 0x50, 0x36, 0xDE, + 0x6F, 0x9F, 0xB9, 0x97, 0x73, 0x5C, 0x07, 0x6B, + 0x8C, 0x8A, 0x18, 0xB2, 0xAA, 0xAC, 0x31, 0x42, + 0x50, 0x7A, 0x25, 0x60, 0x3D, 0x7C, 0x95, 0xF9, + 0xE5, 0xF0, 0x30, 0x7E, 0xC5, 0xA5, 0x6D, 0x7E +}; + +static const u8 ecfsdsa_secp384r1_test_vectors_expected_sig[] = { + 0x29, 0xB7, 0x85, 0xAB, 0x7F, 0xAC, 0x1F, 0x80, + 0xF6, 0x4C, 0xE2, 0xF2, 0xD8, 0x8A, 0xBA, 0x8F, + 0xE6, 0x10, 0x3B, 0x25, 0x65, 0xFE, 0xB5, 0xAE, + 0x82, 0xFB, 0x6C, 0xF5, 0x8F, 0x8C, 0xE1, 0xE7, + 0x3F, 0x7A, 0x8D, 0x68, 0x3B, 0xEA, 0xBD, 0x24, + 0xB7, 0xEA, 0x78, 0xF6, 0x01, 0x3C, 0x9F, 0x70, + 0xDE, 0x94, 0xFA, 0xD1, 0x72, 0x81, 0xF4, 0xA6, + 0x0A, 0xA2, 0x54, 0x23, 0xE9, 0xD8, 0x71, 0x22, + 0x96, 0x54, 0x02, 0x19, 0x52, 0x39, 0xB8, 0x39, + 0xFC, 0xD4, 0x4C, 0xDF, 0x54, 0x5B, 0xF7, 0x4E, + 0x13, 0x00, 0xC9, 0xF5, 0x7F, 0xFC, 0x83, 0x0D, + 0xEF, 0xD9, 0x7B, 0x66, 0xD5, 0x7E, 0x9D, 0x07, + + 0xD1, 0x85, 0x80, 0x62, 0xC5, 0x50, 0x4E, 0x21, + 0x78, 0x52, 0x39, 0x26, 0x42, 0x3F, 0xDD, 0x83, + 0x99, 0xA8, 0xBA, 0x2B, 0x85, 0xBF, 0x45, 0x85, + 0x3F, 0x8E, 0x04, 0xBF, 0x20, 0x44, 0x15, 0x16, + 0xE7, 0x1A, 0x78, 0xB0, 0x9C, 0x7A, 0x7E, 0xE6, + 0x20, 0xB7, 0xF5, 0x37, 0xE6, 0xC1, 0xDE, 0xEE +}; + +static const ec_test_case ecfsdsa_secp384r1_test_case = { + .name = "ECFSDSA-SHA384/secp384r1", + .ec_str_p = &secp384r1_str_params, + .priv_key = ecfsdsa_secp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_secp384r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_iso14888_3_secp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_secp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_secp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_SECP521R1 +#define ECFSDSA_SHA512_SECP521R1_SELF_TEST + +/* ECFSDSA secp521r1 test vectors */ + +static int ecfsdsa_nn_random_secp521r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for secp521r1 signature + * test vectors from RFC4754 + */ + const u8 k_buf[] = { + 0x01, 0xbc, 0x24, 0x62, 0x6a, 0xd6, 0x10, 0x3c, + 0x72, 0xdc, 0x63, 0xb6, 0x8c, 0xe4, 0xcd, 0xb2, + 0xf0, 0x63, 0x39, 0x9c, 0x69, 0x69, 0x84, 0xc6, + 0x2f, 0x8c, 0x58, 0x5f, 0x12, 0x7d, 0x47, 0x71, + 0x6e, 0x0e, 0x9d, 0xd7, 0x2b, 0x27, 0x28, 0xfb, + 0xab, 0xed, 0xe4, 0x12, 0x0b, 0xcf, 0x83, 0x5a, + 0x9a, 0x32, 0xf1, 0x3e, 0x65, 0x1d, 0x18, 0x2a, + 0x69, 0x13, 0xfd, 0xeb, 0x9d, 0x79, 0xf5, 0xb0, + 0xbf, 0xe5 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_secp521r1_test_vectors_priv_key[] = { + 0x00, 0x9c, 0x0d, 0x38, 0xdb, 0x40, 0x76, 0x55, + 0x37, 0x79, 0xd9, 0x4a, 0x8f, 0x4f, 0x74, 0x2d, + 0x32, 0xd0, 0xf9, 0xf2, 0x9b, 0xea, 0x27, 0x60, + 0x47, 0x03, 0xcb, 0xe7, 0x34, 0x9e, 0x5f, 0x14, + 0x52, 0x5b, 0xfe, 0x57, 0x41, 0x50, 0x31, 0x52, + 0x0b, 0x19, 0xf7, 0x68, 0x70, 0x1a, 0x57, 0x0b, + 0x62, 0xa6, 0x4e, 0xc1, 0xc0, 0xd0, 0xe7, 0xa0, + 0x84, 0x94, 0x37, 0xfc, 0xf6, 0x7b, 0x56, 0x12, + 0x53, 0xc3 +}; + +static const u8 ecfsdsa_secp521r1_test_vectors_expected_sig[] = { + 0x00, 0x43, 0xf7, 0x90, 0x80, 0xe4, 0xff, 0x8c, + 0x91, 0x44, 0x93, 0xad, 0xbb, 0x35, 0x3d, 0x78, + 0xbb, 0x15, 0x5d, 0x95, 0xde, 0x51, 0x9b, 0x78, + 0xe2, 0xa1, 0xfa, 0x34, 0x70, 0x0b, 0x45, 0x04, + 0x6a, 0xd2, 0xea, 0x99, 0xa7, 0x0c, 0xf8, 0x37, + 0x7a, 0xcf, 0x72, 0x89, 0x4b, 0xa3, 0xa5, 0x8c, + 0x5d, 0x50, 0xcb, 0x01, 0x3e, 0x3a, 0x3e, 0x19, + 0xc8, 0xcb, 0xf2, 0xca, 0xcf, 0x1e, 0x28, 0x47, + 0xcb, 0x92, 0x01, 0x70, 0x49, 0x0a, 0x35, 0xde, + 0xfd, 0x32, 0xc6, 0xd6, 0x08, 0x2a, 0xc5, 0x24, + 0x70, 0x51, 0x3f, 0x03, 0x93, 0x92, 0x71, 0xfb, + 0x8b, 0xa8, 0xbe, 0x1a, 0xe1, 0xc2, 0x64, 0xf9, + 0x86, 0x78, 0x5b, 0xb8, 0xd0, 0xa1, 0xcc, 0xd0, + 0xc8, 0xf6, 0x93, 0xb7, 0xff, 0x92, 0xe3, 0x72, + 0x20, 0xe5, 0x1c, 0x15, 0x80, 0xb7, 0x4d, 0xda, + 0x1c, 0x90, 0x79, 0x5b, 0x52, 0x5b, 0x23, 0x5b, + 0x1e, 0x0e, 0xc8, 0xb7, + + 0x01, 0x0f, 0x45, 0xec, 0x7c, 0x8b, 0xe0, 0x8f, + 0x42, 0xb4, 0x4f, 0xe1, 0x7c, 0xde, 0x1e, 0xe4, + 0x9f, 0xa7, 0x47, 0xcb, 0x4a, 0x23, 0x42, 0xb7, + 0x72, 0x26, 0x9b, 0xc5, 0x96, 0x16, 0x8f, 0x82, + 0xa4, 0xc3, 0x44, 0x71, 0x1c, 0xdb, 0xf7, 0x20, + 0x3f, 0x45, 0x19, 0x93, 0x00, 0xb7, 0xc5, 0xc6, + 0xb1, 0xb6, 0xa1, 0x67, 0x9e, 0xe9, 0xba, 0x88, + 0xe6, 0x30, 0x13, 0x13, 0x85, 0xaf, 0x2d, 0x5d, + 0x82, 0xce +}; + +static const ec_test_case ecfsdsa_secp521r1_test_case = { + .name = "ECFSDSA-SHA512/secp521r1", + .ec_str_p = &secp521r1_str_params, + .priv_key = ecfsdsa_secp521r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_secp521r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_secp521r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_secp521r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_secp521r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_SECP521R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP256R1 +#define ECFSDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + +/* ECFSDSA Brainpoolp256r1 test vectors */ + +static int ecfsdsa_nn_random_brainpoolp256r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp256r1 signature + */ + const u8 k_buf[] = { + 0x94, 0x06, 0x79, 0x01, 0x57, 0xb2, 0x15, 0x15, + 0x35, 0x11, 0x37, 0xbc, 0xe0, 0x42, 0x8f, 0xc3, + 0xde, 0x3a, 0xe9, 0x86, 0xa2, 0xf3, 0xab, 0xac, + 0xaf, 0x0e, 0xa5, 0xcb, 0x24, 0x49, 0x19, 0x37 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_brainpoolp256r1_test_vectors_priv_key[] = { + 0x17, 0x86, 0x00, 0xbb, 0xf4, 0xf6, 0xe8, 0x92, + 0xbe, 0x80, 0x67, 0xc5, 0xd4, 0xdb, 0xd3, 0x90, + 0x67, 0x6c, 0xb8, 0x57, 0xc1, 0x68, 0x31, 0x0b, + 0x87, 0x3a, 0xdc, 0xe4, 0x74, 0xd3, 0xcf, 0x2d +}; + +static const u8 ecfsdsa_brainpoolp256r1_test_vectors_expected_sig[] = { + 0xa7, 0xf1, 0xc8, 0xcb, 0x02, 0x9f, 0x01, 0xda, + 0xb8, 0xf5, 0x68, 0x74, 0x57, 0x2c, 0xf0, 0xdb, + 0x75, 0x2f, 0x95, 0x8b, 0xb5, 0x23, 0x53, 0xd9, + 0x2d, 0x87, 0xec, 0x9f, 0x59, 0x53, 0x12, 0x3e, + 0x5e, 0x2a, 0x30, 0x64, 0x9b, 0xb8, 0xa2, 0x5f, + 0x8f, 0xcb, 0xe1, 0xd9, 0x7f, 0xb4, 0x98, 0x7d, + 0x2d, 0xad, 0xd8, 0x1b, 0x05, 0xdd, 0x8b, 0x94, + 0xbe, 0x1a, 0xc5, 0xc9, 0x14, 0x05, 0x09, 0x52, + + 0x2d, 0xf7, 0x9a, 0x80, 0xaa, 0xa9, 0x57, 0x82, + 0xff, 0x96, 0x44, 0x62, 0xce, 0xd9, 0x68, 0xf5, + 0x11, 0xc6, 0xb5, 0x1a, 0x8e, 0xb9, 0x44, 0xd1, + 0xf9, 0xe7, 0xbc, 0xb3, 0xd0, 0xd8, 0x98, 0xc4 +}; + +static const ec_test_case ecfsdsa_brainpoolp256r1_test_case = { + .name = "ECFSDSA-SHA256/brainpoolp256r1", + .ec_str_p = &brainpoolp256r1_str_params, + .priv_key = ecfsdsa_brainpoolp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_brainpoolp256r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_brainpoolp256r1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_brainpoolp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_brainpoolp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_BRAINPOOLP384R1 +#define ECFSDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + +/* ECFSDSA Brainpoolp384r1 test vectors */ + +static int ecfsdsa_nn_random_brainpoolp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp384r1 signature + */ + const u8 k_buf[] = { + 0x20, 0x89, 0x69, 0xde, 0xcd, 0xd0, 0x61, 0xd9, + 0xee, 0x13, 0xae, 0xdc, 0xbe, 0xd0, 0xd3, 0x3c, + 0x6e, 0xe7, 0xf7, 0x57, 0xd7, 0xfd, 0xe4, 0xb2, + 0x1e, 0xbc, 0xbd, 0xd5, 0x21, 0x57, 0x86, 0xf5, + 0x28, 0x3e, 0x65, 0x81, 0x46, 0x92, 0xbd, 0xc0, + 0x38, 0x82, 0x52, 0xce, 0x58, 0x3d, 0xf5, 0x77 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_brainpoolp384r1_test_vectors_priv_key[] = { + 0x1c, 0x5b, 0xdb, 0xfa, 0xf3, 0x7e, 0x68, 0x87, + 0xd3, 0xf9, 0x10, 0xa6, 0x45, 0x14, 0x4c, 0x95, + 0xe6, 0xcc, 0x48, 0xe7, 0x8c, 0xfa, 0x6b, 0x05, + 0xac, 0xf5, 0x0a, 0xcd, 0x51, 0x38, 0xba, 0xba, + 0xcd, 0x26, 0x01, 0x50, 0x8a, 0x86, 0x48, 0xd3, + 0x87, 0x82, 0x37, 0xb1, 0xca, 0xf1, 0xd8, 0xcf +}; + +static const u8 ecfsdsa_brainpoolp384r1_test_vectors_expected_sig[] = { + 0x7e, 0xa5, 0xf5, 0x97, 0x64, 0x8a, 0x55, 0x0c, + 0x5a, 0xb1, 0xaa, 0x74, 0xd4, 0x40, 0x42, 0xdb, + 0xf8, 0xaf, 0xf2, 0x71, 0xad, 0x14, 0xaf, 0xc3, + 0x89, 0x0c, 0xe4, 0x62, 0x2d, 0x91, 0xdb, 0x94, + 0x87, 0xa0, 0xbf, 0x3a, 0xf0, 0x55, 0xf1, 0xf6, + 0xaa, 0x60, 0x8c, 0x83, 0x62, 0xe2, 0x7f, 0xf5, + 0x49, 0xc4, 0xe6, 0xa7, 0x6c, 0xbc, 0x03, 0xac, + 0xb0, 0x7d, 0x6b, 0x75, 0x25, 0xe5, 0x5e, 0xfd, + 0x97, 0xdd, 0x5c, 0xec, 0x09, 0x55, 0x0b, 0x58, + 0x47, 0x0a, 0x9b, 0x7e, 0x07, 0xe9, 0x5d, 0x4b, + 0x86, 0xf6, 0xfa, 0xe3, 0xe8, 0xb7, 0x66, 0xa9, + 0xca, 0x40, 0xe7, 0x4a, 0xc4, 0x44, 0x79, 0xe7, + + 0x3d, 0x33, 0x34, 0xaf, 0x71, 0x29, 0x4c, 0x1c, + 0xef, 0x28, 0x2f, 0xdb, 0xbf, 0xf2, 0x4e, 0x7f, + 0xde, 0xf0, 0xb9, 0xe2, 0x4c, 0xaa, 0xdf, 0x56, + 0x52, 0xcc, 0x1e, 0xb5, 0x33, 0x6e, 0x29, 0x8e, + 0x29, 0x8f, 0x2c, 0x5b, 0x0f, 0x2f, 0x1f, 0x8c, + 0xb8, 0xd8, 0x2a, 0x8f, 0x12, 0x5b, 0x08, 0xc9 +}; + +static const ec_test_case ecfsdsa_brainpoolp384r1_test_case = { + .name = "ECFSDSA-SHA384/brainpoolp384r1", + .ec_str_p = &brainpoolp384r1_str_params, + .priv_key = ecfsdsa_brainpoolp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_brainpoolp384r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_brainpoolp384r1_test_vector, + .hash_type = SHA384, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_brainpoolp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_brainpoolp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#endif /* WITH_HASH_SHA384 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_BRAINPOOLP512R1 +#define ECFSDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + +/* ECFSDSA Brainpoolp512r1 test vectors */ + +static int ecfsdsa_nn_random_brainpoolp512r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for brainpoolp512r1 signature + */ + const u8 k_buf[] = { + 0x5f, 0x84, 0x57, 0xa0, 0xbc, 0xd3, 0x49, 0xd9, + 0x7d, 0x0a, 0xc7, 0x95, 0x49, 0x49, 0x43, 0x03, + 0x06, 0x37, 0x2b, 0x63, 0xfc, 0x73, 0x14, 0xaa, + 0xe0, 0x23, 0x4d, 0x96, 0x66, 0x53, 0x46, 0xea, + 0xa7, 0x8a, 0x60, 0x05, 0xa6, 0x0f, 0xc4, 0x16, + 0x11, 0x4c, 0xbc, 0x02, 0x67, 0x6d, 0x49, 0xe6, + 0xea, 0x92, 0x21, 0xcd, 0xe7, 0xd7, 0x2a, 0x45, + 0xf7, 0xc2, 0xf5, 0x07, 0xfe, 0x39, 0x65, 0x52 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_brainpoolp512r1_test_vectors_priv_key[] = { + 0xaa, 0x85, 0x90, 0x2b, 0xdc, 0x3a, 0x89, 0xb9, + 0xa2, 0xa6, 0x12, 0x80, 0xb2, 0xd5, 0xd4, 0xea, + 0xb0, 0xdd, 0x69, 0xb6, 0x45, 0xd0, 0x2b, 0xfd, + 0xb1, 0xa6, 0xa9, 0x36, 0x39, 0xff, 0x27, 0x1e, + 0xf3, 0x52, 0x9f, 0xbc, 0xca, 0x45, 0xe5, 0x7b, + 0x46, 0x3a, 0x3c, 0xe3, 0x88, 0x90, 0x44, 0xeb, + 0x2f, 0x6d, 0x09, 0x80, 0x47, 0x50, 0xe7, 0xf9, + 0x43, 0x10, 0x80, 0xe0, 0xb0, 0x5c, 0x2b, 0xab +}; + +static const u8 ecfsdsa_brainpoolp512r1_test_vectors_expected_sig[] = { + 0x3e, 0xe9, 0x03, 0x40, 0x75, 0x7a, 0x19, 0xae, + 0x24, 0x2f, 0xf9, 0x89, 0x77, 0xb8, 0x23, 0x54, + 0xf3, 0x7e, 0x68, 0xda, 0x32, 0xcc, 0x80, 0xf7, + 0x83, 0x5f, 0x1f, 0xd6, 0xf9, 0x64, 0x62, 0x64, + 0x0f, 0xc2, 0xbb, 0x6e, 0x83, 0x3e, 0x2e, 0xd6, + 0x29, 0x37, 0x1f, 0x43, 0xd3, 0x83, 0xa9, 0x9b, + 0x62, 0x25, 0x68, 0x7f, 0xd5, 0xf9, 0x9b, 0x07, + 0xfb, 0x4b, 0x95, 0x30, 0x5f, 0x25, 0xa5, 0x4d, + 0x58, 0x5a, 0xf5, 0x95, 0xd6, 0x07, 0x92, 0xa4, + 0xdf, 0x01, 0xf0, 0x42, 0x2f, 0x39, 0x94, 0x9c, + 0xf9, 0x8b, 0xe4, 0x0e, 0x9f, 0xb3, 0x8b, 0x40, + 0xc4, 0xaa, 0x2d, 0x49, 0x36, 0xf7, 0x0f, 0x71, + 0x7e, 0x30, 0x3e, 0xe7, 0xba, 0x0f, 0x44, 0x28, + 0xa4, 0xfd, 0x18, 0x9d, 0x88, 0xe8, 0x5c, 0x5e, + 0x69, 0xf8, 0x7b, 0xb7, 0x44, 0x44, 0x0a, 0x41, + 0xfd, 0x79, 0x37, 0x14, 0x54, 0x49, 0x6b, 0xc1, + + 0x29, 0x0a, 0x96, 0x8b, 0x0d, 0x46, 0xbe, 0x9c, + 0x5e, 0x3e, 0x1c, 0x1e, 0xa3, 0x09, 0xb3, 0x03, + 0x10, 0x81, 0x6b, 0x08, 0x01, 0xab, 0x8f, 0x20, + 0x0e, 0xf7, 0x7c, 0x86, 0xfb, 0xf4, 0xfc, 0xc3, + 0xeb, 0x43, 0x8f, 0xf9, 0xd7, 0x6e, 0xc0, 0x62, + 0x2e, 0xbc, 0x37, 0xa4, 0xbe, 0x14, 0x12, 0x26, + 0xc2, 0xa4, 0x40, 0xd6, 0x90, 0x8c, 0xe4, 0x73, + 0x0c, 0x5c, 0xf3, 0xbb, 0x7b, 0xf7, 0x6c, 0x7f +}; + +static const ec_test_case ecfsdsa_brainpoolp512r1_test_case = { + .name = "ECFSDSA-SHA512/brainpoolp512r1", + .ec_str_p = &brainpoolp512r1_str_params, + .priv_key = ecfsdsa_brainpoolp512r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_brainpoolp512r1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_brainpoolp512r1_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_brainpoolp512r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_brainpoolp512r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP512R1 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_FRP256V1 +#define ECFSDSA_SHA256_FRP256V1_SELF_TEST + +/* ECFSDSA frp256v1 test vectors */ + +static int ecfsdsa_nn_random_frp256v1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + /* + * Fixed ephemeral private key for frp256v1 signature + */ + const u8 k_buf[] = { + 0x9E, 0x56, 0xF5, 0x09, 0x19, 0x67, 0x84, 0xD9, + 0x63, 0xD1, 0xC0, 0xA4, 0x01, 0x51, 0x0E, 0xE7, + 0xAD, 0xA3, 0xDC, 0xC5, 0xDE, 0xE0, 0x4B, 0x15, + 0x4B, 0xF6, 0x1A, 0xF1, 0xD5, 0xA6, 0xDE, 0xCE + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecfsdsa_frp256v1_test_vectors_priv_key[] = { + 0x00, 0x51, 0xD3, 0x86, 0x6A, 0x15, 0xBA, 0xCD, + 0xE3, 0x3D, 0x96, 0xF9, 0x92, 0xFC, 0xA9, 0x9D, + 0xA7, 0xE6, 0xEF, 0x09, 0x34, 0xE7, 0x09, 0x75, + 0x59, 0xC2, 0x7F, 0x16, 0x14, 0xC8, 0x8A, 0x7F +}; + +static const u8 ecfsdsa_frp256v1_test_vectors_expected_sig[] = { + 0x22, 0xb1, 0xd0, 0x0d, 0xc8, 0x28, 0xa5, 0xcb, + 0xa2, 0x64, 0x31, 0x9f, 0x05, 0x93, 0x3a, 0xc8, + 0xed, 0xe6, 0x32, 0x3d, 0x69, 0xd0, 0x2b, 0x31, + 0x4e, 0x10, 0xca, 0xa5, 0xf1, 0x3b, 0x29, 0x96, + 0x52, 0xe2, 0xef, 0x4e, 0x46, 0x9f, 0x08, 0x63, + 0xfb, 0x3c, 0xf4, 0xc5, 0x18, 0xb0, 0x5f, 0xc4, + 0xbb, 0x1d, 0xaf, 0xb7, 0xd2, 0xc4, 0x30, 0x7e, + 0xda, 0x41, 0xef, 0xac, 0x88, 0x8f, 0x0c, 0x7d, + + 0x9b, 0x3a, 0xb9, 0xd5, 0xb6, 0x7f, 0xf2, 0xb9, + 0xaa, 0xe8, 0xc5, 0xed, 0xf9, 0x82, 0xd4, 0xf7, + 0x6d, 0x7c, 0x61, 0x36, 0x56, 0xe7, 0x73, 0xaa, + 0x1a, 0xab, 0xa6, 0x30, 0x90, 0x1d, 0x56, 0xa6 +}; + +static const ec_test_case ecfsdsa_frp256v1_test_case = { + .name = "ECFSDSA-SHA256/frp256v1", + .ec_str_p = &frp256v1_str_params, + .priv_key = ecfsdsa_frp256v1_test_vectors_priv_key, + .priv_key_len = sizeof(ecfsdsa_frp256v1_test_vectors_priv_key), + .nn_random = ecfsdsa_nn_random_frp256v1_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECFSDSA, + .exp_sig = ecfsdsa_frp256v1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecfsdsa_frp256v1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_FRP256V1 */ +#endif /* WITH_HASH_SHA256 */ +#endif /* WITH_SIG_ECFSDSA */ + +/******************************************************************* + ************** ECGDSA tests ************************************** + *******************************************************************/ +#ifdef WITH_SIG_ECGDSA +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP192R1 +#define ECGDSA_SHA256_BRAINPOOLP192R1_SELF_TEST + +/* ECGDSA brainpoolp192r1 test vectors */ + +static int ecgdsa_nn_random_iso14888_3_brainpoolp192r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x5A, 0x96, 0x62, 0x60, 0x96, 0x28, 0x8C, 0xC4, + 0x69, 0xF1, 0x70, 0x4E, 0xC0, 0x5F, 0x44, 0xD1, + 0xEC, 0x18, 0xBD, 0x32, 0xCE, 0xB0, 0x2D, 0x5B, + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecgdsa_brainpoolp192r1_test_vectors_priv_key[] = { + 0x40, 0xF9, 0x5B, 0x49, 0xA3, 0xB1, 0xBF, 0x55, + 0x31, 0x1A, 0x56, 0xDF, 0xD3, 0xB5, 0x06, 0x1E, + 0xE1, 0xDF, 0x64, 0x39, 0x84, 0xD4, 0x1E, 0x35, +}; + +static const u8 ecgdsa_brainpoolp192r1_test_vectors_expected_sig[] = { + 0xA0, 0x0B, 0x0A, 0xA2, 0x5D, 0xB6, 0xAB, 0x5C, + 0x21, 0xB8, 0x63, 0x00, 0xD9, 0xBC, 0x99, 0xF5, + 0x6E, 0x9D, 0xD1, 0xB7, 0xF1, 0xDC, 0x47, 0x74, + 0x63, 0x46, 0x35, 0xEF, 0x81, 0x32, 0x47, 0xD7, + 0x20, 0x24, 0x5C, 0x94, 0x09, 0xFB, 0x20, 0xA2, + 0x67, 0xC5, 0x60, 0xC8, 0x8E, 0xB2, 0xB0, 0x7B, +}; + +static const ec_test_case ecgdsa_brainpoolp192r1_test_case = { + .name = "ECGDSA-SHA256/brainpoolp192r1", + .ec_str_p = &brainpoolp192r1_str_params, + .priv_key = ecgdsa_brainpoolp192r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecgdsa_brainpoolp192r1_test_vectors_priv_key), + .nn_random = ecgdsa_nn_random_iso14888_3_brainpoolp192r1_test_vector, + .hash_type = SHA256, + .msg = "brainpoolP192r1", + .msglen = 15, + .sig_type = ECGDSA, + .exp_sig = ecgdsa_brainpoolp192r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecgdsa_brainpoolp192r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP192R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA224 +#ifdef WITH_CURVE_BRAINPOOLP224R1 +#define ECGDSA_SHA224_BRAINPOOLP224R1_SELF_TEST + +/* ECGDSA brainpoolp224r1 test vectors */ + +static int ecgdsa_nn_random_iso14888_3_brainpoolp224r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x5B, 0x60, 0x4F, 0x2C, 0x35, 0xED, 0x04, 0x01, + 0xFC, 0xA3, 0x1E, 0x88, 0x0C, 0xB5, 0x5C, 0x2A, + 0x74, 0x56, 0xE7, 0x1A, 0x5C, 0xBA, 0xA8, 0xDF, + 0x2F, 0xC0, 0x3C, 0xA9 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecgdsa_brainpoolp224r1_test_vectors_priv_key[] = { + 0x7E, 0x75, 0xBC, 0x2C, 0xD5, 0x73, 0xB3, 0x8A, + 0xED, 0x09, 0x77, 0xAD, 0x61, 0x17, 0x63, 0xDD, + 0x57, 0xFB, 0x29, 0xB2, 0x20, 0x88, 0x33, 0x44, + 0xB8, 0x1D, 0xF0, 0x37 +}; + +static const u8 ecgdsa_brainpoolp224r1_test_vectors_expected_sig[] = { + 0x60, 0xFB, 0xB2, 0xB1, 0x5F, 0x05, 0x5C, 0xD1, + 0xD4, 0x82, 0xED, 0x6D, 0xC5, 0x06, 0x9C, 0x8F, + 0x62, 0x4A, 0x34, 0x05, 0xB6, 0x7D, 0x11, 0xB3, + 0xB6, 0x5E, 0x02, 0x34, 0x5A, 0x05, 0x0F, 0x05, + 0xAF, 0x0B, 0x10, 0x6B, 0xA3, 0xF1, 0x46, 0x96, + 0xE6, 0x16, 0x2C, 0xA4, 0x6F, 0xBA, 0xBD, 0x2C, + 0x14, 0x44, 0x19, 0xDB, 0xB5, 0xBF, 0xBD, 0xC0 +}; + +static const ec_test_case ecgdsa_brainpoolp224r1_test_case = { + .name = "ECGDSA-SHA224/brainpoolp224r1", + .ec_str_p = &brainpoolp224r1_str_params, + .priv_key = ecgdsa_brainpoolp224r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecgdsa_brainpoolp224r1_test_vectors_priv_key), + .nn_random = ecgdsa_nn_random_iso14888_3_brainpoolp224r1_test_vector, + .hash_type = SHA224, + .msg = "brainpoolP224r1", + .msglen = 15, + .sig_type = ECGDSA, + .exp_sig = ecgdsa_brainpoolp224r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecgdsa_brainpoolp224r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP224R1 */ +#endif /* WITH_HASH_SHA224 */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_BRAINPOOLP256R1 +#define ECGDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + +/* ECGDSA brainpoolp256r1 test vectors */ + +static int ecgdsa_nn_random_iso14888_3_brainpoolp256r1_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x0E, 0x64, 0x21, 0x27, 0x2D, 0xDA, 0xB9, 0xC2, + 0x07, 0xB1, 0x19, 0xBD, 0xD1, 0x0C, 0x03, 0x86, + 0x10, 0x05, 0x75, 0x2E, 0xEA, 0xBB, 0x3A, 0xC9, + 0x75, 0x13, 0x04, 0x1A, 0xDE, 0x62, 0x86, 0xD9 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecgdsa_brainpoolp256r1_test_vectors_priv_key[] = { + 0x52, 0xB9, 0x29, 0xB4, 0x02, 0x97, 0x43, 0x7B, + 0x98, 0x97, 0x3A, 0x2C, 0x43, 0x7E, 0x8F, 0x03, + 0xA2, 0x31, 0xEB, 0x61, 0xE0, 0xCD, 0x38, 0xFD, + 0xAD, 0x80, 0x2F, 0x00, 0xD5, 0x5A, 0x13, 0xA3 +}; + +static const u8 ecgdsa_brainpoolp256r1_test_vectors_expected_sig[] = { + 0x82, 0x93, 0x49, 0xe3, 0xb6, 0xe1, 0xf3, 0xe5, + 0x15, 0xeb, 0x95, 0x81, 0xbe, 0x0f, 0x95, 0x8d, + 0xcc, 0xaa, 0xa6, 0xb6, 0x8d, 0x83, 0xba, 0x77, + 0x01, 0xdd, 0x7a, 0x08, 0x67, 0xe4, 0x4e, 0xa7, + 0x3d, 0xc2, 0xf1, 0x03, 0x29, 0x6a, 0x79, 0x3e, + 0x50, 0xdc, 0x22, 0x66, 0x65, 0x74, 0x70, 0xa4, + 0x0d, 0x2c, 0x9e, 0xa1, 0xca, 0x79, 0x7d, 0xea, + 0x61, 0x00, 0x42, 0xb7, 0x73, 0x0b, 0xbd, 0xce +}; + +static const ec_test_case ecgdsa_brainpoolp256r1_test_case = { + .name = "ECGDSA-SHA256/brainpoolp256r1", + .ec_str_p = &brainpoolp256r1_str_params, + .priv_key = ecgdsa_brainpoolp256r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecgdsa_brainpoolp256r1_test_vectors_priv_key), + .nn_random = ecgdsa_nn_random_iso14888_3_brainpoolp256r1_test_vector, + .hash_type = SHA256, + .msg = "brainpoolP256r1", + .msglen = 15, + .sig_type = ECGDSA, + .exp_sig = ecgdsa_brainpoolp256r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecgdsa_brainpoolp256r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP256R1 */ +#endif /* WITH_HASH_SHA256 */ + +#ifdef WITH_HASH_SHA384 +#ifdef WITH_CURVE_BRAINPOOLP384R1 +#define ECGDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + +/* ECGDSA brainpoolp384r1 test vectors */ + +static int ecgdsa_nn_random_brainpoolp384r1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + + const u8 k_buf[] = { + 0x39, 0x1c, 0x0c, 0xff, 0xe3, 0xaa, 0x7e, 0x95, + 0x47, 0xd2, 0x3e, 0xe9, 0x70, 0x36, 0x12, 0x55, + 0x15, 0xce, 0x74, 0xd6, 0xfe, 0x55, 0x44, 0x07, + 0x17, 0x79, 0x64, 0xfd, 0xee, 0xce, 0x9d, 0x88, + 0xb3, 0xeb, 0xdc, 0xed, 0x5e, 0xe6, 0x34, 0xf3, + 0x0c, 0x3a, 0x74, 0xaa, 0xad, 0x54, 0x57, 0x0a + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecgdsa_brainpoolp384r1_test_vectors_priv_key[] = { + 0x70, 0x74, 0x93, 0xc8, 0x39, 0x9a, 0x07, 0x95, + 0xd1, 0xa3, 0xd2, 0x36, 0xae, 0x60, 0xa5, 0x46, + 0x86, 0xec, 0xc5, 0x7c, 0x1e, 0xc5, 0x51, 0xef, + 0x3f, 0x63, 0x19, 0x3a, 0x09, 0xd9, 0xb5, 0x9c, + 0xae, 0x50, 0x04, 0xee, 0x2d, 0x4d, 0x48, 0x71, + 0xf8, 0x5a, 0xcb, 0x1a, 0x60, 0x36, 0xbb, 0x68 +}; + +static const u8 ecgdsa_brainpoolp384r1_test_vectors_expected_sig[] = { + 0x3b, 0x34, 0xbe, 0xb7, 0xa6, 0x9e, 0x07, 0x6d, + 0xd9, 0x6f, 0x2d, 0x71, 0x2a, 0xfe, 0xe2, 0xf2, + 0x72, 0xa4, 0xd7, 0xad, 0xdf, 0x29, 0x1c, 0xa7, + 0x99, 0xed, 0x62, 0x49, 0xa9, 0xbb, 0x4e, 0xcd, + 0xcb, 0xe4, 0x44, 0x88, 0x31, 0xc5, 0x49, 0xb7, + 0x8f, 0xc7, 0x2b, 0xa5, 0x5a, 0x34, 0x66, 0xa6, + + 0x79, 0xa0, 0x47, 0x25, 0x3d, 0xad, 0x09, 0x80, + 0xe1, 0x3f, 0x99, 0xf3, 0x20, 0x4a, 0xd9, 0x7b, + 0xfe, 0x2c, 0xa2, 0x09, 0xdd, 0x33, 0xbe, 0xd5, + 0x7f, 0xe0, 0xb5, 0x1d, 0x52, 0x1d, 0x2e, 0x61, + 0xb2, 0x78, 0x81, 0x40, 0x90, 0x57, 0x02, 0xe5, + 0x1a, 0xdf, 0x44, 0x84, 0x9f, 0x0c, 0x4b, 0xce +}; + +static const ec_test_case ecgdsa_brainpoolp384r1_test_case = { + .name = "ECGDSA-SHA384/brainpoolp384r1", + .ec_str_p = &brainpoolp384r1_str_params, + .priv_key = ecgdsa_brainpoolp384r1_test_vectors_priv_key, + .priv_key_len = sizeof(ecgdsa_brainpoolp384r1_test_vectors_priv_key), + .nn_random = ecgdsa_nn_random_brainpoolp384r1_test_vector, + .hash_type = SHA384, + .msg = "brainpoolP384r1", + .msglen = 15, + .sig_type = ECGDSA, + .exp_sig = ecgdsa_brainpoolp384r1_test_vectors_expected_sig, + .exp_siglen = sizeof(ecgdsa_brainpoolp384r1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_BRAINPOOLP384R1 */ +#endif /* WITH_HASH_SHA384 */ +#endif /* WITH_SIG_ECGDSA */ + +/******************************************************************* + ************** ECRDSA tests *************************************** + *******************************************************************/ +/* + * NOTE: ISO/IEC 14888-3 standard seems to diverge from the existing implementations + * of ECRDSA when treating the message hash, and from the examples of certificates provided + * in RFC 7091 and draft-deremin-rfc4491-bis. While in ISO/IEC 14888-3 it is explicitely asked + * to proceed with the hash of the message as big endian, the RFCs derived from the Russian + * standard expect the hash value to be treated as little endian when importing it as an integer + * (this discrepancy is exhibited and confirmed by test vectors present in ISO/IEC 14888-3, and + * by X.509 certificates present in the RFCs). This seems (to be confirmed) to be a discrepancy of + * ISO/IEC 14888-3 algorithm description that must be fixed there. + * + * In order to be conservative, libecc uses the Russian standard behavior as expected to be in line with + * other implemetations, but keeps the ISO/IEC 14888-3 behavior if forced/asked by the user using + * the USE_ISO14888_3_ECRDSA toggle. This allows to keep backward compatibility with previous versions of the + * library if needed. + * + */ + +#ifdef WITH_SIG_ECRDSA + +#ifndef USE_ISO14888_3_ECRDSA + +/* + * All the follwing test vectors are extracted from draft-deremin-rfc4491-bis RFC draft + * (https://datatracker.ietf.org/doc/html/draft-deremin-rfc4491-bis) where certificates signed with + * GOST R 34.10-2012 using GOST R 34.11-2012 (256 and 512 bits) are provided. We can use them + * as test vectors with the message being the TBS (To Be Signed) blob of the certificate. + */ + +#ifdef WITH_HASH_STREEBOG256 +#ifdef WITH_CURVE_GOST256 +#define ECRDSA_STREEBOG256_GOST256_SELF_TEST + +static int ecrdsa_nn_random_rfc4491_bis_1_GOST_256bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x77, 0x10, 0x5c, 0x9b, 0x20, 0xbc, 0xd3, 0x12, 0x28, 0x23, 0xc8, 0xcf, + 0x6f, 0xcc, 0x7b, 0x95, 0x6d, 0xe3, 0x38, 0x14, 0xe9, 0x5b, 0x7f, 0xe6, + 0x4f, 0xed, 0x92, 0x45, 0x94, 0xdc, 0xea, 0xb3, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_priv_key[] = { + 0x7a, 0x92, 0x9a, 0xde, 0x78, 0x9b, 0xb9, 0xbe, 0x10, 0xed, + 0x35, 0x9d, 0xd3, 0x9a, 0x72, 0xc1, 0x1b, 0x60, 0x96, 0x1f, + 0x49, 0x39, 0x7e, 0xee, 0x1d, 0x19, 0xce, 0x98, 0x91, 0xec, + 0x3b, 0x28, +}; +static const u8 ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_expected_sig[] = { + 0x41, 0xaa, 0x28, 0xd2, 0xf1, 0xab, 0x14, 0x82, 0x80, 0xcd, + 0x9e, 0xd5, 0x6f, 0xed, 0xa4, 0x19, 0x74, 0x05, 0x35, 0x54, + 0xa4, 0x27, 0x67, 0xb8, 0x3a, 0xd0, 0x43, 0xfd, 0x39, 0xdc, + 0x04, 0x93, + 0x4d, 0x53, 0xf0, 0x12, 0xfe, 0x08, 0x17, 0x76, 0x50, 0x7d, + 0x4d, 0x9b, 0xb8, 0x1f, 0x00, 0xef, 0xdb, 0x4e, 0xef, 0xd4, + 0xab, 0x83, 0xba, 0xc4, 0xba, 0xcf, 0x73, 0x51, 0x73, 0xcf, + 0xa8, 0x1c, +}; +static const unsigned char ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_message[] = { + 0x30, 0x81, 0xdb, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x0a, 0x30, + 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, + 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x30, 0x20, 0x17, 0x0d, 0x30, + 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, + 0x18, 0x0f, 0x32, 0x30, 0x35, 0x30, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x30, 0x66, 0x30, 0x1f, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, + 0x01, 0x01, 0x01, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, + 0x23, 0x00, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02, + 0x03, 0x43, 0x00, 0x04, 0x40, 0x0b, 0xd8, 0x6f, 0xe5, 0xd8, 0xdb, 0x89, + 0x66, 0x8f, 0x78, 0x9b, 0x4e, 0x1d, 0xba, 0x85, 0x85, 0xc5, 0x50, 0x8b, + 0x45, 0xec, 0x5b, 0x59, 0xd8, 0x90, 0x6d, 0xdb, 0x70, 0xe2, 0x49, 0x2b, + 0x7f, 0xda, 0x77, 0xff, 0x87, 0x1a, 0x10, 0xfb, 0xdf, 0x27, 0x66, 0xd2, + 0x93, 0xc5, 0xd1, 0x64, 0xaf, 0xbb, 0x3c, 0x7b, 0x97, 0x3a, 0x41, 0xc8, + 0x85, 0xd1, 0x1d, 0x70, 0xd6, 0x89, 0xb4, 0xf1, 0x26, 0xa3, 0x13, 0x30, + 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, + 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, +}; +static const ec_test_case ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_case = { + .name="ECRDSA-STREEBOG256/GOST-256-curve (RFC4491)", + .ec_str_p = &GOST_256bits_curve_str_params, + .priv_key = ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_rfc4491_bis_1_GOST_256bits_curve_test_vector, + .hash_type = STREEBOG256, + .msg = (const char*)ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_GOST256 */ +#endif /* WITH_HASH_STREEBOG256 */ + +#ifdef WITH_HASH_STREEBOG256 +#ifdef WITH_CURVE_GOST_R3410_2012_256_PARAMSETA +#define ECRDSA_STREEBOG256_GOST256_PARAMSETA_SELF_TEST + +static int ecrdsa_nn_random_rfc4491_bis_2_GOST_256bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x27, 0x10, 0x5c, 0x9b, 0x20, 0xbc, 0xd3, 0x12, 0x28, 0x23, + 0xc8, 0xcf, 0x6f, 0xcc, 0x7b, 0x95, 0x6d, 0xe3, 0x38, 0x14, + 0xe9, 0x5b, 0x7f, 0xe6, 0x4f, 0xed, 0x92, 0x45, 0x94, 0xdc, + 0xea, 0xb3, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_priv_key[] = { + 0x3a, 0x92, 0x9a, 0xde, 0x78, 0x9b, 0xb9, 0xbe, 0x10, + 0xed, 0x35, 0x9d, 0xd3, 0x9a, 0x72, 0xc1, 0x0b, 0x87, + 0xc8, 0x3f, 0x80, 0xbe, 0x18, 0xb8, 0x5c, 0x04, 0x1f, + 0x43, 0x25, 0xb6, 0x2e, 0xc1, +}; +static const u8 ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_expected_sig[] = { + 0x1d, 0x0e, 0x1d, 0xa5, 0xbe, 0x34, 0x7c, 0x6f, 0x1b, + 0x52, 0x56, 0xc7, 0xae, 0xac, 0x20, 0x0a, 0xd6, 0x4a, + 0xc7, 0x7a, 0x6f, 0x5b, 0x3a, 0x0e, 0x09, 0x73, 0x18, + 0xe7, 0xae, 0x6e, 0xe7, 0x69, + 0x14, 0x0b, 0x4d, 0xa9, 0x12, 0x4b, 0x09, 0xcb, 0x0d, + 0x5c, 0xe9, 0x28, 0xee, 0x87, 0x42, 0x73, 0xa3, 0x10, + 0x12, 0x94, 0x92, 0xec, 0x0e, 0x29, 0x36, 0x9e, 0x3b, + 0x79, 0x12, 0x48, 0x57, 0x8c, +}; +static const unsigned char ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_message[] = { + 0x30, 0x81, 0xd3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x0a, 0x30, + 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, + 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x30, 0x20, 0x17, 0x0d, 0x30, + 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, + 0x18, 0x0f, 0x32, 0x30, 0x35, 0x30, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x30, 0x5e, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, + 0x01, 0x01, 0x01, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, + 0x02, 0x01, 0x01, 0x01, 0x03, 0x43, 0x00, 0x04, 0x40, 0x74, 0x27, 0x95, + 0xd4, 0xbe, 0xe8, 0x84, 0xdd, 0xf2, 0x85, 0x0f, 0xec, 0x03, 0xea, 0x3f, + 0xaf, 0x18, 0x44, 0xe0, 0x1d, 0x9d, 0xa6, 0x0b, 0x64, 0x50, 0x93, 0xa5, + 0x5e, 0x26, 0xdf, 0xc3, 0x99, 0x78, 0xf5, 0x96, 0xcf, 0x4d, 0x4d, 0x0c, + 0x6c, 0xf1, 0xd1, 0x89, 0x43, 0xd9, 0x44, 0x93, 0xd1, 0x6b, 0x9e, 0xc0, + 0xa1, 0x6d, 0x51, 0x2d, 0x2e, 0x12, 0x7c, 0xc4, 0x69, 0x1a, 0x63, 0x18, + 0xe2, 0xa3, 0x13, 0x30, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, + 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, +}; +static const ec_test_case ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_case = { + .name="ECRDSA-STREEBOG256/GOST-256-curve-paramsetA (RFC4491)", + .ec_str_p = &gost_R3410_2012_256_paramSetA_str_params, + .priv_key = ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_rfc4491_bis_2_GOST_256bits_curve_test_vector, + .hash_type = STREEBOG256, + .msg = (const char*)ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_GOST_R3410_2012_256_PARAMSETA */ +#endif /* WITH_HASH_STREEBOG256 */ + +#ifdef WITH_HASH_STREEBOG512 +#ifdef WITH_CURVE_GOST512 +#define ECRDSA_STREEBOG512_GOST512_SELF_TEST + +static int ecrdsa_nn_random_rfc4491_bis_1_GOST_512bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x03, 0x59, 0xe7, 0xf4, 0xb1, 0x41, 0x0f, 0xea, 0xcc, + 0x57, 0x04, 0x56, 0xc6, 0x80, 0x14, 0x96, 0x94, 0x63, + 0x12, 0x12, 0x0b, 0x39, 0xd0, 0x19, 0xd4, 0x55, 0x98, + 0x6e, 0x36, 0x4f, 0x36, 0x58, 0x86, 0x74, 0x8e, 0xd7, + 0xa4, 0x4b, 0x3e, 0x79, 0x44, 0x34, 0x00, 0x60, 0x11, + 0x84, 0x22, 0x86, 0x21, 0x22, 0x73, 0xa6, 0xd1, 0x4c, + 0xf7, 0x0e, 0xa3, 0xaf, 0x71, 0xbb, 0x1a, 0xe6, 0x79, + 0xf1, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_priv_key[] = { + 0x0B, 0xA6, 0x04, 0x8A, 0xAD, 0xAE, 0x24, 0x1B, 0xA4, + 0x09, 0x36, 0xD4, 0x77, 0x56, 0xD7, 0xC9, 0x30, 0x91, + 0xA0, 0xE8, 0x51, 0x46, 0x69, 0x70, 0x0E, 0xE7, 0x50, + 0x8E, 0x50, 0x8B, 0x10, 0x20, 0x72, 0xE8, 0x12, 0x3B, + 0x22, 0x00, 0xA0, 0x56, 0x33, 0x22, 0xDA, 0xD2, 0x82, + 0x7E, 0x27, 0x14, 0xA2, 0x63, 0x6B, 0x7B, 0xFD, 0x18, + 0xAA, 0xDF, 0xC6, 0x29, 0x67, 0x82, 0x1F, 0xA1, 0x8D, + 0xD4, +}; +static const u8 ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_expected_sig[] = { + 0x2f, 0x86, 0xfa, 0x60, 0xa0, 0x81, 0x09, 0x1a, 0x23, + 0xdd, 0x79, 0x5e, 0x1e, 0x3c, 0x68, 0x9e, 0xe5, 0x12, + 0xa3, 0xc8, 0x2e, 0xe0, 0xdc, 0xc2, 0x64, 0x3c, 0x78, + 0xee, 0xa8, 0xfc, 0xac, 0xd3, 0x54, 0x92, 0x55, 0x84, + 0x86, 0xb2, 0x0f, 0x1c, 0x9e, 0xc1, 0x97, 0xc9, 0x06, + 0x99, 0x85, 0x02, 0x60, 0xc9, 0x3b, 0xcb, 0xcd, 0x9c, + 0x5c, 0x33, 0x17, 0xe1, 0x93, 0x44, 0xe1, 0x73, 0xae, + 0x36, + 0x41, 0x57, 0x03, 0xd8, 0x92, 0xf1, 0xa5, 0xf3, 0xf6, + 0x8c, 0x43, 0x53, 0x18, 0x9a, 0x7e, 0xe2, 0x07, 0xb8, + 0x0b, 0x56, 0x31, 0xef, 0x9d, 0x49, 0x52, 0x9a, 0x4d, + 0x6b, 0x54, 0x2c, 0x2c, 0xfa, 0x15, 0xaa, 0x2e, 0xac, + 0xf1, 0x1f, 0x47, 0x0f, 0xde, 0x7d, 0x95, 0x48, 0x56, + 0x90, 0x3c, 0x35, 0xfd, 0x8f, 0x95, 0x5e, 0xf3, 0x00, + 0xd9, 0x5c, 0x77, 0x53, 0x4a, 0x72, 0x4a, 0x0e, 0xee, + 0x70, +}; +static const unsigned char ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_message[] = { + 0x30, 0x82, 0x01, 0x16, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x0b, + 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, + 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x30, 0x20, 0x17, 0x0d, + 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x5a, 0x18, 0x0f, 0x32, 0x30, 0x35, 0x30, 0x31, 0x32, 0x33, 0x31, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, 0x45, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x30, 0x81, 0xa0, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, + 0x07, 0x01, 0x01, 0x01, 0x02, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, + 0x07, 0x01, 0x02, 0x01, 0x02, 0x00, 0x03, 0x81, 0x84, 0x00, 0x04, 0x81, + 0x80, 0xe1, 0xef, 0x30, 0xd5, 0x2c, 0x61, 0x33, 0xdd, 0xd9, 0x9d, 0x1d, + 0x5c, 0x41, 0x45, 0x5c, 0xf7, 0xdf, 0x4d, 0x8b, 0x4c, 0x92, 0x5b, 0xbc, + 0x69, 0xaf, 0x14, 0x33, 0xd1, 0x56, 0x58, 0x51, 0x5a, 0xdd, 0x21, 0x46, + 0x85, 0x0c, 0x32, 0x5c, 0x5b, 0x81, 0xc1, 0x33, 0xbe, 0x65, 0x5a, 0xa8, + 0xc4, 0xd4, 0x40, 0xe7, 0xb9, 0x8a, 0x8d, 0x59, 0x48, 0x7b, 0x0c, 0x76, + 0x96, 0xbc, 0xc5, 0x5d, 0x11, 0xec, 0xbe, 0x77, 0x36, 0xa9, 0xec, 0x35, + 0x7f, 0xf2, 0xfd, 0x39, 0x93, 0x1f, 0x4e, 0x11, 0x4c, 0xb8, 0xcd, 0xa3, + 0x59, 0x27, 0x0a, 0xc7, 0xf0, 0xe7, 0xff, 0x43, 0xd9, 0x41, 0x94, 0x19, + 0xea, 0x61, 0xfd, 0x2a, 0xb7, 0x7f, 0x5d, 0x9f, 0x63, 0x52, 0x3d, 0x3b, + 0x50, 0xa0, 0x4f, 0x63, 0xe2, 0xa0, 0xcf, 0x51, 0xb7, 0xc1, 0x3a, 0xdc, + 0x21, 0x56, 0x0f, 0x0b, 0xd4, 0x0c, 0xc9, 0xc7, 0x37, 0xa3, 0x13, 0x30, + 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, + 0x05, 0x30, 0x03, 0x01, 0x01, 0xff +}; +static const ec_test_case ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_case = { + .name="ECRDSA-STREEBOG512/GOST-512-curve (RFC4491)", + .ec_str_p = &GOST_512bits_curve_str_params, + .priv_key = ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_rfc4491_bis_1_GOST_512bits_curve_test_vector, + .hash_type = STREEBOG512, + .msg = (const char*)ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_GOST512 */ +#endif /* WITH_HASH_STREEBOG512 */ + + +#else /* !defined(USE_ISO14888_3_ECRDSA) */ +/* + * Unlike other signature algorithms (defined in ISO 14888-3:2015) for + * which tests vectors are based on secp* or brainpoolp* curves, EC-RDSA + * tests vectors are based on custom curves. As a side note, the 256 + * curve (not the random signature param and key) appear in RFC 5832 and + * RFC 7091, but discrepancies exist in the algorithm with the ISO/IEC 14888-3 + * description and test vectors (see above). + */ + +#ifdef WITH_HASH_SHA256 +#ifdef WITH_CURVE_GOST256 +#define ECRDSA_SHA256_GOST256_SELF_TEST + +/* First, ECRDSA test vector on a 256-bit GOST curve */ + +static int ecrdsa_nn_random_iso14888_3_GOST_256bits_curve_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x77, 0x10, 0x5C, 0x9B, 0x20, 0xBC, 0xD3, 0x12, + 0x28, 0x23, 0xC8, 0xCF, 0x6F, 0xCC, 0x7B, 0x95, + 0x6D, 0xE3, 0x38, 0x14, 0xE9, 0x5B, 0x7F, 0xE6, + 0x4F, 0xED, 0x92, 0x45, 0x94, 0xDC, 0xEA, 0xB3 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecrdsa_GOST_256bits_curve_test_vectors_priv_key[] = { + 0x7A, 0x92, 0x9A, 0xDE, 0x78, 0x9B, 0xB9, 0xBE, + 0x10, 0xED, 0x35, 0x9D, 0xD3, 0x9A, 0x72, 0xC1, + 0x1B, 0x60, 0x96, 0x1F, 0x49, 0x39, 0x7E, 0xEE, + 0x1D, 0x19, 0xCE, 0x98, 0x91, 0xEC, 0x3B, 0x28 +}; + +static const u8 ecrdsa_GOST_256bits_curve_test_vectors_expected_sig[] = { + 0x41, 0xAA, 0x28, 0xD2, 0xF1, 0xAB, 0x14, 0x82, + 0x80, 0xCD, 0x9E, 0xD5, 0x6F, 0xED, 0xA4, 0x19, + 0x74, 0x05, 0x35, 0x54, 0xA4, 0x27, 0x67, 0xB8, + 0x3A, 0xD0, 0x43, 0xFD, 0x39, 0xDC, 0x04, 0x93, + 0x0A, 0x7B, 0xA4, 0x72, 0x2D, 0xA5, 0x69, 0x3F, + 0x22, 0x9D, 0x17, 0x5F, 0xAB, 0x6A, 0xFB, 0x85, + 0x7E, 0xC2, 0x27, 0x3B, 0x9F, 0x88, 0xDA, 0x58, + 0x92, 0xCE, 0xD3, 0x11, 0x7F, 0xCF, 0x1E, 0x36 +}; + +static const ec_test_case ecrdsa_GOST_256bits_curve_test_case = { + .name = "ECRDSA-SHA256/GOST-256-curve", + .ec_str_p = &GOST_256bits_curve_str_params, + .priv_key = ecrdsa_GOST_256bits_curve_test_vectors_priv_key, + .priv_key_len = + sizeof(ecrdsa_GOST_256bits_curve_test_vectors_priv_key), + .nn_random = + ecrdsa_nn_random_iso14888_3_GOST_256bits_curve_test_vector, + .hash_type = SHA256, + .msg = "abc", + .msglen = 3, + .sig_type = ECRDSA, + .exp_sig = ecrdsa_GOST_256bits_curve_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecrdsa_GOST_256bits_curve_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_GOST256 */ +#endif /* WITH_HASH_SHA256 */ + +/* NOTE: the test vectors present in the GOST 34.10-2012 standard and in the + * associated RFC7091 do not provide messages as input, they instead provide the + * value of the raw result of the hash function reduced modulo q. This is kinf of + * useless here as we want to test the full GOST stack (i.e. hash digest plus curves), + * hence we use the PyGOST Python library to generate some test vectors. + */ +#ifdef WITH_HASH_STREEBOG256 +#ifdef WITH_CURVE_GOST256 +#define ECRDSA_STREEBOG256_GOST256_SELF_TEST +static int ecrdsa_nn_random_pygostlib_1_GOST_256bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x4c, 0xe0, 0xe1, 0x2a, 0x2a, 0x35, 0x82, 0xa2, 0x1b, 0xe0, + 0xe7, 0x3f, 0xaf, 0xf2, 0xe2, 0xdb, 0x0c, 0xc2, 0x04, 0x80, + 0x33, 0x86, 0x36, 0xa2, 0x75, 0xcd, 0x12, 0xee, 0x0e, 0x3b, + 0x7a, 0xa7, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_priv_key[] = { + 0x34, 0xce, 0x5e, 0x59, 0xef, 0x00, 0x78, 0x53, 0x06, + 0xe8, 0x4a, 0xfd, 0x53, 0x47, 0xab, 0xe5, 0x68, 0x92, + 0x4e, 0xfe, 0x26, 0x32, 0x11, 0x1d, 0x05, 0x6a, 0xf9, + 0x1c, 0x4d, 0x7d, 0x59, 0x9a, +}; +static const u8 ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_expected_sig[] = { + 0x43, 0x3f, 0x32, 0xf8, 0xcb, 0xdb, 0x53, 0x3d, 0x1e, + 0x8f, 0x5f, 0x5b, 0xfa, 0xc8, 0x67, 0x90, 0x5d, 0x01, + 0x22, 0xa7, 0x40, 0x5d, 0x06, 0xa2, 0x06, 0xac, 0x6a, + 0xfb, 0x42, 0xf9, 0x9c, 0x66, 0x4a, 0xa8, 0xea, 0x8f, + 0x5c, 0xbc, 0x88, 0xf3, 0x3b, 0x66, 0x9f, 0x0d, 0xa6, + 0x21, 0xa9, 0xe2, 0x1c, 0xba, 0xcc, 0xca, 0x91, 0x97, + 0xe6, 0xdf, 0xcb, 0x14, 0x9a, 0x99, 0x26, 0xf2, 0xd7, + 0xd2, +}; +static const char ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_message[] = { + 0x61, 0x62, 0x63, +}; +static const ec_test_case ecrdsa_pygostlib_1_GOST_256bits_curve_test_case = { + .name="ECRDSA-STREEBOG256/GOST-256-curve 1", + .ec_str_p = &GOST_256bits_curve_str_params, + .priv_key = ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_pygostlib_1_GOST_256bits_curve_test_vector, + .hash_type = STREEBOG256, + .msg = ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_pygostlib_1_GOST_256bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +static int ecrdsa_nn_random_pygostlib_2_GOST_256bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x1b, 0x91, 0xc9, 0xc8, 0xf3, 0x3d, 0x16, 0x2f, 0xe0, + 0x97, 0xf2, 0x8e, 0x1d, 0x8a, 0x52, 0xab, 0x8f, 0x31, + 0x91, 0x55, 0x08, 0xf7, 0x1c, 0x80, 0x65, 0xac, 0x50, + 0x61, 0xff, 0x20, 0x07, 0x07, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_priv_key[] = { + 0x36, 0xf5, 0x26, 0x39, 0x79, 0x87, 0x88, 0x83, 0x06, + 0x56, 0x86, 0xd8, 0x7e, 0x04, 0xf0, 0x68, 0xbb, 0xf5, + 0x54, 0x18, 0xbf, 0xbf, 0x02, 0x1f, 0xa3, 0x0e, 0x9c, + 0xfb, 0xa7, 0x8d, 0x63, 0xef, +}; +static const u8 ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_expected_sig[] = { + 0x24, 0x28, 0x81, 0x56, 0xe2, 0xaa, 0xb4, 0xd7, 0xbd, + 0x33, 0x2c, 0x50, 0x39, 0xe0, 0x84, 0x8a, 0x85, 0x2a, + 0xfd, 0xab, 0x36, 0x35, 0xea, 0x1e, 0xdd, 0xd0, 0x28, + 0xf3, 0x34, 0x5d, 0x68, 0xcf, 0x24, 0xaf, 0x4b, 0xe3, + 0x86, 0xc6, 0x95, 0x9c, 0xfb, 0xd5, 0x0e, 0x2e, 0x11, + 0x17, 0x65, 0x09, 0x18, 0xea, 0xe9, 0x3c, 0x60, 0x67, + 0x3f, 0xe2, 0xa2, 0xe9, 0xde, 0x33, 0xe7, 0xff, 0x79, + 0x0c, +}; +static const char ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_message[] = { + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, +}; +static const ec_test_case ecrdsa_pygostlib_2_GOST_256bits_curve_test_case = { + .name="ECRDSA-STREEBOG256/GOST-256-curve 2", + .ec_str_p = &GOST_256bits_curve_str_params, + .priv_key = ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_pygostlib_2_GOST_256bits_curve_test_vector, + .hash_type = STREEBOG256, + .msg = ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_pygostlib_2_GOST_256bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_GOST256 */ +#endif /* WITH_HASH_STREEBOG256 */ + +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_GOST512 +#define ECRDSA_SHA512_GOST512_SELF_TEST + +/* Then, ECRDSA test vector on a GOST 512-bit curve */ + +static int ecrdsa_nn_random_iso14888_3_GOST_512bits_curve_test_vector(nn_t out, + nn_src_t q) +{ + int ret, cmp; + /* + * Current version of ISO 14888-3:2015 has a bad k value in its + * test vectors. The value of k is higher than q!!!! Instead of + * reducing the wrong value each time, let's change that false + * value for a correct one (i.e. the reduced one mod q). + * + + const u8 k_buf[] = { + 0xC5, 0x73, 0xF6, 0xB3, 0x01, 0xD9, 0x9C, 0x24, + 0xC4, 0x22, 0xA4, 0x27, 0x1E, 0x9E, 0xC9, 0x3B, + 0xAE, 0xAA, 0x6E, 0xEF, 0x0D, 0xE8, 0x24, 0x77, + 0xD8, 0xB7, 0x39, 0x1F, 0x9F, 0x67, 0x90, 0xD9, + 0xDD, 0xE5, 0x14, 0x6F, 0x02, 0xEC, 0xA5, 0x67, + 0x2C, 0x38, 0xFC, 0x80, 0x9C, 0xF4, 0xCA, 0x88, + 0x93, 0x7C, 0x4B, 0x3A, 0x39, 0x36, 0xAD, 0xF9, + 0x90, 0x8F, 0x79, 0x6C, 0x86, 0xC0, 0x5C, 0x43 + }; + + */ + + const u8 k_buf[] = { + 0x3b, 0x10, 0x9d, 0x0f, 0x05, 0xd9, 0x54, 0x96, + 0x1a, 0x08, 0x57, 0x30, 0x48, 0x3e, 0xec, 0x3a, + 0x8a, 0x54, 0x45, 0x89, 0x0e, 0x76, 0x06, 0x6e, + 0x2e, 0xe0, 0x41, 0x0c, 0x33, 0xc1, 0xee, 0x1e, + 0x8d, 0x86, 0xb9, 0x71, 0x6c, 0xb1, 0x2f, 0xd8, + 0xf9, 0x18, 0x43, 0xc2, 0xc3, 0x6c, 0x82, 0xa4, + 0xe2, 0x9f, 0xff, 0x5e, 0xbc, 0xef, 0x22, 0xcd, + 0xe4, 0x06, 0x23, 0x89, 0x76, 0xf2, 0x8e, 0x85 + }; + + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 ecrdsa_GOST_512bits_curve_test_vectors_priv_key[] = { + 0x0B, 0xA6, 0x04, 0x8A, 0xAD, 0xAE, 0x24, 0x1B, + 0xA4, 0x09, 0x36, 0xD4, 0x77, 0x56, 0xD7, 0xC9, + 0x30, 0x91, 0xA0, 0xE8, 0x51, 0x46, 0x69, 0x70, + 0x0E, 0xE7, 0x50, 0x8E, 0x50, 0x8B, 0x10, 0x20, + 0x72, 0xE8, 0x12, 0x3B, 0x22, 0x00, 0xA0, 0x56, + 0x33, 0x22, 0xDA, 0xD2, 0x82, 0x7E, 0x27, 0x14, + 0xA2, 0x63, 0x6B, 0x7B, 0xFD, 0x18, 0xAA, 0xDF, + 0xC6, 0x29, 0x67, 0x82, 0x1F, 0xA1, 0x8D, 0xD4 +}; + +static const u8 ecrdsa_GOST_512bits_curve_test_vectors_expected_sig[] = { + 0x13, 0xc5, 0x65, 0x57, 0xe3, 0x00, 0x89, 0x8b, + 0xf6, 0xc9, 0x1a, 0x08, 0xaf, 0x0c, 0xaf, 0x80, + 0x10, 0x46, 0xa2, 0xdc, 0x58, 0xcf, 0x7e, 0x84, + 0xa1, 0x5d, 0xa3, 0xb6, 0x89, 0xc0, 0xeb, 0x29, + 0x73, 0xf5, 0xbe, 0x70, 0x27, 0xdb, 0xdd, 0x77, + 0xbc, 0xe5, 0xd3, 0x37, 0x6a, 0xd5, 0x79, 0x3c, + 0x21, 0x31, 0x57, 0x85, 0xaa, 0x6d, 0x25, 0x36, + 0xa2, 0x0c, 0x91, 0x58, 0x14, 0xf2, 0xad, 0xdc, + 0x32, 0xC0, 0xB1, 0x5B, 0xE3, 0x67, 0x58, 0x3B, + 0xB3, 0xFA, 0xEF, 0xF1, 0x49, 0xAF, 0x87, 0xD1, + 0x18, 0xBF, 0x18, 0xE1, 0x34, 0x87, 0xE0, 0xC6, + 0xAB, 0x75, 0x80, 0xB8, 0x62, 0xEC, 0x10, 0x4A, + 0x41, 0xEC, 0x9A, 0x5F, 0xB1, 0x7B, 0x0E, 0x0E, + 0xDB, 0xCF, 0xFD, 0x92, 0x0D, 0x6F, 0x62, 0x7E, + 0x70, 0x4A, 0x82, 0xCC, 0x53, 0x41, 0x27, 0xF6, + 0x44, 0xFD, 0xC9, 0x58, 0x98, 0x4D, 0xDC, 0xA0 +}; + +static const ec_test_case ecrdsa_GOST_512bits_curve_test_case = { + .name = "ECRDSA-SHA512/GOST-512-curve", + .ec_str_p = &GOST_512bits_curve_str_params, + .priv_key = ecrdsa_GOST_512bits_curve_test_vectors_priv_key, + .priv_key_len = + sizeof(ecrdsa_GOST_512bits_curve_test_vectors_priv_key), + .nn_random = + ecrdsa_nn_random_iso14888_3_GOST_512bits_curve_test_vector, + .hash_type = SHA512, + .msg = "abc", + .msglen = 3, + .sig_type = ECRDSA, + .exp_sig = ecrdsa_GOST_512bits_curve_test_vectors_expected_sig, + .exp_siglen = + sizeof(ecrdsa_GOST_512bits_curve_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; +#endif /* WITH_CURVE_GOST512 */ +#endif /* WITH_HASH_SHA512 */ + +#ifdef WITH_HASH_STREEBOG512 +#ifdef WITH_CURVE_GOST512 +#define ECRDSA_STREEBOG512_GOST512_SELF_TEST + +static int ecrdsa_nn_random_pygostlib_1_GOST_512bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x03, 0xc3, 0xcb, 0xa3, 0x26, 0xc7, 0xdd, 0x44, 0x8e, + 0x98, 0xa1, 0x03, 0x37, 0x71, 0x4e, 0xf7, 0xa7, 0x9c, + 0xc1, 0x06, 0x30, 0x34, 0xb6, 0xcf, 0x63, 0x0c, 0x1d, + 0xe7, 0x7d, 0x80, 0xe0, 0x95, 0xc5, 0x7c, 0x5b, 0xa3, + 0x78, 0x01, 0x99, 0xde, 0x1f, 0x7c, 0xb0, 0x5b, 0x5b, + 0x08, 0x41, 0xd2, 0xcd, 0x88, 0x60, 0x8e, 0x75, 0xa8, + 0x8f, 0xe4, 0x9f, 0xee, 0xe8, 0xfd, 0xc2, 0x9f, 0x8b, + 0xa6, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_priv_key[] = { + 0x0c, 0x18, 0x44, 0xa6, 0x1c, 0xbb, 0x08, 0xb7, 0xa1, + 0x86, 0x32, 0x1e, 0xf5, 0x53, 0x97, 0x7d, 0xef, 0x40, + 0x87, 0x7e, 0xd8, 0x98, 0xfb, 0xf6, 0xfd, 0x3e, 0xab, + 0xe4, 0xcf, 0xcf, 0xd3, 0x04, 0x21, 0xe5, 0xbf, 0xcb, + 0x73, 0xce, 0xd7, 0x35, 0x98, 0xa5, 0x4f, 0x9d, 0x9e, + 0x4b, 0x55, 0x83, 0xd6, 0x04, 0x65, 0x3c, 0xb3, 0x0a, + 0xbb, 0xe0, 0x56, 0x96, 0x3f, 0x08, 0xaf, 0x9a, 0x5b, 0x4f, +}; +static const u8 ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_expected_sig[] = { + 0x0e, 0xf7, 0xf8, 0xcb, 0x41, 0x86, 0xce, 0xb5, 0x86, + 0x43, 0x53, 0x15, 0xec, 0x67, 0x48, 0xfe, 0x20, 0x58, + 0x35, 0x57, 0x51, 0xd3, 0xfe, 0x25, 0xe2, 0x42, 0xad, + 0x96, 0x58, 0xae, 0x55, 0x11, 0xef, 0xb3, 0x3f, 0x93, + 0x2d, 0x71, 0x0c, 0xea, 0xc9, 0xd7, 0x4e, 0x34, 0x98, + 0xde, 0x85, 0xc9, 0xf1, 0x31, 0x52, 0xfe, 0xf4, 0x65, + 0xa6, 0x57, 0x05, 0x78, 0x4d, 0x6d, 0x45, 0x40, 0x09, + 0x4b, 0x1f, 0x2f, 0xc0, 0x2b, 0x79, 0xc5, 0x85, 0x1a, + 0xc1, 0xc1, 0x4b, 0xaa, 0x63, 0x58, 0xab, 0x07, 0x6e, + 0x0b, 0xc7, 0xfd, 0x28, 0x98, 0xe9, 0x88, 0x90, 0x6c, + 0xd7, 0x14, 0x02, 0x30, 0x14, 0x8c, 0xa7, 0xe7, 0x24, + 0x9a, 0x64, 0x83, 0x63, 0x9c, 0x4f, 0x18, 0xf5, 0x84, + 0x7e, 0xce, 0x03, 0xad, 0x3f, 0x9f, 0x26, 0x2f, 0xcb, + 0xaa, 0x3c, 0x55, 0xf7, 0xee, 0xd2, 0x91, 0xb3, 0xe7, + 0xeb, 0x4b, +}; +static const char ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_message[] = { + 0x61, 0x62, 0x63, +}; +static const ec_test_case ecrdsa_pygostlib_1_GOST_512bits_curve_test_case = { + .name="ECRDSA-STREEBOG512/GOST-512-curve 1", + .ec_str_p = &GOST_512bits_curve_str_params, + .priv_key = ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_pygostlib_1_GOST_512bits_curve_test_vector, + .hash_type = STREEBOG512, + .msg = ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_pygostlib_1_GOST_512bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +static int ecrdsa_nn_random_pygostlib_2_GOST_512bits_curve_test_vector(nn_t out, nn_src_t q){ + int ret, cmp; + const u8 k_buf[] = { + 0x15, 0x56, 0x79, 0x4e, 0xed, 0x00, 0x7c, 0xdc, 0xc0, + 0xc1, 0x3f, 0xb3, 0x6b, 0xa3, 0xa3, 0x00, 0xdd, 0x16, + 0xce, 0x6d, 0x83, 0xf6, 0x49, 0xab, 0x8d, 0x7a, 0x06, + 0x38, 0x34, 0xf0, 0x8b, 0xaf, 0xbc, 0x4e, 0x2a, 0x30, + 0x25, 0xee, 0xa2, 0x59, 0x5a, 0xc6, 0x79, 0x57, 0x84, + 0xc9, 0x15, 0x65, 0xed, 0xcb, 0x33, 0x42, 0x8a, 0x7a, + 0xd0, 0xe7, 0x87, 0xfe, 0x3c, 0x16, 0xd1, 0xb5, 0x50, + 0x8a, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} +static const u8 ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_priv_key[] = { + 0x32, 0xb5, 0xda, 0xed, 0x49, 0x2e, 0x13, 0xc5, 0x8a, 0xb5, 0xa1, 0x41, + 0x9e, 0x01, 0x2f, 0x0c, 0x69, 0xc1, 0x4e, 0xf0, 0xcf, 0x84, 0xce, 0x81, + 0x4f, 0x76, 0x3b, 0x6f, 0xac, 0xd5, 0x7c, 0xd9, 0x42, 0xfe, 0x47, 0xe5, + 0x13, 0x38, 0xbd, 0xdd, 0xd5, 0x91, 0xe0, 0x38, 0xa6, 0x77, 0x17, 0x89, + 0x85, 0x9c, 0x55, 0x54, 0xa3, 0xd0, 0x94, 0x6d, 0x20, 0xb4, 0xd3, 0xfd, + 0x5c, 0xad, 0x17, 0xbc, +}; +static const u8 ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_expected_sig[] = { + 0x06, 0xfa, 0x71, 0xf0, 0xf9, 0x5b, 0xab, 0x4f, 0x08, 0x5b, 0x81, 0x44, + 0x32, 0x3a, 0x79, 0xa3, 0x9f, 0xb6, 0x72, 0x7c, 0x5b, 0x14, 0x48, 0xcb, + 0x2b, 0x42, 0xc9, 0x75, 0xb8, 0x35, 0x63, 0xf0, 0x6f, 0x81, 0x02, 0x78, + 0xd3, 0x2d, 0x7b, 0x04, 0x91, 0x11, 0xb0, 0x69, 0xa0, 0xba, 0x62, 0x47, + 0x3c, 0x72, 0x29, 0xef, 0x1b, 0xc2, 0x5c, 0xe5, 0x94, 0x4a, 0xf4, 0xbb, + 0x64, 0xf8, 0x68, 0xb9, 0x2e, 0x29, 0xa4, 0x50, 0xd2, 0x38, 0xae, 0xc2, + 0x8f, 0x6c, 0x3f, 0xcf, 0x2b, 0x13, 0x5b, 0xf9, 0x73, 0x6a, 0xf8, 0xac, + 0x13, 0xff, 0xff, 0x60, 0x19, 0xbd, 0x89, 0xae, 0x4e, 0x29, 0xb8, 0x07, + 0xea, 0xa9, 0xe3, 0xf1, 0x78, 0xa2, 0x4f, 0x07, 0x3d, 0xd8, 0x6b, 0x9f, + 0x2e, 0xb7, 0x2d, 0x96, 0xd2, 0xea, 0xae, 0x68, 0x38, 0xdb, 0x0d, 0x42, + 0xa7, 0x73, 0xf5, 0x5b, 0xbd, 0x3c, 0xe8, 0x84, +}; +static const char ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_message[] = { + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, + 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, + 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, + 0x64, 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64, + 0x61, 0x62, 0x63, 0x64, +}; +static const ec_test_case ecrdsa_pygostlib_2_GOST_512bits_curve_test_case = { + .name="ECRDSA-STREEBOG512/GOST-512-curve 2", + .ec_str_p = &GOST_512bits_curve_str_params, + .priv_key = ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_priv_key, + .priv_key_len = sizeof(ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_priv_key), + .nn_random = ecrdsa_nn_random_pygostlib_2_GOST_512bits_curve_test_vector, + .hash_type = STREEBOG512, + .msg = ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_message, + .msglen = sizeof(ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_message), + .sig_type = ECRDSA, + .exp_sig = ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_expected_sig, + .exp_siglen = sizeof(ecrdsa_pygostlib_2_GOST_512bits_curve_test_vector_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +#endif /* WITH_CURVE_GOST512 */ +#endif /* WITH_HASH_STREEBOG512 */ + +#endif /* defined(USE_ISO14888_3_ECRDSA) */ + +#endif /* WITH_SIG_ECRDSA */ + +/******************************************************************* + ************** SM2 tests ****************************************** + *******************************************************************/ + +/* + * Unlike other signature algorithms (defined in ISO 14888-3:2015) for + * which tests vectors are based on secp* or brainpoolp* curves, SM2 + * tests vectors are based on custom curves. + */ + +#ifdef WITH_SIG_SM2 +#ifdef WITH_HASH_SM3 + +#ifdef WITH_CURVE_SM2P256TEST +#define SM2_SM3_CURVE_SM2P256TEST + +/* First, SM2 test vector on a 256-bit SM2 TEST curve */ + +static int sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vector(nn_t out, + nn_src_t + q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x6C, 0xB2, 0x8D, 0x99, 0x38, 0x5C, 0x17, 0x5C, + 0x94, 0xF9, 0x4E, 0x93, 0x48, 0x17, 0x66, 0x3F, + 0xC1, 0x76, 0xD9, 0x25, 0xDD, 0x72, 0xB7, 0x27, + 0x26, 0x0D, 0xBA, 0xAE, 0x1F, 0xB2, 0xF9, 0x6F + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_priv_key[] = { + 0x12, 0x8B, 0x2F, 0xA8, 0xBD, 0x43, 0x3C, 0x6C, + 0x06, 0x8C, 0x8D, 0x80, 0x3D, 0xFF, 0x79, 0x79, + 0x2A, 0x51, 0x9A, 0x55, 0x17, 0x1B, 0x1B, 0x65, + 0x0C, 0x23, 0x66, 0x1D, 0x15, 0x89, 0x72, 0x63 +}; + +static const u8 sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_expected_sig[] = { + 0x40, 0xF1, 0xEC, 0x59, 0xF7, 0x93, 0xD9, 0xF4, + 0x9E, 0x09, 0xDC, 0xEF, 0x49, 0x13, 0x0D, 0x41, + 0x94, 0xF7, 0x9F, 0xB1, 0xEE, 0xD2, 0xCA, 0xA5, + 0x5B, 0xAC, 0xDB, 0x49, 0xC4, 0xE7, 0x55, 0xD1, + 0x6F, 0xC6, 0xDA, 0xC3, 0x2C, 0x5D, 0x5C, 0xF1, + 0x0C, 0x77, 0xDF, 0xB2, 0x0F, 0x7C, 0x2E, 0xB6, + 0x67, 0xA4, 0x57, 0x87, 0x2F, 0xB0, 0x9E, 0xC5, + 0x63, 0x27, 0xA6, 0x7E, 0xC7, 0xDE, 0xEB, 0xE7 +}; + +static const char sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_msg[] = "message digest"; + +static const char sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_adata[] = "ALICE123@YAHOO.COM"; + +static const ec_test_case sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_case = { + .name = "SM2-SM3/SM2P256TEST", + .ec_str_p = &sm2p256test_str_params, + .priv_key = sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_priv_key, + .priv_key_len = sizeof(sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_priv_key), + .nn_random = sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vector, + .hash_type = SM3, + .msg = sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_msg, + .msglen = 14, + .sig_type = SM2, + .exp_sig = sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_expected_sig, + .exp_siglen = sizeof(sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_expected_sig), + .adata = (const u8*)sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_vectors_adata, + .adata_len = 18, +}; +#endif /* WITH_CURVE_SM2P256TEST */ + +#ifdef WITH_CURVE_SM2P256V1 +#define SM2_SM3_CURVE_SM2P256V1 + +/* SM2 test vector on a 256-bit SM2 standardized curve */ + +static int sm2_nn_random_sm2p256v1_test_vector(nn_t out, nn_src_t q) +{ + int ret, cmp; + const u8 k_buf[] = { + 0x59, 0x27, 0x6E, 0x27, 0xD5, 0x06, 0x86, 0x1A, 0x16, + 0x68, 0x0F, 0x3A, 0xD9, 0xC0, 0x2D, 0xCC, 0xEF, 0x3C, + 0xC1, 0xFA, 0x3C, 0xDB, 0xE4, 0xCE, 0x6D, 0x54, 0xB8, + 0x0D, 0xEA, 0xC1, 0xBC, 0x21, + }; + ret = nn_init_from_buf(out, k_buf, sizeof(k_buf)); EG(ret, err); + ret = nn_cmp(out, q, &cmp); EG(ret, err); + + ret = (cmp >= 0) ? -1 : 0; + +err: + return ret; +} + +static const u8 sm2_nn_random_sm2p256v1_test_vectors_priv_key[] = { + 0x39, 0x45, 0x20, 0x8F, 0x7B, 0x21, 0x44, 0xB1, 0x3F, 0x36, 0xE3, + 0x8A, 0xC6, 0xD3, 0x9F, 0x95, 0x88, 0x93, 0x93, 0x69, 0x28, 0x60, + 0xB5, 0x1A, 0x42, 0xFB, 0x81, 0xEF, 0x4D, 0xF7, 0xC5, 0xB8, +}; + +static const u8 sm2_nn_random_sm2p256v1_test_vectors_expected_sig[] = { + 0xF5, 0xA0, 0x3B, 0x06, 0x48, 0xD2, 0xC4, 0x63, 0x0E, 0xEA, 0xC5, + 0x13, 0xE1, 0xBB, 0x81, 0xA1, 0x59, 0x44, 0xDA, 0x38, 0x27, 0xD5, + 0xB7, 0x41, 0x43, 0xAC, 0x7E, 0xAC, 0xEE, 0xE7, 0x20, 0xB3, 0xB1, + 0xB6, 0xAA, 0x29, 0xDF, 0x21, 0x2F, 0xD8, 0x76, 0x31, 0x82, 0xBC, + 0x0D, 0x42, 0x1C, 0xA1, 0xBB, 0x90, 0x38, 0xFD, 0x1F, 0x7F, 0x42, + 0xD4, 0x84, 0x0B, 0x69, 0xC4, 0x85, 0xBB, 0xC1, 0xAA, +}; + +static const u8 sm2_nn_random_sm2p256v1_test_vectors_adata[] = { + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, +}; + +static const u8 tmp_msg_sm2_sm2p256v1[] = { + 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, +}; +static const ec_test_case sm2_nn_random_sm2p256v1_test_case = { + .name = "SM2-SM3/SM2P256V1", + .ec_str_p = &sm2p256v1_str_params, + .priv_key = sm2_nn_random_sm2p256v1_test_vectors_priv_key, + .priv_key_len = sizeof(sm2_nn_random_sm2p256v1_test_vectors_priv_key), + .nn_random = sm2_nn_random_sm2p256v1_test_vector, + .hash_type = SM3, + .msg = (const char *)tmp_msg_sm2_sm2p256v1, + .msglen = sizeof(tmp_msg_sm2_sm2p256v1), + .sig_type = SM2, + .exp_sig = sm2_nn_random_sm2p256v1_test_vectors_expected_sig, + .exp_siglen = sizeof(sm2_nn_random_sm2p256v1_test_vectors_expected_sig), + .adata = sm2_nn_random_sm2p256v1_test_vectors_adata, + .adata_len = sizeof(sm2_nn_random_sm2p256v1_test_vectors_adata), +}; +#endif /* WITH_CURVE_SM2P256TEST */ + + +#endif /* WITH_HASH_SM3 */ +#endif /* WITH_SIG_SM2 */ + + +/******************************************************************* + ************** EdDSA tests **************************************** + *******************************************************************/ +#ifdef WITH_SIG_EDDSA25519 +#ifdef WITH_HASH_SHA512 +#ifdef WITH_CURVE_WEI25519 +#define EDDSA25519_SHA512_WEI25519_SELF_TEST + +#include "ed25519_test_vectors.h" + +#define EDDSA25519PH_SHA512_WEI25519_SELF_TEST + +#include "ed25519ph_test_vectors.h" + +#define EDDSA25519CTX_SHA512_WEI25519_SELF_TEST + +#include "ed25519ctx_test_vectors.h" + +#endif /* WITH_CURVE_WEI25519 */ +#endif /* WITH_HASH_SHA512 */ +#endif /* WITH_SIG_EDDSA */ + +#ifdef WITH_SIG_EDDSA448 +#ifdef WITH_HASH_SHAKE256 +#ifdef WITH_CURVE_WEI448 +#define EDDSA448_SHAKE256_WEI448_SELF_TEST + +#include "ed448_test_vectors.h" + +#define EDDSA448PH_SHAKE256_WEI448_SELF_TEST + +#include "ed448ph_test_vectors.h" + +#endif /* WITH_CURVE_WEI448 */ +#endif /* WITH_HASH_SHAKE256 */ +#endif /* WITH_SIG_EDDSA */ + +/*********** Deterministic ECDSA tests taken from RFC6979 **************/ +#ifdef WITH_SIG_DECDSA + +#include "decdsa_test_vectors.h" + +#endif /* WITH_SIG_DECDSA */ + +#if defined(WITH_SIG_BIGN) && defined(WITH_CURVE_BIGN256V1) + +/* NOTE: tests taken from STB 34.101.45-2013 */ +#include "bign_test_vectors.h" + +#endif + +#if defined(WITH_SIG_DBIGN) && defined(WITH_CURVE_BIGN256V1) + +/* NOTE: tests taken from STB 34.101.45-2013 */ +#include "dbign_test_vectors.h" + +#endif + +#if defined(WITH_SIG_BIP0340) && defined(WITH_HASH_SHA256) && defined(WITH_CURVE_SECP256K1) + +/* NOTE: tests taken from: + * https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv + */ +#include "bip0340_test_vectors.h" + +#endif + +/* ADD curve test vectors header here */ +/* XXX: Do not remove the comment above, as it is + * used by external tools as a placeholder to add or + * remove automatically generated code. + */ + +/* Dummy empty test case to avoid empty array + * when no test case is defined + */ +static const ec_test_case dummy_test_case = { + .name = "Dummy SIGN", + .ec_str_p = NULL, + .priv_key = NULL, + .priv_key_len = 0, + .nn_random = NULL, + .hash_type = UNKNOWN_HASH_ALG, + .msg = NULL, + .msglen = 0, + .sig_type = UNKNOWN_ALG, + .exp_sig = NULL, + .exp_siglen = 0, + .adata = NULL, + .adata_len = 0 +}; + +/* List of all test cases */ + +static const ec_test_case *ec_fixed_vector_tests[] = { + /* ECDSA */ +#ifdef ECDSA_SHA224_SECP224R1_SELF_TEST + &ecdsa_secp224r1_test_case, +#endif +#ifdef ECDSA_SHA256_SECP256R1_SELF_TEST + &ecdsa_secp256r1_test_case, +#endif +#ifdef ECDSA_SHA512_SECP256R1_SELF_TEST + &ecdsa_secp256r1_sha512_test_case, +#endif +#ifdef ECDSA_SHA384_SECP384R1_SELF_TEST + &ecdsa_secp384r1_test_case, +#endif +#ifdef ECDSA_SHA512_SECP521R1_SELF_TEST + &ecdsa_secp521r1_test_case, +#endif +#ifdef ECDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + &ecdsa_brainpoolp256r1_test_case, +#endif +#ifdef ECDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + &ecdsa_brainpoolp384r1_test_case, +#endif +#ifdef ECDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + &ecdsa_brainpoolp512r1_test_case, +#endif +#ifdef ECDSA_SHA256_FRP256V1_SELF_TEST + &ecdsa_frp256v1_test_case, +#endif +#ifdef ECDSA_SHA3_224_SECP224R1_SELF_TEST + &ecdsa_secp224r1_sha3_224_test_case, +#endif +#ifdef ECDSA_SHA3_256_SECP256R1_SELF_TEST + &ecdsa_secp256r1_sha3_256_test_case, +#endif +#ifdef ECDSA_SHA3_512_SECP256R1_SELF_TEST + &ecdsa_secp256r1_sha3_512_test_case, +#endif +#ifdef ECDSA_SHA3_384_SECP384R1_SELF_TEST + &ecdsa_secp384r1_sha3_384_test_case, +#endif +#ifdef ECDSA_SHA3_512_SECP521R1_SELF_TEST + &ecdsa_secp521r1_sha3_512_test_case, +#endif +#ifdef ECDSA_SHA224_SECP192R1_SELF_TEST + &ecdsa_secp192r1_test_case, +#endif + /* ECKCDSA */ +#ifdef ECKCDSA_SHA224_SECP224R1_SELF_TEST + &eckcdsa_secp224r1_test_case, +#endif +#ifdef ECKCDSA_SHA256_SECP224R1_SELF_TEST + &eckcdsa_secp224r1_sha256_test_case, +#endif +#ifdef ECKCDSA_SHA256_SECP256R1_SELF_TEST + &eckcdsa_secp256r1_test_case, +#endif +#ifdef ECKCDSA_SHA384_SECP384R1_SELF_TEST + &eckcdsa_secp384r1_test_case, +#endif +#ifdef ECKCDSA_SHA512_SECP256R1_SELF_TEST + &eckcdsa_secp256r1_sha512_test_case, +#endif +#ifdef ECKCDSA_SHA512_SECP521R1_SELF_TEST + &eckcdsa_secp521r1_test_case, +#endif +#ifdef ECKCDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + &eckcdsa_brainpoolp256r1_test_case, +#endif +#ifdef ECKCDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + &eckcdsa_brainpoolp384r1_test_case, +#endif +#ifdef ECKCDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + &eckcdsa_brainpoolp512r1_test_case, +#endif +#ifdef ECKCDSA_SHA256_FRP256V1_SELF_TEST + &eckcdsa_frp256v1_test_case, +#endif + /* ECSDSA */ +#ifdef ECSDSA_SHA224_SECP224R1_SELF_TEST + &ecsdsa_secp224r1_test_case, +#endif +#ifdef ECSDSA_SHA256_SECP256R1_SELF_TEST + &ecsdsa_secp256r1_test_case, +#endif +#ifdef ECSDSA_SHA384_SECP384R1_SELF_TEST + &ecsdsa_secp384r1_test_case, +#endif +#ifdef ECSDSA_SHA512_SECP521R1_SELF_TEST + &ecsdsa_secp521r1_test_case, +#endif +#ifdef ECSDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + &ecsdsa_brainpoolp256r1_test_case, +#endif +#ifdef ECSDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + &ecsdsa_brainpoolp384r1_test_case, +#endif +#ifdef ECSDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + &ecsdsa_brainpoolp512r1_test_case, +#endif +#ifdef ECSDSA_SHA256_FRP256V1_SELF_TEST + &ecsdsa_frp256v1_test_case, +#endif + /* ECOSDSA */ +#ifdef ECOSDSA_SHA224_SECP224R1_SELF_TEST + &ecosdsa_secp224r1_test_case, +#endif +#ifdef ECOSDSA_SHA256_SECP256R1_SELF_TEST + &ecosdsa_secp256r1_test_case, +#endif +#ifdef ECOSDSA_SHA384_SECP384R1_SELF_TEST + &ecosdsa_secp384r1_test_case, +#endif +#ifdef ECOSDSA_SHA512_SECP521R1_SELF_TEST + &ecosdsa_secp521r1_test_case, +#endif +#ifdef ECOSDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + &ecosdsa_brainpoolp256r1_test_case, +#endif +#ifdef ECOSDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + &ecosdsa_brainpoolp384r1_test_case, +#endif +#ifdef ECOSDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + &ecosdsa_brainpoolp512r1_test_case, +#endif +#ifdef ECOSDSA_SHA256_FRP256V1_SELF_TEST + &ecosdsa_frp256v1_test_case, +#endif + /* ECFSDSA */ +#ifdef ECFSDSA_SHA224_SECP224R1_SELF_TEST + &ecfsdsa_secp224r1_test_case, +#endif +#ifdef ECFSDSA_SHA256_SECP256R1_SELF_TEST + &ecfsdsa_secp256r1_test_case, +#endif +#ifdef ECFSDSA_SHA384_SECP384R1_SELF_TEST + &ecfsdsa_secp384r1_test_case, +#endif +#ifdef ECFSDSA_SHA512_SECP521R1_SELF_TEST + &ecfsdsa_secp521r1_test_case, +#endif +#ifdef ECFSDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + &ecfsdsa_brainpoolp256r1_test_case, +#endif +#ifdef ECFSDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + &ecfsdsa_brainpoolp384r1_test_case, +#endif +#ifdef ECFSDSA_SHA512_BRAINPOOLP512R1_SELF_TEST + &ecfsdsa_brainpoolp512r1_test_case, +#endif +#ifdef ECFSDSA_SHA256_FRP256V1_SELF_TEST + &ecfsdsa_frp256v1_test_case, +#endif + /* ECGDSA */ +#ifdef ECGDSA_SHA256_BRAINPOOLP192R1_SELF_TEST + &ecgdsa_brainpoolp192r1_test_case, +#endif +#ifdef ECGDSA_SHA224_BRAINPOOLP224R1_SELF_TEST + &ecgdsa_brainpoolp224r1_test_case, +#endif +#ifdef ECGDSA_SHA256_BRAINPOOLP256R1_SELF_TEST + &ecgdsa_brainpoolp256r1_test_case, +#endif +#ifdef ECGDSA_SHA384_BRAINPOOLP384R1_SELF_TEST + &ecgdsa_brainpoolp384r1_test_case, +#endif + /* ECRDSA */ +#ifndef USE_ISO14888_3_ECRDSA +#ifdef ECRDSA_STREEBOG256_GOST256_SELF_TEST + &ecrdsa_rfc4491_bis_1_GOST_256bits_curve_test_case, +#endif +#ifdef ECRDSA_STREEBOG256_GOST256_PARAMSETA_SELF_TEST + &ecrdsa_rfc4491_bis_2_GOST_256bits_curve_test_case, +#endif +#ifdef ECRDSA_STREEBOG512_GOST512_SELF_TEST + &ecrdsa_rfc4491_bis_1_GOST_512bits_curve_test_case, +#endif +/**/ +#else /* defined(USE_ISO14888_3_ECRDSA) */ +#ifdef ECRDSA_SHA256_GOST256_SELF_TEST + &ecrdsa_GOST_256bits_curve_test_case, +#endif +#ifdef ECRDSA_SHA512_GOST512_SELF_TEST + &ecrdsa_GOST_512bits_curve_test_case, +#endif +#ifdef ECRDSA_STREEBOG256_GOST256_SELF_TEST + &ecrdsa_pygostlib_1_GOST_256bits_curve_test_case, + &ecrdsa_pygostlib_2_GOST_256bits_curve_test_case, +#endif +#ifdef ECRDSA_STREEBOG512_GOST512_SELF_TEST + &ecrdsa_pygostlib_1_GOST_512bits_curve_test_case, + &ecrdsa_pygostlib_2_GOST_512bits_curve_test_case, +#endif +#endif /* defined(USE_ISO14888_3_ECRDSA) */ +#ifdef SM2_SM3_CURVE_SM2P256TEST + &sm2_nn_random_iso14888_3_SM2_256bits_test_curve_test_case, +#endif +#ifdef SM2_SM3_CURVE_SM2P256V1 + &sm2_nn_random_sm2p256v1_test_case, +#endif + /* EdDSA Ed25519 */ +#ifdef EDDSA25519_SHA512_WEI25519_SELF_TEST + EDDSA25519_SHA512_WEI25519_ALL_TESTS() +#endif + /* EdDSA Ed25519ph */ +#ifdef EDDSA25519PH_SHA512_WEI25519_SELF_TEST + EDDSA25519PH_SHA512_WEI25519_ALL_TESTS() +#endif + /* EdDSA Ed25519ctx */ +#ifdef EDDSA25519CTX_SHA512_WEI25519_SELF_TEST + EDDSA25519CTX_SHA512_WEI25519_ALL_TESTS() +#endif + /* EdDSA Ed448 */ +#ifdef EDDSA448_SHAKE256_WEI448_SELF_TEST + EDDSA448_SHAKE256_WEI448_ALL_TESTS() +#endif + /* EdDSA Ed448PH */ +#ifdef EDDSA448PH_SHAKE256_WEI448_SELF_TEST + EDDSA448PH_SHAKE256_WEI448_ALL_TESTS() +#endif +#ifdef DECDSA_SHA224_SECP192R1_SELF_TEST_0 + &decdsa_rfc6979_SECP192R1_SHA224_0_test_case, +#endif /* DECDSA_SHA224_SECP192R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA256_SECP192R1_SELF_TEST_0 + &decdsa_rfc6979_SECP192R1_SHA256_0_test_case, +#endif /* DECDSA_SHA256_SECP192R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA384_SECP192R1_SELF_TEST_0 + &decdsa_rfc6979_SECP192R1_SHA384_0_test_case, +#endif /* DECDSA_SHA384_SECP192R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA512_SECP192R1_SELF_TEST_0 + &decdsa_rfc6979_SECP192R1_SHA512_0_test_case, +#endif /* DECDSA_SHA512_SECP192R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA224_SECP192R1_SELF_TEST_1 + &decdsa_rfc6979_SECP192R1_SHA224_1_test_case, +#endif /* DECDSA_SHA224_SECP192R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA256_SECP192R1_SELF_TEST_1 + &decdsa_rfc6979_SECP192R1_SHA256_1_test_case, +#endif /* DECDSA_SHA256_SECP192R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA384_SECP192R1_SELF_TEST_1 + &decdsa_rfc6979_SECP192R1_SHA384_1_test_case, +#endif /* DECDSA_SHA384_SECP192R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA512_SECP192R1_SELF_TEST_1 + &decdsa_rfc6979_SECP192R1_SHA512_1_test_case, +#endif /* DECDSA_SHA512_SECP192R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA224_SECP256R1_SELF_TEST_0 + &decdsa_rfc6979_SECP256R1_SHA224_0_test_case, +#endif /* DECDSA_SHA224_SECP256R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA256_SECP256R1_SELF_TEST_0 + &decdsa_rfc6979_SECP256R1_SHA256_0_test_case, +#endif /* DECDSA_SHA256_SECP256R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA384_SECP256R1_SELF_TEST_0 + &decdsa_rfc6979_SECP256R1_SHA384_0_test_case, +#endif /* DECDSA_SHA384_SECP256R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA512_SECP256R1_SELF_TEST_0 + &decdsa_rfc6979_SECP256R1_SHA512_0_test_case, +#endif /* DECDSA_SHA512_SECP256R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA224_SECP256R1_SELF_TEST_1 + &decdsa_rfc6979_SECP256R1_SHA224_1_test_case, +#endif /* DECDSA_SHA224_SECP256R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA256_SECP256R1_SELF_TEST_1 + &decdsa_rfc6979_SECP256R1_SHA256_1_test_case, +#endif /* DECDSA_SHA256_SECP256R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA384_SECP256R1_SELF_TEST_1 + &decdsa_rfc6979_SECP256R1_SHA384_1_test_case, +#endif /* DECDSA_SHA384_SECP256R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA512_SECP256R1_SELF_TEST_1 + &decdsa_rfc6979_SECP256R1_SHA512_1_test_case, +#endif /* DECDSA_SHA512_SECP256R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA224_SECP384R1_SELF_TEST_0 + &decdsa_rfc6979_SECP384R1_SHA224_0_test_case, +#endif /* DECDSA_SHA224_SECP384R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA256_SECP384R1_SELF_TEST_0 + &decdsa_rfc6979_SECP384R1_SHA256_0_test_case, +#endif /* DECDSA_SHA256_SECP384R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA384_SECP384R1_SELF_TEST_0 + &decdsa_rfc6979_SECP384R1_SHA384_0_test_case, +#endif /* DECDSA_SHA384_SECP384R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA512_SECP384R1_SELF_TEST_0 + &decdsa_rfc6979_SECP384R1_SHA512_0_test_case, +#endif /* DECDSA_SHA512_SECP384R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA224_SECP384R1_SELF_TEST_1 + &decdsa_rfc6979_SECP384R1_SHA224_1_test_case, +#endif /* DECDSA_SHA224_SECP384R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA256_SECP384R1_SELF_TEST_1 + &decdsa_rfc6979_SECP384R1_SHA256_1_test_case, +#endif /* DECDSA_SHA256_SECP384R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA384_SECP384R1_SELF_TEST_1 + &decdsa_rfc6979_SECP384R1_SHA384_1_test_case, +#endif /* DECDSA_SHA384_SECP384R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA512_SECP384R1_SELF_TEST_1 + &decdsa_rfc6979_SECP384R1_SHA512_1_test_case, +#endif /* DECDSA_SHA512_SECP384R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA224_SECP521R1_SELF_TEST_0 + &decdsa_rfc6979_SECP521R1_SHA224_0_test_case, +#endif /* DECDSA_SHA224_SECP521R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA256_SECP521R1_SELF_TEST_0 + &decdsa_rfc6979_SECP521R1_SHA256_0_test_case, +#endif /* DECDSA_SHA256_SECP521R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA384_SECP521R1_SELF_TEST_0 + &decdsa_rfc6979_SECP521R1_SHA384_0_test_case, +#endif /* DECDSA_SHA384_SECP521R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA512_SECP521R1_SELF_TEST_0 + &decdsa_rfc6979_SECP521R1_SHA512_0_test_case, +#endif /* DECDSA_SHA512_SECP521R1_SELF_TEST_0 */ +#ifdef DECDSA_SHA224_SECP521R1_SELF_TEST_1 + &decdsa_rfc6979_SECP521R1_SHA224_1_test_case, +#endif /* DECDSA_SHA224_SECP521R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA256_SECP521R1_SELF_TEST_1 + &decdsa_rfc6979_SECP521R1_SHA256_1_test_case, +#endif /* DECDSA_SHA256_SECP521R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA384_SECP521R1_SELF_TEST_1 + &decdsa_rfc6979_SECP521R1_SHA384_1_test_case, +#endif /* DECDSA_SHA384_SECP521R1_SELF_TEST_1 */ +#ifdef DECDSA_SHA512_SECP521R1_SELF_TEST_1 + &decdsa_rfc6979_SECP521R1_SHA512_1_test_case, +#endif /* DECDSA_SHA512_SECP521R1_SELF_TEST_1 */ +#if defined(WITH_SIG_BIGN) && defined(WITH_CURVE_BIGN256V1) + BIGN_ALL_TESTS() +#endif +#if defined(WITH_SIG_DBIGN) && defined(WITH_CURVE_BIGN256V1) + DBIGN_ALL_TESTS() +#endif +#if defined(WITH_SIG_BIP0340) && defined(WITH_HASH_SHA256) && defined(WITH_CURVE_SECP256K1) + BIP0340_ALL_TESTS() +#endif + + /* Dummy empty test case to avoid empty array + * when no test case is defined */ + &dummy_test_case, + +/* ADD curve test case here */ +/* XXX: Do not remove the comment above, as it is + * used by external tools as a placeholder to add or + * remove automatically generated code. + */ +}; + +#define EC_FIXED_VECTOR_NUM_TESTS \ + (sizeof(ec_fixed_vector_tests) / sizeof(ec_fixed_vector_tests[0])) + + +/* Dummy empty test case to avoid empty array + * when no test case is defined + */ +static const ecdh_test_case ecdh_dummy_test_case = { + .name = "Dummy ECDH", + .ecdh_type = UNKNOWN_ALG, + .ec_str_p = NULL, + .our_priv_key = NULL, + .our_priv_key_len = 0, + .peer_pub_key = NULL, + .peer_pub_key_len = 0, + .exp_our_pub_key = NULL, + .exp_our_pub_key_len = 0, + .exp_shared_secret = NULL, + .exp_shared_secret_len = 0, +}; + +/******************************************************************* + ************** ECCCDH tests *************************************** + *******************************************************************/ +#ifdef WITH_ECCCDH +/* NOTE: these tests are taken from the NIST CAVS 14.1 test suite + * on curves P-192 P-224 P-256 P-384 P-521 + */ +#include "ecccdh_test_vectors.h" +#endif /* WITH_ECCCDH */ + +#ifdef WITH_X25519 +/* NOTE: tests taken from RFC7748 and https://tools.ietf.org/id/draft-ietf-ipsecme-safecurves-03.xml */ +#include "x25519_test_vectors.h" +#endif /* WITH_X25519 */ + +#ifdef WITH_X448 +/* NOTE: tests taken from RFC7748 */ +#include "x448_test_vectors.h" +#endif /* WITH_X448 */ + +#if defined(WITH_ECCCDH) || defined(WITH_X25519) || defined(WITH_X448) +static const ecdh_test_case *ecdh_fixed_vector_tests[] = { +#ifdef ECCCDH_SECP192R1_SELF_TEST_0 + &ecccdh_SECP192R1_0_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_0 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_1 + &ecccdh_SECP192R1_1_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_1 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_2 + &ecccdh_SECP192R1_2_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_2 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_3 + &ecccdh_SECP192R1_3_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_3 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_4 + &ecccdh_SECP192R1_4_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_4 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_5 + &ecccdh_SECP192R1_5_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_5 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_6 + &ecccdh_SECP192R1_6_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_6 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_7 + &ecccdh_SECP192R1_7_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_7 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_8 + &ecccdh_SECP192R1_8_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_8 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_9 + &ecccdh_SECP192R1_9_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_9 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_10 + &ecccdh_SECP192R1_10_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_10 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_11 + &ecccdh_SECP192R1_11_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_11 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_12 + &ecccdh_SECP192R1_12_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_12 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_13 + &ecccdh_SECP192R1_13_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_13 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_14 + &ecccdh_SECP192R1_14_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_14 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_15 + &ecccdh_SECP192R1_15_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_15 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_16 + &ecccdh_SECP192R1_16_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_16 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_17 + &ecccdh_SECP192R1_17_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_17 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_18 + &ecccdh_SECP192R1_18_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_18 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_19 + &ecccdh_SECP192R1_19_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_19 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_20 + &ecccdh_SECP192R1_20_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_20 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_21 + &ecccdh_SECP192R1_21_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_21 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_22 + &ecccdh_SECP192R1_22_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_22 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_23 + &ecccdh_SECP192R1_23_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_23 */ +#ifdef ECCCDH_SECP192R1_SELF_TEST_24 + &ecccdh_SECP192R1_24_test_case, +#endif /* ECCCDH_SECP192R1_SELF_TEST_24 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_0 + &ecccdh_SECP224R1_0_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_0 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_1 + &ecccdh_SECP224R1_1_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_1 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_2 + &ecccdh_SECP224R1_2_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_2 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_3 + &ecccdh_SECP224R1_3_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_3 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_4 + &ecccdh_SECP224R1_4_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_4 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_5 + &ecccdh_SECP224R1_5_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_5 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_6 + &ecccdh_SECP224R1_6_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_6 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_7 + &ecccdh_SECP224R1_7_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_7 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_8 + &ecccdh_SECP224R1_8_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_8 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_9 + &ecccdh_SECP224R1_9_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_9 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_10 + &ecccdh_SECP224R1_10_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_10 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_11 + &ecccdh_SECP224R1_11_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_11 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_12 + &ecccdh_SECP224R1_12_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_12 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_13 + &ecccdh_SECP224R1_13_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_13 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_14 + &ecccdh_SECP224R1_14_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_14 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_15 + &ecccdh_SECP224R1_15_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_15 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_16 + &ecccdh_SECP224R1_16_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_16 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_17 + &ecccdh_SECP224R1_17_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_17 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_18 + &ecccdh_SECP224R1_18_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_18 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_19 + &ecccdh_SECP224R1_19_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_19 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_20 + &ecccdh_SECP224R1_20_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_20 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_21 + &ecccdh_SECP224R1_21_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_21 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_22 + &ecccdh_SECP224R1_22_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_22 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_23 + &ecccdh_SECP224R1_23_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_23 */ +#ifdef ECCCDH_SECP224R1_SELF_TEST_24 + &ecccdh_SECP224R1_24_test_case, +#endif /* ECCCDH_SECP224R1_SELF_TEST_24 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_0 + &ecccdh_SECP256R1_0_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_0 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_1 + &ecccdh_SECP256R1_1_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_1 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_2 + &ecccdh_SECP256R1_2_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_2 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_3 + &ecccdh_SECP256R1_3_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_3 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_4 + &ecccdh_SECP256R1_4_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_4 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_5 + &ecccdh_SECP256R1_5_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_5 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_6 + &ecccdh_SECP256R1_6_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_6 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_7 + &ecccdh_SECP256R1_7_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_7 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_8 + &ecccdh_SECP256R1_8_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_8 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_9 + &ecccdh_SECP256R1_9_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_9 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_10 + &ecccdh_SECP256R1_10_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_10 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_11 + &ecccdh_SECP256R1_11_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_11 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_12 + &ecccdh_SECP256R1_12_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_12 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_13 + &ecccdh_SECP256R1_13_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_13 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_14 + &ecccdh_SECP256R1_14_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_14 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_15 + &ecccdh_SECP256R1_15_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_15 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_16 + &ecccdh_SECP256R1_16_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_16 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_17 + &ecccdh_SECP256R1_17_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_17 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_18 + &ecccdh_SECP256R1_18_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_18 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_19 + &ecccdh_SECP256R1_19_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_19 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_20 + &ecccdh_SECP256R1_20_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_20 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_21 + &ecccdh_SECP256R1_21_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_21 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_22 + &ecccdh_SECP256R1_22_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_22 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_23 + &ecccdh_SECP256R1_23_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_23 */ +#ifdef ECCCDH_SECP256R1_SELF_TEST_24 + &ecccdh_SECP256R1_24_test_case, +#endif /* ECCCDH_SECP256R1_SELF_TEST_24 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_0 + &ecccdh_SECP384R1_0_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_0 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_1 + &ecccdh_SECP384R1_1_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_1 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_2 + &ecccdh_SECP384R1_2_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_2 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_3 + &ecccdh_SECP384R1_3_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_3 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_4 + &ecccdh_SECP384R1_4_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_4 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_5 + &ecccdh_SECP384R1_5_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_5 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_6 + &ecccdh_SECP384R1_6_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_6 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_7 + &ecccdh_SECP384R1_7_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_7 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_8 + &ecccdh_SECP384R1_8_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_8 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_9 + &ecccdh_SECP384R1_9_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_9 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_10 + &ecccdh_SECP384R1_10_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_10 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_11 + &ecccdh_SECP384R1_11_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_11 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_12 + &ecccdh_SECP384R1_12_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_12 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_13 + &ecccdh_SECP384R1_13_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_13 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_14 + &ecccdh_SECP384R1_14_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_14 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_15 + &ecccdh_SECP384R1_15_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_15 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_16 + &ecccdh_SECP384R1_16_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_16 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_17 + &ecccdh_SECP384R1_17_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_17 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_18 + &ecccdh_SECP384R1_18_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_18 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_19 + &ecccdh_SECP384R1_19_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_19 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_20 + &ecccdh_SECP384R1_20_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_20 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_21 + &ecccdh_SECP384R1_21_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_21 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_22 + &ecccdh_SECP384R1_22_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_22 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_23 + &ecccdh_SECP384R1_23_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_23 */ +#ifdef ECCCDH_SECP384R1_SELF_TEST_24 + &ecccdh_SECP384R1_24_test_case, +#endif /* ECCCDH_SECP384R1_SELF_TEST_24 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_0 + &ecccdh_SECP521R1_0_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_0 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_1 + &ecccdh_SECP521R1_1_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_1 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_2 + &ecccdh_SECP521R1_2_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_2 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_3 + &ecccdh_SECP521R1_3_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_3 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_4 + &ecccdh_SECP521R1_4_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_4 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_5 + &ecccdh_SECP521R1_5_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_5 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_6 + &ecccdh_SECP521R1_6_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_6 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_7 + &ecccdh_SECP521R1_7_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_7 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_8 + &ecccdh_SECP521R1_8_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_8 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_9 + &ecccdh_SECP521R1_9_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_9 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_10 + &ecccdh_SECP521R1_10_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_10 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_11 + &ecccdh_SECP521R1_11_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_11 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_12 + &ecccdh_SECP521R1_12_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_12 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_13 + &ecccdh_SECP521R1_13_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_13 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_14 + &ecccdh_SECP521R1_14_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_14 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_15 + &ecccdh_SECP521R1_15_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_15 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_16 + &ecccdh_SECP521R1_16_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_16 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_17 + &ecccdh_SECP521R1_17_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_17 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_18 + &ecccdh_SECP521R1_18_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_18 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_19 + &ecccdh_SECP521R1_19_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_19 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_20 + &ecccdh_SECP521R1_20_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_20 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_21 + &ecccdh_SECP521R1_21_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_21 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_22 + &ecccdh_SECP521R1_22_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_22 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_23 + &ecccdh_SECP521R1_23_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_23 */ +#ifdef ECCCDH_SECP521R1_SELF_TEST_24 + &ecccdh_SECP521R1_24_test_case, +#endif /* ECCCDH_SECP521R1_SELF_TEST_24 */ +#if defined(WITH_X25519) && defined(WITH_CURVE_WEI25519) + &x25519_WEI25519_0_test_case, + &x25519_WEI25519_1_test_case, + &x25519_WEI25519_2_test_case, + &x25519_WEI25519_3_test_case, +#endif +#if defined(WITH_X448) && defined(WITH_CURVE_WEI448) + &x448_WEI448_0_test_case, + &x448_WEI448_1_test_case, +#endif + + /* Dummy empty test case to avoid empty array + * when no test case is defined */ + &ecdh_dummy_test_case, +}; +#endif /* !(defined(WITH_ECCCDH) || defined(WITH_X25519) || defined(WITH_X448)) */ + +#define ECDH_FIXED_VECTOR_NUM_TESTS \ + (sizeof(ecdh_fixed_vector_tests) / sizeof(ecdh_fixed_vector_tests[0])) + +/* + * A fixed test can fail in various ways. The way we report the failure + * to the caller is by returning a non-zero value, in which we encode + * some informations on the failure: curve, sig alg, hash alg, operation + * (key import, signature, sig comparison, verification). Those 4 pieces + * of information are each encoded on 8 bits in that order on the 28 LSB + * of the return value. The function below produces a meaningful negative + * return value in that specific format. + */ +typedef enum { + TEST_KEY_IMPORT_ERROR = 1, + TEST_SIG_ERROR = 2, + TEST_SIG_COMP_ERROR = 3, + TEST_VERIF_ERROR = 4, + TEST_ECDH_ERROR = 5, + TEST_ECDH_COMP_ERROR = 6, +} test_err_kind; + +static int encode_error_value(const ec_test_case *c, test_err_kind failed_test, u32 *err_val) +{ + ec_curve_type ctype; + ec_alg_type stype = c->sig_type; + hash_alg_type htype = c->hash_type; + test_err_kind etype = failed_test; + int ret; + + MUST_HAVE((c != NULL) && (err_val != NULL), ret, err); + + ret = ec_get_curve_type_by_name(c->ec_str_p->name->buf, + c->ec_str_p->name->buflen, &ctype); EG(ret, err); + + *err_val = (((u32)ctype << 24) | + ((u32)stype << 16) | + ((u32)htype << 8) | + ((u32)etype)); + ret = 0; + +err: + return ret; +} + +static inline int ecdh_encode_error_value(const ecdh_test_case *c, test_err_kind failed_test, u32 *err_val) +{ + ec_curve_type ctype; + ec_alg_type stype = c->ecdh_type; + test_err_kind etype = failed_test; + int ret; + + MUST_HAVE((c != NULL) && (err_val != NULL), ret, err); + + ret = ec_get_curve_type_by_name(c->ec_str_p->name->buf, + c->ec_str_p->name->buflen, &ctype); EG(ret, err); + + *err_val = (((u32)ctype << 24) | + ((u32)stype << 16) | + ((u32)0 << 8) | + ((u32)etype)); + ret = 0; + +err: + return ret; +} + +int perform_known_test_vectors_test(const char *sig, const char *hash, const char *curve); +int perform_random_sig_verif_test(const char *sig, const char *hash, const char *curve); +int perform_performance_test(const char *sig, const char *hash, const char *curve); + +#endif /* __EC_SELF_TESTS_CORE_H__ */ diff --git a/crypto/libecc/src/tests/ec_self_tests_core.c b/crypto/libecc/src/tests/ec_self_tests_core.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ec_self_tests_core.c @@ -0,0 +1,1975 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include +#include +#include +#include "ec_self_tests_core.h" + +/* Parallelize self tests? */ +#ifdef WITH_OPENMP_SELF_TESTS +/* No openmp without stdlib ... */ +#ifndef WITH_STDLIB +#error "Sorry: no possible self tests parallelization (OpenMP) without stdlib! Please use WITH_STDLIB" +#endif +#include +#include +static omp_lock_t global_lock; +static volatile u8 global_lock_initialized = 0; +#define OPENMP_LOCK() do { \ + if(!global_lock_initialized){ \ + omp_init_lock(&global_lock); \ + global_lock_initialized = 1; \ + } \ + omp_set_lock(&global_lock); \ +} while(0) +#define OPENMP_UNLOCK() do { \ + omp_unset_lock(&global_lock); \ +} while(0) +#define OPENMP_EG(ret, err) do { \ + if(ret){ \ + ext_printf("OpenMP abort following error ... %s:%d\n", __FILE__, __LINE__); \ + exit(-1); \ + } \ +} while(0) +#else +#define OPENMP_LOCK() +#define OPENMP_UNLOCK() +#define OPENMP_EG(ret, err) do { \ + EG(ret, err); \ +} while(0) +#endif + +ATTRIBUTE_WARN_UNUSED_RET static int ec_gen_import_export_kp(ec_key_pair *kp, const ec_params *params, + const ec_test_case *c) +{ + u8 pub_key_buf[EC_STRUCTURED_PUB_KEY_MAX_EXPORT_SIZE]; + u8 priv_key_buf[EC_STRUCTURED_PRIV_KEY_MAX_EXPORT_SIZE]; + u8 pub_key_buf_len, priv_key_buf_len; + ec_key_pair imported_kp; + int ret; + + MUST_HAVE(c != NULL, ret, err); + + ret = local_memset(pub_key_buf, 0, sizeof(pub_key_buf)); EG(ret, err); + ret = local_memset(priv_key_buf, 0, sizeof(priv_key_buf)); EG(ret, err); + ret = local_memset(&imported_kp, 0, sizeof(imported_kp)); EG(ret, err); + + /* Generate key pair */ + ret = ec_key_pair_gen(kp, params, c->sig_type); + if (ret) { + ext_printf("Error generating key pair\n"); + goto err; + } + pub_key_buf_len = EC_STRUCTURED_PUB_KEY_EXPORT_SIZE(&(kp->pub_key)); + priv_key_buf_len = EC_STRUCTURED_PRIV_KEY_EXPORT_SIZE(&(kp->priv_key)); + + /* Export public and private keys in buffers */ + ret = ec_structured_pub_key_export_to_buf(&(kp->pub_key), pub_key_buf, + pub_key_buf_len); + if (ret) { + ext_printf("Error exporting public key\n"); + goto err; + } + ret = ec_structured_priv_key_export_to_buf(&(kp->priv_key), + priv_key_buf, + priv_key_buf_len); + if (ret) { + ext_printf("Error exporting private key\n"); + goto err; + } + + /* Import public and private key */ + ret = ec_structured_pub_key_import_from_buf(&(imported_kp.pub_key), + params, + pub_key_buf, + pub_key_buf_len, + c->sig_type); + if (ret) { + ext_printf("Error importing public key\n"); + goto err; + } + ret = ec_structured_priv_key_import_from_buf(&(imported_kp.priv_key), + params, priv_key_buf, + priv_key_buf_len, + c->sig_type); + if (ret) { + ext_printf("Error importing private key\n"); + goto err; + } + ret = 0; + +err: + return ret; +} + +/* This function randomly splits the message input in small chunks to + * test the signature init / multiple updates / finalize mechanism for + * algorithms that support them. + */ +ATTRIBUTE_WARN_UNUSED_RET static int random_split_ec_sign(u8 *sig, u8 siglen, const ec_key_pair *key_pair, + const u8 *m, u32 mlen, + int (*rand) (nn_t out, nn_src_t q), + ec_alg_type sig_type, hash_alg_type hash_type, const u8 *adata, u16 adata_len) +{ + struct ec_sign_context ctx; + int ret; + u32 consumed; + + ret = local_memset(&ctx, 0, sizeof(ctx)); EG(ret, err); + + MUST_HAVE(sig != NULL, ret, err); + MUST_HAVE(key_pair != NULL, ret, err); + MUST_HAVE(m != NULL, ret, err); + /* note: adata == NULL is allowed */ + + ret = _ec_sign_init(&ctx, key_pair, rand, sig_type, hash_type, adata, adata_len); + if (ret) { + goto err; + } + /* We randomly split the input message in chunks and proceed with updates */ + consumed = 0; + while(consumed < mlen){ + u32 toconsume = 0; + ret = get_random((u8 *)&toconsume, sizeof(toconsume)); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + toconsume = (toconsume % (mlen - consumed)); + if(((mlen - consumed) == 1) && (toconsume == 0)){ + toconsume = 1; + } + ret = ec_sign_update(&ctx, &m[consumed], toconsume); + if (ret) { + goto err; + } + consumed += toconsume; + } + + ret = ec_sign_finalize(&ctx, sig, siglen); + + err: + return ret; +} + +/* This function randomly splits the message input in small chunks to + * test the verification init / multiple updates / finalize mechanism for + * algorithms that support them. + */ +ATTRIBUTE_WARN_UNUSED_RET static int random_split_ec_verify(const u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const u8 *m, u32 mlen, + ec_alg_type sig_type, hash_alg_type hash_type, const u8 *adata, u16 adata_len) +{ + int ret; + struct ec_verify_context ctx; + u32 consumed; + + ret = local_memset(&ctx, 0, sizeof(ctx)); EG(ret, err); + + ret = ec_verify_init(&ctx, pub_key, sig, siglen, sig_type, hash_type, adata, adata_len); + if (ret) { + goto err; + } + + /* We randomly split the input message in chunks and proceed with updates */ + consumed = 0; + while(consumed < mlen){ + u32 toconsume = 0; + ret = get_random((u8 *)&toconsume, sizeof(toconsume)); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + toconsume = (toconsume % (mlen - consumed)); + if(((mlen - consumed) == 1) && (toconsume == 0)){ + toconsume = 1; + } + ret = ec_verify_update(&ctx, &m[consumed], toconsume); + if (ret) { + goto err; + } + consumed += toconsume; + } + + ret = ec_verify_finalize(&ctx); + + err: + return ret; +} + + +/* Reduce pressure on the stack for small targets + * by letting the user override this value. + */ +#ifndef MAX_MSG_LEN +#if WORDSIZE == 16 +/* For wordsize 16 bits, avoid overflows */ +#define MAX_MSG_LEN 1024 +#else +#define MAX_MSG_LEN 8192 +#endif +#endif +#ifndef MAX_BATCH_SIG_SIZE +#define MAX_BATCH_SIG_SIZE 20 +#endif + +/* + * ECC generic self tests (sign/verify on random values + * with import/export) + */ +ATTRIBUTE_WARN_UNUSED_RET static int ec_import_export_test(const ec_test_case *c) +{ + ec_key_pair kp; + ec_params params; + int ret, check; + + MUST_HAVE(c != NULL, ret, err); + + ret = local_memset(&kp, 0, sizeof(kp)); EG(ret, err); + ret = local_memset(¶ms, 0, sizeof(params)); EG(ret, err); + + /* Import EC params from test case */ + ret = import_params(¶ms, c->ec_str_p); + if (ret) { + ext_printf("Error importing params\n"); + goto err; + } + + /* Generate, import/export a key pair */ + ret = ec_gen_import_export_kp(&kp, ¶ms, c); + if (ret) { + ext_printf("Error at key pair generation/import/export\n"); + goto err; + } + + /* Perform test */ + { + u16 msglen; + u8 siglen; + u8 msg[MAX_MSG_LEN]; + u8 sig[EC_MAX_SIGLEN]; + u8 check_type = 0; + u8 sig_tmp1[EC_MAX_SIGLEN]; + u8 sig_tmp2[EC_MAX_SIGLEN]; + FORCE_USED_VAR(check_type); + + ret = ec_get_sig_len(¶ms, c->sig_type, c->hash_type, + (u8 *)&siglen); + if (ret) { + ext_printf("Error computing effective sig size\n"); + goto err; + } + + /* Generate a random message to sign */ + ret = get_random((u8 *)&msglen, sizeof(msglen)); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + msglen = msglen % MAX_MSG_LEN; + ret = get_random(msg, msglen); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + + ret = _ec_sign(sig, siglen, &kp, msg, msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); + if (ret) { + ext_printf("Error when signing\n"); + goto err; + } + ret = local_memset(sig_tmp1, 0, sizeof(sig_tmp1)); EG(ret, err); + ret = local_memset(sig_tmp2, 0, sizeof(sig_tmp2)); EG(ret, err); + /* If the algorithm supports streaming mode, test it against direct mode */ + ret = is_sign_streaming_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + MUST_HAVE(siglen <= LOCAL_MAX(sizeof(sig_tmp1), sizeof(sig_tmp2)), ret, err); + ret = generic_ec_sign(sig_tmp1, siglen, &kp, msg, msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); + if(ret){ + ext_printf("Error when signing\n"); + ret = -1; + goto err; + } + ret = random_split_ec_sign(sig_tmp2, siglen, &kp, msg, msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); + if(ret){ + ext_printf("Error when signing\n"); + ret = -1; + goto err; + } + /* Verify signature equality only in case of deterministic signatures */ + ret = is_sign_deterministic(c->sig_type, &check); EG(ret, err); + if(check){ + ret = are_equal(sig, sig_tmp1, siglen, &check); EG(ret, err); + if(!check){ + ext_printf("Error when signing: streaming and non streaming modes results differ "\ + "for deterministic signature scheme!\n"); + ret = -1; + goto err; + } + ret = are_equal(sig, sig_tmp2, siglen, &check); EG(ret, err); + if(!check){ + ext_printf("Error when signing: streaming and non streaming modes results differ "\ + "for deterministic signature scheme!\n"); + ret = -1; + goto err; + } + } + } + + ret = ec_verify(sig, siglen, &(kp.pub_key), msg, msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + if (ret) { + ext_printf("Error when verifying signature\n"); + goto err; + } + /* If the algorithm supports streaming mode, test it against direct mode */ + ret = is_verify_streaming_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + ret = is_sign_streaming_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + ret = ec_verify(sig_tmp2, siglen, &(kp.pub_key), msg, msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + } + else{ + ret = ec_verify(sig, siglen, &(kp.pub_key), msg, msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + } + if (ret) { + ext_printf("Error when verifying signature ec_verify\n"); + goto err; + } + ret = is_sign_streaming_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + ret = random_split_ec_verify(sig_tmp1, siglen, &(kp.pub_key), msg, msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + } + else{ + ret = random_split_ec_verify(sig, siglen, &(kp.pub_key), msg, msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + } + if (ret) { + ext_printf("Error when verifying signature random_split_ec_verify\n"); + goto err; + } + } + /* Also test the "single" signature batch verification */ + ret = is_verify_batch_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + const u8 *signatures[] = { sig }; + const u8 signatures_len[] = { siglen }; + const u8 *messages[] = { msg }; + const u32 messages_len[] = { msglen }; + const ec_pub_key *pub_keys[] = { &(kp.pub_key) }; + const u8 *adatas[] = { c->adata }; + const u16 adatas_len[] = { c->adata_len }; + ret = ec_verify_batch(signatures, signatures_len, pub_keys, messages, messages_len, + 1, c->sig_type, c->hash_type, adatas, adatas_len, NULL, NULL); + if(ret){ + ext_printf("Error when verifying signature ec_verify_batch with batch 1\n"); + goto err; + } + } + check_type = 0; +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + check_type = 1; + } +#endif +#if defined(WITH_SIG_DECDSA) + if(c->sig_type == DECDSA){ + check_type = 1; + } +#endif + /* Try a public key recovery from the signature and the message. + * This is only possible for ECDSA. + */ + if(check_type){ + struct ec_sign_context sig_ctx; + u8 digest[MAX_DIGEST_SIZE] = { 0 }; + u8 digestlen; + ec_pub_key pub_key1; + ec_pub_key pub_key2; + nn_src_t cofactor = &(params.ec_gen_cofactor); + int cofactorisone; + const u8 *input[2] = { (const u8*)msg , NULL}; + u32 ilens[2] = { msglen , 0 }; + /* Initialize our signature context only for the hash */ + ret = ec_sign_init(&sig_ctx, &kp, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); + /* Perform the hash of the data ourselves */ + ret = hash_mapping_callbacks_sanity_check(sig_ctx.h); EG(ret, err); + ret = sig_ctx.h->hfunc_scattered(input, ilens, digest); EG(ret, err); + digestlen = sig_ctx.h->digest_size; + MUST_HAVE(digestlen <= sizeof(digest), ret, err); + /* Check the cofactor */ + ret = nn_isone(cofactor, &cofactorisone); EG(ret, err); + /* Compute the two possible public keys */ + ret = __ecdsa_public_key_from_sig(&pub_key1, &pub_key2, ¶ms, sig, siglen, digest, digestlen, c->sig_type); + if(ret){ + ret = 0; + check = -1; + goto pubkey_recovery_warning; + } + /* Check equality with one of the two keys */ + ret = prj_pt_cmp(&(pub_key1.y), &(kp.pub_key.y), &check); EG(ret, err); + if(check){ + ret = prj_pt_cmp(&(pub_key2.y), &(kp.pub_key.y), &check); EG(ret, err); + } +pubkey_recovery_warning: + if(check && cofactorisone){ + OPENMP_LOCK(); + ext_printf("[~] Warning: ECDSA recovered public key differs from real one ..."); + ext_printf("This can happen with very low probability. Please check the trace:\n"); + pub_key_print("pub_key1", &pub_key1); + pub_key_print("pub_key2", &pub_key2); + pub_key_print("pub_key", &(kp.pub_key)); + buf_print("digest", digest, digestlen); + buf_print("sig", sig, siglen); + OPENMP_UNLOCK(); + } + } +#ifdef USE_CRYPTOFUZZ + check_type = 0; + /* Specific case where we have access to raw signature API */ +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + check_type = 1; + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(c->sig_type == ECGDSA){ + check_type = 1; + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(c->sig_type == ECRDSA){ + check_type = 1; + } +#endif + if(check_type){ + struct ec_sign_context sig_ctx; + struct ec_verify_context verif_ctx; + u8 digest[MAX_DIGEST_SIZE] = { 0 }; + u8 digestlen; + const u8 *input[2] = { (const u8*)msg , NULL}; + u32 ilens[2] = { msglen , 0 }; + /* Initialize our signature context */ + ret = ec_sign_init(&sig_ctx, &kp, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); + /* Perform the hash of the data ourselves */ + ret = hash_mapping_callbacks_sanity_check(sig_ctx.h); EG(ret, err); + ret = sig_ctx.h->hfunc_scattered(input, ilens, digest); EG(ret, err); + digestlen = sig_ctx.h->digest_size; + MUST_HAVE(digestlen <= sizeof(digest), ret, err); + /* Raw signing of data */ +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + ret = ecdsa_sign_raw(&sig_ctx, digest, digestlen, sig, siglen, NULL, 0); EG(ret, err); + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(c->sig_type == ECGDSA){ + ret = ecgdsa_sign_raw(&sig_ctx, digest, digestlen, sig, siglen, NULL, 0); EG(ret, err); + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(c->sig_type == ECRDSA){ + ret = ecrdsa_sign_raw(&sig_ctx, digest, digestlen, sig, siglen, NULL, 0); EG(ret, err); + } +#endif + /* Now verify signature */ + ret = ec_verify_init(&verif_ctx, &(kp.pub_key), sig, siglen, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + ret = ecdsa_verify_raw(&verif_ctx, digest, digestlen); EG(ret, err); + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(c->sig_type == ECGDSA){ + ret = ecgdsa_verify_raw(&verif_ctx, digest, digestlen); EG(ret, err); + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(c->sig_type == ECRDSA){ + ret = ecrdsa_verify_raw(&verif_ctx, digest, digestlen); EG(ret, err); + } +#endif + } +#endif + } + + /* Perform test specific to batch verification */ + ret = is_verify_batch_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + u16 msglen; + u8 siglen; + ec_key_pair keypairs[MAX_BATCH_SIG_SIZE]; + const ec_pub_key *pubkeys[MAX_BATCH_SIG_SIZE]; + u8 msg[MAX_BATCH_SIG_SIZE * MAX_MSG_LEN]; + const u8 *messages[MAX_BATCH_SIG_SIZE]; + u32 messages_len[MAX_BATCH_SIG_SIZE]; + u8 sig[MAX_BATCH_SIG_SIZE * EC_MAX_SIGLEN]; + const u8 *signatures[MAX_BATCH_SIG_SIZE]; + u8 signatures_len[MAX_BATCH_SIG_SIZE]; + const u8 *adata[MAX_BATCH_SIG_SIZE]; + u16 adata_len[MAX_BATCH_SIG_SIZE]; + u8 check_type = 0; + u32 num_batch, i, current; + + FORCE_USED_VAR(check_type); + +gen_num_batch: + ret = get_random((u8 *)&num_batch, sizeof(num_batch)); + if(ret){ + ext_printf("Error when getting random\n"); + goto err; + } + num_batch = (num_batch % MAX_BATCH_SIG_SIZE); + if(num_batch == 0){ + goto gen_num_batch; + } + + ret = ec_get_sig_len(¶ms, c->sig_type, c->hash_type, + (u8 *)&siglen); + if (ret) { + ext_printf("Error computing effective sig size\n"); + goto err; + } + + /* Generate random messages to sign */ + current = 0; + for(i = 0; i < num_batch; i++){ + /* Generate, import/export a key pair */ + ret = ec_gen_import_export_kp(&keypairs[i], ¶ms, c); + pubkeys[i] = &(keypairs[i].pub_key); + if (ret) { + ext_printf("Error at key pair generation/import/export\n"); + goto err; + } + ret = get_random((u8 *)&msglen, sizeof(msglen)); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + msglen = msglen % MAX_MSG_LEN; + messages_len[i] = msglen; + messages[i] = &msg[current]; + ret = get_random(&msg[current], msglen); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + current += msglen; + + signatures[i] = &sig[i * siglen]; + signatures_len[i] = siglen; + adata_len[i] = c->adata_len; + adata[i] = c->adata; + ret = _ec_sign(&sig[i * siglen], siglen, &keypairs[i], messages[i], messages_len[i], + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); + if (ret) { + ext_printf("Error when signing\n"); + goto err; + } + } + /* Test */ + ret = ec_verify_batch(signatures, signatures_len, pubkeys, messages, messages_len, + num_batch, c->sig_type, c->hash_type, adata, adata_len, NULL, NULL); + if(ret){ + ext_printf("Error when verifying signature ec_verify_batch no memory for batch size %" PRIu32 "\n", num_batch); + goto err; + } + { + u32 scratch_pad_area_len = 0; + /* We need 2 * n + 1 scratch pad storage, compute this with max */ + verify_batch_scratch_pad scratch_pad_area[(2 * MAX_BATCH_SIG_SIZE) + 1]; + + ret = ec_verify_batch(signatures, signatures_len, pubkeys, messages, messages_len, + num_batch, c->sig_type, c->hash_type, adata, adata_len, NULL, &scratch_pad_area_len); + if(ret){ + ext_printf("Error when getting scratch_pad_area length for ec_verify_batch optimized for batch size %" PRIu32 "\n", num_batch); + goto err; + } + MUST_HAVE((scratch_pad_area_len <= sizeof(scratch_pad_area)), ret, err); + + scratch_pad_area_len = sizeof(scratch_pad_area); + ret = ec_verify_batch(signatures, signatures_len, pubkeys, messages, messages_len, + num_batch, c->sig_type, c->hash_type, adata, adata_len, scratch_pad_area, &scratch_pad_area_len); + if(ret){ + ext_printf("Error when verifying signature ec_verify_batch optimized for batch size %" PRIu32 "\n", num_batch); + goto err; + } + } + } + + ret = 0; + + err: + return ret; +} + +/* + * Those functions respectively perform signature and verification tests + * based the content of a given test case. + */ +ATTRIBUTE_WARN_UNUSED_RET static int ec_test_sign(u8 *sig, u8 siglen, ec_key_pair *kp, + const ec_test_case *c) +{ + /* If the algorithm supports streaming, we check that both the streaming and + * non streaming modes produce the same result. + */ + int ret, check; + + MUST_HAVE(sig != NULL, ret, err); + MUST_HAVE(c != NULL, ret, err); + + ret = _ec_sign(sig, siglen, kp, (const u8 *)(c->msg), c->msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); + ret = is_sign_streaming_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + u8 sig_tmp[EC_MAX_SIGLEN]; + MUST_HAVE(siglen <= sizeof(sig_tmp), ret, err); + ret = generic_ec_sign(sig_tmp, siglen, kp, (const u8 *)(c->msg), c->msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); + ret = are_equal(sig, sig_tmp, siglen, &check); EG(ret, err); + if(!check){ + ret = -1; + goto err; + } + /* Now test the random split version */ + ret = random_split_ec_sign(sig_tmp, siglen, kp, (const u8 *)(c->msg), c->msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); + ret = are_equal(sig, sig_tmp, siglen, &check); EG(ret, err); + if(!check){ + ret = -1; + goto err; + } + } + + ret = 0; +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int ec_test_verify(u8 *sig, u8 siglen, const ec_pub_key *pub_key, + const ec_test_case *c) +{ + /* If the algorithm supports streaming, we check that both the streaming and + * non streaming modes produce the same result. + */ + int ret, check; + + MUST_HAVE(sig != NULL, ret, err); + MUST_HAVE(c != NULL, ret, err); + + ret = ec_verify(sig, siglen, pub_key, (const u8 *)(c->msg), c->msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + if(ret){ + ret = -1; + goto err; + } + ret = is_verify_streaming_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + ret = ec_verify(sig, siglen, pub_key, (const u8 *)(c->msg), c->msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + if(ret){ + ret = -1; + goto err; + } + /* Now test the random split version */ + ret = random_split_ec_verify(sig, siglen, pub_key, (const u8 *)(c->msg), c->msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + if(ret){ + ret = -1; + goto err; + } + } + /* Also test the "single" signature batch verification */ + ret = is_verify_batch_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + const u8 *signatures[] = { sig }; + const u8 signatures_len[] = { siglen }; + const u8 *messages[] = { (const u8*)c->msg }; + const u32 messages_len[] = { c->msglen }; + const ec_pub_key *pub_keys[] = { pub_key }; + const u8 *adatas[] = { c->adata }; + const u16 adatas_len[] = { c->adata_len }; + ret = ec_verify_batch(signatures, signatures_len, pub_keys, messages, messages_len, + 1, c->sig_type, c->hash_type, adatas, adatas_len, NULL, NULL); + if(ret){ + ret = -1; + goto err; + } + } + + ret = 0; +err: + return ret; +} + +/* + * ECC generic self tests (sign/verify on known test vectors). Returns + * 0 if given test succeeded, or a non-zero value otherwise. In that + * case, the value encodes the information on what went wrong as + * described above. + */ +ATTRIBUTE_WARN_UNUSED_RET static int ec_sig_known_vector_tests_one(const ec_test_case *c) +{ + test_err_kind failed_test = TEST_KEY_IMPORT_ERROR; + u8 sig[EC_MAX_SIGLEN]; + ec_params params; + ec_key_pair kp; + u8 siglen; + int ret; + int check = 0; + + MUST_HAVE((c != NULL), ret, err); + + ret = local_memset(&kp, 0, sizeof(kp)); EG(ret, err); + ret = local_memset(¶ms, 0, sizeof(params)); EG(ret, err); + ret = local_memset(sig, 0, sizeof(sig)); EG(ret, err); + + ret = import_params(¶ms, c->ec_str_p); + if (ret) { + ext_printf("Error importing params\n"); + goto err; + } + +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) + /* In the specific case of EdDSA, we perform a specific key derivation */ +#if defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_EDDSA448) + if((c->sig_type == EDDSA25519) || (c->sig_type == EDDSA25519CTX) || (c->sig_type == EDDSA25519PH) || \ + (c->sig_type == EDDSA448) || (c->sig_type == EDDSA448PH)){ +#endif +#if defined(WITH_SIG_EDDSA25519) && !defined(WITH_SIG_EDDSA448) + if((c->sig_type == EDDSA25519) || (c->sig_type == EDDSA25519CTX) || (c->sig_type == EDDSA25519PH)){ +#endif +#if !defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_EDDSA448) + if((c->sig_type == EDDSA448) || (c->sig_type == EDDSA448PH)){ +#endif + /* Import the key pair using the EdDSA dedicated function */ + if(eddsa_import_key_pair_from_priv_key_buf(&kp, c->priv_key, c->priv_key_len, ¶ms, c->sig_type)){ + ret = -1; + failed_test = TEST_KEY_IMPORT_ERROR; + goto err; + } + } + else +#endif /* !(defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448)) */ + { + /* Regular import if not EdDSA */ + ret = ec_key_pair_import_from_priv_key_buf(&kp, ¶ms, c->priv_key, + c->priv_key_len, + c->sig_type); + if (ret) { + failed_test = TEST_KEY_IMPORT_ERROR; + goto err; + } + } + + siglen = c->exp_siglen; + ret = ec_test_sign(sig, siglen, &kp, c); + if (ret) { + failed_test = TEST_SIG_ERROR; + goto err; + } + + ret = are_equal(sig, c->exp_sig, siglen, &check); EG(ret, err); + if (!check) { + ret = -1; + failed_test = TEST_SIG_COMP_ERROR; + goto err; + } + + ret = ec_test_verify(sig, siglen, &(kp.pub_key), c); + if (ret) { + failed_test = TEST_VERIF_ERROR; + goto err; + } + + check = 0; +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + check = 1; + } +#endif +#if defined(WITH_SIG_DECDSA) + if(c->sig_type == DECDSA){ + check = 1; + } +#endif + /* Try a public key recovery from the signature and the message. + * This is only possible for ECDSA. + */ + if(check){ + struct ec_sign_context sig_ctx; + u8 digest[MAX_DIGEST_SIZE] = { 0 }; + u8 digestlen; + ec_pub_key pub_key1; + ec_pub_key pub_key2; + nn_src_t cofactor = &(params.ec_gen_cofactor); + int cofactorisone; + const u8 *input[2] = { (const u8*)(c->msg) , NULL}; + u32 ilens[2] = { c->msglen , 0 }; + /* Initialize our signature context only for the hash */ + ret = ec_sign_init(&sig_ctx, &kp, c->sig_type, c->hash_type, c->adata, c->adata_len); EG(ret, err); + /* Perform the hash of the data ourselves */ + ret = hash_mapping_callbacks_sanity_check(sig_ctx.h); EG(ret, err); + ret = sig_ctx.h->hfunc_scattered(input, ilens, digest); EG(ret, err); + digestlen = sig_ctx.h->digest_size; + MUST_HAVE(digestlen <= sizeof(digest), ret, err); + /* Check the cofactor */ + ret = nn_isone(cofactor, &cofactorisone); EG(ret, err); + /* Compute the two possible public keys */ + ret = __ecdsa_public_key_from_sig(&pub_key1, &pub_key2, ¶ms, sig, siglen, digest, digestlen, c->sig_type); + if(ret){ + ret = 0; + check = -1; + goto pubkey_recovery_warning; + } + /* Check equality with one of the two keys */ + ret = prj_pt_cmp(&(pub_key1.y), &(kp.pub_key.y), &check); EG(ret, err); + if(check){ + ret = prj_pt_cmp(&(pub_key2.y), &(kp.pub_key.y), &check); EG(ret, err); + } +pubkey_recovery_warning: + if(check && cofactorisone){ + OPENMP_LOCK(); + ext_printf("[~] Warning: ECDSA recovered public key differs from real one ..."); + ext_printf("This can happen with very low probability. Please check the trace:\n"); + pub_key_print("pub_key1", &pub_key1); + pub_key_print("pub_key2", &pub_key2); + pub_key_print("pub_key", &(kp.pub_key)); + buf_print("digest", digest, digestlen); + buf_print("sig", sig, siglen); + OPENMP_UNLOCK(); + } + } +#ifdef USE_CRYPTOFUZZ + check = 0; + /* Specific case where we have access to raw signature API */ +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + check = 1; + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(c->sig_type == ECGDSA){ + check = 1; + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(c->sig_type == ECRDSA){ + check = 1; + } +#endif + /* Specific case where we have access to raw signature API */ + if(check){ + struct ec_sign_context sig_ctx; + struct ec_verify_context verif_ctx; + u8 digest[MAX_DIGEST_SIZE] = { 0 }; + u8 digestlen; + const u8 *input[2] = { (const u8*)(c->msg) , NULL}; + u32 ilens[2] = { c->msglen , 0 }; + u8 nonce[LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8))] = { 0 }; + nn n_nonce; + bitcnt_t q_bit_len; + u8 noncelen; + /* Initialize our signature context */ + if(ec_sign_init(&sig_ctx, &kp, c->sig_type, c->hash_type, c->adata, c->adata_len)){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + /* Perform the hash of the data ourselves */ + if(hash_mapping_callbacks_sanity_check(sig_ctx.h)){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + ret = sig_ctx.h->hfunc_scattered(input, ilens, digest); EG(ret, err); + digestlen = sig_ctx.h->digest_size; + MUST_HAVE(digestlen <= sizeof(digest), ret, err); + /* Import the fixed nonce */ + q_bit_len = kp.priv_key.params->ec_gen_order_bitlen; + if(c->nn_random(&n_nonce, &(kp.priv_key.params->ec_gen_order))){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + ret = nn_export_to_buf(nonce, (u16)BYTECEIL(q_bit_len), &n_nonce); EG(ret, err); + if((unsigned int)BYTECEIL(q_bit_len) > sizeof(nonce)){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + noncelen = (u8)(BYTECEIL(q_bit_len)); + /* Force used variable to avoid warnings */ + FORCE_USED_VAR(noncelen); + /* NOTE: the MUST_HAVE is protected by a preprocessing check + * to avoid -Werror=type-limits errors: + * "error: comparison is always true due to limited range of data type" + */ +#if LOCAL_MIN(255, BIT_LEN_WORDS(NN_MAX_BIT_LEN) * (WORDSIZE / 8)) < 255 + MUST_HAVE((u32)noncelen <= sizeof(nonce), ret, err); +#endif + /* Raw signing of data */ +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + if(ecdsa_sign_raw(&sig_ctx, digest, digestlen, sig, siglen, nonce, noncelen)){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(c->sig_type == ECGDSA){ + if(ecgdsa_sign_raw(&sig_ctx, digest, digestlen, sig, siglen, nonce, noncelen)){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(c->sig_type == ECRDSA){ + if(ecrdsa_sign_raw(&sig_ctx, digest, digestlen, sig, siglen, nonce, noncelen)){ + ret = -1; + failed_test = TEST_SIG_ERROR; + goto err; + } + } +#endif + /* Check computed signature against expected one */ + ret = are_equal(sig, c->exp_sig, siglen, &check); EG(ret, err); + if (!check) { + failed_test = TEST_SIG_COMP_ERROR; + ret = -1; + goto err; + } + /* Now verify signature */ + if(ec_verify_init(&verif_ctx, &(kp.pub_key), sig, siglen, c->sig_type, c->hash_type, c->adata, c->adata_len)){ + ret = -1; + failed_test = TEST_VERIF_ERROR; + goto err; + } + /* Raw verification of data */ +#if defined(WITH_SIG_ECDSA) + if(c->sig_type == ECDSA){ + if(ecdsa_verify_raw(&verif_ctx, digest, digestlen)){ + ret = -1; + failed_test = TEST_VERIF_ERROR; + goto err; + } + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(c->sig_type == ECGDSA){ + if(ecgdsa_verify_raw(&verif_ctx, digest, digestlen)){ + ret = -1; + failed_test = TEST_VERIF_ERROR; + goto err; + } + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(c->sig_type == ECRDSA){ + if(ecrdsa_verify_raw(&verif_ctx, digest, digestlen)){ + ret = -1; + failed_test = TEST_VERIF_ERROR; + goto err; + } + } +#endif + } +#endif + ret = 0; + + err: + if (ret) { + u32 ret_; + ret = encode_error_value(c, failed_test, &ret_); EG(ret, err); + ret = (int)ret_; + } + + return ret; +} + +#if defined(WITH_ECCCDH) || defined(WITH_X25519) || defined(WITH_X448) +/* + * ECC generic self tests (ecdh on known test vectors). Returns + * 0 if given test succeeded, or a non-zero value otherwise. In that + * case, the value encodes the information on what went wrong as + * described above. + */ +ATTRIBUTE_WARN_UNUSED_RET static int ecdh_known_vector_tests_one(const ecdh_test_case *c) +{ + test_err_kind failed_test = TEST_KEY_IMPORT_ERROR; + ec_params params; + ec_key_pair kp; + int ret, check; + + MUST_HAVE((c != NULL), ret, err); + + ret = local_memset(&kp, 0, sizeof(kp)); EG(ret, err); + ret = local_memset(¶ms, 0, sizeof(params)); EG(ret, err); + + ret = import_params(¶ms, c->ec_str_p); + if (ret) { + ext_printf("Error importing params\n"); + goto err; + } + + /* Check what ECDH test we have to perform */ + switch(c->ecdh_type){ +#if defined(WITH_ECCCDH) + case ECCCDH:{ + u8 serialized_pub_key[EC_PUB_KEY_MAX_SIZE]; + u8 serialized_pub_key_len; + /* This maximum size is way bigger than expected, but we ensure + * that there is enough room for our shared secret. + */ + u8 shared_secret[EC_PUB_KEY_MAX_SIZE]; + u8 shared_secret_len; + + ret = local_memset(serialized_pub_key, 0, sizeof(serialized_pub_key)); EG(ret, err); + ret = local_memset(shared_secret, 0, sizeof(shared_secret)); EG(ret, err); + + /* Import our ECDH key pair */ + ret = ecccdh_import_key_pair_from_priv_key_buf(&kp, ¶ms, c->our_priv_key, + c->our_priv_key_len); + if (ret) { + failed_test = TEST_KEY_IMPORT_ERROR; + ret = -1; + goto err; + } + /* Serialize our public key */ + ret = ecccdh_serialized_pub_key_size(¶ms, &serialized_pub_key_len); EG(ret, err); + MUST_HAVE((sizeof(serialized_pub_key) >= serialized_pub_key_len), ret, err); + ret = ecccdh_serialize_pub_key(&(kp.pub_key), serialized_pub_key, serialized_pub_key_len); + if (ret) { + failed_test = TEST_ECDH_ERROR; + ret = -1; + goto err; + } + /* Check it against the expected one */ + MUST_HAVE((serialized_pub_key_len == c->exp_our_pub_key_len), ret, err); + ret = are_equal(serialized_pub_key, c->exp_our_pub_key, serialized_pub_key_len, &check); EG(ret, err); + if (!check) { + failed_test = TEST_ECDH_COMP_ERROR; + ret = -1; + goto err; + } + /* Now derive the shared secret */ + ret = ecccdh_shared_secret_size(¶ms, &shared_secret_len); EG(ret, err); + MUST_HAVE((sizeof(shared_secret) >= shared_secret_len), ret, err); + ret = ecccdh_derive_secret(&(kp.priv_key), c->peer_pub_key, c->peer_pub_key_len, shared_secret, shared_secret_len); + if (ret) { + failed_test = TEST_ECDH_ERROR; + ret = -1; + goto err; + } + /* Check it against the expected one */ + MUST_HAVE((shared_secret_len == c->exp_shared_secret_len), ret, err); + ret = are_equal(shared_secret, c->exp_shared_secret, shared_secret_len, &check); EG(ret, err); + if (!check) { + failed_test = TEST_ECDH_COMP_ERROR; + ret = -1; + goto err; + } + + break; + } +#endif +#if defined(WITH_X25519) + case X25519:{ + u8 pub_key[X25519_SIZE]; + u8 shared_secret[X25519_SIZE]; + + ret = local_memset(pub_key, 0, sizeof(pub_key)); EG(ret, err); + ret = local_memset(shared_secret, 0, sizeof(shared_secret)); EG(ret, err); + + /* Compute our public key */ + MUST_HAVE((c->our_priv_key_len == X25519_SIZE), ret, err); + ret = x25519_init_pub_key(c->our_priv_key, pub_key); + if (ret) { + failed_test = TEST_KEY_IMPORT_ERROR; + ret = -1; + goto err; + } + /* Check it against the expected one */ + MUST_HAVE((c->exp_our_pub_key_len == X25519_SIZE), ret, err); + ret = are_equal(pub_key, c->exp_our_pub_key, X25519_SIZE, &check); EG(ret, err); + if (!check) { + failed_test = TEST_ECDH_COMP_ERROR; + ret = -1; + goto err; + } + /* Now derive the shared secret */ + MUST_HAVE((c->peer_pub_key_len == X25519_SIZE), ret, err); + ret = x25519_derive_secret(c->our_priv_key, c->peer_pub_key, shared_secret); + if (ret) { + failed_test = TEST_ECDH_ERROR; + ret = -1; + goto err; + } + /* Check it against the expected one */ + MUST_HAVE((c->exp_shared_secret_len == X25519_SIZE), ret, err); + ret = are_equal(shared_secret, c->exp_shared_secret, X25519_SIZE, &check); EG(ret, err); + if (!check) { + failed_test = TEST_ECDH_COMP_ERROR; + ret = -1; + goto err; + } + + break; + } +#endif +#if defined(WITH_X448) + case X448:{ + u8 pub_key[X448_SIZE]; + u8 shared_secret[X448_SIZE]; + + ret = local_memset(pub_key, 0, sizeof(pub_key)); EG(ret, err); + ret = local_memset(shared_secret, 0, sizeof(shared_secret)); EG(ret, err); + + /* Compute our public key */ + MUST_HAVE((c->our_priv_key_len == X448_SIZE), ret, err); + ret = x448_init_pub_key(c->our_priv_key, pub_key); + if (ret) { + failed_test = TEST_KEY_IMPORT_ERROR; + ret = -1; + goto err; + } + /* Check it against the expected one */ + MUST_HAVE((c->exp_our_pub_key_len == X448_SIZE), ret, err); + ret = are_equal(pub_key, c->exp_our_pub_key, X448_SIZE, &check); EG(ret, err); + if (!check) { + failed_test = TEST_ECDH_COMP_ERROR; + ret = -1; + goto err; + } + /* Now derive the shared secret */ + MUST_HAVE((c->peer_pub_key_len == X448_SIZE), ret, err); + ret = x448_derive_secret(c->our_priv_key, c->peer_pub_key, shared_secret); + if (ret) { + failed_test = TEST_ECDH_ERROR; + ret = -1; + goto err; + } + /* Check it against the expected one */ + MUST_HAVE((c->exp_shared_secret_len == X448_SIZE), ret, err); + ret = are_equal(shared_secret, c->exp_shared_secret, X448_SIZE, &check); EG(ret, err); + if (!check) { + failed_test = TEST_ECDH_COMP_ERROR; + ret = -1; + goto err; + } + + break; + } +#endif + default:{ + ext_printf("Error: not an ECDH test\n"); + ret = -1; + goto err; + } + } + +err: + if (ret) { + u32 ret_; + ret = ecdh_encode_error_value(c, failed_test, &ret_); EG(ret, err); + ret = (int)ret_; + } + + return ret; +} +#endif + +ATTRIBUTE_WARN_UNUSED_RET int perform_known_test_vectors_test(const char *sig, const char *hash, const char *curve) +{ + unsigned int i; + int ret = 0; + + ext_printf("======= Known test vectors test =================\n"); +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for (i = 0; i < EC_FIXED_VECTOR_NUM_TESTS; i++) { + int check; + const ec_test_case *cur_test; + cur_test = ec_fixed_vector_tests[i]; + if(cur_test == NULL){ + continue; + } + /* If this is a dummy test case, skip it! */ + if(cur_test->sig_type == UNKNOWN_ALG){ + continue; + } + /* Filter out */ + if(sig != NULL){ + const ec_sig_mapping *sig_map; + ret = get_sig_by_type(cur_test->sig_type, &sig_map); OPENMP_EG(ret, err); + if(sig_map == NULL){ + continue; + } + ret = are_str_equal(sig_map->name, sig, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + if(hash != NULL){ + const hash_mapping *hash_map; + ret = get_hash_by_type(cur_test->hash_type, &hash_map); OPENMP_EG(ret, err); + if(hash_map == NULL){ + continue; + } + ret = are_str_equal(hash_map->name, hash, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + if(curve != NULL){ + if(cur_test->ec_str_p == NULL){ + continue; + } + ret = are_str_equal((const char*)cur_test->ec_str_p->name->buf, curve, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + ret = ec_sig_known_vector_tests_one(cur_test); + OPENMP_LOCK(); + ext_printf("[%s] %30s selftests: known test vectors " + "sig/verif %s\n", ret ? "-" : "+", + cur_test->name, ret ? "failed" : "ok"); + check = 0; +#if defined(WITH_SIG_ECDSA) + if(cur_test->sig_type == ECDSA){ + check = 1; + } +#endif +#if defined(WITH_SIG_DECDSA) + if(cur_test->sig_type == DECDSA){ + check = 1; + } +#endif + if(check){ + ext_printf("\t(ECDSA public key recovery also checked!)\n"); + } +#ifdef USE_CRYPTOFUZZ +#if defined(WITH_SIG_ECDSA) + if(cur_test->sig_type == ECDSA){ + ext_printf("\t(RAW ECDSA for CRYPTOFUZZ also checked!)\n"); + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(cur_test->sig_type == ECGDSA){ + ext_printf("\t(RAW ECGDSA for CRYPTOFUZZ also checked!)\n"); + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(cur_test->sig_type == ECRDSA){ + ext_printf("\t(RAW ECRDSA for CRYPTOFUZZ also checked!)\n"); + } +#endif +#endif + OPENMP_UNLOCK(); + OPENMP_EG(ret, err); + } +#if defined(WITH_ECCCDH) || defined(WITH_X25519) || defined(WITH_X448) + /* Now take care of ECDH */ + if((sig == NULL) && (hash == NULL)){ +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for (i = 0; i < ECDH_FIXED_VECTOR_NUM_TESTS; i++) { + int check; + const ecdh_test_case *ecdh_cur_test; + ecdh_cur_test = ecdh_fixed_vector_tests[i]; + if(ecdh_cur_test == NULL){ + continue; + } + /* If this is not an ECDH test case, skip it! */ + if(ecdh_cur_test->ecdh_type == UNKNOWN_ALG){ + continue; + } + if(curve != NULL){ + if(ecdh_cur_test->ec_str_p == NULL){ + continue; + } + ret = are_str_equal((const char*)ecdh_cur_test->ec_str_p->name->buf, curve, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + ret = ecdh_known_vector_tests_one(ecdh_cur_test); + OPENMP_LOCK(); + ext_printf("[%s] %30s selftests: known test vectors " + "ecdh %s\n", ret ? "-" : "+", + ecdh_cur_test->name, ret ? "failed" : "ok"); + OPENMP_EG(ret, err); + OPENMP_UNLOCK(); + } + } +#endif + +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int rand_sig_verif_test_one(const ec_sig_mapping *sig, + const hash_mapping *hash, + const ec_mapping *ec) +{ + char test_name[MAX_CURVE_NAME_LEN + MAX_HASH_ALG_NAME_LEN + + MAX_SIG_ALG_NAME_LEN + 2]; + const unsigned int tn_size = sizeof(test_name) - 1; /* w/o trailing 0 */ + const char *crv_name; + ec_test_case t; + int ret, check; + u32 len; + +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_SM2) || defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) + u8 rand_adata[255]; + ret = local_memset(rand_adata, 0, sizeof(rand_adata)); EG(ret, err); + /* The case of EDDSA25519CTX and SM2 needs a non NULL context (ancillary data). + * Create a random string of size <= 255 for this. + */ + /* + * In the case of BIGN and DBIGN, the ancillary data have a structure containing the OID as well + * as an optional generation token. + */ +#endif + ret = local_memset(test_name, 0, sizeof(test_name)); EG(ret, err); + + MUST_HAVE((sig != NULL), ret, err); + MUST_HAVE((hash != NULL), ret, err); + MUST_HAVE((ec != NULL), ret, err); + + crv_name = (const char *)PARAM_BUF_PTR((ec->params)->name); + + /* Generate the test name */ + ret = local_memset(test_name, 0, tn_size + 1); EG(ret, err); + ret = local_strncpy(test_name, sig->name, tn_size); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, "-", tn_size - len); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, hash->name, tn_size - len); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, "/", tn_size - len); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, crv_name, tn_size - len); EG(ret, err); + + /* Create a test */ + t.name = test_name; + t.ec_str_p = ec->params; + t.priv_key = NULL; + t.priv_key_len = 0; + t.nn_random = NULL; + t.hash_type = hash->type; + t.msg = NULL; + t.msglen = 0; + t.sig_type = sig->type; + t.exp_sig = NULL; + t.exp_siglen = 0; +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_SM2) +#if defined(WITH_SIG_EDDSA25519) && !defined(WITH_SIG_SM2) + if(sig->type == EDDSA25519CTX) +#endif +#if !defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_SM2) + if(sig->type == SM2) +#endif +#if defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_SM2) + if((sig->type == EDDSA25519CTX) || (sig->type == SM2)) +#endif + { + u8 rand_len = 0; + ret = get_random((u8 *)&rand_len, sizeof(rand_len)); EG(ret, err); + ret = get_random((u8 *)rand_adata, (u16)(rand_len % sizeof(rand_adata))); EG(ret, err); + t.adata = rand_adata; + t.adata_len = rand_len; + } + else +#endif + { +#if defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) +#if defined(WITH_SIG_BIGN) && !defined(WITH_SIG_DBIGN) + if(sig->type == BIGN) +#endif +#if !defined(WITH_SIG_BIGN) && defined(WITH_SIG_DBIGN) + if(sig->type == DBIGN) +#endif +#if defined(WITH_SIG_BIGN) && defined(WITH_SIG_DBIGN) + if((sig->type == BIGN) || (sig->type == DBIGN)) +#endif + { + u16 oid_len = 0; + u16 t_len = 0; + ret = get_random((u8 *)rand_adata, sizeof(rand_adata)); EG(ret, err); + + ret = get_random((u8 *)&oid_len, sizeof(oid_len)); EG(ret, err); + ret = get_random((u8 *)&t_len, sizeof(oid_len)); EG(ret, err); + + oid_len = (u8)(oid_len % (sizeof(rand_adata) - 4)); + t_len = (u8)(t_len % (sizeof(rand_adata) - 4 - oid_len)); + rand_adata[0] = (u8)(oid_len >> 8); + rand_adata[1] = (u8)(oid_len & 0xff); + rand_adata[2] = (u8)(t_len >> 8); + rand_adata[3] = (u8)(t_len & 0xff); + t.adata = rand_adata; + t.adata_len = (u8)(oid_len + t_len + 4); + } + else +#endif + { + t.adata = NULL; + t.adata_len = 0; + } + } + + /* Execute the test */ + ret = ec_import_export_test(&t); + OPENMP_LOCK(); + ext_printf("[%s] %34s randtests: random import/export " + "with sig/verif %s\n", ret ? "-" : "+", t.name, + ret ? "failed" : "ok"); + check = 0; +#if defined(WITH_SIG_ECDSA) + if(t.sig_type == ECDSA){ + check = 1; + } +#endif +#if defined(WITH_SIG_DECDSA) + if(t.sig_type == DECDSA){ + check = 1; + } +#endif + if(check){ + ext_printf("\t(ECDSA public key recovery also checked!)\n"); + } + +#ifdef USE_CRYPTOFUZZ +#if defined(WITH_SIG_ECDSA) + if(t.sig_type == ECDSA){ + ext_printf("\t(RAW ECDSA for CRYPTOFUZZ also checked!)\n"); + } +#endif +#if defined(WITH_SIG_ECGDSA) + if(t.sig_type == ECGDSA){ + ext_printf("\t(RAW ECGDSA for CRYPTOFUZZ also checked!)\n"); + } +#endif +#if defined(WITH_SIG_ECRDSA) + if(t.sig_type == ECRDSA){ + ext_printf("\t(RAW ECRDSA for CRYPTOFUZZ also checked!)\n"); + } +#endif +#endif + OPENMP_UNLOCK(); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int perform_random_sig_verif_test(const char *sig, const char *hash, const char *curve) +{ + unsigned int num_sig_maps, num_hash_maps; + int ret = 0; + + /* Compute number of sig and hash maps */ + for (num_sig_maps = 0; ec_sig_maps[num_sig_maps].type != UNKNOWN_ALG; num_sig_maps++) {} + for (num_hash_maps = 0; hash_maps[num_hash_maps].type != UNKNOWN_HASH_ALG; num_hash_maps++) {} + + /* + * Perform basic sign/verify tests on all the cipher suites + * (combination of sign algo/hash function/curve) + */ + ext_printf("======= Random sig/verif test ===================\n"); + for (unsigned int i = 0; i < num_sig_maps; i++) { +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel for collapse(2) +#endif + for (unsigned int j = 0; j < num_hash_maps; j++) { + for (unsigned int k = 0; k < EC_CURVES_NUM; k++) { + int check; + if(sig != NULL){ + ret = are_str_equal(ec_sig_maps[i].name, sig, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + if(hash != NULL){ + ret = are_str_equal(hash_maps[j].name, hash, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + if(curve != NULL){ + ret = are_str_equal((const char*)ec_maps[k].params->name->buf, curve, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + /* If we have EDDSA25519 or EDDSA448, we only accept specific hash functions. + * Skip the other tests. + */ +#ifdef WITH_SIG_EDDSA25519 + if((ec_sig_maps[i].type == EDDSA25519) && ((hash_maps[j].type != SHA512) || (ec_maps[k].type != WEI25519))){ + continue; + } + if((ec_sig_maps[i].type == EDDSA25519CTX) && ((hash_maps[j].type != SHA512) || (ec_maps[k].type != WEI25519))){ + continue; + } + if((ec_sig_maps[i].type == EDDSA25519PH) && ((hash_maps[j].type != SHA512) || (ec_maps[k].type != WEI25519))){ + continue; + } +#endif +#ifdef WITH_SIG_EDDSA448 + if((ec_sig_maps[i].type == EDDSA448) && ((hash_maps[j].type != SHAKE256) || (ec_maps[k].type != WEI448))){ + continue; + } + if((ec_sig_maps[i].type == EDDSA448PH) && ((hash_maps[j].type != SHAKE256) || (ec_maps[k].type != WEI448))){ + continue; + } +#endif + ret = rand_sig_verif_test_one(&ec_sig_maps[i], + &hash_maps[j], + &ec_maps[k]); + OPENMP_EG(ret, err); + } + } + } + +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +} + +#define PERF_NUM_OP 300 +#define PERF_BATCH_VERIFICATION 16 + +/* + * ECC generic performance test: Returns the number of signatures + * and verifications per second + */ +ATTRIBUTE_WARN_UNUSED_RET static int ec_performance_test(const ec_test_case *c, + unsigned int *n_perf_sign, + unsigned int *n_perf_verif, + unsigned int *n_perf_batch_verif, + unsigned char *batch_verify_ok) +{ + ec_key_pair kp; + ec_params params; + int ret, check; + + MUST_HAVE(c != NULL, ret, err); + MUST_HAVE(n_perf_sign != NULL, ret, err); + MUST_HAVE(n_perf_verif != NULL, ret, err); + MUST_HAVE((n_perf_batch_verif != NULL) && (batch_verify_ok != NULL), ret, err); + + ret = local_memset(&kp, 0, sizeof(kp)); EG(ret, err); + + /* Import EC params from test case */ + ret = import_params(¶ms, c->ec_str_p); + if (ret) { + ext_printf("Error when importing parameters\n"); + goto err; + } + + /* Generate, import/export a key pair */ + ret = ec_gen_import_export_kp(&kp, ¶ms, c); + if (ret) { + ext_printf("Error at key pair generation/import/export\n"); + goto err; + } + + /* Perform test */ + { + u8 sig[EC_MAX_SIGLEN]; + u8 siglen; + u8 msg[MAX_BLOCK_SIZE]; + u16 msglen; + u8 hash_digest_size, hash_block_size; + /* Time related variables */ + u64 time1, time2, cumulated_time_sign, cumulated_time_verify, cumulated_time_batch_verify; + unsigned int i; + + ret = local_memset(sig, 0, sizeof(sig)); EG(ret, err); + ret = local_memset(msg, 0, sizeof(msg)); EG(ret, err); + + ret = ec_get_sig_len(¶ms, c->sig_type, c->hash_type, + (u8 *)&siglen); + if (ret) { + ext_printf("Error computing effective sig size\n"); + goto err; + } + + /* + * Random tests to measure performance: We do it on small + * messages to "absorb" the hash function cost + */ + ret = get_hash_sizes(c->hash_type, &hash_digest_size, + &hash_block_size); + if (ret) { + ext_printf("Error when getting hash size\n"); + goto err; + } + cumulated_time_sign = cumulated_time_verify = cumulated_time_batch_verify = 0; + for (i = 0; i < PERF_NUM_OP; i++) { + /* Generate a random message to sign */ + ret = get_random((u8 *)&msglen, sizeof(msglen)); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + msglen = (u16)(msglen % hash_block_size); + ret = get_random(msg, msglen); + if (ret) { + ext_printf("Error when getting random\n"); + goto err; + } + + /***** Signature **********/ + ret = get_ms_time(&time1); + if (ret) { + ext_printf("Error when getting time\n"); + goto err; + } + ret = _ec_sign(sig, siglen, &kp, msg, msglen, + c->nn_random, c->sig_type, c->hash_type, c->adata, c->adata_len); + if (ret) { + ext_printf("Error when signing\n"); + goto err; + } + ret = get_ms_time(&time2); + if (ret) { + ext_printf("Error when getting time\n"); + goto err; + } + if (time2 < time1) { + ext_printf("Error: time error (t2 < t1)\n"); + goto err; + } + cumulated_time_sign += (time2 - time1); + + /***** Verification **********/ + ret = get_ms_time(&time1); + if (ret) { + ext_printf("Error when getting time\n"); + goto err; + } + ret = ec_verify(sig, siglen, &(kp.pub_key), msg, msglen, + c->sig_type, c->hash_type, c->adata, c->adata_len); + if (ret) { + ext_printf("Error when verifying signature\n"); + goto err; + } + ret = get_ms_time(&time2); + if (ret) { + ext_printf("Error when getting time\n"); + goto err; + } + if (time2 < time1) { + ext_printf("Error: time error (time2 < time1)\n"); + goto err; + } + cumulated_time_verify += (time2 - time1); + + /***** Batch verification **********/ + ret = is_verify_batch_mode_supported(c->sig_type, &check); EG(ret, err); + if(check){ + unsigned int j; + const u8 *signatures[PERF_BATCH_VERIFICATION]; + u8 signatures_len[PERF_BATCH_VERIFICATION]; + const u8 *messages[PERF_BATCH_VERIFICATION]; + u32 messages_len[PERF_BATCH_VERIFICATION]; + const ec_pub_key *pub_keys[PERF_BATCH_VERIFICATION]; + const u8 *adatas[PERF_BATCH_VERIFICATION]; + u16 adatas_len[PERF_BATCH_VERIFICATION]; + /* We need 2 * n + 1 scratch pad storage, compute this with max */ + verify_batch_scratch_pad scratch_pad_area[(2 * PERF_BATCH_VERIFICATION) + 1]; + u32 scratch_pad_area_len = sizeof(scratch_pad_area); + + for(j = 0; j < PERF_BATCH_VERIFICATION; j++){ + signatures[j] = sig; + signatures_len[j] = siglen; + messages[j] = msg; + messages_len[j] = msglen; + pub_keys[j] = &(kp.pub_key); + adatas[j] = c->adata; + adatas_len[j] = c->adata_len; + } + ret = get_ms_time(&time1); + if (ret) { + ext_printf("Error when getting time\n"); + goto err; + } + ret = ec_verify_batch(signatures, signatures_len, pub_keys, messages, messages_len, + PERF_BATCH_VERIFICATION, c->sig_type, c->hash_type, adatas, adatas_len, scratch_pad_area, &scratch_pad_area_len); + if(ret){ + ext_printf("Error when verifying signature ec_verify_batch with batch %d\n", PERF_BATCH_VERIFICATION); + goto err; + } + ret = get_ms_time(&time2); + if (ret) { + ext_printf("Error when getting time\n"); + goto err; + } + if (time2 < time1) { + ext_printf("Error: time error (time2 < time1)\n"); + goto err; + } + cumulated_time_batch_verify += (time2 - time1); + (*batch_verify_ok) = 1; + } + else{ + (*batch_verify_ok) = 0; + } + } + + if (n_perf_sign != NULL) { + (*n_perf_sign) = (unsigned int)((PERF_NUM_OP * 1000ULL) / cumulated_time_sign); + } + if (n_perf_verif != NULL) { + (*n_perf_verif) = (unsigned int)((PERF_NUM_OP * 1000ULL) / cumulated_time_verify); + } + if (n_perf_batch_verif != NULL) { + if((*batch_verify_ok) == 1){ + (*n_perf_batch_verif) = (unsigned int)((PERF_NUM_OP * PERF_BATCH_VERIFICATION * 1000ULL) / cumulated_time_batch_verify); + } + else{ + (*n_perf_batch_verif) = 0; + } + } + } + ret = 0; + err: + return ret; +} + + +ATTRIBUTE_WARN_UNUSED_RET static int perf_test_one(const ec_sig_mapping *sig, const hash_mapping *hash, + const ec_mapping *ec) +{ + char test_name[MAX_CURVE_NAME_LEN + MAX_HASH_ALG_NAME_LEN + + MAX_SIG_ALG_NAME_LEN + 2]; + const unsigned int tn_size = sizeof(test_name) - 1; /* w/o trailing 0 */ + unsigned int n_perf_sign = 0, n_perf_verif = 0, n_perf_batch_verif = 0; + unsigned char batch_verify_ok = 0; + const char *crv_name; + ec_test_case t; + int ret; + u32 len; +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_SM2) || defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) + u8 rand_adata[255]; + ret = local_memset(rand_adata, 0, sizeof(rand_adata)); EG(ret, err); + /* The case of EDDSA25519CTX and SM2 needs a non NULL context (ancillary data). + * Create a random string of size <= 255 for this. + */ + /* + * In the case of BIGN and DBIGN, the ancillary data have a structure containing the OID as well + * as an optional generation token. + */ +#endif + MUST_HAVE((sig != NULL), ret, err); + MUST_HAVE((hash != NULL), ret, err); + MUST_HAVE((ec != NULL), ret, err); + + ret = local_memset(test_name, 0, sizeof(test_name)); EG(ret, err); + + crv_name = (const char *)PARAM_BUF_PTR((ec->params)->name); + + /* Generate the test name */ + ret = local_memset(test_name, 0, tn_size + 1); EG(ret, err); + ret = local_strncpy(test_name, sig->name, tn_size); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, "-", tn_size - len); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, hash->name, tn_size - len); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, "/", tn_size - len); EG(ret, err); + ret = local_strlen(test_name, &len); EG(ret, err); + ret = local_strncat(test_name, crv_name, tn_size - len); EG(ret, err); + + /* Create a test */ + t.name = test_name; + t.ec_str_p = ec->params; + t.priv_key = NULL; + t.priv_key_len = 0; + t.nn_random = NULL; + t.hash_type = hash->type; + t.msg = NULL; + t.msglen = 0; + t.sig_type = sig->type; + t.exp_sig = NULL; + t.exp_siglen = 0; +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_SM2) +#if defined(WITH_SIG_EDDSA25519) && !defined(WITH_SIG_SM2) + if(sig->type == EDDSA25519CTX) +#endif +#if !defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_SM2) + if(sig->type == SM2) +#endif +#if defined(WITH_SIG_EDDSA25519) && defined(WITH_SIG_SM2) + if((sig->type == EDDSA25519CTX) || (sig->type == SM2)) +#endif + { + u8 rand_len = 0; + ret = get_random((u8 *)&rand_len, sizeof(rand_len)); EG(ret, err); + ret = get_random((u8 *)rand_adata, (u16)(rand_len % sizeof(rand_adata))); EG(ret, err); + t.adata = rand_adata; + t.adata_len = rand_len; + } + else +#endif + { +#if defined(WITH_SIG_BIGN) || defined(WITH_SIG_DBIGN) +#if defined(WITH_SIG_BIGN) && !defined(WITH_SIG_DBIGN) + if(sig->type == BIGN) +#endif +#if !defined(WITH_SIG_BIGN) && defined(WITH_SIG_DBIGN) + if(sig->type == DBIGN) +#endif +#if defined(WITH_SIG_BIGN) && defined(WITH_SIG_DBIGN) + if((sig->type == BIGN) || (sig->type == DBIGN)) +#endif + { + u16 oid_len = 0; + u16 t_len = 0; + ret = get_random((u8 *)rand_adata, sizeof(rand_adata)); EG(ret, err); + + ret = get_random((u8 *)&oid_len, sizeof(oid_len)); EG(ret, err); + ret = get_random((u8 *)&t_len, sizeof(oid_len)); EG(ret, err); + + oid_len = (u8)(oid_len % (sizeof(rand_adata) - 4)); + t_len = (u8)(t_len % (sizeof(rand_adata) - 4 - oid_len)); + rand_adata[0] = (u8)(oid_len >> 8); + rand_adata[1] = (u8)(oid_len & 0xff); + rand_adata[2] = (u8)(t_len >> 8); + rand_adata[3] = (u8)(t_len & 0xff); + t.adata = rand_adata; + t.adata_len = (u8)(oid_len + t_len + 4); + } + else +#endif + { + t.adata = NULL; + t.adata_len = 0; + } + } + + /* Sign and verify some random data during some time */ + ret = ec_performance_test(&t, &n_perf_sign, &n_perf_verif, &n_perf_batch_verif, &batch_verify_ok); + OPENMP_LOCK(); + if(batch_verify_ok == 1){ + ext_printf("[%s] %30s perf: %u sign/s and %u verif/s, %u batch verif/s (for %u batch)\n", + ret ? "-" : "+", t.name, n_perf_sign, n_perf_verif, n_perf_batch_verif, (unsigned int)PERF_BATCH_VERIFICATION); + if ((n_perf_sign == 0) || (n_perf_verif == 0) || (n_perf_batch_verif == 0)) { + ext_printf("\t(0 is less than one sig/verif per sec)\n"); + } + } + else{ + ext_printf("[%s] %30s perf: %u sign/s and %u verif/s\n", + ret ? "-" : "+", t.name, n_perf_sign, n_perf_verif); + if ((n_perf_sign == 0) || (n_perf_verif == 0)) { + ext_printf("\t(0 is less than one sig/verif per sec)\n"); + } + } + OPENMP_UNLOCK(); + +err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET int perform_performance_test(const char *sig, const char *hash, const char *curve) +{ + unsigned int i, j, k; + int ret, check; + + /* Perform performance tests like "openssl speed" command */ + ext_printf("======= Performance test ========================\n"); +#ifdef WITH_OPENMP_SELF_TESTS + ext_printf("== NOTE: OpenMP parallelization is not applied to performance tests ...\n"); + ext_printf("== (because of CPU/cores shared ressources such as caches, BPU, etc.)\n"); +#endif + for (i = 0; ec_sig_maps[i].type != UNKNOWN_ALG; i++) { + for (j = 0; hash_maps[j].type != UNKNOWN_HASH_ALG; j++) { + for (k = 0; k < EC_CURVES_NUM; k++) { + if(sig != NULL){ + ret = are_str_equal(ec_sig_maps[i].name, sig, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + if(hash != NULL){ + ret = are_str_equal(hash_maps[j].name, hash, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + if(curve != NULL){ + ret = are_str_equal((const char*)ec_maps[k].params->name->buf, curve, &check); OPENMP_EG(ret, err); + if(!check){ + continue; + } + } + /* If we have EDDSA25519 or EDDSA448, we only accept specific hash functions. + * Skip the other tests. + */ +#ifdef WITH_SIG_EDDSA25519 + if((ec_sig_maps[i].type == EDDSA25519) && ((hash_maps[j].type != SHA512) || (ec_maps[k].type != WEI25519))){ + continue; + } + if((ec_sig_maps[i].type == EDDSA25519CTX) && ((hash_maps[j].type != SHA512) || (ec_maps[k].type != WEI25519))){ + continue; + } + if((ec_sig_maps[i].type == EDDSA25519PH) && ((hash_maps[j].type != SHA512) || (ec_maps[k].type != WEI25519))){ + continue; + } +#endif +#ifdef WITH_SIG_EDDSA448 + if((ec_sig_maps[i].type == EDDSA448) && ((hash_maps[j].type != SHAKE256) || (ec_maps[k].type != WEI448))){ + continue; + } + if((ec_sig_maps[i].type == EDDSA448PH) && ((hash_maps[j].type != SHAKE256) || (ec_maps[k].type != WEI448))){ + continue; + } +#endif + ret = perf_test_one(&ec_sig_maps[i], + &hash_maps[j], + &ec_maps[k]); + if (ret) { + goto err; + } + } + } + } + + return 0; + +err: + return -1; +} diff --git a/crypto/libecc/src/tests/ec_utils.c b/crypto/libecc/src/tests/ec_utils.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ec_utils.c @@ -0,0 +1,1878 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#include + +#ifdef WITH_STDLIB +#include +#include +#include +#include +#endif + +#define HDR_MAGIC 0x34215609 + +typedef enum { + IMAGE_TYPE_UNKNOWN = 0, + IMAGE_TYPE0 = 1, + IMAGE_TYPE1 = 2, + IMAGE_TYPE2 = 3, + IMAGE_TYPE3 = 4, + /* Info: You can add more image header types */ +} image_type; + +/* Generic header to prepend data */ +typedef struct { + u32 magic; /* header header */ + u32 type; /* Type of the signed image */ + u32 version; /* Version */ + u32 len; /* length of data after header */ + u32 siglen; /* length of sig (on header + data) */ +} ATTRIBUTE_PACKED metadata_hdr; + +/* Max stack working buffer size */ +#define MAX_BUF_LEN 8192 + +typedef enum { + RAWBIN, + DOTH, +} export_file_type; + +ATTRIBUTE_WARN_UNUSED_RET static int export_private_key(FILE * file, const char *name, + const ec_priv_key *priv_key, + export_file_type file_type) +{ + u8 export_buf_size, priv_key_buf[EC_STRUCTURED_PRIV_KEY_MAX_EXPORT_SIZE]; + size_t written; + int ret; + u32 i; + + MUST_HAVE(file != NULL, ret, err); + + ret = priv_key_check_initialized(priv_key); + if (ret) { + printf("Error checking private key\n"); + ret = -1; + goto err; + } + + /* Serialize the private key to a buffer */ + export_buf_size = EC_STRUCTURED_PRIV_KEY_EXPORT_SIZE(priv_key); + ret = ec_structured_priv_key_export_to_buf(priv_key, priv_key_buf, + export_buf_size); + if (ret) { + printf("Error exporting private key to buffer\n"); + ret = -1; + goto err; + } + + /* Export the private key to the file */ + switch (file_type) { + case DOTH: + MUST_HAVE(name != NULL, ret, err); + fprintf(file, "const char %s[] = { ", name); + for (i = 0; i < export_buf_size; i++) { + fprintf(file, "0x%02x", priv_key_buf[i]); + fprintf(file, ", "); + } + fprintf(file, "};\n"); + ret = 0; + break; + case RAWBIN: + written = fwrite(priv_key_buf, 1, export_buf_size, file); + if(written != export_buf_size){ + ret = -1; + goto err; + } + ret = 0; + break; + default: + ret = -1; + } + + err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int export_public_key(FILE * file, const char *name, + const ec_pub_key *pub_key, + export_file_type file_type) +{ + u8 pub_key_buf[EC_STRUCTURED_PUB_KEY_MAX_EXPORT_SIZE]; + u8 export_buf_size; + int ret; + u32 i; + size_t written; + + MUST_HAVE(file != NULL, ret, err); + ret = pub_key_check_initialized(pub_key); + if (ret) { + printf("Error checking public key\n"); + ret = -1; + goto err; + } + + /* Serialize the public key to a buffer */ + export_buf_size = EC_STRUCTURED_PUB_KEY_EXPORT_SIZE(pub_key); + ret = ec_structured_pub_key_export_to_buf(pub_key, pub_key_buf, + export_buf_size); + if (ret) { + printf("Error exporting public key to buffer\n"); + ret = -1; + goto err; + } + + /* Export the public key to the file */ + switch (file_type) { + case DOTH: + MUST_HAVE(name != NULL, ret, err); + fprintf(file, "const char %s[] = { ", name); + for (i = 0; i < export_buf_size; i++) { + fprintf(file, "0x%02x", pub_key_buf[i]); + if (i != export_buf_size) { + fprintf(file, ", "); + } + } + fprintf(file, "};\n"); + ret = 0; + break; + case RAWBIN: + written = fwrite(pub_key_buf, 1, export_buf_size, file); + if(written != export_buf_size){ + ret = -1; + goto err; + } + ret = 0; + break; + default: + ret = -1; + } + + err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int string_to_params(const char *ec_name, const char *ec_sig_name, + ec_alg_type * sig_type, + const ec_str_params ** ec_str_p, + const char *hash_name, hash_alg_type * hash_type) +{ + const ec_str_params *curve_params; + const ec_sig_mapping *sm; + const hash_mapping *hm; + u32 curve_name_len; + int ret; + + if (sig_type != NULL) { + /* Get sig type from signature alg name */ + ret = get_sig_by_name(ec_sig_name, &sm); + if ((ret) || (!sm)) { + ret = -1; + printf("Error: signature type %s is unknown!\n", + ec_sig_name); + goto err; + } + *sig_type = sm->type; + } + + if (ec_str_p != NULL) { + /* Get curve params from curve name */ + ret = local_strlen((const char *)ec_name, &curve_name_len); EG(ret, err); + curve_name_len += 1; + if(curve_name_len > 255){ + /* Sanity check */ + ret = -1; + goto err; + } + ret = ec_get_curve_params_by_name((const u8 *)ec_name, + (u8)curve_name_len, &curve_params); + if ((ret) || (!curve_params)) { + ret = -1; + printf("Error: EC curve %s is unknown!\n", ec_name); + goto err; + } + *ec_str_p = curve_params; + } + + if (hash_type != NULL) { + /* Get hash type from hash alg name */ + ret = get_hash_by_name(hash_name, &hm); + if ((ret) || (!hm)) { + ret = -1; + printf("Error: hash function %s is unknown!\n", + hash_name); + goto err; + } + *hash_type = hm->type; + } + + ret = 0; + + err: + return ret; +} + +ATTRIBUTE_WARN_UNUSED_RET static int generate_and_export_key_pair(const char *ec_name, + const char *ec_sig_name, + const char *fname_prefix) +{ + const ec_str_params *ec_str_p; + char fname[MAX_BUF_LEN]; + char kname[MAX_BUF_LEN]; + const u16 fname_len = sizeof(fname); + const u16 kname_len = sizeof(kname); + u16 prefix_len; + u32 len; + ec_alg_type sig_type; + ec_params params; + ec_key_pair kp; + FILE *file = NULL; + int ret; + + MUST_HAVE(ec_name != NULL, ret, err); + MUST_HAVE(fname_prefix != NULL, ret, err); + MUST_HAVE(ec_sig_name != NULL, ret, err); + + /* Get parameters from pretty names */ + ret = string_to_params(ec_name, ec_sig_name, &sig_type, &ec_str_p, + NULL, NULL); + if (ret) { + ret = -1; + printf("Error: error when importing params\n"); + goto err; + } + + /* Import the parameters */ + ret = import_params(¶ms, ec_str_p); EG(ret, err); + + /* Generate the key pair */ + ret = ec_key_pair_gen(&kp, ¶ms, sig_type); EG(ret, err); + + /* Get the unique affine equivalent representation of the projective point for the public key. + * This avoids ambiguity when exporting the point, and is mostly here + * for compatibility with external libraries. + */ + ret = prj_pt_unique(&(kp.pub_key.y), &(kp.pub_key.y)); EG(ret, err); + + /*************************/ + + /* Export the private key to the raw binary file */ + ret = local_strnlen(fname_prefix, fname_len, &len); EG(ret, err); + MUST_HAVE(len <= 0xffff, ret, err); + prefix_len = (u16)len; + ret = local_memset(fname, 0, fname_len); EG(ret, err); + ret = local_memcpy(fname, fname_prefix, prefix_len); EG(ret, err); + ret = local_strncat(fname, "_private_key.bin", (u32)(fname_len - prefix_len)); EG(ret, err); + file = fopen(fname, "wb"); + if (file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", fname); + goto err; + } + + ret = export_private_key(file, NULL, &(kp.priv_key), RAWBIN); + if (ret) { + ret = -1; + printf("Error exporting the private key\n"); + goto err; + } + ret = fclose(file); EG(ret, err); + file = NULL; + + /* Export the private key to the .h file */ + ret = local_memset(fname, 0, fname_len); EG(ret, err); + ret = local_memcpy(fname, fname_prefix, prefix_len); EG(ret, err); + ret = local_strncat(fname, "_private_key.h", (u32)(fname_len - prefix_len)); EG(ret, err); + file = fopen(fname, "w"); + if (file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", fname); + goto err; + } + + snprintf(kname, kname_len, "%s_%s_private_key", ec_name, ec_sig_name); + ret = export_private_key(file, kname, &(kp.priv_key), DOTH); + if (ret) { + ret = -1; + printf("Error: error exporting the private key\n"); + goto err; + } + ret = fclose(file); EG(ret, err); + file = NULL; + + /*************************/ + + /* Export the public key to the raw binary file */ + ret = local_memset(fname, 0, fname_len); EG(ret, err); + ret = local_memcpy(fname, fname_prefix, prefix_len); EG(ret, err); + ret = local_strncat(fname, "_public_key.bin", (u32)(fname_len - prefix_len)); EG(ret, err); + file = fopen(fname, "wb"); + if (file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", fname); + goto err; + } + ret = export_public_key(file, NULL, &(kp.pub_key), RAWBIN); + if (ret) { + ret = -1; + printf("Error exporting the public key\n"); + goto err; + } + ret = fclose(file); EG(ret, err); + file = NULL; + + /* Export the public key to the .h file */ + ret = local_memset(fname, 0, fname_len); EG(ret, err); + ret = local_memcpy(fname, fname_prefix, prefix_len); EG(ret, err); + ret = local_strncat(fname, "_public_key.h", (u32)(fname_len - prefix_len)); EG(ret, err); + file = fopen(fname, "w"); + if (file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", fname); + goto err; + } + + snprintf(kname, kname_len, "%s_%s_public_key", ec_name, ec_sig_name); + ret = export_public_key(file, kname, &(kp.pub_key), DOTH); + if (ret) { + ret = -1; + printf("Error exporting the public key\n"); + goto err; + } + ret = fclose(file); EG(ret, err); + file = NULL; + + ret = 0; + +err: + if(file != NULL){ + if(fclose(file)){ + ret = -1; + } + } + return ret; +} + + +ATTRIBUTE_WARN_UNUSED_RET static int store_sig(const char *in_fname, const char *out_fname, + const u8 *sig, u32 siglen, + ec_alg_type sig_type, hash_alg_type hash_type, + const u8 curve_name[MAX_CURVE_NAME_LEN], + metadata_hdr * hdr) +{ + FILE *in_file = NULL, *out_file = NULL; + u8 buf[MAX_BUF_LEN]; + size_t read, written; + int ret; + + MUST_HAVE((in_fname != NULL), ret, err); + MUST_HAVE((out_fname != NULL), ret, err); + MUST_HAVE((sig != NULL), ret, err); + MUST_HAVE((curve_name != NULL), ret, err); + MUST_HAVE((hdr != NULL), ret, err); +#if (MAX_BUF_LEN <= 255) + /* No need to check this is sizeof(buf) exceeds 256. + * (avoids -Werror,-Wtautological-constant-out-of-range-compare) + */ + MUST_HAVE(EC_STRUCTURED_SIG_EXPORT_SIZE(siglen) <= sizeof(buf), ret, err); +#endif + /* Import the data from the input file */ + in_file = fopen(in_fname, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_fname); + goto err; + } + out_file = fopen(out_fname, "wb"); + if (out_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", out_fname); + goto err; + } + if (hdr != NULL) { + /* Write the metadata header as a prepending information */ + written = fwrite(hdr, 1, sizeof(metadata_hdr), out_file); + if (written != sizeof(metadata_hdr)) { + ret = -1; + goto err; + } + } + + while (1) { + read = fread(buf, 1, sizeof(buf), in_file); + written = fwrite(buf, 1, read, out_file); + if (written != read) { + ret = -1; + printf("Error: error when writing to %s\n", + out_fname); + goto err; + } + if (read != sizeof(buf)) { + if (feof(in_file)) { + /* EOF */ + break; + } else { + ret = -1; + printf("Error: error when reading from %s\n", + in_fname); + goto err; + } + } + + } + + /* Compute the structured signature */ + ret = ec_structured_sig_export_to_buf(sig, siglen, buf, sizeof(buf), + sig_type, hash_type, curve_name); + if (ret) { + ret = -1; + printf("Error: error when exporting signature to structured buffer\n"); + goto err; + } + /* Store the signature buffer */ + written = + fwrite(buf, 1, EC_STRUCTURED_SIG_EXPORT_SIZE(siglen), + out_file); + if (written != EC_STRUCTURED_SIG_EXPORT_SIZE(siglen)) { + ret = -1; + printf("Error: error when writing to %s\n", out_fname); + goto err; + } + + ret = 0; + + err: + if(in_file != NULL){ + if(fclose(in_file)){ + ret = -1; + } + } + if(out_file != NULL){ + if(fclose(out_file)){ + ret = -1; + } + } + return ret; +} + +/* Get the raw size of a file */ +ATTRIBUTE_WARN_UNUSED_RET static int get_file_size(const char *in_fname, size_t *outsz) +{ + FILE *in_file = NULL; + long size; + int ret; + + MUST_HAVE(outsz != NULL, ret, err); + MUST_HAVE(in_fname != NULL, ret, err); + + *outsz = 0; + + in_file = fopen(in_fname, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_fname); + goto err; + } + /* Compute the size of the file */ + if (fseek(in_file, 0L, SEEK_END)) { + ret = -1; + printf("Error: file %s cannot be seeked\n", in_fname); + goto err; + } + size = ftell(in_file); + if (size < 0) { + ret = -1; + printf("Error: cannot compute file %s size\n", in_fname); + goto err; + } + /* Check overflow */ + if ((u64)size > (u64)(0xffffffff)) { + ret = -1; + printf("Error: file %s size %ld overflow (>= 2^32)\n", + in_fname, size); + goto err; + } + + *outsz = (u32)size; + ret = 0; + + err: + if(in_file != NULL){ + if(fclose(in_file)){ + ret = -1; + } + } + return ret; +} + +/* Generate a proper handler from a given type and other information */ +ATTRIBUTE_WARN_UNUSED_RET static int generate_metadata_hdr(metadata_hdr * hdr, const char *hdr_type, + const char *version, size_t len, u8 siglen) +{ + unsigned long ver; + char *endptr; /* for strtoul() */ + int ret, check; + + MUST_HAVE((hdr != NULL), ret, err); + MUST_HAVE((hdr_type != NULL), ret, err); + MUST_HAVE((version != NULL), ret, err); + + /* The magic value */ + hdr->magic = HDR_MAGIC; + + /* The given version */ +#ifdef WITH_STDLIB + errno = 0; +#endif + ver = strtoul(version, &endptr, 0); +#ifdef WITH_STDLIB + if(errno){ + ret = -1; + printf("Error: error in strtoul\n"); + goto err; + } +#endif + if (*endptr != '\0') { + ret = -1; + printf("Error: error getting provided version %s\n", version); + goto err; + } + if ((ver & 0xffffffff) != ver) { + ret = -1; + printf("Error: provided version %s is too long!\n", version); + goto err; + } + hdr->version = (u32)ver; + + /* The image type */ + hdr->type = IMAGE_TYPE_UNKNOWN; + ret = are_str_equal(hdr_type, "IMAGE_TYPE0", &check); EG(ret, err); + if (check) { + hdr->type = IMAGE_TYPE0; + } + ret = are_str_equal(hdr_type, "IMAGE_TYPE1", &check); EG(ret, err); + if (check) { + hdr->type = IMAGE_TYPE1; + } + ret = are_str_equal(hdr_type, "IMAGE_TYPE2", &check); EG(ret, err); + if (check) { + hdr->type = IMAGE_TYPE2; + } + ret = are_str_equal(hdr_type, "IMAGE_TYPE3", &check); EG(ret, err); + if (check) { + hdr->type = IMAGE_TYPE3; + } + if (hdr->type == IMAGE_TYPE_UNKNOWN) { + ret = -1; + printf("Error: unknown header type %s\n", hdr_type); + goto err; + } + + /* The length without the signature */ + if ((len & 0xffffffff) != len) { + ret = -1; + printf("Error: provided length value %lu is too long!\n", (unsigned long)len); + goto err; + } + hdr->len = (u32)len; + + /* The signature length */ + hdr->siglen = siglen; + + ret = 0; + + err: + return ret; +} + +/* Warn the user that the provided ancillary data won't be used + * if the algorithm does not need them. + */ +ATTRIBUTE_WARN_UNUSED_RET static int check_ancillary_data(const char *adata, ec_alg_type sig_type, const char *sig_name, int *check) +{ + int ret; + + MUST_HAVE(check != NULL, ret, err); + MUST_HAVE(adata != NULL, ret, err); + MUST_HAVE(sig_name != NULL, ret, err); + MUST_HAVE(sig_type != UNKNOWN_ALG, ret, err); + + (*check) = 0; + +#if defined(WITH_SIG_EDDSA25519) + if(sig_type == EDDSA25519CTX){ + (*check) = 1; + } +#endif +#if defined(WITH_SIG_EDDSA448) + if(sig_type == EDDSA448){ + (*check) = 1; + } +#endif +#if defined(WITH_SIG_SM2) + if(sig_type == SM2){ + (*check) = 1; + } +#endif + if((*check) == 0){ + printf("Warning: you have provided optional ancillary data "\ + "with a signature algorithm %s that does not need it! "\ + "This data is ignored.\n", sig_name); + } + + ret = 0; + +err: + return ret; +} + +/* + * Sign data from file and append signature + */ +ATTRIBUTE_WARN_UNUSED_RET static int sign_bin_file(const char *ec_name, const char *ec_sig_name, + const char *hash_algorithm, const char *in_fname, + const char *in_key_fname, + const char *out_fname, const char *hdr_type, + const char *version, const char *adata, u16 adata_len) +{ + u8 sig[EC_MAX_SIGLEN]; + u8 buf[MAX_BUF_LEN]; + u8 siglen; + FILE *in_file = NULL; + ec_key_pair key_pair; + FILE *in_key_file = NULL; + FILE *out_file = NULL; + const ec_str_params *ec_str_p; + ec_params params; + int ret, check; + ec_alg_type sig_type; + hash_alg_type hash_type; + u8 priv_key_buf[EC_STRUCTURED_PRIV_KEY_MAX_EXPORT_SIZE]; + u8 priv_key_buf_len; + size_t raw_data_len; + metadata_hdr hdr; + size_t read, to_read; + int eof; + u8 *allocated_buff = NULL; + struct ec_sign_context sig_ctx; + + MUST_HAVE(ec_name != NULL, ret, err); + MUST_HAVE(ec_sig_name != NULL, ret, err); + MUST_HAVE(hash_algorithm != NULL, ret, err); + MUST_HAVE(in_fname != NULL, ret, err); + MUST_HAVE(in_key_fname != NULL, ret, err); + MUST_HAVE(out_fname != NULL, ret, err); + + /************************************/ + /* Get parameters from pretty names */ + if (string_to_params + (ec_name, ec_sig_name, &sig_type, &ec_str_p, hash_algorithm, + &hash_type)) { + ret = -1; + goto err; + } + if(adata != NULL){ + /* Check if ancillary data will be used */ + ret = check_ancillary_data(adata, sig_type, ec_sig_name, &check); EG(ret, err); + } + /* Import the parameters */ + ret = import_params(¶ms, ec_str_p); EG(ret, err); + + /************************************/ + /* Import the private key from the file */ + in_key_file = fopen(in_key_fname, "rb"); + if (in_key_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_key_fname); + goto err; + } + priv_key_buf_len = (u8)fread(priv_key_buf, 1, sizeof(priv_key_buf), + in_key_file); + ret = ec_structured_key_pair_import_from_priv_key_buf(&key_pair, + ¶ms, + priv_key_buf, + priv_key_buf_len, + sig_type); + if (ret) { + ret = -1; + printf("Error: error when importing key pair from %s\n", + in_key_fname); + goto err; + } + + ret = get_file_size(in_fname, &raw_data_len); + if (ret) { + ret = -1; + printf("Error: cannot retrieve file %s size\n", in_fname); + goto err; + } + if(raw_data_len == 0){ + ret = -1; + printf("Error: file %s seems to be empty!\n", in_fname); + goto err; + } + ret = ec_get_sig_len(¶ms, sig_type, hash_type, &siglen); + if (ret) { + ret = -1; + printf("Error getting effective signature length from %s\n", + (const char *)(ec_str_p->name->buf)); + goto err; + } + + /* Structured export case, we forge a header */ + if((hdr_type != NULL) && (version != NULL)){ + /************************************/ + /* Forge the header */ + ret = generate_metadata_hdr(&hdr, hdr_type, version, raw_data_len, + EC_STRUCTURED_SIG_EXPORT_SIZE(siglen)); + + if (ret) { + ret = -1; + printf("Error: error when generating metadata\n"); + goto err; + } + } + + /* Check if we support streaming */ + ret = is_sign_streaming_mode_supported(sig_type, &check); EG(ret, err); + if(check){ + /**** We support streaming mode ****/ + /* + * Initialize signature context and start signature computation + * with generated metadata header. + */ + ret = ec_sign_init(&sig_ctx, &key_pair, sig_type, hash_type, (const u8*)adata, adata_len); + if (ret) { + ret = -1; + printf("Error: error when signing\n"); + goto err; + } + + /* Structured export case, we prepend the header in the signature */ + if((hdr_type != NULL) && (version != NULL)){ + ret = ec_sign_update(&sig_ctx, (const u8 *)&hdr, sizeof(metadata_hdr)); + if (ret) { + ret = -1; + printf("Error: error when signing\n"); + goto err; + } + } + + /* + * Read file content chunk by chunk up to file length, passing each + * chunk to signature update function + */ + in_file = fopen(in_fname, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_fname); + goto err; + } + + eof = 0; + clearerr(in_file); + while (raw_data_len && !eof) { + to_read = + (raw_data_len < + sizeof(buf)) ? raw_data_len : sizeof(buf); + memset(buf, 0, sizeof(buf)); + read = fread(buf, 1, to_read, in_file); + if (read != to_read) { + /* Check if this was EOF */ + ret = feof(in_file); + clearerr(in_file); + if (ret) { + eof = 1; + } + } + + if (read > raw_data_len) { + /* we read more than expected: leave! */ + break; + } + + raw_data_len -= read; + + ret = ec_sign_update(&sig_ctx, buf, (u32)read); + if (ret) { + break; + } + } + + if (raw_data_len) { + ret = -1; + printf("Error: unable to read full file content\n"); + goto err; + } + + /* We can now complete signature generation */ + ret = ec_sign_finalize(&sig_ctx, sig, siglen); + if (ret) { + ret = -1; + printf("Error: error when signing\n"); + goto err; + } + } + else{ + /**** We do not support streaming mode ****/ + /* Since we don't support streaming mode, we unfortunately have to + * use a dynamic allocation here. + */ + size_t offset = 0; + allocated_buff = (u8*)malloc(1); + if(allocated_buff == NULL){ + ret = -1; + printf("Error: allocation error\n"); + goto err; + } + if((hdr_type != NULL) && (version != NULL)){ + allocated_buff = (u8*)realloc(allocated_buff, sizeof(hdr)); + if(allocated_buff == NULL){ + ret = -1; + printf("Error: allocation error\n"); + goto err; + } + memcpy(allocated_buff, &hdr, sizeof(hdr)); + offset += sizeof(hdr); + } + in_file = fopen(in_fname, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_fname); + goto err; + } + + eof = 0; + clearerr(in_file); + while (raw_data_len && !eof) { + to_read = + (raw_data_len < + sizeof(buf)) ? raw_data_len : sizeof(buf); + read = fread(buf, 1, to_read, in_file); + if (read != to_read) { + /* Check if this was EOF */ + ret = feof(in_file); + clearerr(in_file); + if (ret) { + eof = 1; + } + } + + if (read > raw_data_len) { + /* we read more than expected: leave! */ + break; + } + + raw_data_len -= read; + + allocated_buff = (u8*)realloc(allocated_buff, offset + read); + if(allocated_buff == NULL){ + ret = -1; + printf("Error: allocation error\n"); + goto err; + } + memcpy(allocated_buff + offset, buf, read); + offset += read; + } + + if (raw_data_len) { + ret = -1; + printf("Error: unable to read full file content\n"); + goto err; + } + + /* Sign */ + ret = ec_sign(sig, siglen, &key_pair, allocated_buff, (u32)offset, sig_type, hash_type, (const u8*)adata, adata_len); + if(ret){ + ret = -1; + printf("Error: error when signing\n"); + goto err; + } + } + + /* Structured export case, forge the full structured file + * with HEADER || raw_binary || signature + */ + if((hdr_type != NULL) && (version != NULL)){ + /***********************************/ + /* Store the header, the raw data of the file as well as the signature */ + ret = store_sig(in_fname, out_fname, sig, siglen, sig_type, + hash_type, params.curve_name, &hdr); + if (ret) { + ret = -1; + printf("Error: error when storing signature to %s\n", + out_fname); + goto err; + } + } + else{ + /* Store the raw binary signature in the output file */ + size_t written; + + out_file = fopen(out_fname, "wb"); + if (out_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", out_fname); + goto err; + } + written = fwrite(sig, 1, siglen, out_file); + if (written != siglen) { + ret = -1; + printf("Error: error when writing to %s\n", + out_fname); + goto err; + } + } + + ret = 0; + + err: + if(in_file != NULL){ + if(fclose(in_file)){ + ret = -1; + } + } + if(in_key_file != NULL){ + if(fclose(in_key_file)){ + ret = -1; + } + } + if(out_file != NULL){ + if(fclose(out_file)){ + ret = -1; + } + } + if(allocated_buff != NULL){ + free(allocated_buff); + } + return ret; +} + +/* Dump metadata header */ +ATTRIBUTE_WARN_UNUSED_RET static int dump_hdr_info(const metadata_hdr * hdr) +{ + int ret; + + if (hdr == NULL) { + printf("Metadata header pointer is NULL!\n"); + ret = -1; + goto err; + } + + /* Dump the header */ + printf("Metadata header info:\n"); + printf(" magic = 0x%08" PRIx32 "\n", hdr->magic); + switch (hdr->type) { + case IMAGE_TYPE0: + printf(" type = IMAGE_TYPE0\n"); + break; + case IMAGE_TYPE1: + printf(" type = IMAGE_TYPE1\n"); + break; + case IMAGE_TYPE2: + printf(" type = IMAGE_TYPE2\n"); + break; + case IMAGE_TYPE3: + printf(" type = IMAGE_TYPE3\n"); + break; + default: + printf(" type %" PRIu32 " unknown!\n", hdr->type); + break; + } + printf(" version = 0x%08" PRIx32 "\n", hdr->version); + printf(" len = 0x%08" PRIx32 "\n", hdr->len); + printf(" siglen = 0x%08" PRIx32 "\n", hdr->siglen); + ret = 0; + +err: + return ret; +} + +/* + * Verify signature data from file with appended signature + */ +ATTRIBUTE_WARN_UNUSED_RET static int verify_bin_file(const char *ec_name, const char *ec_sig_name, + const char *hash_algorithm, + const char *in_fname, + const char *in_key_fname, const char *in_sig_fname, const char *adata, u16 adata_len) +{ + u8 st_sig[EC_STRUCTURED_SIG_EXPORT_SIZE(EC_MAX_SIGLEN)]; + u8 stored_curve_name[MAX_CURVE_NAME_LEN]; + u8 pub_key_buf[EC_STRUCTURED_PUB_KEY_MAX_EXPORT_SIZE]; + struct ec_verify_context verif_ctx; + ec_alg_type stored_sig_type; + hash_alg_type stored_hash_type; + const ec_str_params *ec_str_p; + ec_alg_type sig_type; + hash_alg_type hash_type; + u8 sig[EC_MAX_SIGLEN]; + u8 siglen, st_siglen; + size_t read, to_read; + u8 buf[MAX_BUF_LEN]; + u8 pub_key_buf_len; + size_t raw_data_len; + ec_pub_key pub_key; + FILE *in_key_file = NULL; + FILE *in_sig_file = NULL; + ec_params params; + metadata_hdr hdr; + size_t exp_len; + FILE *in_file = NULL; + int ret, eof, check; + u8 *allocated_buff = NULL; + + MUST_HAVE(ec_name != NULL, ret, err); + MUST_HAVE(ec_sig_name != NULL, ret, err); + MUST_HAVE(hash_algorithm != NULL, ret, err); + MUST_HAVE(in_fname != NULL, ret, err); + MUST_HAVE(in_key_fname != NULL, ret, err); + + /************************************/ + /* Get parameters from pretty names */ + ret = string_to_params(ec_name, ec_sig_name, &sig_type, &ec_str_p, + hash_algorithm, &hash_type); EG(ret, err); + if(adata != NULL){ + /* Check if ancillary data will be used */ + ret = check_ancillary_data(adata, sig_type, ec_sig_name, &check); EG(ret, err); + } + /* Import the parameters */ + ret = import_params(¶ms, ec_str_p); EG(ret, err); + + ret = ec_get_sig_len(¶ms, sig_type, hash_type, &siglen); + if (ret) { + ret = -1; + printf("Error getting effective signature length from %s\n", + (const char *)(ec_str_p->name->buf)); + goto err; + } + + /************************************/ + /* Import the public key from the file */ + in_key_file = fopen(in_key_fname, "rb"); + if (in_key_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_key_fname); + goto err; + } + pub_key_buf_len =(u8)fread(pub_key_buf, 1, sizeof(pub_key_buf), + in_key_file); + ret = ec_structured_pub_key_import_from_buf(&pub_key, ¶ms, + pub_key_buf, + pub_key_buf_len, sig_type); + if (ret) { + ret = -1; + printf("Error: error when importing public key from %s\n", + in_key_fname); + goto err; + } + + /* Let's first get file size */ + ret = get_file_size(in_fname, &raw_data_len); + if (ret) { + ret = -1; + printf("Error: cannot retrieve file %s size\n", in_fname); + goto err; + } + if(raw_data_len == 0){ + ret = -1; + printf("Error: file %s seems to be empty!\n", in_fname); + goto err; + } + + /* Open main file to verify ... */ + in_file = fopen(in_fname, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", in_fname); + goto err; + } + + /* + * We are in 'structured' mode, read the header and get the information + * from it + */ + if (in_sig_fname == NULL) { + /* ... and first read metadata header */ + read = fread(&hdr, 1, sizeof(hdr), in_file); + if (read != sizeof(hdr)) { + ret = -1; + printf("Error: unable to read metadata header " + "from file\n"); + goto err; + } + + /* Sanity checks on the header we get */ + if (hdr.magic != HDR_MAGIC) { + ret = -1; + printf("Error: got magic 0x%08" PRIx32 " instead of 0x%08x " + "from metadata header\n", hdr.magic, (unsigned int)HDR_MAGIC); + goto err; + } + + st_siglen = EC_STRUCTURED_SIG_EXPORT_SIZE(siglen); + MUST_HAVE(raw_data_len > (sizeof(hdr) + st_siglen), ret, err); + exp_len = raw_data_len - sizeof(hdr) - st_siglen; + if (hdr.len != exp_len) { + ret = -1; + printf("Error: got raw size of %" PRIu32 " instead of %lu from " + "metadata header\n", hdr.len, + (unsigned long)exp_len); + goto err; + } + + if (hdr.siglen != st_siglen) { + ret = -1; + printf("Error: got siglen %" PRIu32 " instead of %d from " + "metadata header\n", hdr.siglen, siglen); + goto err; + } + + /* Dump the header */ + ret = dump_hdr_info(&hdr); EG(ret, err); + + /* + * We now need to seek in file to get structured signature. + * Before doing that, let's first check size is large enough. + */ + if (raw_data_len < (sizeof(hdr) + st_siglen)) { + ret = -1; + goto err; + } + + ret = fseek(in_file, (long)(raw_data_len - st_siglen), + SEEK_SET); + if (ret) { + ret = -1; + printf("Error: file %s cannot be seeked\n", in_fname); + goto err; + } + read = fread(st_sig, 1, st_siglen, in_file); + if (read != st_siglen) { + ret = -1; + printf("Error: unable to read structure sig from " + "file\n"); + goto err; + } + /* Import the signature from the structured signature buffer */ + ret = ec_structured_sig_import_from_buf(sig, siglen, + st_sig, st_siglen, + &stored_sig_type, + &stored_hash_type, + stored_curve_name); + if (ret) { + ret = -1; + printf("Error: error when importing signature " + "from %s\n", in_fname); + goto err; + } + if (stored_sig_type != sig_type) { + ret = -1; + printf("Error: signature type imported from signature " + "mismatches with %s\n", ec_sig_name); + goto err; + } + if (stored_hash_type != hash_type) { + ret = -1; + printf("Error: hash algorithm type imported from " + "signature mismatches with %s\n", + hash_algorithm); + goto err; + } + ret = are_str_equal((char *)stored_curve_name, (char *)params.curve_name, &check); EG(ret, err); + if (!check) { + ret = -1; + printf("Error: curve type '%s' imported from signature " + "mismatches with '%s'\n", stored_curve_name, + params.curve_name); + goto err; + } + + /* + * Get back to the beginning of file, at the beginning of header + */ + if (fseek(in_file, 0, SEEK_SET)) { + ret = -1; + printf("Error: file %s cannot be seeked\n", in_fname); + goto err; + } + exp_len += sizeof(hdr); + } else { + /* Get the signature size */ + ret = get_file_size(in_sig_fname, &to_read); + if (ret) { + ret = -1; + printf("Error: cannot retrieve file %s size\n", + in_sig_fname); + goto err; + } + if((to_read > EC_MAX_SIGLEN) || (to_read > 255) || (to_read == 0)){ + /* This is not an expected size, get out */ + ret = -1; + printf("Error: size %d of signature in %s is > max " + "signature size %d or > 255", + (int)to_read, in_sig_fname, EC_MAX_SIGLEN); + goto err; + } + siglen = (u8)to_read; + /* Read the raw signature from the signature file */ + in_sig_file = fopen(in_sig_fname, "rb"); + if (in_sig_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", + in_sig_fname); + goto err; + } + read = fread(&sig, 1, siglen, in_sig_file); + if (read != siglen) { + ret = -1; + printf("Error: unable to read signature from %s\n", + in_sig_fname); + goto err; + } + exp_len = raw_data_len; + } + + /* Check if we support streaming */ + ret = is_verify_streaming_mode_supported(sig_type, &check); EG(ret, err); + if(check){ + /**** We support streaming mode ****/ + /* + * ... and read file content chunk by chunk to compute signature + */ + ret = ec_verify_init(&verif_ctx, &pub_key, sig, siglen, + sig_type, hash_type, (const u8*)adata, adata_len); + if (ret) { + ret = -1; + printf("Error: error when verifying ...\n"); + goto err; + } + + eof = 0; + clearerr(in_file); + while (exp_len && !eof) { + to_read = (exp_len < sizeof(buf)) ? exp_len : sizeof(buf); + read = fread(buf, 1, to_read, in_file); + if (read != to_read) { + /* Check if this was EOF */ + ret = feof(in_file); + clearerr(in_file); + if (ret) { + eof = 1; + } + } + + if (read > exp_len) { + /* we read more than expected: leave! */ + break; + } + + exp_len -= read; + + ret = ec_verify_update(&verif_ctx, buf, (u32)read); + if(ret){ + ret = -1; + printf("Error: error when verifying ...\n"); + goto err; + } + } + if (exp_len) { + ret = -1; + printf("Error: unable to read full file content\n"); + goto err; + } + ret = ec_verify_finalize(&verif_ctx); + if (ret) { + ret = -1; + goto err; + } + } + else{ + /**** We do not support streaming mode ****/ + /* Since we don't support streaming mode, we unfortunately have to + * use a dynamic allocation here. + */ + size_t offset = 0; + allocated_buff = (u8*)malloc(1); + + eof = 0; + clearerr(in_file); + while (exp_len && !eof) { + to_read = (exp_len < sizeof(buf)) ? exp_len : sizeof(buf); + read = fread(buf, 1, to_read, in_file); + if (read != to_read) { + /* Check if this was EOF */ + ret = feof(in_file); + clearerr(in_file); + if (ret) { + eof = 1; + } + } + + if (read > exp_len) { + /* we read more than expected: leave! */ + break; + } + + exp_len -= read; + + allocated_buff = (u8*)realloc(allocated_buff, offset + read); + if(allocated_buff == NULL){ + ret = -1; + printf("Error: allocation error\n"); + goto err; + } + memcpy(allocated_buff + offset, buf, read); + offset += read; + } + if (exp_len) { + ret = -1; + printf("Error: unable to read full file content\n"); + goto err; + } + + ret = ec_verify(sig, siglen, &pub_key, allocated_buff, (u32)offset, sig_type, hash_type, (const u8*)adata, adata_len); + if (ret) { + ret = -1; + goto err; + } + + } + + ret = 0; + + err: + if(in_file != NULL){ + if(fclose(in_file)){ + ret = -1; + } + } + if(in_key_file != NULL){ + if(fclose(in_key_file)){ + ret = -1; + } + } + if(in_sig_file != NULL){ + if(fclose(in_sig_file)){ + ret = -1; + } + } + if(allocated_buff != NULL){ + free(allocated_buff); + } + return ret; +} + +/* Compute 'scalar * Point' on the provided curve and prints + * the result. + */ +ATTRIBUTE_WARN_UNUSED_RET static int ec_scalar_mult(const char *ec_name, + const char *scalar_file, + const char *point_file, + const char *outfile_name) +{ + const ec_str_params *ec_str_p; + ec_params curve_params; + int ret; + u8 buf[MAX_BUF_LEN]; + size_t buf_len; + FILE *in_file = NULL; + FILE *out_file = NULL; + u16 coord_len; + + /* Scalar (natural number) to import */ + nn d; + /* Point to import */ + prj_pt Q; + d.magic = Q.magic = WORD(0); + + MUST_HAVE(ec_name != NULL, ret, err); + MUST_HAVE(scalar_file != NULL, ret, err); + MUST_HAVE(point_file != NULL, ret, err); + MUST_HAVE(outfile_name != NULL, ret, err); + + /* Get parameters from pretty names */ + ret = string_to_params(ec_name, NULL, NULL, &ec_str_p, + NULL, NULL); EG(ret, err); + + /* Import the parameters */ + ret = import_params(&curve_params, ec_str_p); EG(ret, err); + + /* Import the scalar in the local buffer from the file */ + /* Let's first get file size */ + ret = get_file_size(scalar_file, &buf_len); + if(buf_len == 0){ + ret = -1; + printf("Error: file %s seems to be empty!\n", scalar_file); + goto err; + } + if (ret) { + ret = -1; + printf("Error: cannot retrieve file %s size\n", scalar_file); + goto err; + } + if(buf_len > sizeof(buf)){ + ret = -1; + printf("Error: file %s content too large for our local buffers\n", scalar_file); + goto err; + } + /* Open main file to verify ... */ + in_file = fopen(scalar_file, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", scalar_file); + goto err; + } + /* Read the content of the file */ + if(fread(buf, 1, buf_len, in_file) != buf_len){ + ret = -1; + printf("Error: error when reading in %s\n", scalar_file); + goto err; + } + /* Import the scalar */ + ret = nn_init_from_buf(&d, buf, (u16)buf_len); EG(ret, err); + + /* Import the point in the local buffer from the file */ + /* Let's first get file size */ + ret = get_file_size(point_file, &buf_len); + if (ret) { + ret = -1; + printf("Error: cannot retrieve file %s size\n", point_file); + goto err; + } + if(buf_len > sizeof(buf)){ + ret = -1; + printf("Error: file %s content too large for our local buffers\n", point_file); + goto err; + } + ret = fclose(in_file); EG(ret, err); + in_file = NULL; + /* Open main file to verify ... */ + in_file = fopen(point_file, "rb"); + if (in_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", point_file); + goto err; + } + /* Read the content of the file */ + if(fread(buf, 1, buf_len, in_file) != buf_len){ + ret = -1; + printf("Error: error when reading in %s\n", point_file); + goto err; + } + /* Import the point */ + if(prj_pt_import_from_buf(&Q, buf, (u16)buf_len, &(curve_params.ec_curve))){ + ret = -1; + printf("Error: error when importing the projective point from %s\n", point_file); + goto err; + } + +#ifdef USE_SIG_BLINDING + /* NB: we use a blind scalar multiplication here since we do not want our + * private d to leak ... + */ + ret = prj_pt_mul_blind(&Q, &d, &Q); EG(ret, err); +#else + ret = prj_pt_mul(&Q, &d, &Q); EG(ret, err); +#endif + /* Get the unique representation of the point */ + ret = prj_pt_unique(&Q, &Q); EG(ret, err); + + /* Export the projective point in the local buffer */ + coord_len = (u16)(3 * BYTECEIL((Q.crv)->a.ctx->p_bitlen)); + if(coord_len > sizeof(buf)){ + ret = -1; + printf("Error: error when exporting the point\n"); + goto err; + } + if(prj_pt_export_to_buf(&Q, buf, coord_len)){ + ret = -1; + printf("Error: error when exporting the point\n"); + goto err; + } + /* Now save the coordinates in the output file */ + out_file = fopen(outfile_name, "wb"); + if (out_file == NULL) { + ret = -1; + printf("Error: file %s cannot be opened\n", outfile_name); + goto err; + } + + /* Write in the file */ + if(fwrite(buf, 1, coord_len, out_file) != coord_len){ + ret = -1; + printf("Error: error when writing to %s\n", outfile_name); + goto err; + } + + ret = 0; + +err: + /* Uninit local variables */ + nn_uninit(&d); + prj_pt_uninit(&Q); + + if(in_file != NULL){ + if(fclose(in_file)){ + ret = -1; + } + } + if(out_file != NULL){ + if(fclose(out_file)){ + ret = -1; + } + } + return ret; +} + + +static void print_curves(void) +{ + u8 i; + + /* Print all the available curves */ + for (i = 0; i < EC_CURVES_NUM; i++) { + printf("%s ", (const char *)(ec_maps[i].params->name->buf)); + } + + return; +} + +static void print_hash_algs(void) +{ + int i; + + /* Print all the available hash functions */ + for (i = 0; hash_maps[i].type != UNKNOWN_HASH_ALG; i++) { + printf("%s ", hash_maps[i].name); + } + + return; +} + +static void print_sig_algs(void) +{ + int i; + + /* Print all the available signature schemes */ + for (i = 0; ec_sig_maps[i].type != UNKNOWN_ALG; i++) { + printf("%s ", ec_sig_maps[i].name); + } + + return; +} + +static void print_help(const char *prog_name) +{ + printf("%s expects at least one argument\n", prog_name ? prog_name : "NULL"); + printf("\targ1 = 'gen_keys', 'sign', 'verify', 'struct_sign', 'struct_verify' or 'scalar_mult'\n"); +} + +#ifdef __cplusplus +/* In case of a C++ compiler, preserve our "main" + * linkage. + */ +extern "C" { +int main(int argc, char *argv[]); +} +#endif + +int main(int argc, char *argv[]) +{ + int ret, check, found; + u32 len; + const char *adata = NULL; + u16 adata_len = 0; + + if (argc < 2) { + ret = -1; + print_help(argv[0]); + goto err; + } + + found = 0; + ret = are_str_equal(argv[1], "gen_keys", &check); EG(ret, err); + if (check) { + found = 1; + /* Generate keys --------------------------------- + * + * arg1 = curve name ("frp256v1", ...) + * arg2 = algorithm type ("ECDSA", "ECKCDSA", ...) + * arg3 = file name prefix + */ + if (argc != 5){ + ret = -1; + printf("Bad args number for %s %s:\n", argv[0], + argv[1]); + printf("\targ1 = curve name: "); + print_curves(); + printf("\n"); + + printf("\targ2 = signature algorithm type: "); + print_sig_algs(); + printf("\n"); + + printf("\targ3 = file name prefix\n"); + printf("\n"); + + goto err; + } + if(generate_and_export_key_pair(argv[2], argv[3], argv[4])){ + ret = -1; + printf("gen_key error ...\n"); + goto err; + } + } + ret = are_str_equal(argv[1], "sign", &check); EG(ret, err); + if (check) { + found = 1; + /* Sign something -------------------------------- + * Signature is structured, i.e. the output is a self contained + * data image + * arg1 = curve name ("frp256v1", ...) + * arg2 = signature algorithm type ("ECDSA", "ECKCDSA", ...) + * arg3 = hash algorithm type ("SHA256", "SHA512", ...) + * arg4 = input file to sign + * arg5 = input file containing the private key + * arg6 = output file containing the signature + * arg7 (optional) = ancillary data to be used + */ + if ((argc != 8) && (argc != 9)) { + ret = -1; + printf("Bad args number for %s %s:\n", argv[0], + argv[1]); + printf("\targ1 = curve name: "); + print_curves(); + printf("\n"); + + printf("\targ2 = signature algorithm type: "); + print_sig_algs(); + printf("\n"); + + printf("\targ3 = hash algorithm type: "); + print_hash_algs(); + printf("\n"); + + printf("\targ4 = input file to sign\n"); + printf("\targ5 = input file containing the private key (in raw binary format)\n"); + printf("\targ6 = output file containing the signature\n"); + printf("\t\n"); + goto err; + } + if(argc == 9){ + adata = argv[8]; + ret = local_strlen(adata, &len); EG(ret, err); + MUST_HAVE(len <= 0xffff, ret, err); + adata_len = (u16)len; + } + if(sign_bin_file(argv[2], argv[3], argv[4], argv[5], argv[6], + argv[7], NULL, NULL, adata, adata_len)){ + ret = -1; + printf("sign error ...\n"); + goto err; + } + } + ret = are_str_equal(argv[1], "verify", &check); EG(ret, err); + if (check) { + found = 1; + /* Verify something ------------------------------ + * + * arg1 = curve name ("frp256v1", ...) + * arg2 = signature algorithm type ("ECDSA", "ECKCDSA", ...) + * arg3 = hash algorithm type ("SHA256", "SHA512", ...) + * arg = input file to verify + * arg5 = input file with the public key + * arg6 = input file containing the signature + * arg7 (optional) = ancillary data to be used + */ + if ((argc != 8) && (argc != 9)) { + ret = -1; + printf("Bad args number for %s %s:\n", argv[0], + argv[1]); + printf("\targ1 = curve name: "); + print_curves(); + printf("\n"); + + printf("\targ2 = signature algorithm type: "); + print_sig_algs(); + printf("\n"); + + printf("\targ3 = hash algorithm type: "); + print_hash_algs(); + printf("\n"); + + printf("\targ4 = input file to verify\n"); + printf("\targ5 = input file containing the public key (in raw binary format)\n"); + printf("\targ6 = input file containing the signature\n"); + printf("\t\n"); + goto err; + } + if(argc == 9){ + adata = argv[8]; + ret = local_strlen(adata, &len); EG(ret, err); + MUST_HAVE(len <= 0xffff, ret, err); + adata_len = (u16)len; + } + if (verify_bin_file(argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], adata, adata_len)) { + ret = -1; + printf("Signature check of %s failed\n", argv[5]); + goto err; + } else { + printf("Signature check of %s OK\n", argv[5]); + } + } + ret = are_str_equal(argv[1], "struct_sign", &check); EG(ret, err); + if (check) { + found = 1; + /* Sign something -------------------------------- + * Signature is structured, i.e. the output is a self contained + * data image + * arg1 = curve name ("frp256v1", ...) + * arg2 = signature algorithm type ("ECDSA", "ECKCDSA", ...) + * arg3 = hash algorithm type ("SHA256", "SHA512", ...) + * arg4 = input file to sign + * arg5 = input file with the private key + * arg6 = output file containing the appended signature + * arg7 = metadata header type + * arg8 = version of the metadata header + * arg9 (optional) = ancillary data to be used + */ + if ((argc != 10) && (argc != 11)) { + ret = -1; + printf("Bad args number for %s %s:\n", argv[0], + argv[1]); + printf("\targ1 = curve name: "); + print_curves(); + printf("\n"); + + printf("\targ2 = signature algorithm type: "); + print_sig_algs(); + printf("\n"); + + printf("\targ3 = hash algorithm type: "); + print_hash_algs(); + printf("\n"); + + printf("\targ4 = input file to sign\n"); + printf("\targ5 = input file containing the private key (in raw binary format)\n"); + printf("\targ6 = output file containing the appended signature\n"); + printf("\targ7 = metadata header type (IMAGE_TYPE0, IMAGE_TYPE1, ...)\n"); + printf("\targ8 = version of the metadata header\n"); + printf("\t\n"); + goto err; + } + if(argc == 11){ + adata = argv[10]; + ret = local_strlen(adata, &len); EG(ret, err); + MUST_HAVE(len <= 0xffff, ret, err); + adata_len = (u16)len; + } + if(sign_bin_file(argv[2], argv[3], argv[4], argv[5], argv[6], + argv[7], argv[8], argv[9], adata, adata_len)){ + ret = -1; + printf("struct_sign error ...\n"); + goto err; + } + } + ret = are_str_equal(argv[1], "struct_verify", &check); EG(ret, err); + if (check) { + found = 1; + /* Verify something ------------------------------ + * + * arg1 = curve name ("frp256v1", ...) + * arg2 = signature algorithm type ("ECDSA", "ECKCDSA", ...) + * arg3 = hash algorithm type ("SHA256", "SHA512", ...) + * arg4 = input file to verify + * arg5 = input file containing the public key (in raw binary format) + * arg6 (optional) = ancillary data to be used + */ + if ((argc != 7) && (argc != 8)) { + ret = -1; + printf("Bad args number for %s %s:\n", argv[0], + argv[1]); + printf("\targ1 = curve name: "); + print_curves(); + printf("\n"); + + printf("\targ2 = signature algorithm type: "); + print_sig_algs(); + printf("\n"); + + printf("\targ3 = hash algorithm type: "); + print_hash_algs(); + printf("\n"); + + printf("\targ4 = input file to verify\n"); + printf("\targ5 = input file containing the public key (in raw binary format)\n"); + printf("\t\n"); + goto err; + } + if(argc == 8){ + adata = argv[7]; + ret = local_strlen(adata, &len); EG(ret, err); + MUST_HAVE(len <= 0xffff, ret, err); + adata_len = (u16)len; + } + if (verify_bin_file(argv[2], argv[3], argv[4], argv[5], argv[6], NULL, adata, adata_len)) { + ret = -1; + printf("Signature check of %s failed\n", argv[5]); + goto err; + } else { + printf("Signature check of %s OK\n", argv[5]); + } + } + ret = are_str_equal(argv[1], "scalar_mult", &check); EG(ret, err); + if (check) { + found = 1; + /* Point scalar multiplication -------------------- + * + * arg1 = curve name ("frp256v1", ...) + * arg2 = scalar + * arg3 = point to multiply + * arg4 = file name where to save the result + */ + if (argc != 6) { + ret = -1; + printf("Bad args number for %s %s:\n", argv[0], + argv[1]); + printf("\targ1 = curve name: "); + print_curves(); + printf("\n"); + + printf("\targ2 = scalar bin file\n"); + printf("\targ3 = point to multiply bin file (projective coordinates)\n"); + printf("\targ4 = file name where to save the result\n"); + goto err; + } + if(ec_scalar_mult(argv[2], argv[3], argv[4], argv[5])){ + ret = -1; + printf("Scalar multiplication failed\n"); + goto err; + } + } + + if (found == 0) { + /* Bad first argument, print help */ + ret = -1; + printf("Bad first argument '%s'\n", argv[1]); + print_help(argv[0]); + goto err; + } + + ret = 0; + +err: + return ret; +} diff --git a/crypto/libecc/src/tests/ecccdh_test_vectors.h b/crypto/libecc/src/tests/ecccdh_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ecccdh_test_vectors.h @@ -0,0 +1,3750 @@ +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_0 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_0_test_vector_our_priv_key[] = { + 0xf1, 0x7d, 0x3f, 0xea, 0x36, 0x7b, 0x74, 0xd3, 0x40, 0x85, 0x1c, 0xa4, 0x27, 0x0d, 0xcb, 0x24, 0xc2, 0x71, 0xf4, 0x45, 0xbe, 0xd9, 0xd5, 0x27, +}; +static const u8 ecccdh_SECP192R1_0_test_vector_peer_pub_key[] = { + 0x42, 0xea, 0x6d, 0xd9, 0x96, 0x9d, 0xd2, 0xa6, 0x1f, 0xea, 0x1a, 0xac, 0x7f, 0x8e, 0x98, 0xed, 0xcc, 0x89, 0x6c, 0x6e, 0x55, 0x85, 0x7c, 0xc0, 0xdf, 0xbe, 0x5d, 0x7c, 0x61, 0xfa, 0xc8, 0x8b, 0x11, 0x81, 0x1b, 0xde, 0x32, 0x8e, 0x8a, 0x0d, 0x12, 0xbf, 0x01, 0xa9, 0xd2, 0x04, 0xb5, 0x23, +}; +static const u8 ecccdh_SECP192R1_0_test_vector_our_pub_key[] = { + 0xb1, 0x50, 0x53, 0x40, 0x1f, 0x57, 0x28, 0x56, 0x37, 0xec, 0x32, 0x4c, 0x1c, 0xd2, 0x13, 0x9e, 0x3a, 0x67, 0xde, 0x37, 0x39, 0x23, 0x4b, 0x37, 0xf2, 0x69, 0xc1, 0x58, 0x63, 0x74, 0x82, 0xaa, 0xd6, 0x44, 0xcd, 0x69, 0x2d, 0xd1, 0xd3, 0xef, 0x2c, 0x8a, 0x7c, 0x49, 0xe3, 0x89, 0xf7, 0xf6, +}; +static const u8 ecccdh_SECP192R1_0_test_vector_shared_secret[] = { + 0x80, 0x3d, 0x8a, 0xb2, 0xe5, 0xb6, 0xe6, 0xfc, 0xa7, 0x15, 0x73, 0x7c, 0x3a, 0x82, 0xf7, 0xce, 0x3c, 0x78, 0x31, 0x24, 0xf6, 0xd5, 0x1c, 0xd0, +}; +static const ecdh_test_case ecccdh_SECP192R1_0_test_case = { + .name = "ECCCDH/SECP192R1 0", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_0_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_0_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_0_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_0_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_0_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_1 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_1_test_vector_our_priv_key[] = { + 0x56, 0xe8, 0x53, 0x34, 0x9d, 0x96, 0xfe, 0x4c, 0x44, 0x24, 0x48, 0xda, 0xcb, 0x7c, 0xf9, 0x2b, 0xb7, 0xa9, 0x5d, 0xcf, 0x57, 0x4a, 0x9b, 0xd5, +}; +static const u8 ecccdh_SECP192R1_1_test_vector_peer_pub_key[] = { + 0xde, 0xb5, 0x71, 0x2f, 0xa0, 0x27, 0xac, 0x8d, 0x2f, 0x22, 0xc4, 0x55, 0xcc, 0xb7, 0x3a, 0x91, 0xe1, 0x7b, 0x65, 0x12, 0xb5, 0xe0, 0x30, 0xe7, 0x7e, 0x26, 0x90, 0xa0, 0x2c, 0xc9, 0xb2, 0x87, 0x08, 0x43, 0x1a, 0x29, 0xfb, 0x54, 0xb8, 0x7b, 0x1f, 0x0c, 0x14, 0xe0, 0x11, 0xac, 0x21, 0x25, +}; +static const u8 ecccdh_SECP192R1_1_test_vector_our_pub_key[] = { + 0xc0, 0x0d, 0x43, 0x57, 0x16, 0xff, 0xea, 0x53, 0xfd, 0x8c, 0x16, 0x27, 0x92, 0x41, 0x4c, 0x37, 0x66, 0x51, 0x87, 0xe5, 0x82, 0x71, 0x65, 0x39, 0xab, 0x71, 0x1c, 0x62, 0xaa, 0x71, 0xa5, 0xa1, 0x8e, 0x8a, 0x3c, 0x48, 0xf8, 0x9d, 0xc6, 0xfa, 0x52, 0xfa, 0xc0, 0x10, 0x8e, 0x52, 0xa8, 0xa0, +}; +static const u8 ecccdh_SECP192R1_1_test_vector_shared_secret[] = { + 0xc2, 0x08, 0x84, 0x75, 0x68, 0xb9, 0x88, 0x35, 0xd7, 0x31, 0x2c, 0xef, 0x1f, 0x97, 0xf7, 0xaa, 0x29, 0x82, 0x83, 0x15, 0x23, 0x13, 0xc2, 0x9d, +}; +static const ecdh_test_case ecccdh_SECP192R1_1_test_case = { + .name = "ECCCDH/SECP192R1 1", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_1_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_1_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_1_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_1_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_1_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_2 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_2_test_vector_our_priv_key[] = { + 0xc6, 0xef, 0x61, 0xfe, 0x12, 0xe8, 0x0b, 0xf5, 0x6f, 0x2d, 0x3f, 0x7d, 0x0b, 0xb7, 0x57, 0x39, 0x45, 0x19, 0x90, 0x6d, 0x55, 0x50, 0x09, 0x49, +}; +static const u8 ecccdh_SECP192R1_2_test_vector_peer_pub_key[] = { + 0x4e, 0xda, 0xa8, 0xef, 0xc5, 0xa0, 0xf4, 0x0f, 0x84, 0x36, 0x63, 0xec, 0x58, 0x15, 0xe7, 0x76, 0x2d, 0xdd, 0xc0, 0x08, 0xe6, 0x63, 0xc2, 0x0f, 0x0a, 0x9f, 0x8d, 0xc6, 0x7a, 0x3e, 0x60, 0xef, 0x6d, 0x64, 0xb5, 0x22, 0x18, 0x5d, 0x03, 0xdf, 0x1f, 0xc0, 0xad, 0xfd, 0x42, 0x47, 0x82, 0x79, +}; +static const u8 ecccdh_SECP192R1_2_test_vector_our_pub_key[] = { + 0xe1, 0x84, 0xbc, 0x18, 0x24, 0x82, 0xf3, 0x40, 0x3c, 0x87, 0x87, 0xb8, 0x38, 0x42, 0x47, 0x74, 0x67, 0xfc, 0xd0, 0x11, 0xdb, 0x0f, 0x6c, 0x64, 0xf9, 0xd1, 0xc1, 0x41, 0x42, 0xf4, 0x0d, 0xe8, 0x63, 0x9d, 0xb9, 0x7d, 0x51, 0xa6, 0x3d, 0x2c, 0xce, 0x10, 0x07, 0xcc, 0xf7, 0x73, 0xcd, 0xcb, +}; +static const u8 ecccdh_SECP192R1_2_test_vector_shared_secret[] = { + 0x87, 0x22, 0x91, 0x07, 0x04, 0x7a, 0x3b, 0x61, 0x19, 0x20, 0xd6, 0xe3, 0xb2, 0xc0, 0xc8, 0x9b, 0xea, 0x4f, 0x49, 0x41, 0x22, 0x60, 0xb8, 0xdd, +}; +static const ecdh_test_case ecccdh_SECP192R1_2_test_case = { + .name = "ECCCDH/SECP192R1 2", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_2_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_2_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_2_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_2_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_2_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_3 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_3_test_vector_our_priv_key[] = { + 0xe6, 0x74, 0x7b, 0x9c, 0x23, 0xba, 0x70, 0x44, 0xf3, 0x8f, 0xf7, 0xe6, 0x2c, 0x35, 0xe4, 0x03, 0x89, 0x20, 0xf5, 0xa0, 0x16, 0x3d, 0x3c, 0xda, +}; +static const u8 ecccdh_SECP192R1_3_test_vector_peer_pub_key[] = { + 0x88, 0x87, 0xc2, 0x76, 0xed, 0xee, 0xd3, 0xe9, 0xe8, 0x66, 0xb4, 0x6d, 0x58, 0xd8, 0x95, 0xc7, 0x3f, 0xbd, 0x80, 0xb6, 0x3e, 0x38, 0x2e, 0x88, 0x04, 0xc5, 0x09, 0x7b, 0xa6, 0x64, 0x5e, 0x16, 0x20, 0x6c, 0xfb, 0x70, 0xf7, 0x05, 0x26, 0x55, 0x94, 0x7d, 0xd4, 0x4a, 0x17, 0xf1, 0xf9, 0xd5, +}; +static const u8 ecccdh_SECP192R1_3_test_vector_our_pub_key[] = { + 0x2b, 0x83, 0x8d, 0xbe, 0x73, 0x73, 0x5f, 0x37, 0xa3, 0x9a, 0x78, 0xd3, 0x19, 0x57, 0x83, 0xd2, 0x69, 0x91, 0xe8, 0x6f, 0xf4, 0xd9, 0x2d, 0x1a, 0x60, 0xd3, 0x44, 0x94, 0x22, 0x74, 0x48, 0x9f, 0x98, 0x90, 0x3b, 0x2e, 0x7f, 0x93, 0xf8, 0xd1, 0x97, 0xfc, 0x9a, 0xe6, 0x0a, 0x0e, 0xd5, 0x3a, +}; +static const u8 ecccdh_SECP192R1_3_test_vector_shared_secret[] = { + 0xee, 0xc0, 0xbe, 0xd8, 0xfc, 0x55, 0xe1, 0xfe, 0xdd, 0xc8, 0x21, 0x58, 0xfd, 0x6d, 0xc0, 0xd4, 0x8a, 0x4d, 0x79, 0x6a, 0xaf, 0x47, 0xd4, 0x6c, +}; +static const ecdh_test_case ecccdh_SECP192R1_3_test_case = { + .name = "ECCCDH/SECP192R1 3", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_3_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_3_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_3_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_3_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_3_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_4 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_4_test_vector_our_priv_key[] = { + 0xbe, 0xab, 0xed, 0xd0, 0x15, 0x4a, 0x1a, 0xfc, 0xfc, 0x85, 0xd5, 0x21, 0x81, 0xc1, 0x0f, 0x5e, 0xb4, 0x7a, 0xdc, 0x51, 0xf6, 0x55, 0x04, 0x7d, +}; +static const u8 ecccdh_SECP192R1_4_test_vector_peer_pub_key[] = { + 0x0d, 0x04, 0x5f, 0x30, 0x25, 0x4a, 0xdc, 0x1f, 0xce, 0xfa, 0x8a, 0x5b, 0x1f, 0x31, 0xbf, 0x4e, 0x73, 0x9d, 0xd3, 0x27, 0xcd, 0x18, 0xd5, 0x94, 0x54, 0x2c, 0x31, 0x4e, 0x41, 0x42, 0x7c, 0x08, 0x27, 0x8a, 0x08, 0xce, 0x8d, 0x73, 0x05, 0xf3, 0xb5, 0xb8, 0x49, 0xc7, 0x2d, 0x8a, 0xff, 0x73, +}; +static const u8 ecccdh_SECP192R1_4_test_vector_our_pub_key[] = { + 0x1f, 0x65, 0xcf, 0x6e, 0x89, 0x78, 0xe1, 0xc1, 0xbc, 0x10, 0xbb, 0x61, 0xa7, 0xdb, 0x31, 0x1d, 0xe3, 0x10, 0x08, 0x8c, 0x8c, 0xf9, 0x76, 0x8b, 0xf7, 0xd4, 0x38, 0x16, 0x8e, 0x7f, 0x42, 0xab, 0x14, 0xb1, 0x6a, 0xf5, 0x3a, 0x7a, 0x2f, 0x64, 0x6f, 0xf4, 0x0b, 0x53, 0xd7, 0x4c, 0xbc, 0xc7, +}; +static const u8 ecccdh_SECP192R1_4_test_vector_shared_secret[] = { + 0x71, 0x6e, 0x74, 0x3b, 0x1b, 0x37, 0xa2, 0xcd, 0x84, 0x79, 0xf0, 0xa3, 0xd5, 0xa7, 0x4c, 0x10, 0xba, 0x25, 0x99, 0xbe, 0x18, 0xd7, 0xe2, 0xf4, +}; +static const ecdh_test_case ecccdh_SECP192R1_4_test_case = { + .name = "ECCCDH/SECP192R1 4", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_4_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_4_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_4_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_4_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_4_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_5 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_5_test_vector_our_priv_key[] = { + 0xcf, 0x70, 0x35, 0x42, 0x26, 0x66, 0x73, 0x21, 0xd6, 0xe2, 0xba, 0xf4, 0x09, 0x99, 0xe2, 0xfd, 0x74, 0xc7, 0xa0, 0xf7, 0x93, 0xfa, 0x86, 0x99, +}; +static const u8 ecccdh_SECP192R1_5_test_vector_peer_pub_key[] = { + 0xfb, 0x35, 0xca, 0x20, 0xd2, 0xe9, 0x66, 0x65, 0xc5, 0x1b, 0x98, 0xe8, 0xf6, 0xeb, 0x3d, 0x79, 0x11, 0x35, 0x08, 0xd8, 0xbc, 0xcd, 0x45, 0x16, 0x36, 0x8e, 0xec, 0x0d, 0x5b, 0xfb, 0x84, 0x77, 0x21, 0xdf, 0x6a, 0xaf, 0xf0, 0xe5, 0xd4, 0x8c, 0x44, 0x4f, 0x74, 0xbf, 0x9c, 0xd8, 0xa5, 0xa7, +}; +static const u8 ecccdh_SECP192R1_5_test_vector_our_pub_key[] = { + 0x5f, 0x48, 0x44, 0xff, 0xcc, 0xe6, 0x10, 0x05, 0xd2, 0x4f, 0x73, 0x7d, 0xb9, 0x86, 0x75, 0xe9, 0x2f, 0x7b, 0x65, 0x43, 0xae, 0xb6, 0x10, 0x6c, 0x54, 0x24, 0xf5, 0x98, 0x13, 0x92, 0x15, 0xd3, 0x89, 0xb6, 0xb1, 0x2b, 0x86, 0xd5, 0x80, 0x14, 0x85, 0x7f, 0x2d, 0xda, 0xdb, 0x54, 0x0f, 0x51, +}; +static const u8 ecccdh_SECP192R1_5_test_vector_shared_secret[] = { + 0xf6, 0x70, 0x53, 0xb9, 0x34, 0x45, 0x99, 0x85, 0xa3, 0x15, 0xcb, 0x01, 0x7b, 0xf0, 0x30, 0x28, 0x91, 0x79, 0x8d, 0x45, 0xd0, 0xe1, 0x95, 0x08, +}; +static const ecdh_test_case ecccdh_SECP192R1_5_test_case = { + .name = "ECCCDH/SECP192R1 5", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_5_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_5_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_5_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_5_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_5_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_6 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_6_test_vector_our_priv_key[] = { + 0xfe, 0x94, 0x25, 0x15, 0x23, 0x7f, 0xff, 0xdd, 0x7b, 0x4e, 0xb5, 0xc6, 0x49, 0x09, 0xee, 0xe4, 0x85, 0x6a, 0x07, 0x6c, 0xdf, 0x12, 0xba, 0xe2, +}; +static const u8 ecccdh_SECP192R1_6_test_vector_peer_pub_key[] = { + 0x82, 0x47, 0x52, 0x96, 0x0c, 0x13, 0x07, 0xe5, 0xf1, 0x3a, 0x83, 0xda, 0x21, 0xc7, 0x99, 0x8c, 0xa8, 0xb5, 0xb0, 0x0b, 0x95, 0x49, 0xf6, 0xd0, 0xbc, 0x52, 0xd9, 0x1e, 0x23, 0x43, 0x63, 0xbc, 0x32, 0xee, 0x0b, 0x67, 0x78, 0xf2, 0x5c, 0xd8, 0xc1, 0x84, 0x75, 0x10, 0xf4, 0x34, 0x8b, 0x94, +}; +static const u8 ecccdh_SECP192R1_6_test_vector_our_pub_key[] = { + 0xe6, 0x36, 0x9d, 0xf7, 0x9b, 0x20, 0x7b, 0x8b, 0x86, 0x79, 0xf7, 0xc8, 0x69, 0xcf, 0xc2, 0x64, 0x85, 0x9d, 0x1a, 0xb5, 0x5a, 0xa4, 0x01, 0xe8, 0x1f, 0x99, 0xc7, 0x1f, 0x80, 0x1a, 0x30, 0xb5, 0x2f, 0x74, 0xda, 0x6e, 0x5e, 0x6d, 0xbb, 0x62, 0xee, 0x4c, 0x5d, 0xa1, 0x09, 0x0c, 0xc0, 0x20, +}; +static const u8 ecccdh_SECP192R1_6_test_vector_shared_secret[] = { + 0x75, 0x82, 0x29, 0x71, 0x19, 0x3e, 0xdd, 0x47, 0x2b, 0xf3, 0x01, 0x51, 0xa7, 0x82, 0x61, 0x9c, 0x55, 0xad, 0x0b, 0x27, 0x9c, 0x93, 0x03, 0xdd, +}; +static const ecdh_test_case ecccdh_SECP192R1_6_test_case = { + .name = "ECCCDH/SECP192R1 6", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_6_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_6_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_6_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_6_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_6_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_7 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_7_test_vector_our_priv_key[] = { + 0x33, 0xfe, 0xd1, 0x04, 0x92, 0xaf, 0xa5, 0xbe, 0xa0, 0x33, 0x3c, 0x0a, 0xf1, 0x2c, 0xac, 0x94, 0x0c, 0x4d, 0x22, 0x24, 0x55, 0xbc, 0xd0, 0xfe, +}; +static const u8 ecccdh_SECP192R1_7_test_vector_peer_pub_key[] = { + 0x10, 0xbb, 0x57, 0x02, 0x02, 0x91, 0x14, 0x19, 0x81, 0xf8, 0x33, 0xb4, 0x74, 0x9e, 0x56, 0x11, 0x03, 0x4b, 0x30, 0x8e, 0x84, 0x01, 0x1d, 0x21, 0xe1, 0xca, 0xcd, 0x6b, 0x7b, 0xd1, 0x7e, 0xd8, 0xdd, 0xb5, 0x0b, 0x6a, 0xee, 0x06, 0x54, 0xc3, 0x5f, 0x2d, 0x0e, 0xdd, 0xc1, 0xcf, 0xfc, 0xf6, +}; +static const u8 ecccdh_SECP192R1_7_test_vector_our_pub_key[] = { + 0xef, 0x0b, 0x28, 0xaf, 0xc4, 0x16, 0x37, 0xd7, 0x37, 0xf4, 0x2e, 0x4c, 0x8a, 0xac, 0xea, 0xdc, 0x84, 0xba, 0x2e, 0x0b, 0x84, 0x9c, 0xa1, 0x8c, 0x57, 0x79, 0x79, 0x42, 0xe5, 0x52, 0x17, 0x3b, 0xba, 0x17, 0xf7, 0x32, 0x78, 0xe0, 0x29, 0xf4, 0x23, 0x35, 0x06, 0x8b, 0xd7, 0x70, 0xdd, 0xf2, +}; +static const u8 ecccdh_SECP192R1_7_test_vector_shared_secret[] = { + 0x67, 0xcb, 0xa2, 0xcb, 0xb6, 0x9e, 0xe7, 0x8b, 0xf1, 0xab, 0xaf, 0xb0, 0xe6, 0xfb, 0xe3, 0x3f, 0xa2, 0x09, 0x4c, 0x12, 0x8d, 0x59, 0x65, 0x2d, +}; +static const ecdh_test_case ecccdh_SECP192R1_7_test_case = { + .name = "ECCCDH/SECP192R1 7", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_7_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_7_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_7_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_7_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_7_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_8 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_8_test_vector_our_priv_key[] = { + 0xf3, 0x55, 0x7c, 0x5d, 0x70, 0xb4, 0xc7, 0x95, 0x49, 0x60, 0xc3, 0x35, 0x68, 0x77, 0x6a, 0xdb, 0xe8, 0xe4, 0x36, 0x19, 0xab, 0xe2, 0x6b, 0x13, +}; +static const u8 ecccdh_SECP192R1_8_test_vector_peer_pub_key[] = { + 0x51, 0x92, 0xfc, 0xe4, 0x18, 0x5a, 0x77, 0x58, 0xea, 0x1b, 0xc5, 0x6e, 0x0e, 0x4f, 0x4e, 0x8b, 0x2d, 0xce, 0x32, 0x34, 0x8d, 0x0d, 0xce, 0xd1, 0x20, 0x98, 0x99, 0x81, 0xbe, 0xaa, 0xf0, 0x00, 0x6d, 0x88, 0xa9, 0x6e, 0x79, 0x71, 0xa2, 0xfa, 0x3a, 0x33, 0xba, 0x46, 0x04, 0x7f, 0xc7, 0xba, +}; +static const u8 ecccdh_SECP192R1_8_test_vector_our_pub_key[] = { + 0xd7, 0x01, 0x12, 0xc5, 0xf0, 0xf0, 0x84, 0x43, 0x86, 0x49, 0x4a, 0xc1, 0xad, 0x99, 0xdc, 0xe2, 0x21, 0x41, 0x34, 0x17, 0x6e, 0xbf, 0xb9, 0xaf, 0xd3, 0xc1, 0x87, 0xa0, 0x38, 0x51, 0x0a, 0xb3, 0x1d, 0x45, 0x9e, 0x2b, 0x7a, 0xf1, 0xa3, 0x80, 0xdd, 0x75, 0x76, 0xaf, 0x06, 0x26, 0x75, 0x48, +}; +static const u8 ecccdh_SECP192R1_8_test_vector_shared_secret[] = { + 0xcf, 0x99, 0xa2, 0x77, 0x0a, 0x38, 0x6c, 0xa0, 0x13, 0x7d, 0x1e, 0xca, 0x0a, 0x22, 0x6e, 0x48, 0x42, 0x97, 0xac, 0x3c, 0x51, 0x3f, 0x36, 0x31, +}; +static const ecdh_test_case ecccdh_SECP192R1_8_test_case = { + .name = "ECCCDH/SECP192R1 8", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_8_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_8_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_8_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_8_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_8_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_9 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_9_test_vector_our_priv_key[] = { + 0x58, 0x6c, 0xfb, 0xa1, 0xc6, 0xe8, 0x17, 0x66, 0xed, 0x52, 0x82, 0x8f, 0x17, 0x7b, 0x1b, 0xe1, 0x4e, 0xbb, 0xc5, 0xb8, 0x33, 0x48, 0xc3, 0x11, +}; +static const u8 ecccdh_SECP192R1_9_test_vector_peer_pub_key[] = { + 0x26, 0xd0, 0x19, 0xdb, 0xe2, 0x79, 0xea, 0xd0, 0x1e, 0xed, 0x14, 0x3a, 0x91, 0x60, 0x1a, 0xda, 0x26, 0xe2, 0xf4, 0x22, 0x25, 0xb1, 0xc6, 0x2b, 0x6c, 0xa6, 0x53, 0xf0, 0x82, 0x72, 0xe0, 0x38, 0x6f, 0xc9, 0x42, 0x1f, 0xbd, 0x58, 0x00, 0x93, 0xd7, 0xae, 0x63, 0x01, 0xbc, 0xa9, 0x44, 0x76, +}; +static const u8 ecccdh_SECP192R1_9_test_vector_our_pub_key[] = { + 0x58, 0xb3, 0xc6, 0x3e, 0x56, 0xbe, 0xc9, 0xd6, 0x96, 0xbf, 0x9a, 0x88, 0xdf, 0x28, 0x73, 0x73, 0x83, 0x91, 0xf7, 0x63, 0x68, 0xaa, 0x2b, 0x49, 0x57, 0x76, 0x77, 0x3b, 0x26, 0x1f, 0xaf, 0x7b, 0xa2, 0xfd, 0xc4, 0xfe, 0x43, 0xb9, 0x2c, 0x0b, 0x1c, 0x7a, 0x2f, 0xd0, 0x54, 0xa4, 0x36, 0x50, +}; +static const u8 ecccdh_SECP192R1_9_test_vector_shared_secret[] = { + 0x57, 0x63, 0x31, 0xe2, 0xb4, 0xfb, 0x38, 0xa1, 0x12, 0x81, 0x0e, 0x15, 0x29, 0x83, 0x4d, 0xe8, 0x30, 0x7f, 0xb0, 0xa0, 0xd2, 0x75, 0x68, 0x77, +}; +static const ecdh_test_case ecccdh_SECP192R1_9_test_case = { + .name = "ECCCDH/SECP192R1 9", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_9_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_9_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_9_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_9_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_9_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_10 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_10_test_vector_our_priv_key[] = { + 0xca, 0xd8, 0x10, 0x06, 0x03, 0xa4, 0xf6, 0x5b, 0xe0, 0x8d, 0x8f, 0xc8, 0xa1, 0xb7, 0xe8, 0x84, 0xc5, 0xff, 0x65, 0xde, 0xb3, 0xc9, 0x6d, 0x99, +}; +static const u8 ecccdh_SECP192R1_10_test_vector_peer_pub_key[] = { + 0x53, 0x9b, 0xc4, 0x0f, 0xe2, 0x0a, 0x0f, 0xb2, 0x67, 0x88, 0x8b, 0x64, 0x7b, 0x03, 0xea, 0xaf, 0x6e, 0xc2, 0x0c, 0x02, 0xa1, 0xe1, 0xf8, 0xc8, 0x69, 0x09, 0x5e, 0x5b, 0xb7, 0xb4, 0xd4, 0x4c, 0x32, 0x78, 0xa7, 0xee, 0x6b, 0xec, 0xa3, 0x97, 0xc4, 0x52, 0x46, 0xda, 0x9a, 0x34, 0xc8, 0xbe, +}; +static const u8 ecccdh_SECP192R1_10_test_vector_our_pub_key[] = { + 0xb7, 0xfc, 0xc0, 0xf5, 0x2c, 0x7a, 0x41, 0x1e, 0xdb, 0xed, 0x39, 0xe1, 0x0b, 0xf0, 0x2b, 0x6a, 0xe0, 0xf2, 0x66, 0x14, 0xc6, 0xb3, 0x25, 0xa2, 0x47, 0x48, 0x3b, 0x26, 0xeb, 0x67, 0x77, 0x6d, 0xe2, 0xb9, 0x3a, 0xb7, 0x11, 0x9d, 0x54, 0x47, 0x57, 0x37, 0x39, 0xe3, 0xd5, 0x5e, 0x72, 0xfb, +}; +static const u8 ecccdh_SECP192R1_10_test_vector_shared_secret[] = { + 0x90, 0x2f, 0x45, 0x01, 0x91, 0x6a, 0x0d, 0xd9, 0x45, 0x55, 0x4c, 0x3a, 0x37, 0xb3, 0xd7, 0x80, 0xd3, 0x75, 0xa6, 0xda, 0x71, 0x31, 0x97, 0xc4, +}; +static const ecdh_test_case ecccdh_SECP192R1_10_test_case = { + .name = "ECCCDH/SECP192R1 10", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_10_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_10_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_10_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_10_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_10_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_11 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_11_test_vector_our_priv_key[] = { + 0x1e, 0xdd, 0x87, 0x9c, 0xc5, 0xc7, 0x96, 0x19, 0xca, 0xe6, 0xc7, 0x3a, 0x69, 0x1b, 0xd5, 0xa0, 0x39, 0x5c, 0x0e, 0xf3, 0xb3, 0x56, 0xfc, 0xd2, +}; +static const u8 ecccdh_SECP192R1_11_test_vector_peer_pub_key[] = { + 0x5d, 0x34, 0x3d, 0xdb, 0x96, 0x31, 0x8f, 0xb4, 0x79, 0x4d, 0x10, 0xf6, 0xc5, 0x73, 0xf9, 0x9f, 0xee, 0x5d, 0x0d, 0x57, 0xb9, 0x96, 0x25, 0x0f, 0x99, 0xfb, 0xdf, 0x9d, 0x97, 0xdd, 0x88, 0xad, 0x41, 0x02, 0x35, 0xda, 0xc3, 0x6e, 0x5b, 0x92, 0xce, 0x28, 0x24, 0xb8, 0xe5, 0x87, 0xa8, 0x2c, +}; +static const u8 ecccdh_SECP192R1_11_test_vector_our_pub_key[] = { + 0x6c, 0xe6, 0xad, 0xb2, 0xc3, 0x08, 0x08, 0xf5, 0x90, 0x04, 0x8c, 0x33, 0xdf, 0xfa, 0xd4, 0x52, 0x4e, 0xbf, 0x7a, 0x5f, 0xd3, 0x9b, 0x74, 0x7b, 0x49, 0x66, 0xbd, 0x2f, 0x3d, 0x00, 0x56, 0x9b, 0x4d, 0x4c, 0x04, 0x09, 0xfb, 0xd7, 0xa2, 0xdb, 0x75, 0x2f, 0x6d, 0x09, 0xbc, 0xa8, 0xc2, 0x5f, +}; +static const u8 ecccdh_SECP192R1_11_test_vector_shared_secret[] = { + 0x46, 0xe4, 0xde, 0x33, 0x50, 0x54, 0xd4, 0x29, 0x86, 0x32, 0x18, 0xae, 0x33, 0x63, 0x6f, 0xc9, 0xb8, 0x9c, 0x62, 0x8b, 0x64, 0xb5, 0x06, 0xc7, +}; +static const ecdh_test_case ecccdh_SECP192R1_11_test_case = { + .name = "ECCCDH/SECP192R1 11", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_11_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_11_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_11_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_11_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_11_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_12 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_12_test_vector_our_priv_key[] = { + 0x46, 0x0e, 0x45, 0x22, 0x73, 0xfe, 0x18, 0x27, 0x60, 0x21, 0x87, 0xad, 0x3b, 0xeb, 0xee, 0x65, 0xcb, 0x84, 0x42, 0x3b, 0xb4, 0xf4, 0x75, 0x37, +}; +static const u8 ecccdh_SECP192R1_12_test_vector_peer_pub_key[] = { + 0x8d, 0x3d, 0xb9, 0xbd, 0xce, 0x13, 0x7f, 0xfb, 0xfb, 0x89, 0x13, 0x88, 0xc3, 0x7d, 0xf6, 0xc0, 0xcb, 0xc9, 0x0a, 0xa5, 0xe5, 0x37, 0x62, 0x20, 0x13, 0x5d, 0x30, 0xb5, 0xcb, 0x66, 0x0e, 0xef, 0x87, 0x64, 0xff, 0xc7, 0x44, 0xf1, 0x5c, 0x1b, 0x5d, 0x6d, 0xc0, 0x6b, 0xa4, 0x41, 0x6d, 0x37, +}; +static const u8 ecccdh_SECP192R1_12_test_vector_our_pub_key[] = { + 0xd1, 0xbd, 0x3a, 0x3e, 0xfa, 0xbf, 0x47, 0x67, 0xfe, 0x63, 0x80, 0xbd, 0xf0, 0xdb, 0xf4, 0x9d, 0x52, 0xd4, 0xcf, 0x0c, 0xbb, 0x89, 0x40, 0x4c, 0xc1, 0x50, 0xc2, 0xb4, 0xc8, 0xb3, 0xaa, 0x35, 0xf7, 0x65, 0xf8, 0x47, 0xe4, 0xf7, 0xf8, 0xfd, 0x87, 0x04, 0xd2, 0x41, 0xa1, 0x81, 0xee, 0x99, +}; +static const u8 ecccdh_SECP192R1_12_test_vector_shared_secret[] = { + 0x1b, 0xfe, 0x9e, 0x5a, 0x20, 0xac, 0x7a, 0x38, 0xd8, 0xf6, 0x05, 0xb4, 0x25, 0xbb, 0x90, 0x30, 0xbe, 0x31, 0xef, 0x97, 0xc1, 0x01, 0xc7, 0x6c, +}; +static const ecdh_test_case ecccdh_SECP192R1_12_test_case = { + .name = "ECCCDH/SECP192R1 12", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_12_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_12_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_12_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_12_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_12_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_13 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_13_test_vector_our_priv_key[] = { + 0xb9, 0x70, 0x36, 0x50, 0x08, 0x45, 0x6f, 0x87, 0x58, 0xec, 0xc5, 0xa3, 0xb3, 0x3c, 0xf3, 0xae, 0x6a, 0x8d, 0x56, 0x81, 0x07, 0xa5, 0x21, 0x67, +}; +static const u8 ecccdh_SECP192R1_13_test_vector_peer_pub_key[] = { + 0x9e, 0x0a, 0x69, 0x49, 0x51, 0x9c, 0x7f, 0x5b, 0xe6, 0x8c, 0x04, 0x33, 0xc5, 0xfd, 0xf1, 0x30, 0x64, 0xaa, 0x13, 0xfb, 0x29, 0x48, 0x3d, 0xc3, 0xe1, 0xc8, 0xba, 0x63, 0xe1, 0xf4, 0x71, 0xdb, 0x23, 0x18, 0x5f, 0x50, 0xd9, 0xc8, 0x71, 0xed, 0xea, 0x21, 0x25, 0x5b, 0x3a, 0x63, 0xb4, 0xb7, +}; +static const u8 ecccdh_SECP192R1_13_test_vector_our_pub_key[] = { + 0xc1, 0xb8, 0x61, 0x0c, 0x8c, 0x63, 0xf8, 0xd4, 0xab, 0xda, 0x09, 0x3b, 0x9a, 0x11, 0xa5, 0x66, 0x04, 0x4b, 0xf6, 0x5c, 0x6f, 0xaa, 0x89, 0x99, 0xa5, 0xbc, 0x4b, 0x3c, 0xa0, 0x95, 0x38, 0x2e, 0x97, 0x38, 0xae, 0xe9, 0x5f, 0xe9, 0x47, 0x9b, 0x17, 0x87, 0x9b, 0x3a, 0xd5, 0x29, 0x55, 0x59, +}; +static const u8 ecccdh_SECP192R1_13_test_vector_shared_secret[] = { + 0x0e, 0x8c, 0x49, 0x3a, 0x4a, 0xdc, 0x44, 0x5d, 0xc9, 0x28, 0x8a, 0x3b, 0x9b, 0x27, 0x25, 0x99, 0x22, 0x40, 0x54, 0x59, 0x2d, 0x72, 0x65, 0xb3, +}; +static const ecdh_test_case ecccdh_SECP192R1_13_test_case = { + .name = "ECCCDH/SECP192R1 13", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_13_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_13_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_13_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_13_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_13_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_14 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_14_test_vector_our_priv_key[] = { + 0x59, 0xc1, 0x5b, 0x8a, 0x24, 0x64, 0xe4, 0x1d, 0xfe, 0x43, 0x71, 0xc7, 0xf7, 0xda, 0xdf, 0x47, 0x0a, 0xe4, 0x25, 0x54, 0x4f, 0x81, 0x13, 0xbd, +}; +static const u8 ecccdh_SECP192R1_14_test_vector_peer_pub_key[] = { + 0xbe, 0x08, 0x82, 0x38, 0x90, 0x2e, 0x99, 0x39, 0xb3, 0xd0, 0x54, 0xee, 0xeb, 0x84, 0x92, 0xda, 0xf4, 0xbd, 0xcf, 0x09, 0xa2, 0xab, 0x77, 0xf1, 0x58, 0xd6, 0x74, 0x9a, 0x3a, 0x92, 0x3d, 0xc8, 0x04, 0x40, 0xf2, 0x66, 0x1f, 0xd3, 0x5b, 0x65, 0x16, 0x17, 0xe6, 0x52, 0x94, 0xb4, 0x63, 0x75, +}; +static const u8 ecccdh_SECP192R1_14_test_vector_our_pub_key[] = { + 0x1f, 0xe7, 0x76, 0xf7, 0x35, 0x67, 0xb6, 0xac, 0x0b, 0x0d, 0x67, 0x64, 0x16, 0x4d, 0xe6, 0xc5, 0xbe, 0x75, 0x1b, 0xa8, 0xd1, 0xff, 0x45, 0x5e, 0x4c, 0x16, 0x0b, 0xf3, 0x8a, 0xfb, 0x2b, 0x71, 0xf6, 0x84, 0x26, 0x16, 0x64, 0x11, 0x5c, 0xe8, 0x74, 0x55, 0x3e, 0x8b, 0x05, 0x94, 0x32, 0xd2, +}; +static const u8 ecccdh_SECP192R1_14_test_vector_shared_secret[] = { + 0x0f, 0x19, 0x91, 0x08, 0x6b, 0x45, 0x5d, 0xed, 0x6a, 0x1c, 0x41, 0x46, 0xf7, 0xbf, 0x59, 0xfe, 0x9b, 0x49, 0x5d, 0xe5, 0x66, 0xeb, 0xc6, 0xbf, +}; +static const ecdh_test_case ecccdh_SECP192R1_14_test_case = { + .name = "ECCCDH/SECP192R1 14", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_14_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_14_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_14_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_14_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_14_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_15 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_15_test_vector_our_priv_key[] = { + 0xa6, 0xe9, 0xb8, 0x85, 0xc6, 0x6b, 0x95, 0x9d, 0x1f, 0xc2, 0x70, 0x8d, 0x59, 0x1b, 0x6d, 0x32, 0x28, 0xe4, 0x9e, 0xb9, 0x8f, 0x72, 0x6d, 0x61, +}; +static const u8 ecccdh_SECP192R1_15_test_vector_peer_pub_key[] = { + 0xbf, 0x5a, 0xe0, 0x50, 0x25, 0xe1, 0xbe, 0x61, 0x7e, 0x66, 0x6d, 0x87, 0xa4, 0x16, 0x83, 0x63, 0x87, 0x3d, 0x57, 0x61, 0xb3, 0x76, 0xb5, 0x03, 0xe1, 0xe6, 0xe3, 0x8b, 0x37, 0x2b, 0x6b, 0xee, 0x0f, 0xf5, 0xb3, 0x50, 0x2d, 0x83, 0x73, 0x5e, 0x3b, 0x2c, 0x26, 0x82, 0x5e, 0x4f, 0x0f, 0xcc, +}; +static const u8 ecccdh_SECP192R1_15_test_vector_our_pub_key[] = { + 0x63, 0x2b, 0xb7, 0x65, 0x1d, 0xbf, 0x49, 0xdd, 0xe9, 0xdd, 0x12, 0x5d, 0x13, 0xfb, 0x23, 0x4e, 0x06, 0x61, 0x77, 0x23, 0xbe, 0xed, 0x3d, 0x1b, 0xf4, 0xad, 0x52, 0x09, 0x63, 0x84, 0x88, 0x39, 0x7c, 0x5f, 0x44, 0xf9, 0x94, 0xdd, 0x74, 0x79, 0x80, 0x7e, 0x79, 0xf4, 0x88, 0x7d, 0x2e, 0x71, +}; +static const u8 ecccdh_SECP192R1_15_test_vector_shared_secret[] = { + 0xb3, 0x0f, 0x21, 0x27, 0xc3, 0x4d, 0xf3, 0x5a, 0xaa, 0x91, 0xdb, 0xf0, 0xbb, 0xe1, 0x57, 0x98, 0xe7, 0x99, 0xa0, 0x3e, 0xd1, 0x16, 0x98, 0xc1, +}; +static const ecdh_test_case ecccdh_SECP192R1_15_test_case = { + .name = "ECCCDH/SECP192R1 15", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_15_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_15_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_15_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_15_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_15_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_16 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_16_test_vector_our_priv_key[] = { + 0xbd, 0xb7, 0x54, 0x09, 0x6f, 0xfb, 0xfb, 0xd8, 0xb0, 0xf3, 0xcb, 0x04, 0x6c, 0xcb, 0x7c, 0xa1, 0x49, 0xc4, 0xe7, 0x19, 0x20, 0x67, 0xa3, 0xee, +}; +static const u8 ecccdh_SECP192R1_16_test_vector_peer_pub_key[] = { + 0x6c, 0xc4, 0xfe, 0xed, 0x84, 0xc7, 0xab, 0x0d, 0x09, 0x00, 0x5d, 0x66, 0x0e, 0xd3, 0x4d, 0xe6, 0x95, 0x5a, 0x94, 0x61, 0xc4, 0x13, 0x8d, 0x11, 0x31, 0x22, 0x5f, 0x33, 0x86, 0x4e, 0xd4, 0x8d, 0xa0, 0x6f, 0xa4, 0x5a, 0x91, 0x3b, 0x46, 0xcf, 0x42, 0x55, 0x77, 0x42, 0xe3, 0x50, 0x85, 0xe6, +}; +static const u8 ecccdh_SECP192R1_16_test_vector_our_pub_key[] = { + 0xd9, 0xc0, 0x98, 0xd4, 0x21, 0xd7, 0x41, 0xf6, 0xfa, 0xab, 0x11, 0x6f, 0x3e, 0x47, 0x31, 0xd2, 0x8c, 0x55, 0x58, 0xe1, 0x9f, 0xe1, 0x12, 0xa1, 0x38, 0xd4, 0xdc, 0x48, 0xcc, 0xdb, 0x1d, 0x3e, 0xd8, 0xd3, 0x1f, 0xd0, 0x67, 0x84, 0xa4, 0xf8, 0x7a, 0x68, 0xae, 0xc1, 0xcb, 0xd5, 0xb0, 0x8f, +}; +static const u8 ecccdh_SECP192R1_16_test_vector_shared_secret[] = { + 0x64, 0xa5, 0xc2, 0x46, 0x59, 0x9d, 0x3e, 0x81, 0x77, 0xa2, 0x40, 0x2a, 0x11, 0x10, 0xeb, 0x81, 0xe6, 0xc4, 0x56, 0xab, 0x4e, 0xdb, 0x51, 0x27, +}; +static const ecdh_test_case ecccdh_SECP192R1_16_test_case = { + .name = "ECCCDH/SECP192R1 16", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_16_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_16_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_16_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_16_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_16_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_17 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_17_test_vector_our_priv_key[] = { + 0xd5, 0xbc, 0xf2, 0x53, 0x4d, 0xaf, 0xc3, 0xd9, 0x99, 0x64, 0xc7, 0xbd, 0x63, 0xab, 0x7b, 0xd1, 0x59, 0x99, 0xfe, 0x56, 0xdd, 0x96, 0x9c, 0x42, +}; +static const u8 ecccdh_SECP192R1_17_test_vector_peer_pub_key[] = { + 0x36, 0x15, 0x73, 0x15, 0xbe, 0xe7, 0xaf, 0xed, 0xde, 0xd5, 0x8c, 0x4e, 0x8b, 0xa1, 0x4d, 0x34, 0x21, 0xc4, 0x01, 0xe5, 0x11, 0x35, 0xbc, 0xc9, 0x37, 0xc2, 0x97, 0xca, 0x70, 0x3f, 0x77, 0xc5, 0x2b, 0xb0, 0x62, 0xd8, 0xce, 0x97, 0x1d, 0xb8, 0x40, 0x97, 0xba, 0x0c, 0x75, 0x3a, 0x41, 0x8f, +}; +static const u8 ecccdh_SECP192R1_17_test_vector_our_pub_key[] = { + 0xfd, 0xa1, 0xd5, 0xd2, 0x8d, 0x6f, 0xe0, 0xe7, 0x90, 0x9d, 0x6a, 0x8b, 0xaf, 0xa7, 0x82, 0x4d, 0xb5, 0x57, 0x2a, 0xb9, 0x2f, 0xfe, 0x7d, 0xe6, 0x13, 0x4a, 0x29, 0x7c, 0x1d, 0x9c, 0x8b, 0xba, 0xb2, 0x49, 0xab, 0xac, 0xd9, 0x51, 0xed, 0x11, 0xe5, 0xa9, 0x9f, 0x92, 0xe7, 0x99, 0x15, 0x72, +}; +static const u8 ecccdh_SECP192R1_17_test_vector_shared_secret[] = { + 0x01, 0x7b, 0x8c, 0xa5, 0x3c, 0x82, 0xfa, 0xb1, 0x63, 0xda, 0x2a, 0xb7, 0x83, 0x96, 0x6a, 0x39, 0xe0, 0x61, 0xb3, 0x2c, 0x8c, 0xfa, 0x33, 0x4d, +}; +static const ecdh_test_case ecccdh_SECP192R1_17_test_case = { + .name = "ECCCDH/SECP192R1 17", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_17_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_17_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_17_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_17_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_17_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_18 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_18_test_vector_our_priv_key[] = { + 0x43, 0xd4, 0xb9, 0xdf, 0x10, 0x53, 0xbe, 0x5b, 0x42, 0x68, 0x10, 0x4c, 0x02, 0x24, 0x4d, 0x3b, 0xf9, 0x59, 0x4b, 0x01, 0x0b, 0x46, 0xa8, 0xb2, +}; +static const u8 ecccdh_SECP192R1_18_test_vector_peer_pub_key[] = { + 0x98, 0x46, 0x4d, 0x47, 0xf0, 0x25, 0x6f, 0x82, 0x92, 0xe0, 0x27, 0xe8, 0xc9, 0x25, 0x82, 0xea, 0x77, 0xcf, 0x90, 0x51, 0xf5, 0xce, 0x8e, 0x5d, 0x44, 0x95, 0x52, 0xef, 0x75, 0x78, 0xbe, 0x96, 0x23, 0x6f, 0xe5, 0xed, 0x9d, 0x06, 0x43, 0xc0, 0xbb, 0x6c, 0x5a, 0x91, 0x34, 0xb0, 0x10, 0x8d, +}; +static const u8 ecccdh_SECP192R1_18_test_vector_our_pub_key[] = { + 0xc3, 0x02, 0x0b, 0x70, 0x91, 0x46, 0x3d, 0x78, 0x8f, 0x1f, 0x1d, 0x76, 0xf7, 0xcf, 0xee, 0xc8, 0x2e, 0xcd, 0xb3, 0xb7, 0xd9, 0x9c, 0x34, 0x5c, 0x9a, 0x77, 0x10, 0xd5, 0x17, 0x95, 0x91, 0xd8, 0xf3, 0xdf, 0x0a, 0xa1, 0x22, 0x30, 0x17, 0x68, 0xae, 0x7d, 0xb7, 0xee, 0xe2, 0xd7, 0xf5, 0x83, +}; +static const u8 ecccdh_SECP192R1_18_test_vector_shared_secret[] = { + 0x34, 0x0e, 0xf3, 0xdb, 0x3d, 0xbe, 0xbd, 0xd9, 0x1c, 0x62, 0xc3, 0xd4, 0xe1, 0xa3, 0xda, 0x2c, 0x7c, 0x52, 0xa3, 0x33, 0x8b, 0x86, 0x52, 0x59, +}; +static const ecdh_test_case ecccdh_SECP192R1_18_test_case = { + .name = "ECCCDH/SECP192R1 18", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_18_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_18_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_18_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_18_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_18_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_19 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_19_test_vector_our_priv_key[] = { + 0x94, 0xca, 0xc2, 0xc2, 0xca, 0x71, 0x47, 0x46, 0x40, 0x16, 0x70, 0xd9, 0x4e, 0xdb, 0xf3, 0xf6, 0x77, 0x86, 0x7b, 0x5a, 0x03, 0xbe, 0xe7, 0xad, +}; +static const u8 ecccdh_SECP192R1_19_test_vector_peer_pub_key[] = { + 0x56, 0x3e, 0xb6, 0x6c, 0x33, 0x4c, 0xf6, 0xf1, 0x23, 0xbf, 0x04, 0xc7, 0x80, 0x3b, 0x48, 0xa3, 0x11, 0x02, 0x14, 0x23, 0x7e, 0x98, 0x3b, 0xf5, 0x0f, 0x35, 0x11, 0x04, 0x81, 0x91, 0x99, 0xef, 0x07, 0xc9, 0xa6, 0x05, 0x1d, 0x20, 0x75, 0x8f, 0x3a, 0xf7, 0x90, 0x27, 0xea, 0x66, 0xa5, 0x3f, +}; +static const u8 ecccdh_SECP192R1_19_test_vector_our_pub_key[] = { + 0xb1, 0x85, 0x54, 0xa2, 0xe7, 0x43, 0xef, 0x0a, 0xa2, 0xf0, 0x40, 0x98, 0x7c, 0x4c, 0x45, 0x10, 0x04, 0xe0, 0x96, 0xdf, 0x3d, 0x80, 0xdd, 0xae, 0x6e, 0x3e, 0x2c, 0x61, 0x8f, 0x89, 0x6e, 0x36, 0xba, 0x62, 0x00, 0x77, 0x68, 0x4b, 0x70, 0xa0, 0x5f, 0xfb, 0x79, 0xbf, 0x5e, 0x6c, 0x76, 0x40, +}; +static const u8 ecccdh_SECP192R1_19_test_vector_shared_secret[] = { + 0x21, 0x62, 0x14, 0x49, 0x21, 0xdf, 0x51, 0x03, 0xd0, 0xe6, 0xa6, 0x50, 0xfb, 0x13, 0xfd, 0x24, 0x6f, 0x47, 0x38, 0xd0, 0x89, 0x6c, 0xe9, 0x2f, +}; +static const ecdh_test_case ecccdh_SECP192R1_19_test_case = { + .name = "ECCCDH/SECP192R1 19", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_19_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_19_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_19_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_19_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_19_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_20 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_20_test_vector_our_priv_key[] = { + 0x2a, 0x3a, 0x9e, 0x33, 0xc8, 0xcc, 0x31, 0x07, 0xa9, 0xf9, 0x26, 0x5c, 0x3b, 0xde, 0xa1, 0x20, 0x65, 0x70, 0xe8, 0x6f, 0x92, 0xac, 0x70, 0x14, +}; +static const u8 ecccdh_SECP192R1_20_test_vector_peer_pub_key[] = { + 0x86, 0x82, 0x8c, 0x4a, 0xc9, 0x2b, 0x55, 0x07, 0x61, 0x8a, 0xec, 0x78, 0x73, 0xa1, 0xd4, 0xfc, 0x65, 0x43, 0xc5, 0xbe, 0x33, 0xcf, 0x30, 0x78, 0xb2, 0x2c, 0xa7, 0x24, 0x37, 0x54, 0x5e, 0x10, 0xd6, 0xd4, 0xf0, 0x52, 0x42, 0x2e, 0xb8, 0x98, 0xb7, 0x37, 0xa4, 0xb8, 0x54, 0x3e, 0xe5, 0x50, +}; +static const u8 ecccdh_SECP192R1_20_test_vector_our_pub_key[] = { + 0xa7, 0xba, 0x38, 0xbe, 0x1b, 0xc6, 0x69, 0xdd, 0x23, 0xcc, 0xfc, 0xee, 0x06, 0x45, 0xb1, 0xf0, 0xdb, 0x8c, 0xf9, 0x42, 0xde, 0xaf, 0xae, 0xb6, 0xb8, 0x2d, 0xb7, 0x9d, 0x80, 0xcd, 0x0e, 0x37, 0xf2, 0x8d, 0x41, 0x63, 0xad, 0xc3, 0x89, 0xde, 0xe8, 0xfc, 0x77, 0x97, 0xb5, 0xc9, 0x83, 0x1b, +}; +static const u8 ecccdh_SECP192R1_20_test_vector_shared_secret[] = { + 0x4c, 0x69, 0xe7, 0xfe, 0xed, 0x4b, 0x11, 0x15, 0x9a, 0xdf, 0xc1, 0x6a, 0x60, 0x47, 0xa9, 0x25, 0x72, 0xea, 0x44, 0xe0, 0x74, 0x0b, 0x23, 0xaf, +}; +static const ecdh_test_case ecccdh_SECP192R1_20_test_case = { + .name = "ECCCDH/SECP192R1 20", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_20_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_20_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_20_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_20_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_20_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_21 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_21_test_vector_our_priv_key[] = { + 0x4a, 0x6b, 0x78, 0xa9, 0x8a, 0xc9, 0x8f, 0xa8, 0xe9, 0x9a, 0x8e, 0xce, 0x08, 0xec, 0x02, 0x51, 0x12, 0x5f, 0x85, 0xc6, 0xfd, 0x0e, 0x28, 0x9b, +}; +static const u8 ecccdh_SECP192R1_21_test_vector_peer_pub_key[] = { + 0x67, 0x00, 0xa1, 0x02, 0x43, 0x77, 0x81, 0xa9, 0x58, 0x1d, 0xa2, 0xbc, 0x25, 0xce, 0xd5, 0xab, 0xf4, 0x19, 0xda, 0x91, 0xd3, 0xc8, 0x03, 0xdf, 0x71, 0x39, 0x6c, 0x9c, 0xf0, 0x8b, 0xcd, 0x91, 0x85, 0x4e, 0x3e, 0x6e, 0x42, 0xd8, 0xc6, 0x57, 0xce, 0x0f, 0x27, 0xab, 0x77, 0xa9, 0xdc, 0x4b, +}; +static const u8 ecccdh_SECP192R1_21_test_vector_our_pub_key[] = { + 0xe7, 0x69, 0xdb, 0xbc, 0xd5, 0xce, 0x2d, 0x83, 0x51, 0x4b, 0x76, 0x8d, 0x3d, 0x2d, 0x5a, 0xa0, 0xbc, 0xd8, 0xf6, 0x6a, 0xf1, 0x5f, 0x55, 0x00, 0x2f, 0xc6, 0xd0, 0xb0, 0x39, 0xe0, 0xf2, 0x8f, 0x74, 0xfb, 0xef, 0xfe, 0x9e, 0x88, 0x3d, 0x4d, 0xd7, 0x22, 0x96, 0xe4, 0xe9, 0x5c, 0xae, 0x71, +}; +static const u8 ecccdh_SECP192R1_21_test_vector_shared_secret[] = { + 0x46, 0x07, 0x2a, 0xce, 0xfd, 0x67, 0xbf, 0xf5, 0x0d, 0xe3, 0x55, 0xca, 0x7a, 0x31, 0xfa, 0x6b, 0xe5, 0x9f, 0x26, 0xe4, 0x67, 0x58, 0x72, 0x59, +}; +static const ecdh_test_case ecccdh_SECP192R1_21_test_case = { + .name = "ECCCDH/SECP192R1 21", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_21_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_21_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_21_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_21_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_21_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_22 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_22_test_vector_our_priv_key[] = { + 0xc5, 0xa6, 0x49, 0x1d, 0x78, 0x84, 0x4d, 0x66, 0x17, 0xef, 0x33, 0xbe, 0x6b, 0x8b, 0xd5, 0x4d, 0xa2, 0x21, 0x45, 0x08, 0x85, 0xd5, 0x95, 0x0f, +}; +static const u8 ecccdh_SECP192R1_22_test_vector_peer_pub_key[] = { + 0xa8, 0x2f, 0x35, 0x4c, 0xf9, 0x7b, 0xee, 0x5d, 0x22, 0xdc, 0x6c, 0x07, 0x9f, 0x29, 0x02, 0xea, 0xd4, 0x4d, 0x96, 0xa8, 0xf6, 0x14, 0xf1, 0x78, 0xa6, 0x54, 0xa9, 0xaa, 0x8a, 0x1a, 0x08, 0x02, 0xf2, 0xce, 0x0e, 0xe8, 0xa0, 0xf4, 0xeb, 0xe9, 0x6d, 0xee, 0x1b, 0x37, 0x46, 0x4b, 0x1f, 0xf2, +}; +static const u8 ecccdh_SECP192R1_22_test_vector_our_pub_key[] = { + 0xdb, 0x1b, 0x24, 0xf7, 0x46, 0x6b, 0xc1, 0x54, 0xe9, 0xd7, 0xd2, 0xc3, 0xca, 0x52, 0xdc, 0xfe, 0x0b, 0xfc, 0x95, 0x63, 0xc5, 0xfd, 0xb6, 0xf3, 0x1c, 0x74, 0xfb, 0xbf, 0x5b, 0xd9, 0x99, 0x21, 0xf1, 0xa9, 0xa7, 0x44, 0xf8, 0xe1, 0xcf, 0x77, 0x0b, 0xd6, 0xa7, 0x6a, 0x77, 0x2b, 0x30, 0x03, +}; +static const u8 ecccdh_SECP192R1_22_test_vector_shared_secret[] = { + 0xec, 0x55, 0x80, 0xea, 0xbc, 0xa9, 0xf3, 0x38, 0x9d, 0x2b, 0x42, 0x7d, 0xdf, 0x6e, 0x49, 0xe2, 0x6d, 0x62, 0x9a, 0xfd, 0x03, 0xfa, 0x76, 0x6e, +}; +static const ecdh_test_case ecccdh_SECP192R1_22_test_case = { + .name = "ECCCDH/SECP192R1 22", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_22_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_22_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_22_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_22_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_22_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_23 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_23_test_vector_our_priv_key[] = { + 0x2b, 0xa2, 0x70, 0x3c, 0x5e, 0x23, 0xf6, 0x46, 0x3c, 0x5b, 0x88, 0xdc, 0x37, 0x29, 0x2f, 0xab, 0xd3, 0x39, 0x9b, 0x5e, 0x1f, 0xb6, 0x7c, 0x05, +}; +static const u8 ecccdh_SECP192R1_23_test_vector_peer_pub_key[] = { + 0x3c, 0xec, 0x21, 0xb2, 0x86, 0x68, 0xa1, 0x2a, 0x2c, 0xf7, 0x8e, 0x1a, 0x8e, 0x55, 0xd0, 0xef, 0xe0, 0x65, 0x15, 0x2f, 0xff, 0xc3, 0x47, 0x18, 0x10, 0x29, 0x55, 0x7b, 0xeb, 0xa4, 0xff, 0x19, 0x92, 0xbd, 0x21, 0xc2, 0x3c, 0xb4, 0x82, 0x5f, 0x6d, 0xae, 0x70, 0xe3, 0x31, 0x8f, 0xd1, 0xca, +}; +static const u8 ecccdh_SECP192R1_23_test_vector_our_pub_key[] = { + 0x75, 0x43, 0x14, 0x89, 0x06, 0xce, 0xf9, 0xb3, 0x7a, 0x71, 0xa7, 0xc0, 0x83, 0x63, 0xcd, 0xd3, 0xbb, 0xa5, 0x01, 0x42, 0xd6, 0x52, 0x41, 0xaa, 0x8b, 0x3a, 0x69, 0x73, 0xde, 0x8d, 0xc2, 0x71, 0xe2, 0x7c, 0x1e, 0xad, 0x1e, 0x96, 0x2f, 0xda, 0xae, 0x37, 0x10, 0xc7, 0x24, 0xda, 0xac, 0x38, +}; +static const u8 ecccdh_SECP192R1_23_test_vector_shared_secret[] = { + 0x7f, 0x39, 0x29, 0xdd, 0x3c, 0xbf, 0x76, 0x73, 0xbc, 0x30, 0xd8, 0x59, 0xd9, 0x0b, 0x88, 0x03, 0x07, 0x47, 0x5f, 0x80, 0x06, 0x60, 0xea, 0x32, +}; +static const ecdh_test_case ecccdh_SECP192R1_23_test_case = { + .name = "ECCCDH/SECP192R1 23", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_23_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_23_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_23_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_23_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_23_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP192R1 +#define ECCCDH_SECP192R1_SELF_TEST_24 +/*** Tests for ECCCDH/SECP192R1 ***/ +static const u8 ecccdh_SECP192R1_24_test_vector_our_priv_key[] = { + 0x83, 0x61, 0x18, 0xc6, 0x24, 0x8f, 0x88, 0x2e, 0x91, 0x47, 0x97, 0x6f, 0x76, 0x48, 0x26, 0xc1, 0xa2, 0x87, 0x55, 0xa6, 0x10, 0x29, 0x77, 0xd5, +}; +static const u8 ecccdh_SECP192R1_24_test_vector_peer_pub_key[] = { + 0x70, 0x82, 0x64, 0x47, 0x15, 0xb8, 0xb7, 0x31, 0xf8, 0x22, 0x8b, 0x51, 0x18, 0xe7, 0x27, 0x0d, 0x34, 0xd1, 0x81, 0xf3, 0x61, 0xa2, 0x21, 0xfc, 0x46, 0x46, 0x49, 0xd6, 0xc8, 0x8c, 0xa8, 0x96, 0x14, 0x48, 0x8a, 0x1c, 0xc7, 0xb8, 0x44, 0x2b, 0xb4, 0x2f, 0x9f, 0xb3, 0x02, 0x0a, 0x3d, 0x76, +}; +static const u8 ecccdh_SECP192R1_24_test_vector_our_pub_key[] = { + 0xfc, 0xd3, 0x45, 0xa9, 0x76, 0xc7, 0x20, 0xca, 0xaa, 0x97, 0xde, 0x66, 0x97, 0x22, 0x68, 0x25, 0x61, 0x5e, 0x12, 0x87, 0xa9, 0xef, 0xf6, 0x7e, 0x58, 0xea, 0x42, 0xed, 0xbe, 0xea, 0xfc, 0xa9, 0xff, 0x44, 0xcf, 0xd7, 0xf2, 0x9a, 0xbd, 0x2c, 0xbd, 0xe7, 0x62, 0x6d, 0x79, 0xe4, 0x22, 0xc9, +}; +static const u8 ecccdh_SECP192R1_24_test_vector_shared_secret[] = { + 0x72, 0xe8, 0x8f, 0x3e, 0xa6, 0x7d, 0x46, 0xd4, 0x6d, 0xbf, 0x83, 0x92, 0x6e, 0x7e, 0x2a, 0x6b, 0x85, 0xb5, 0x45, 0x36, 0x74, 0x1e, 0x6d, 0x2c, +}; +static const ecdh_test_case ecccdh_SECP192R1_24_test_case = { + .name = "ECCCDH/SECP192R1 24", + .ecdh_type = ECCCDH, + .ec_str_p = &secp192r1_str_params, + .our_priv_key = ecccdh_SECP192R1_24_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP192R1_24_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP192R1_24_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP192R1_24_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP192R1_24_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP192R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_0 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_0_test_vector_our_priv_key[] = { + 0x83, 0x46, 0xa6, 0x0f, 0xc6, 0xf2, 0x93, 0xca, 0x5a, 0x0d, 0x2a, 0xf6, 0x8b, 0xa7, 0x1d, 0x1d, 0xd3, 0x89, 0xe5, 0xe4, 0x08, 0x37, 0x94, 0x2d, 0xf3, 0xe4, 0x3c, 0xbd, +}; +static const u8 ecccdh_SECP224R1_0_test_vector_peer_pub_key[] = { + 0xaf, 0x33, 0xcd, 0x06, 0x29, 0xbc, 0x7e, 0x99, 0x63, 0x20, 0xa3, 0xf4, 0x03, 0x68, 0xf7, 0x4d, 0xe8, 0x70, 0x4f, 0xa3, 0x7b, 0x8f, 0xab, 0x69, 0xab, 0xaa, 0xe2, 0x80, 0x88, 0x20, 0x92, 0xcc, 0xbb, 0xa7, 0x93, 0x0f, 0x41, 0x9a, 0x8a, 0x4f, 0x9b, 0xb1, 0x69, 0x78, 0xbb, 0xc3, 0x83, 0x87, 0x29, 0x99, 0x25, 0x59, 0xa6, 0xf2, 0xe2, 0xd7, +}; +static const u8 ecccdh_SECP224R1_0_test_vector_our_pub_key[] = { + 0x8d, 0xe2, 0xe2, 0x6a, 0xdf, 0x72, 0xc5, 0x82, 0xd6, 0x56, 0x8e, 0xf6, 0x38, 0xc4, 0xfd, 0x59, 0xb1, 0x8d, 0xa1, 0x71, 0xbd, 0xf5, 0x01, 0xf1, 0xd9, 0x29, 0xe0, 0x48, 0x4a, 0x68, 0xa1, 0xc2, 0xb0, 0xfb, 0x22, 0x93, 0x0d, 0x12, 0x05, 0x55, 0xc1, 0xec, 0xe5, 0x0e, 0xa9, 0x8d, 0xea, 0x84, 0x07, 0xf7, 0x1b, 0xe3, 0x6e, 0xfa, 0xc0, 0xde, +}; +static const u8 ecccdh_SECP224R1_0_test_vector_shared_secret[] = { + 0x7d, 0x96, 0xf9, 0xa3, 0xbd, 0x3c, 0x05, 0xcf, 0x5c, 0xc3, 0x7f, 0xeb, 0x8b, 0x9d, 0x52, 0x09, 0xd5, 0xc2, 0x59, 0x74, 0x64, 0xde, 0xc3, 0xe9, 0x98, 0x37, 0x43, 0xe8, +}; +static const ecdh_test_case ecccdh_SECP224R1_0_test_case = { + .name = "ECCCDH/SECP224R1 0", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_0_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_0_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_0_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_0_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_0_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_1 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_1_test_vector_our_priv_key[] = { + 0x04, 0x3c, 0xb2, 0x16, 0xf4, 0xb7, 0x2c, 0xdf, 0x76, 0x29, 0xd6, 0x37, 0x20, 0xa5, 0x4a, 0xee, 0x0c, 0x99, 0xeb, 0x32, 0xd7, 0x44, 0x77, 0xda, 0xc0, 0xc2, 0xf7, 0x3d, +}; +static const u8 ecccdh_SECP224R1_1_test_vector_peer_pub_key[] = { + 0x13, 0xbf, 0xcd, 0x4f, 0x8e, 0x94, 0x42, 0x39, 0x3c, 0xab, 0x8f, 0xb4, 0x6b, 0x9f, 0x05, 0x66, 0xc2, 0x26, 0xb2, 0x2b, 0x37, 0x07, 0x69, 0x76, 0xf0, 0x61, 0x7a, 0x46, 0xee, 0xb2, 0x42, 0x75, 0x29, 0xb2, 0x88, 0xc6, 0x3c, 0x2f, 0x89, 0x63, 0xc1, 0xe4, 0x73, 0xdf, 0x2f, 0xca, 0x6c, 0xaa, 0x90, 0xd5, 0x2e, 0x2f, 0x8d, 0xb5, 0x6d, 0xd4, +}; +static const u8 ecccdh_SECP224R1_1_test_vector_our_pub_key[] = { + 0x2f, 0x90, 0xf5, 0xc8, 0xea, 0xc9, 0xc7, 0xde, 0xcd, 0xbb, 0x97, 0xb6, 0xc2, 0xf7, 0x15, 0xab, 0x72, 0x5e, 0x4f, 0xe4, 0x0f, 0xe6, 0xd7, 0x46, 0xef, 0xbf, 0x4e, 0x1b, 0x66, 0x89, 0x73, 0x51, 0x45, 0x4f, 0x92, 0x7a, 0x30, 0x9b, 0x26, 0x9c, 0x5a, 0x6d, 0x31, 0x33, 0x8b, 0xe4, 0xc1, 0x9a, 0x5a, 0xcf, 0xc3, 0x2c, 0xf6, 0x56, 0xf4, 0x5c, +}; +static const u8 ecccdh_SECP224R1_1_test_vector_shared_secret[] = { + 0xee, 0x93, 0xce, 0x06, 0xb8, 0x9f, 0xf7, 0x20, 0x09, 0xe8, 0x58, 0xc6, 0x8e, 0xb7, 0x08, 0xe7, 0xbc, 0x79, 0xee, 0x03, 0x00, 0xf7, 0x3b, 0xed, 0x69, 0xbb, 0xca, 0x09, +}; +static const ecdh_test_case ecccdh_SECP224R1_1_test_case = { + .name = "ECCCDH/SECP224R1 1", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_1_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_1_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_1_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_1_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_1_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_2 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_2_test_vector_our_priv_key[] = { + 0x5a, 0xd0, 0xdd, 0x6d, 0xba, 0xbb, 0x4f, 0x3c, 0x2e, 0xa5, 0xfe, 0x32, 0xe5, 0x61, 0xb2, 0xca, 0x55, 0x08, 0x14, 0x86, 0xdf, 0x2c, 0x7c, 0x15, 0xc9, 0x62, 0x2b, 0x08, +}; +static const u8 ecccdh_SECP224R1_2_test_vector_peer_pub_key[] = { + 0x75, 0x6d, 0xd8, 0x06, 0xb9, 0xd9, 0xc3, 0x4d, 0x89, 0x96, 0x91, 0xec, 0xb4, 0x5b, 0x77, 0x1a, 0xf4, 0x68, 0xec, 0x00, 0x44, 0x86, 0xa0, 0xfd, 0xd2, 0x83, 0x41, 0x1e, 0x4d, 0x02, 0xc2, 0xca, 0x61, 0x7b, 0xb2, 0xc5, 0xd9, 0x61, 0x3f, 0x25, 0xdd, 0x72, 0x41, 0x3d, 0x22, 0x9f, 0xd2, 0x90, 0x15, 0x13, 0xaa, 0x29, 0x50, 0x4e, 0xee, 0xfb, +}; +static const u8 ecccdh_SECP224R1_2_test_vector_our_pub_key[] = { + 0x00, 0x5b, 0xca, 0x45, 0xd7, 0x93, 0xe7, 0xfe, 0x99, 0xa8, 0x43, 0x70, 0x4e, 0xd8, 0x38, 0x31, 0x5a, 0xb1, 0x4a, 0x5f, 0x62, 0x77, 0x50, 0x7e, 0x9b, 0xc3, 0x75, 0x31, 0x43, 0xe9, 0xd4, 0x21, 0xe1, 0x48, 0x6a, 0xe5, 0x89, 0x3b, 0xfd, 0x23, 0xc2, 0x10, 0xe5, 0xc1, 0x40, 0xd7, 0xc6, 0xb1, 0xad, 0xa5, 0x9d, 0x84, 0x2c, 0x9a, 0x98, 0xde, +}; +static const u8 ecccdh_SECP224R1_2_test_vector_shared_secret[] = { + 0x3f, 0xcc, 0x01, 0xe3, 0x4d, 0x44, 0x49, 0xda, 0x2a, 0x97, 0x4b, 0x23, 0xfc, 0x36, 0xf9, 0x56, 0x67, 0x54, 0x25, 0x9d, 0x39, 0x14, 0x97, 0x90, 0xcf, 0xa1, 0xeb, 0xd3, +}; +static const ecdh_test_case ecccdh_SECP224R1_2_test_case = { + .name = "ECCCDH/SECP224R1 2", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_2_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_2_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_2_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_2_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_2_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_3 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_3_test_vector_our_priv_key[] = { + 0x0a, 0xa6, 0xff, 0x55, 0xa5, 0xd8, 0x20, 0xef, 0xcb, 0x4e, 0x7d, 0x10, 0xb8, 0x45, 0xea, 0x3c, 0x9f, 0x9b, 0xc5, 0xdf, 0xf8, 0x61, 0x06, 0xdb, 0x85, 0x31, 0x8e, 0x22, +}; +static const u8 ecccdh_SECP224R1_3_test_vector_peer_pub_key[] = { + 0x0f, 0x53, 0x7b, 0xf1, 0xc1, 0x12, 0x2c, 0x55, 0x65, 0x6d, 0x25, 0xe8, 0xaa, 0x84, 0x17, 0xe0, 0xb4, 0x4b, 0x15, 0x26, 0xae, 0x05, 0x23, 0x14, 0x4f, 0x99, 0x21, 0xc4, 0xf7, 0x9b, 0x26, 0xd3, 0x0e, 0x49, 0x1a, 0x77, 0x36, 0x96, 0xcc, 0x2c, 0x79, 0xb4, 0xf0, 0x59, 0x6b, 0xc5, 0xb9, 0xee, 0xba, 0xf3, 0x94, 0xd1, 0x62, 0xfb, 0x86, 0x84, +}; +static const u8 ecccdh_SECP224R1_3_test_vector_our_pub_key[] = { + 0x2f, 0x96, 0x75, 0x41, 0x31, 0xe0, 0x96, 0x81, 0x98, 0xaa, 0x78, 0xfb, 0xe8, 0xc2, 0x01, 0xdc, 0x5f, 0x35, 0x81, 0xc7, 0x92, 0xde, 0x48, 0x73, 0x40, 0xd3, 0x24, 0x48, 0x61, 0xe8, 0xa5, 0xcd, 0x79, 0x61, 0x52, 0x03, 0xb6, 0xd8, 0x9e, 0x94, 0x96, 0xf9, 0xe2, 0x36, 0xfe, 0x3b, 0x6b, 0xe8, 0x73, 0x1e, 0x74, 0x3d, 0x61, 0x55, 0x19, 0xc6, +}; +static const u8 ecccdh_SECP224R1_3_test_vector_shared_secret[] = { + 0x49, 0x12, 0x96, 0x28, 0xb2, 0x3a, 0xfc, 0xef, 0x48, 0x13, 0x9a, 0x3f, 0x6f, 0x59, 0xff, 0x5e, 0x98, 0x11, 0xaa, 0x74, 0x6a, 0xa4, 0xff, 0x33, 0xc2, 0x4b, 0xb9, 0x40, +}; +static const ecdh_test_case ecccdh_SECP224R1_3_test_case = { + .name = "ECCCDH/SECP224R1 3", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_3_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_3_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_3_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_3_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_3_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_4 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_4_test_vector_our_priv_key[] = { + 0xef, 0xe6, 0xe6, 0xe2, 0x5a, 0xff, 0xaf, 0x54, 0xc9, 0x8d, 0x00, 0x2a, 0xbb, 0xc6, 0x32, 0x8d, 0xa1, 0x59, 0x40, 0x5a, 0x1b, 0x75, 0x2e, 0x32, 0xdc, 0x23, 0x95, 0x0a, +}; +static const u8 ecccdh_SECP224R1_4_test_vector_peer_pub_key[] = { + 0x2b, 0x36, 0x31, 0xd2, 0xb0, 0x61, 0x79, 0xb3, 0x17, 0x4a, 0x10, 0x0f, 0x7f, 0x57, 0x13, 0x1e, 0xee, 0xa8, 0x94, 0x7b, 0xe0, 0x78, 0x6c, 0x3d, 0xc6, 0x4b, 0x22, 0x39, 0x83, 0xde, 0x29, 0xae, 0x3d, 0xad, 0x31, 0xad, 0xc0, 0x23, 0x6c, 0x6d, 0xe7, 0xf1, 0x45, 0x61, 0xca, 0x2e, 0xa0, 0x83, 0xc5, 0x27, 0x0c, 0x78, 0xa2, 0xe6, 0xcb, 0xc0, +}; +static const u8 ecccdh_SECP224R1_4_test_vector_our_pub_key[] = { + 0x35, 0x5e, 0x96, 0x29, 0x20, 0xbd, 0xe0, 0x43, 0x69, 0x5f, 0x6b, 0xff, 0xb4, 0xb3, 0x55, 0xc6, 0x3d, 0xa6, 0xf5, 0xde, 0x66, 0x5e, 0xd4, 0x6f, 0x2e, 0xc8, 0x17, 0xe2, 0x74, 0x8e, 0x09, 0x53, 0x68, 0xf6, 0x2e, 0x1d, 0x36, 0x4e, 0xdd, 0x46, 0x17, 0x19, 0x79, 0x3b, 0x40, 0x4a, 0xdb, 0xda, 0xac, 0xbc, 0xad, 0xd8, 0x89, 0x22, 0xff, 0x37, +}; +static const u8 ecccdh_SECP224R1_4_test_vector_shared_secret[] = { + 0xfc, 0xdc, 0x69, 0xa4, 0x05, 0x01, 0xd3, 0x08, 0xa6, 0x83, 0x96, 0x53, 0xa8, 0xf0, 0x43, 0x09, 0xec, 0x00, 0x23, 0x39, 0x49, 0x52, 0x29, 0x02, 0xff, 0xa5, 0xea, 0xc6, +}; +static const ecdh_test_case ecccdh_SECP224R1_4_test_case = { + .name = "ECCCDH/SECP224R1 4", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_4_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_4_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_4_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_4_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_4_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_5 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_5_test_vector_our_priv_key[] = { + 0x61, 0xcb, 0x29, 0x32, 0x52, 0x40, 0x01, 0xe5, 0xe9, 0xee, 0xed, 0x6d, 0xf7, 0xd9, 0xc8, 0x93, 0x5e, 0xe3, 0x32, 0x20, 0x29, 0xed, 0xd7, 0xaa, 0x8a, 0xcb, 0xfd, 0x51, +}; +static const u8 ecccdh_SECP224R1_5_test_vector_peer_pub_key[] = { + 0x45, 0x11, 0x40, 0x3d, 0xe2, 0x90, 0x59, 0xf6, 0x9a, 0x47, 0x5c, 0x5a, 0x6a, 0x5f, 0x6c, 0xab, 0xed, 0x5d, 0x9f, 0x01, 0x44, 0x36, 0xa8, 0xcb, 0x70, 0xa0, 0x23, 0x38, 0x7d, 0x2d, 0x1b, 0x62, 0xaa, 0x04, 0x6d, 0xf9, 0x34, 0x0f, 0x9c, 0x37, 0xa0, 0x87, 0xa0, 0x6b, 0x32, 0xcf, 0x7f, 0x08, 0xa2, 0x23, 0xf9, 0x92, 0x81, 0x2a, 0x82, 0x8b, +}; +static const u8 ecccdh_SECP224R1_5_test_vector_our_pub_key[] = { + 0xd5, 0x0e, 0x4a, 0xda, 0xbf, 0xd9, 0x89, 0xd7, 0xdb, 0xc7, 0xcf, 0x40, 0x52, 0x54, 0x6c, 0xc7, 0xc4, 0x47, 0xa9, 0x76, 0x30, 0x43, 0x69, 0x97, 0xad, 0x4b, 0x95, 0x36, 0x5b, 0xea, 0x50, 0x34, 0x73, 0xc5, 0xea, 0xef, 0x95, 0x52, 0xd4, 0x2c, 0x40, 0xb1, 0xf2, 0xf7, 0xca, 0x29, 0x27, 0x33, 0xb2, 0x55, 0xb9, 0xbb, 0xe1, 0xb1, 0x23, 0x37, +}; +static const u8 ecccdh_SECP224R1_5_test_vector_shared_secret[] = { + 0x82, 0x7e, 0x90, 0x25, 0xcb, 0x62, 0xe0, 0xe8, 0x37, 0xc5, 0x96, 0x06, 0x3f, 0x3b, 0x9b, 0x5a, 0x0f, 0x7a, 0xfd, 0x8d, 0x87, 0x83, 0x20, 0x00, 0x86, 0xd6, 0x1e, 0xc1, +}; +static const ecdh_test_case ecccdh_SECP224R1_5_test_case = { + .name = "ECCCDH/SECP224R1 5", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_5_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_5_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_5_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_5_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_5_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_6 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_6_test_vector_our_priv_key[] = { + 0x8c, 0x7a, 0xce, 0x34, 0x71, 0x71, 0xf9, 0x2d, 0xef, 0x98, 0xd8, 0x45, 0x47, 0x5f, 0xc8, 0x2e, 0x1d, 0x14, 0x96, 0xda, 0x81, 0xee, 0x58, 0xf5, 0x05, 0xb9, 0x85, 0xfa, +}; +static const u8 ecccdh_SECP224R1_6_test_vector_peer_pub_key[] = { + 0x31, 0x4a, 0x0b, 0x26, 0xdd, 0x31, 0xc2, 0x48, 0x84, 0x5d, 0x7c, 0xc1, 0x7b, 0x61, 0xca, 0xd4, 0x60, 0x82, 0x59, 0xbe, 0xd8, 0x5a, 0x58, 0xd1, 0xf1, 0xff, 0xd3, 0x78, 0x66, 0xe4, 0xb3, 0x50, 0x35, 0x2e, 0x11, 0x9e, 0xec, 0xad, 0xa3, 0x82, 0x90, 0x7f, 0x36, 0x19, 0xfd, 0x74, 0x8e, 0xa7, 0x3a, 0xe4, 0x89, 0x9d, 0xfd, 0x49, 0x63, 0x02, +}; +static const u8 ecccdh_SECP224R1_6_test_vector_our_pub_key[] = { + 0xb1, 0xa8, 0xdc, 0xac, 0x89, 0xac, 0xa2, 0x79, 0x93, 0x20, 0xb4, 0x51, 0xdf, 0x1c, 0x7f, 0xf4, 0xd9, 0x75, 0x67, 0xab, 0xb6, 0x81, 0x41, 0xc0, 0xd9, 0x5f, 0xc2, 0xaa, 0x35, 0x24, 0x95, 0x09, 0x02, 0xb1, 0x51, 0x0b, 0xdc, 0x98, 0x7d, 0x86, 0x0a, 0xfc, 0x27, 0xad, 0x87, 0x1c, 0xea, 0xea, 0x66, 0x93, 0x5a, 0xbd, 0x3c, 0x0a, 0x99, 0xa8, +}; +static const u8 ecccdh_SECP224R1_6_test_vector_shared_secret[] = { + 0x33, 0x5b, 0xa5, 0x12, 0x28, 0xd9, 0x4a, 0xcb, 0xed, 0x85, 0x1c, 0xa7, 0x82, 0x1c, 0x80, 0x1d, 0x5c, 0xb1, 0xc7, 0x97, 0x5d, 0x7a, 0xa9, 0x0a, 0x71, 0x59, 0xf8, 0xfa, +}; +static const ecdh_test_case ecccdh_SECP224R1_6_test_case = { + .name = "ECCCDH/SECP224R1 6", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_6_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_6_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_6_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_6_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_6_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_7 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_7_test_vector_our_priv_key[] = { + 0x38, 0x2f, 0xeb, 0x9b, 0x9b, 0xa1, 0x0f, 0x18, 0x9d, 0x99, 0xe7, 0x1a, 0x89, 0xcd, 0xfe, 0x44, 0xcb, 0x55, 0x4c, 0xec, 0x13, 0xa2, 0x12, 0x84, 0x09, 0x77, 0xfb, 0x68, +}; +static const u8 ecccdh_SECP224R1_7_test_vector_peer_pub_key[] = { + 0xab, 0xe6, 0x84, 0x3b, 0xee, 0xc2, 0xfd, 0x9e, 0x5f, 0xb6, 0x47, 0x30, 0xd0, 0xbe, 0x4d, 0x16, 0x54, 0x38, 0xce, 0x92, 0x2e, 0xd7, 0x5d, 0xd8, 0x0b, 0x46, 0x03, 0xe5, 0x6a, 0xfe, 0x86, 0x73, 0xa9, 0x6c, 0x4b, 0xa9, 0x90, 0x0a, 0xd8, 0x59, 0x95, 0xe6, 0x31, 0xe4, 0x36, 0xc6, 0xcc, 0x88, 0xa2, 0xc2, 0xb4, 0x7b, 0x7c, 0x48, 0x86, 0xb8, +}; +static const u8 ecccdh_SECP224R1_7_test_vector_our_pub_key[] = { + 0xab, 0xb6, 0xf1, 0xe3, 0x77, 0x3f, 0xf8, 0xfc, 0x73, 0xae, 0xa2, 0xa0, 0xb1, 0x07, 0x80, 0x9c, 0xe7, 0x0a, 0xdc, 0xef, 0xed, 0x6e, 0x41, 0xfc, 0x5c, 0xb4, 0x30, 0x45, 0xa9, 0x63, 0x89, 0x7a, 0xe9, 0x06, 0xc1, 0x0a, 0x05, 0x5e, 0xea, 0xdb, 0x97, 0xff, 0xdd, 0x6f, 0x74, 0x8d, 0x3e, 0x56, 0x21, 0xe5, 0xff, 0xf3, 0x04, 0xe4, 0x8b, 0xa7, +}; +static const u8 ecccdh_SECP224R1_7_test_vector_shared_secret[] = { + 0x8c, 0x2e, 0x62, 0x75, 0x94, 0x20, 0x6b, 0x34, 0xf7, 0x35, 0x6d, 0x34, 0x26, 0xeb, 0x3d, 0x79, 0xf5, 0x18, 0xef, 0x84, 0x3f, 0xbe, 0x94, 0x01, 0x4c, 0xce, 0xac, 0xe3, +}; +static const ecdh_test_case ecccdh_SECP224R1_7_test_case = { + .name = "ECCCDH/SECP224R1 7", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_7_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_7_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_7_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_7_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_7_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_8 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_8_test_vector_our_priv_key[] = { + 0xe0, 0xd6, 0x20, 0x35, 0x10, 0x1e, 0xf4, 0x87, 0xc4, 0x85, 0xc6, 0x0f, 0xb4, 0x50, 0x0e, 0xeb, 0xe6, 0xa3, 0x2e, 0xc6, 0x4d, 0xbe, 0x97, 0xdb, 0xe0, 0x23, 0x2c, 0x46, +}; +static const u8 ecccdh_SECP224R1_8_test_vector_peer_pub_key[] = { + 0x13, 0xcf, 0x9d, 0x6d, 0x2c, 0x9a, 0xae, 0x82, 0x74, 0xc2, 0x7d, 0x44, 0x6a, 0xfd, 0x0c, 0x88, 0x8f, 0xfd, 0xd5, 0x2a, 0xe2, 0x99, 0xa3, 0x59, 0x84, 0xd4, 0xf5, 0x27, 0xdc, 0xbe, 0xe7, 0x5b, 0x51, 0x57, 0x51, 0xf8, 0xee, 0x2a, 0xe3, 0x55, 0xe8, 0xaf, 0xd5, 0xde, 0x21, 0xc6, 0x2a, 0x93, 0x9a, 0x65, 0x07, 0xb5, 0x38, 0xcb, 0xc4, 0xaf, +}; +static const u8 ecccdh_SECP224R1_8_test_vector_our_pub_key[] = { + 0x88, 0x53, 0x77, 0x35, 0xe9, 0xb2, 0x3e, 0x3e, 0x0e, 0x07, 0x6f, 0x13, 0x5a, 0x82, 0xd3, 0x3f, 0x9b, 0xff, 0xb4, 0x65, 0xf3, 0xab, 0xce, 0x83, 0x22, 0xa6, 0x2a, 0x62, 0xb4, 0xc8, 0xc1, 0x23, 0x67, 0x31, 0x97, 0x87, 0x5c, 0x0b, 0xd1, 0x4e, 0xd0, 0x97, 0x60, 0x6d, 0x33, 0x0f, 0xba, 0x2b, 0x92, 0x00, 0xef, 0x65, 0xa4, 0x47, 0x64, 0xd3, +}; +static const u8 ecccdh_SECP224R1_8_test_vector_shared_secret[] = { + 0x63, 0x2a, 0xbb, 0x66, 0x27, 0x28, 0xdb, 0xc9, 0x94, 0x50, 0x88, 0x73, 0xd5, 0xc5, 0x27, 0xca, 0x5e, 0xf9, 0x23, 0xc0, 0xd3, 0x1f, 0xa6, 0xc4, 0x7e, 0xf4, 0xc8, 0x25, +}; +static const ecdh_test_case ecccdh_SECP224R1_8_test_case = { + .name = "ECCCDH/SECP224R1 8", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_8_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_8_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_8_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_8_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_8_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_9 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_9_test_vector_our_priv_key[] = { + 0xb9, 0x6a, 0xde, 0x5b, 0x73, 0xba, 0x72, 0xaa, 0x8b, 0x6e, 0x4d, 0x74, 0xd7, 0xbf, 0x9c, 0x58, 0xe9, 0x62, 0xff, 0x78, 0xeb, 0x54, 0x22, 0x87, 0xc7, 0xb4, 0x4b, 0xa2, +}; +static const u8 ecccdh_SECP224R1_9_test_vector_peer_pub_key[] = { + 0x96, 0x5b, 0x63, 0x7c, 0x0d, 0xfb, 0xc0, 0xcf, 0x95, 0x40, 0x35, 0x68, 0x6d, 0x70, 0xf7, 0xec, 0x30, 0x92, 0x9e, 0x66, 0x4e, 0x52, 0x1d, 0xba, 0xa2, 0x28, 0x06, 0x59, 0x82, 0xa5, 0x8f, 0xf6, 0x1b, 0xc9, 0x00, 0x19, 0xbb, 0xcb, 0xb5, 0x87, 0x5d, 0x38, 0x63, 0xdb, 0x0b, 0xc2, 0xa1, 0xfa, 0x34, 0xb0, 0xad, 0x4d, 0xe1, 0xa8, 0x3f, 0x99, +}; +static const u8 ecccdh_SECP224R1_9_test_vector_our_pub_key[] = { + 0x37, 0x68, 0x29, 0x26, 0xa5, 0x4f, 0x70, 0xa4, 0xc1, 0x74, 0x8f, 0x54, 0xd5, 0x0d, 0x5b, 0x00, 0x13, 0x8a, 0x05, 0x5f, 0x92, 0x4f, 0x2c, 0x65, 0xe5, 0xb0, 0xbb, 0xe4, 0x59, 0x6a, 0xfe, 0xfc, 0xdd, 0x64, 0x0d, 0x29, 0x63, 0x50, 0x15, 0xb8, 0x9b, 0xdd, 0xdd, 0x1f, 0x8c, 0x27, 0x23, 0x68, 0x6d, 0x33, 0x2e, 0x7a, 0x06, 0xca, 0x87, 0x99, +}; +static const u8 ecccdh_SECP224R1_9_test_vector_shared_secret[] = { + 0x34, 0x64, 0x11, 0x41, 0xaa, 0xb0, 0x5e, 0xf5, 0x8b, 0xd3, 0x76, 0xd6, 0x09, 0x34, 0x59, 0x01, 0xfb, 0x8f, 0x63, 0x47, 0x7c, 0x6b, 0xe9, 0x09, 0x7f, 0x03, 0x7f, 0x1f, +}; +static const ecdh_test_case ecccdh_SECP224R1_9_test_case = { + .name = "ECCCDH/SECP224R1 9", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_9_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_9_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_9_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_9_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_9_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_10 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_10_test_vector_our_priv_key[] = { + 0xa4, 0x0d, 0x7e, 0x12, 0x04, 0x9c, 0x71, 0xe6, 0x52, 0x2c, 0x7f, 0xf2, 0x38, 0x42, 0x24, 0x06, 0x1c, 0x3a, 0x45, 0x70, 0x58, 0xb3, 0x10, 0x55, 0x76, 0x55, 0xb8, 0x54, +}; +static const u8 ecccdh_SECP224R1_10_test_vector_peer_pub_key[] = { + 0x73, 0xcc, 0x64, 0x53, 0x72, 0xca, 0x2e, 0x71, 0x63, 0x7c, 0xda, 0x94, 0x3d, 0x81, 0x48, 0xf3, 0x38, 0x2a, 0xb6, 0xdd, 0x0f, 0x2e, 0x1a, 0x49, 0xda, 0x94, 0xe1, 0x34, 0xdf, 0x5c, 0x35, 0x5c, 0x23, 0xe6, 0xe2, 0x32, 0xeb, 0xc3, 0xbe, 0xe2, 0xab, 0x18, 0x73, 0xee, 0x0d, 0x83, 0xe3, 0x38, 0x2f, 0x8e, 0x6f, 0xe6, 0x13, 0xf6, 0x34, 0x3c, +}; +static const u8 ecccdh_SECP224R1_10_test_vector_our_pub_key[] = { + 0x39, 0x98, 0x01, 0x24, 0x3b, 0xfe, 0x0c, 0x2d, 0xa9, 0xb0, 0xa5, 0x3c, 0x8c, 0xa5, 0x7f, 0x2e, 0xee, 0x87, 0xaa, 0xa9, 0x4a, 0x8e, 0x4d, 0x5e, 0x02, 0x9f, 0x42, 0xca, 0xaa, 0x49, 0xe6, 0xd4, 0xb4, 0x7c, 0xee, 0x7a, 0x5c, 0x4a, 0xb7, 0x1d, 0x5a, 0x67, 0xda, 0x84, 0xe0, 0xb9, 0xb4, 0x25, 0xce, 0x3e, 0x70, 0xda, 0x68, 0xc8, 0x89, 0xe7, +}; +static const u8 ecccdh_SECP224R1_10_test_vector_shared_secret[] = { + 0x4f, 0x74, 0xac, 0x85, 0x07, 0x50, 0x1a, 0x32, 0xbf, 0xc5, 0xa7, 0x8d, 0x82, 0x71, 0xc2, 0x00, 0xe8, 0x35, 0x96, 0x6e, 0x18, 0x7e, 0x8d, 0x00, 0x01, 0x1a, 0x8c, 0x75, +}; +static const ecdh_test_case ecccdh_SECP224R1_10_test_case = { + .name = "ECCCDH/SECP224R1 10", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_10_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_10_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_10_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_10_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_10_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_11 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_11_test_vector_our_priv_key[] = { + 0xad, 0x25, 0x19, 0xbc, 0x72, 0x4d, 0x48, 0x4e, 0x02, 0xa6, 0x9f, 0x05, 0x14, 0x9b, 0xb0, 0x47, 0x71, 0x4b, 0xf0, 0xf5, 0x98, 0x6f, 0xac, 0x2e, 0x22, 0x2c, 0xd9, 0x46, +}; +static const u8 ecccdh_SECP224R1_11_test_vector_peer_pub_key[] = { + 0x54, 0x65, 0x78, 0x21, 0x62, 0x50, 0x35, 0x4e, 0x44, 0x9e, 0x21, 0x54, 0x6d, 0xd1, 0x1c, 0xd1, 0xc5, 0x17, 0x42, 0x36, 0x73, 0x9a, 0xca, 0xd9, 0xce, 0x0f, 0x45, 0x12, 0xd2, 0xa2, 0x2f, 0xcd, 0x66, 0xd1, 0xab, 0xed, 0xc7, 0x67, 0x66, 0x83, 0x27, 0xc5, 0xcb, 0x9c, 0x59, 0x90, 0x43, 0x27, 0x62, 0x39, 0xcf, 0x3c, 0x85, 0x16, 0xaf, 0x24, +}; +static const u8 ecccdh_SECP224R1_11_test_vector_our_pub_key[] = { + 0xdf, 0x9c, 0x1e, 0x0e, 0xf1, 0x5e, 0x53, 0xb9, 0xf6, 0x26, 0xe2, 0xbe, 0x1c, 0xbe, 0x89, 0x36, 0x39, 0xc0, 0x6f, 0x3e, 0x04, 0x39, 0xee, 0x95, 0xd7, 0xd4, 0xb1, 0xe3, 0x7a, 0x52, 0xa7, 0x38, 0x6a, 0xdd, 0xa2, 0x43, 0xef, 0xdf, 0x89, 0x41, 0x08, 0x5c, 0x84, 0xe3, 0x12, 0x39, 0xca, 0xb9, 0x2b, 0x80, 0x17, 0x33, 0x67, 0x48, 0x96, 0x5e, +}; +static const u8 ecccdh_SECP224R1_11_test_vector_shared_secret[] = { + 0xad, 0x09, 0xc9, 0xae, 0x4d, 0x23, 0x24, 0xea, 0x81, 0xbb, 0x55, 0x5b, 0x20, 0x0d, 0x3c, 0x00, 0x3e, 0x22, 0xa6, 0x87, 0x0e, 0xe0, 0x3b, 0x52, 0xdf, 0x49, 0xe4, 0xde, +}; +static const ecdh_test_case ecccdh_SECP224R1_11_test_case = { + .name = "ECCCDH/SECP224R1 11", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_11_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_11_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_11_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_11_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_11_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_12 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_12_test_vector_our_priv_key[] = { + 0x3d, 0x31, 0x2a, 0x9b, 0x9d, 0x8e, 0xd0, 0x91, 0x40, 0x90, 0x0b, 0xba, 0xc1, 0xe0, 0x95, 0x52, 0x7e, 0xbc, 0x9e, 0x3c, 0x64, 0x93, 0xbc, 0xf3, 0x66, 0x6e, 0x3a, 0x29, +}; +static const u8 ecccdh_SECP224R1_12_test_vector_peer_pub_key[] = { + 0x1d, 0x46, 0xb1, 0xdc, 0x3a, 0x28, 0x12, 0x3c, 0xb5, 0x13, 0x46, 0xe6, 0x7b, 0xae, 0xc5, 0x64, 0x04, 0x86, 0x86, 0x78, 0xfa, 0xf7, 0xd0, 0xe8, 0xb2, 0xaf, 0xa2, 0x2a, 0x0e, 0xc9, 0xe6, 0x5e, 0xc9, 0x7e, 0x21, 0x83, 0x73, 0xe7, 0xfc, 0x11, 0x5c, 0x22, 0x74, 0xd5, 0xb8, 0x29, 0xa6, 0x0d, 0x93, 0xf7, 0x1e, 0x01, 0xd5, 0x81, 0x36, 0xc3, +}; +static const u8 ecccdh_SECP224R1_12_test_vector_our_pub_key[] = { + 0xb4, 0xa0, 0x19, 0x8d, 0xc8, 0x81, 0x0e, 0x88, 0x44, 0x25, 0xb7, 0x50, 0x92, 0x8b, 0x0c, 0x96, 0x0c, 0x31, 0xf7, 0xa9, 0x96, 0x63, 0x40, 0x0b, 0x01, 0xa1, 0x79, 0xdf, 0x81, 0x2b, 0x60, 0x1b, 0xfc, 0x07, 0x38, 0x24, 0x2c, 0x6f, 0x86, 0xf8, 0x30, 0xf2, 0x7a, 0xcd, 0x63, 0x2c, 0xa6, 0x18, 0xa0, 0xb5, 0x28, 0x0c, 0x9d, 0x57, 0x69, 0xf7, +}; +static const u8 ecccdh_SECP224R1_12_test_vector_shared_secret[] = { + 0xef, 0x02, 0x9c, 0x28, 0xc6, 0x80, 0x64, 0xb8, 0xab, 0xd2, 0x96, 0x5a, 0x38, 0xc4, 0x04, 0xfb, 0x5e, 0x94, 0x4a, 0xce, 0x57, 0xe8, 0x63, 0x8d, 0xab, 0xa9, 0xd3, 0xcd, +}; +static const ecdh_test_case ecccdh_SECP224R1_12_test_case = { + .name = "ECCCDH/SECP224R1 12", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_12_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_12_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_12_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_12_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_12_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_13 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_13_test_vector_our_priv_key[] = { + 0x8c, 0xe0, 0x82, 0x2d, 0xc2, 0x4c, 0x15, 0x39, 0x95, 0x75, 0x5a, 0xc3, 0x50, 0x73, 0x7e, 0xf5, 0x06, 0x64, 0x1c, 0x7d, 0x75, 0x2b, 0x4f, 0x93, 0x00, 0xc6, 0x12, 0xed, +}; +static const u8 ecccdh_SECP224R1_13_test_vector_peer_pub_key[] = { + 0x26, 0x6d, 0x03, 0x8c, 0xc7, 0xa4, 0xfe, 0x21, 0xf6, 0xc9, 0x76, 0x31, 0x8e, 0x82, 0x7b, 0x82, 0xbb, 0x5b, 0x8f, 0x74, 0x43, 0xa5, 0x52, 0x98, 0x13, 0x65, 0x06, 0xe0, 0xdf, 0x12, 0x3d, 0x98, 0xa7, 0xa2, 0x0b, 0xbd, 0xf3, 0x94, 0x3d, 0xf2, 0xe3, 0x56, 0x34, 0x22, 0xf8, 0xc0, 0xcf, 0x74, 0xd5, 0x3a, 0xaa, 0xbd, 0xd7, 0xc9, 0x73, 0xba, +}; +static const u8 ecccdh_SECP224R1_13_test_vector_our_pub_key[] = { + 0x00, 0xdf, 0xc7, 0xec, 0x13, 0x76, 0x90, 0xcd, 0x6d, 0x12, 0xfd, 0xb2, 0xfd, 0x0b, 0x8c, 0x53, 0x14, 0x58, 0x21, 0x08, 0x76, 0x9c, 0x2b, 0x72, 0x2f, 0xfb, 0x39, 0x58, 0x5e, 0xef, 0x3d, 0xa4, 0xba, 0x45, 0x81, 0x27, 0x34, 0x6b, 0xb6, 0x40, 0x23, 0x86, 0x8b, 0xdd, 0xb7, 0x55, 0x8a, 0x2e, 0xcf, 0xc8, 0x13, 0x64, 0x5f, 0x4c, 0xe9, 0xfe, +}; +static const u8 ecccdh_SECP224R1_13_test_vector_shared_secret[] = { + 0xf8, 0x3c, 0x16, 0x66, 0x1d, 0xfc, 0xba, 0xd0, 0x21, 0xcc, 0x3b, 0x5a, 0x5a, 0xf5, 0x1d, 0x9a, 0x18, 0xdb, 0x46, 0x53, 0x86, 0x6b, 0x3f, 0xf9, 0x07, 0x87, 0xce, 0x3e, +}; +static const ecdh_test_case ecccdh_SECP224R1_13_test_case = { + .name = "ECCCDH/SECP224R1 13", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_13_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_13_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_13_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_13_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_13_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_14 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_14_test_vector_our_priv_key[] = { + 0x0f, 0xf9, 0xb4, 0x85, 0x32, 0x5a, 0xb7, 0x7f, 0x29, 0xe7, 0xbc, 0x37, 0x9f, 0xed, 0x74, 0xbf, 0xac, 0x85, 0x94, 0x82, 0xda, 0x0d, 0xee, 0x75, 0x28, 0xc1, 0x9d, 0xb2, +}; +static const u8 ecccdh_SECP224R1_14_test_vector_peer_pub_key[] = { + 0xeb, 0x0a, 0x09, 0xf7, 0xa1, 0xc2, 0x36, 0xa6, 0x1f, 0x59, 0x58, 0x09, 0xec, 0x56, 0x70, 0xef, 0xd9, 0x2e, 0x45, 0x98, 0xd5, 0xe6, 0x13, 0xe0, 0x92, 0xcd, 0xfd, 0xca, 0x50, 0x78, 0x7a, 0xe2, 0xf2, 0xf1, 0x5b, 0x88, 0xbc, 0x10, 0xf7, 0xb5, 0xf0, 0xae, 0xe1, 0x41, 0x83, 0x73, 0xf1, 0x61, 0x53, 0xae, 0xbd, 0x1f, 0xba, 0x54, 0x28, 0x8d, +}; +static const u8 ecccdh_SECP224R1_14_test_vector_our_pub_key[] = { + 0x7e, 0x60, 0x3e, 0x69, 0x76, 0xdb, 0x83, 0xc3, 0x60, 0x11, 0x50, 0x8f, 0xa6, 0x95, 0xd1, 0xb5, 0x15, 0x24, 0x9e, 0x2e, 0x54, 0xb4, 0x8f, 0xcb, 0xcf, 0xb9, 0x02, 0x47, 0x01, 0x79, 0xa6, 0x00, 0xce, 0x86, 0xad, 0xfc, 0xa9, 0xb1, 0xb9, 0x31, 0xfa, 0x51, 0x73, 0xd6, 0x18, 0xda, 0x09, 0xe8, 0x41, 0x80, 0x3d, 0x19, 0xb0, 0x26, 0x42, 0x86, +}; +static const u8 ecccdh_SECP224R1_14_test_vector_shared_secret[] = { + 0xf5, 0x12, 0x58, 0xc6, 0x3f, 0x23, 0x2e, 0x55, 0xa6, 0x6a, 0xa2, 0x5e, 0xbd, 0x59, 0x7b, 0x20, 0x18, 0xd1, 0x05, 0x2c, 0x02, 0xee, 0xb6, 0x38, 0x66, 0x75, 0x80, 0x05, +}; +static const ecdh_test_case ecccdh_SECP224R1_14_test_case = { + .name = "ECCCDH/SECP224R1 14", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_14_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_14_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_14_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_14_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_14_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_15 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_15_test_vector_our_priv_key[] = { + 0x19, 0xcf, 0x5f, 0xf6, 0x30, 0x64, 0x67, 0xf2, 0x8b, 0x9f, 0xe0, 0x67, 0x5a, 0x43, 0xc0, 0x58, 0x25, 0x52, 0xc8, 0xc1, 0x2e, 0x59, 0xce, 0x7c, 0x38, 0xf2, 0x92, 0xb1, +}; +static const u8 ecccdh_SECP224R1_15_test_vector_peer_pub_key[] = { + 0x6b, 0x2f, 0x6b, 0x18, 0xa5, 0x87, 0xf5, 0x62, 0xff, 0xc6, 0x1b, 0xd9, 0xb0, 0x04, 0x73, 0x22, 0x28, 0x69, 0x86, 0xa7, 0x8f, 0x1f, 0xd1, 0x39, 0xb8, 0x4f, 0x7c, 0x24, 0x70, 0x96, 0x90, 0x8e, 0x46, 0x15, 0x26, 0x6b, 0xe5, 0x9a, 0x53, 0xcd, 0x65, 0x55, 0x15, 0x05, 0x6f, 0xf9, 0x23, 0x70, 0xa6, 0x27, 0x1a, 0x5d, 0x38, 0x23, 0xd7, 0x04, +}; +static const u8 ecccdh_SECP224R1_15_test_vector_our_pub_key[] = { + 0xfc, 0x20, 0xe9, 0x06, 0xe6, 0x09, 0xc1, 0x12, 0xcf, 0xc2, 0xe0, 0xfe, 0xa6, 0x30, 0x38, 0x82, 0xc5, 0xdb, 0x94, 0xe8, 0x7e, 0x02, 0x23, 0x73, 0xab, 0x2c, 0x08, 0x2a, 0xae, 0xcd, 0xf1, 0xda, 0xa7, 0x17, 0x82, 0xbc, 0x5a, 0x26, 0xbb, 0xbd, 0x8d, 0x7e, 0x8a, 0x76, 0x49, 0x0e, 0x26, 0xab, 0xc1, 0x7d, 0xff, 0xc7, 0x74, 0xbd, 0x73, 0x41, +}; +static const u8 ecccdh_SECP224R1_15_test_vector_shared_secret[] = { + 0x7f, 0xdc, 0x96, 0x9a, 0x18, 0x6f, 0xf1, 0x84, 0x29, 0xf2, 0xa2, 0x76, 0xda, 0xc4, 0x3b, 0xee, 0xa2, 0x11, 0x82, 0xd8, 0x2c, 0xe2, 0xe5, 0xa0, 0x87, 0x65, 0x52, 0xb1, +}; +static const ecdh_test_case ecccdh_SECP224R1_15_test_case = { + .name = "ECCCDH/SECP224R1 15", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_15_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_15_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_15_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_15_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_15_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_16 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_16_test_vector_our_priv_key[] = { + 0x90, 0xa1, 0x53, 0x68, 0xe3, 0x53, 0x2c, 0x0b, 0x1e, 0x51, 0xe5, 0x5d, 0x13, 0x94, 0x47, 0xc2, 0xc8, 0x9b, 0xc1, 0x60, 0x71, 0x9d, 0x69, 0x72, 0x91, 0xea, 0x7c, 0x14, +}; +static const u8 ecccdh_SECP224R1_16_test_vector_peer_pub_key[] = { + 0x32, 0x81, 0x01, 0xba, 0x82, 0x6a, 0xcd, 0x75, 0xff, 0x9f, 0x34, 0xd5, 0x57, 0x4c, 0xe0, 0xdb, 0xc9, 0x2f, 0x70, 0x9b, 0xad, 0x8d, 0x7a, 0x33, 0xc4, 0x79, 0x40, 0xc1, 0xdf, 0x39, 0xf1, 0xea, 0x88, 0x48, 0x8c, 0x55, 0xd5, 0x53, 0x81, 0x60, 0x87, 0x8b, 0x9c, 0xed, 0x18, 0xa8, 0x87, 0xea, 0x26, 0x1d, 0xd7, 0x12, 0xd1, 0x40, 0x24, 0xff, +}; +static const u8 ecccdh_SECP224R1_16_test_vector_our_pub_key[] = { + 0xc6, 0x83, 0x7d, 0x50, 0x6e, 0x97, 0x6d, 0xa7, 0xdb, 0x3a, 0xd1, 0x26, 0x7c, 0x35, 0x9d, 0xff, 0x2e, 0xa6, 0xfb, 0x0b, 0x7f, 0x7f, 0x8e, 0x77, 0x02, 0x4c, 0x59, 0xe9, 0x67, 0xeb, 0x49, 0x1d, 0x2f, 0xc8, 0xa5, 0x30, 0xc4, 0x65, 0x25, 0xd2, 0xa8, 0xb2, 0xd7, 0xc1, 0xdf, 0x5f, 0xba, 0x1a, 0xe7, 0x40, 0xa4, 0x64, 0x9c, 0x68, 0x3e, 0xe6, +}; +static const u8 ecccdh_SECP224R1_16_test_vector_shared_secret[] = { + 0x3d, 0x60, 0xab, 0x6d, 0xb2, 0xb3, 0xff, 0xe2, 0xd2, 0x9c, 0xcf, 0xf4, 0x6d, 0x05, 0x6e, 0x54, 0x23, 0x0c, 0xf3, 0x49, 0x82, 0xe2, 0x41, 0x55, 0x6e, 0xd2, 0x92, 0x0c, +}; +static const ecdh_test_case ecccdh_SECP224R1_16_test_case = { + .name = "ECCCDH/SECP224R1 16", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_16_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_16_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_16_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_16_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_16_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_17 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_17_test_vector_our_priv_key[] = { + 0x8e, 0x08, 0x38, 0xe0, 0x5e, 0x17, 0x21, 0x49, 0x10, 0x67, 0xe1, 0xca, 0xbc, 0x2e, 0x80, 0x51, 0xb2, 0x90, 0xe2, 0x61, 0x6e, 0xec, 0x42, 0x7b, 0x71, 0x21, 0x89, 0x7d, +}; +static const u8 ecccdh_SECP224R1_17_test_vector_peer_pub_key[] = { + 0x00, 0x81, 0xe3, 0x42, 0x70, 0x87, 0x1e, 0x2e, 0xbb, 0xd9, 0x41, 0x83, 0xf6, 0x17, 0xb4, 0xae, 0x15, 0xf0, 0x41, 0x6d, 0xd6, 0x34, 0xfe, 0x6e, 0x93, 0x4c, 0xf3, 0xc0, 0x3a, 0x1e, 0x9f, 0x38, 0xa7, 0xb9, 0x0b, 0x73, 0x17, 0xd2, 0x6b, 0x9f, 0x63, 0x11, 0x06, 0x3a, 0xb5, 0x8b, 0x26, 0x8c, 0xf4, 0x89, 0xb2, 0xe5, 0x03, 0x86, 0xd5, 0xd6, +}; +static const u8 ecccdh_SECP224R1_17_test_vector_our_pub_key[] = { + 0xe9, 0x15, 0x0f, 0x77, 0x00, 0x75, 0x62, 0x60, 0x19, 0xe1, 0x8f, 0x95, 0x47, 0x3b, 0x71, 0xe6, 0x82, 0x80, 0x41, 0x79, 0x1d, 0x3f, 0x08, 0xd3, 0xfa, 0xee, 0xaa, 0x2b, 0x47, 0x5f, 0x70, 0x73, 0x5e, 0xaa, 0xe5, 0x23, 0x08, 0xa3, 0xb7, 0x63, 0xdc, 0x88, 0xef, 0xe1, 0x8a, 0xb5, 0x90, 0xeb, 0xaf, 0xa0, 0x35, 0xf6, 0xe0, 0x8b, 0x00, 0x1c, +}; +static const u8 ecccdh_SECP224R1_17_test_vector_shared_secret[] = { + 0x91, 0x16, 0xd7, 0x27, 0x86, 0xf4, 0xdb, 0x5d, 0xf7, 0xa8, 0xb4, 0x30, 0x78, 0xc6, 0xab, 0x91, 0x60, 0xd4, 0x23, 0x51, 0x3d, 0x35, 0xea, 0x5e, 0x25, 0x59, 0x30, 0x6d, +}; +static const ecdh_test_case ecccdh_SECP224R1_17_test_case = { + .name = "ECCCDH/SECP224R1 17", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_17_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_17_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_17_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_17_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_17_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_18 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_18_test_vector_our_priv_key[] = { + 0x38, 0x10, 0x6e, 0x93, 0xf1, 0x6a, 0x38, 0x1a, 0xdb, 0x1d, 0x72, 0xce, 0xe3, 0xda, 0x66, 0xae, 0x46, 0x2a, 0xd4, 0xbb, 0xfe, 0xa9, 0xec, 0xdf, 0x35, 0xd0, 0x81, 0x4e, +}; +static const u8 ecccdh_SECP224R1_18_test_vector_peer_pub_key[] = { + 0x26, 0x23, 0x63, 0x2f, 0xdf, 0x0b, 0xd8, 0x56, 0x80, 0x5a, 0x69, 0xaa, 0x18, 0x6d, 0x41, 0x33, 0xef, 0x59, 0x04, 0xe1, 0xf6, 0x55, 0xa9, 0x72, 0xd6, 0x6c, 0xce, 0x07, 0x2c, 0xef, 0x97, 0x28, 0xdd, 0x06, 0xfb, 0x8b, 0x50, 0x15, 0x0f, 0x52, 0x9b, 0x69, 0x50, 0x76, 0xd4, 0x50, 0x79, 0x83, 0x91, 0x25, 0x85, 0xc8, 0x9b, 0xd0, 0x68, 0x2e, +}; +static const u8 ecccdh_SECP224R1_18_test_vector_our_pub_key[] = { + 0x7b, 0xe6, 0xc4, 0xc9, 0x17, 0x82, 0x9a, 0xb6, 0x57, 0xdd, 0x79, 0xe8, 0x63, 0x7d, 0x7a, 0xef, 0xd2, 0xf8, 0x1f, 0x0d, 0xe7, 0x65, 0x4d, 0x95, 0x7e, 0x97, 0x65, 0x8d, 0x43, 0x0d, 0x22, 0xd9, 0xe8, 0x43, 0x83, 0x10, 0xf6, 0x1e, 0x0d, 0x43, 0xf2, 0x5f, 0xa3, 0xe3, 0x45, 0x85, 0xf4, 0x32, 0xba, 0xad, 0x27, 0xdb, 0x30, 0x21, 0xbf, 0x0d, +}; +static const u8 ecccdh_SECP224R1_18_test_vector_shared_secret[] = { + 0x20, 0x7c, 0x53, 0xdc, 0xef, 0xac, 0x78, 0x9a, 0xaa, 0x02, 0x76, 0xd9, 0x20, 0x0b, 0x3a, 0x94, 0x0c, 0xe5, 0xf2, 0x29, 0x6f, 0x4c, 0xb2, 0xe8, 0x1a, 0x18, 0x5d, 0x3d, +}; +static const ecdh_test_case ecccdh_SECP224R1_18_test_case = { + .name = "ECCCDH/SECP224R1 18", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_18_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_18_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_18_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_18_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_18_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_19 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_19_test_vector_our_priv_key[] = { + 0xe5, 0xd1, 0x71, 0x84, 0x31, 0xcf, 0x50, 0xf6, 0xcb, 0xd1, 0xbc, 0x80, 0x19, 0xfa, 0x16, 0x76, 0x2d, 0xfa, 0x12, 0xc9, 0x89, 0xe5, 0x99, 0x99, 0x77, 0xfb, 0x4e, 0xa2, +}; +static const u8 ecccdh_SECP224R1_19_test_vector_peer_pub_key[] = { + 0x8e, 0xe4, 0xd1, 0xdc, 0xc3, 0x1d, 0xee, 0x4b, 0xf6, 0xfe, 0x21, 0xca, 0x8a, 0x58, 0x77, 0x21, 0xd9, 0x10, 0xac, 0xfb, 0x12, 0x2c, 0x16, 0xc2, 0xa7, 0x7a, 0x81, 0x52, 0x4e, 0xbf, 0x32, 0x3f, 0xff, 0x04, 0xeb, 0x47, 0x70, 0x69, 0xa0, 0xac, 0x68, 0xb3, 0x45, 0xf6, 0xb1, 0xae, 0x13, 0x4e, 0xfc, 0x31, 0x94, 0x0e, 0x51, 0x3c, 0xb9, 0x9f, +}; +static const u8 ecccdh_SECP224R1_19_test_vector_our_pub_key[] = { + 0x2e, 0xa4, 0x96, 0x6e, 0x7f, 0x92, 0xed, 0x7f, 0x5c, 0xc6, 0x1f, 0xde, 0x79, 0x20, 0x45, 0xf6, 0x3b, 0x73, 0x1d, 0x6e, 0x7d, 0x0d, 0xe2, 0x57, 0x7f, 0x2d, 0x8e, 0xce, 0x1c, 0x4a, 0x7b, 0x1e, 0xde, 0x6f, 0x83, 0x91, 0x62, 0x29, 0x2d, 0xf4, 0x24, 0xbe, 0x78, 0xe8, 0x17, 0x6f, 0xb6, 0xf9, 0x42, 0xa3, 0xc0, 0x23, 0x91, 0x70, 0x0f, 0x31, +}; +static const u8 ecccdh_SECP224R1_19_test_vector_shared_secret[] = { + 0x10, 0xe4, 0x67, 0xda, 0x34, 0xf4, 0x8a, 0xd7, 0x07, 0x20, 0x05, 0xbc, 0xcd, 0x6d, 0xa1, 0xb2, 0xba, 0x3f, 0x71, 0xea, 0xfa, 0x1c, 0x39, 0x38, 0x42, 0xf9, 0x1d, 0x74, +}; +static const ecdh_test_case ecccdh_SECP224R1_19_test_case = { + .name = "ECCCDH/SECP224R1 19", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_19_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_19_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_19_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_19_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_19_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_20 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_20_test_vector_our_priv_key[] = { + 0x3d, 0x63, 0x56, 0x91, 0xb6, 0x2a, 0x9a, 0x92, 0x7c, 0x63, 0x39, 0x51, 0xc9, 0x36, 0x9c, 0x88, 0x62, 0xbd, 0x21, 0x19, 0xd3, 0x09, 0x70, 0xc2, 0x64, 0x47, 0x27, 0xd6, +}; +static const u8 ecccdh_SECP224R1_20_test_vector_peer_pub_key[] = { + 0x97, 0xdc, 0xbe, 0x6d, 0x28, 0x33, 0x58, 0x82, 0xa6, 0xd1, 0x93, 0xcc, 0x54, 0xa1, 0x06, 0x3d, 0xd0, 0x77, 0x5d, 0xc3, 0x28, 0x56, 0x53, 0x00, 0xbb, 0x99, 0xe6, 0x91, 0xda, 0xd1, 0x1d, 0xd5, 0xec, 0xe8, 0xcf, 0xd9, 0xf9, 0x7c, 0x9a, 0x52, 0x6e, 0x4a, 0x15, 0x06, 0xe6, 0x35, 0x59, 0x69, 0xee, 0x87, 0x82, 0x6f, 0xc3, 0x8b, 0xcd, 0x24, +}; +static const u8 ecccdh_SECP224R1_20_test_vector_our_pub_key[] = { + 0x43, 0x8b, 0xbb, 0x98, 0x05, 0x17, 0xaf, 0xb2, 0x0b, 0xe1, 0xd6, 0x74, 0xe3, 0xac, 0x2b, 0x31, 0xce, 0xf0, 0x7a, 0x9b, 0x23, 0xfb, 0x8f, 0x6e, 0x38, 0xe0, 0xd6, 0xc0, 0x0b, 0xe5, 0xf1, 0xc4, 0x7d, 0x58, 0xd2, 0x1b, 0x6e, 0xd2, 0x84, 0x23, 0xb3, 0x2f, 0x5a, 0x94, 0x75, 0x0d, 0xa4, 0x7e, 0xdc, 0xef, 0x33, 0xea, 0x79, 0x94, 0x2a, 0xfd, +}; +static const u8 ecccdh_SECP224R1_20_test_vector_shared_secret[] = { + 0x82, 0xfd, 0x2f, 0x9c, 0x60, 0xc4, 0xf9, 0x99, 0xac, 0x00, 0xbb, 0xe6, 0x4b, 0xfc, 0x11, 0xda, 0x8f, 0xf8, 0xcd, 0xa2, 0xe4, 0x99, 0xfc, 0xed, 0x65, 0x23, 0x0b, 0xb1, +}; +static const ecdh_test_case ecccdh_SECP224R1_20_test_case = { + .name = "ECCCDH/SECP224R1 20", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_20_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_20_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_20_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_20_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_20_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_21 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_21_test_vector_our_priv_key[] = { + 0xac, 0xf3, 0xc8, 0x5b, 0xbd, 0xc3, 0x79, 0xf0, 0x2f, 0x5e, 0xa3, 0x6e, 0x7f, 0x0f, 0x53, 0x09, 0x5a, 0x9e, 0x70, 0x46, 0xa2, 0x86, 0x85, 0xa8, 0x65, 0x9b, 0xf7, 0x98, +}; +static const u8 ecccdh_SECP224R1_21_test_vector_peer_pub_key[] = { + 0xce, 0x91, 0x26, 0xdd, 0x53, 0x97, 0x2d, 0xea, 0x1d, 0xe1, 0xd1, 0x1e, 0xfe, 0xf9, 0x00, 0xde, 0x34, 0xb6, 0x61, 0x85, 0x9c, 0x46, 0x48, 0xc5, 0xc0, 0xe5, 0x34, 0xf7, 0xe1, 0x13, 0xb6, 0xf2, 0xc1, 0x65, 0x9d, 0x07, 0xf2, 0x71, 0x6e, 0x64, 0xa8, 0x3c, 0x18, 0xbb, 0xce, 0x34, 0x4d, 0xd2, 0x12, 0x1f, 0xe8, 0x51, 0x68, 0xea, 0xe0, 0x85, +}; +static const u8 ecccdh_SECP224R1_21_test_vector_our_pub_key[] = { + 0xff, 0x75, 0x11, 0x21, 0x5c, 0x71, 0xd7, 0x96, 0xbd, 0x64, 0x6e, 0x84, 0x74, 0xbe, 0x44, 0x16, 0xb9, 0x16, 0x84, 0xce, 0x0d, 0x26, 0x9e, 0xf6, 0xf4, 0x22, 0x01, 0x3b, 0xb7, 0xbf, 0x5e, 0x79, 0xb5, 0xa9, 0x39, 0x3b, 0xb9, 0xea, 0x42, 0xc0, 0xbd, 0xb2, 0xd3, 0xc2, 0xdc, 0x80, 0x6e, 0x1a, 0x73, 0x06, 0xaa, 0x58, 0xe4, 0xfd, 0xbe, 0xa5, +}; +static const u8 ecccdh_SECP224R1_21_test_vector_shared_secret[] = { + 0x53, 0x0f, 0x7e, 0x7f, 0xc9, 0x32, 0x61, 0x3b, 0x29, 0xc9, 0x81, 0xf2, 0x61, 0xcb, 0x03, 0x6c, 0xba, 0x3f, 0x1d, 0xf3, 0x86, 0x4e, 0x0e, 0x1c, 0xba, 0x26, 0x85, 0xa2, +}; +static const ecdh_test_case ecccdh_SECP224R1_21_test_case = { + .name = "ECCCDH/SECP224R1 21", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_21_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_21_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_21_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_21_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_21_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_22 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_22_test_vector_our_priv_key[] = { + 0xcf, 0xfd, 0x62, 0xcb, 0x00, 0xa0, 0xe3, 0x16, 0x3f, 0xbf, 0x2c, 0x39, 0x7f, 0xad, 0xc9, 0x61, 0x82, 0x10, 0xf8, 0x6b, 0x4f, 0x54, 0xa6, 0x75, 0x28, 0x73, 0x05, 0xf0, +}; +static const u8 ecccdh_SECP224R1_22_test_vector_peer_pub_key[] = { + 0x84, 0x41, 0x99, 0x67, 0xd6, 0xcf, 0xad, 0x41, 0xe7, 0x5a, 0x02, 0xb6, 0xda, 0x60, 0x5a, 0x97, 0x94, 0x9a, 0x18, 0x3a, 0x97, 0xc3, 0x06, 0xc4, 0xb4, 0x6e, 0x66, 0xa5, 0x5c, 0xc9, 0xb2, 0x59, 0x71, 0x8b, 0x1b, 0xc8, 0xb1, 0x44, 0xfd, 0xe6, 0x33, 0xa8, 0x94, 0x61, 0x6f, 0xfd, 0x59, 0xa3, 0xa6, 0xd5, 0xd8, 0xe9, 0x42, 0xc7, 0xcb, 0xb7, +}; +static const u8 ecccdh_SECP224R1_22_test_vector_our_pub_key[] = { + 0x04, 0xbf, 0x4d, 0x94, 0x8f, 0x44, 0x30, 0xd1, 0x8b, 0x4e, 0xd6, 0xc9, 0x6d, 0xba, 0xf9, 0x81, 0xfa, 0x11, 0xa4, 0x03, 0xed, 0x16, 0x88, 0x7f, 0x06, 0x75, 0x49, 0x81, 0x7c, 0x13, 0x26, 0xa9, 0xce, 0xf5, 0x1f, 0x79, 0xd4, 0xe7, 0x83, 0x03, 0xd6, 0x06, 0x4b, 0x45, 0x9f, 0x61, 0x25, 0x84, 0xac, 0x2f, 0xdf, 0x59, 0x3d, 0x7d, 0x5d, 0x84, +}; +static const u8 ecccdh_SECP224R1_22_test_vector_shared_secret[] = { + 0x49, 0xf6, 0xfd, 0x01, 0x39, 0x24, 0x8e, 0xf4, 0xdf, 0x2d, 0xb0, 0x5d, 0x13, 0x19, 0xbd, 0x5b, 0x14, 0x89, 0xe2, 0x49, 0x82, 0x7a, 0x45, 0xa8, 0xa5, 0xf1, 0x24, 0x27, +}; +static const ecdh_test_case ecccdh_SECP224R1_22_test_case = { + .name = "ECCCDH/SECP224R1 22", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_22_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_22_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_22_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_22_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_22_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_23 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_23_test_vector_our_priv_key[] = { + 0x85, 0xf9, 0x03, 0xe4, 0x39, 0x43, 0xd1, 0x3c, 0x68, 0x93, 0x2e, 0x71, 0x0e, 0x80, 0xde, 0x52, 0xcb, 0xc0, 0xb8, 0xf1, 0xa1, 0x41, 0x8e, 0xa4, 0xda, 0x07, 0x92, 0x99, +}; +static const u8 ecccdh_SECP224R1_23_test_vector_peer_pub_key[] = { + 0x7c, 0x9c, 0xac, 0x35, 0x76, 0x80, 0x63, 0xc2, 0x82, 0x7f, 0x60, 0xa7, 0xf5, 0x13, 0x88, 0xf2, 0xa8, 0xf4, 0xb7, 0xf8, 0xcd, 0x73, 0x6b, 0xd6, 0xbc, 0x33, 0x74, 0x77, 0x29, 0xee, 0x6b, 0x84, 0x9c, 0x60, 0x25, 0xd5, 0x77, 0xdb, 0xcc, 0x55, 0xfb, 0xd1, 0x70, 0x18, 0xf4, 0xed, 0xbc, 0x2e, 0xf1, 0x05, 0xb0, 0x04, 0xd6, 0x25, 0x7b, 0xcd, +}; +static const u8 ecccdh_SECP224R1_23_test_vector_our_pub_key[] = { + 0x97, 0x0a, 0x4a, 0x7e, 0x01, 0xd4, 0x18, 0x84, 0x97, 0xce, 0xb4, 0x69, 0x55, 0xeb, 0x1b, 0x84, 0x2d, 0x90, 0x85, 0x81, 0x9a, 0x9b, 0x92, 0x5c, 0x84, 0x52, 0x9d, 0x3d, 0xdf, 0xa2, 0x52, 0x64, 0x80, 0xf8, 0x33, 0xea, 0x0e, 0xdb, 0xd2, 0x04, 0xe4, 0xe3, 0x65, 0xfe, 0xf3, 0x47, 0x28, 0x88, 0xfe, 0x7d, 0x96, 0x91, 0xc3, 0xeb, 0xc0, 0x9f, +}; +static const u8 ecccdh_SECP224R1_23_test_vector_shared_secret[] = { + 0x8f, 0x7e, 0x34, 0xe5, 0x97, 0xae, 0x80, 0x93, 0xb9, 0x82, 0x70, 0xa7, 0x4a, 0x8d, 0xfc, 0xdb, 0xed, 0x45, 0x7f, 0x42, 0xf4, 0x3d, 0xf4, 0x87, 0xc5, 0x48, 0x71, 0x61, +}; +static const ecdh_test_case ecccdh_SECP224R1_23_test_case = { + .name = "ECCCDH/SECP224R1 23", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_23_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_23_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_23_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_23_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_23_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP224R1 +#define ECCCDH_SECP224R1_SELF_TEST_24 +/*** Tests for ECCCDH/SECP224R1 ***/ +static const u8 ecccdh_SECP224R1_24_test_vector_our_priv_key[] = { + 0xcc, 0xe6, 0x48, 0x91, 0xa3, 0xd0, 0x12, 0x9f, 0xee, 0x0d, 0x4a, 0x96, 0xcf, 0xbe, 0x7a, 0xc4, 0x70, 0xb8, 0x5e, 0x96, 0x75, 0x29, 0x05, 0x7c, 0xfa, 0x31, 0xa1, 0xd9, +}; +static const u8 ecccdh_SECP224R1_24_test_vector_peer_pub_key[] = { + 0x08, 0x5a, 0x76, 0x42, 0xad, 0x8e, 0x59, 0xb1, 0xa3, 0xe8, 0x72, 0x6a, 0x75, 0x47, 0xaf, 0xbe, 0xcf, 0xfd, 0xac, 0x1d, 0xab, 0x7e, 0x57, 0x23, 0x0c, 0x6a, 0x9d, 0xf4, 0xf9, 0x1c, 0x36, 0xd8, 0x81, 0xfe, 0x9b, 0x80, 0x47, 0xa3, 0x53, 0x07, 0x13, 0x55, 0x4a, 0x1a, 0xf4, 0xc2, 0x5c, 0x5a, 0x8e, 0x65, 0x4d, 0xcd, 0xcf, 0x68, 0x9f, 0x2e, +}; +static const u8 ecccdh_SECP224R1_24_test_vector_our_pub_key[] = { + 0xa6, 0xb2, 0x96, 0x32, 0xdb, 0x94, 0xda, 0x21, 0x25, 0xdc, 0x1c, 0xf8, 0x0e, 0x03, 0x70, 0x26, 0x87, 0xb2, 0xac, 0xc1, 0x12, 0x20, 0x22, 0xfa, 0x21, 0x74, 0x76, 0x5a, 0x61, 0x72, 0x3e, 0xdd, 0x73, 0xe1, 0x0d, 0xae, 0xd7, 0x37, 0x75, 0x27, 0x8f, 0x19, 0x58, 0xba, 0x56, 0xf1, 0xfc, 0x9d, 0x08, 0x5e, 0xbc, 0x2b, 0x64, 0xc8, 0x4f, 0xe5, +}; +static const u8 ecccdh_SECP224R1_24_test_vector_shared_secret[] = { + 0x71, 0x95, 0x4e, 0x22, 0x61, 0xe8, 0x51, 0x0b, 0xe1, 0xa0, 0x60, 0x73, 0x36, 0x71, 0xd2, 0xe9, 0xd0, 0xa2, 0xd0, 0x12, 0xeb, 0x4e, 0x09, 0x55, 0x6d, 0x69, 0x7d, 0x2a, +}; +static const ecdh_test_case ecccdh_SECP224R1_24_test_case = { + .name = "ECCCDH/SECP224R1 24", + .ecdh_type = ECCCDH, + .ec_str_p = &secp224r1_str_params, + .our_priv_key = ecccdh_SECP224R1_24_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP224R1_24_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP224R1_24_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP224R1_24_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP224R1_24_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP224R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_0 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_0_test_vector_our_priv_key[] = { + 0x7d, 0x7d, 0xc5, 0xf7, 0x1e, 0xb2, 0x9d, 0xda, 0xf8, 0x0d, 0x62, 0x14, 0x63, 0x2e, 0xea, 0xe0, 0x3d, 0x90, 0x58, 0xaf, 0x1f, 0xb6, 0xd2, 0x2e, 0xd8, 0x0b, 0xad, 0xb6, 0x2b, 0xc1, 0xa5, 0x34, +}; +static const u8 ecccdh_SECP256R1_0_test_vector_peer_pub_key[] = { + 0x70, 0x0c, 0x48, 0xf7, 0x7f, 0x56, 0x58, 0x4c, 0x5c, 0xc6, 0x32, 0xca, 0x65, 0x64, 0x0d, 0xb9, 0x1b, 0x6b, 0xac, 0xce, 0x3a, 0x4d, 0xf6, 0xb4, 0x2c, 0xe7, 0xcc, 0x83, 0x88, 0x33, 0xd2, 0x87, 0xdb, 0x71, 0xe5, 0x09, 0xe3, 0xfd, 0x9b, 0x06, 0x0d, 0xdb, 0x20, 0xba, 0x5c, 0x51, 0xdc, 0xc5, 0x94, 0x8d, 0x46, 0xfb, 0xf6, 0x40, 0xdf, 0xe0, 0x44, 0x17, 0x82, 0xca, 0xb8, 0x5f, 0xa4, 0xac, +}; +static const u8 ecccdh_SECP256R1_0_test_vector_our_pub_key[] = { + 0xea, 0xd2, 0x18, 0x59, 0x01, 0x19, 0xe8, 0x87, 0x6b, 0x29, 0x14, 0x6f, 0xf8, 0x9c, 0xa6, 0x17, 0x70, 0xc4, 0xed, 0xbb, 0xf9, 0x7d, 0x38, 0xce, 0x38, 0x5e, 0xd2, 0x81, 0xd8, 0xa6, 0xb2, 0x30, 0x28, 0xaf, 0x61, 0x28, 0x1f, 0xd3, 0x5e, 0x2f, 0xa7, 0x00, 0x25, 0x23, 0xac, 0xc8, 0x5a, 0x42, 0x9c, 0xb0, 0x6e, 0xe6, 0x64, 0x83, 0x25, 0x38, 0x9f, 0x59, 0xed, 0xfc, 0xe1, 0x40, 0x51, 0x41, +}; +static const u8 ecccdh_SECP256R1_0_test_vector_shared_secret[] = { + 0x46, 0xfc, 0x62, 0x10, 0x64, 0x20, 0xff, 0x01, 0x2e, 0x54, 0xa4, 0x34, 0xfb, 0xdd, 0x2d, 0x25, 0xcc, 0xc5, 0x85, 0x20, 0x60, 0x56, 0x1e, 0x68, 0x04, 0x0d, 0xd7, 0x77, 0x89, 0x97, 0xbd, 0x7b, +}; +static const ecdh_test_case ecccdh_SECP256R1_0_test_case = { + .name = "ECCCDH/SECP256R1 0", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_0_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_0_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_0_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_0_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_0_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_1 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_1_test_vector_our_priv_key[] = { + 0x38, 0xf6, 0x5d, 0x6d, 0xce, 0x47, 0x67, 0x60, 0x44, 0xd5, 0x8c, 0xe5, 0x13, 0x95, 0x82, 0xd5, 0x68, 0xf6, 0x4b, 0xb1, 0x60, 0x98, 0xd1, 0x79, 0xdb, 0xab, 0x07, 0x74, 0x1d, 0xd5, 0xca, 0xf5, +}; +static const u8 ecccdh_SECP256R1_1_test_vector_peer_pub_key[] = { + 0x80, 0x9f, 0x04, 0x28, 0x9c, 0x64, 0x34, 0x8c, 0x01, 0x51, 0x5e, 0xb0, 0x3d, 0x5c, 0xe7, 0xac, 0x1a, 0x8c, 0xb9, 0x49, 0x8f, 0x5c, 0xaa, 0x50, 0x19, 0x7e, 0x58, 0xd4, 0x3a, 0x86, 0xa7, 0xae, 0xb2, 0x9d, 0x84, 0xe8, 0x11, 0x19, 0x7f, 0x25, 0xeb, 0xa8, 0xf5, 0x19, 0x40, 0x92, 0xcb, 0x6f, 0xf4, 0x40, 0xe2, 0x6d, 0x44, 0x21, 0x01, 0x13, 0x72, 0x46, 0x1f, 0x57, 0x92, 0x71, 0xcd, 0xa3, +}; +static const u8 ecccdh_SECP256R1_1_test_vector_our_pub_key[] = { + 0x11, 0x9f, 0x2f, 0x04, 0x79, 0x02, 0x78, 0x2a, 0xb0, 0xc9, 0xe2, 0x7a, 0x54, 0xaf, 0xf5, 0xeb, 0x9b, 0x96, 0x48, 0x29, 0xca, 0x99, 0xc0, 0x6b, 0x02, 0xdd, 0xba, 0x95, 0xb0, 0xa3, 0xf6, 0xd0, 0x8f, 0x52, 0xb7, 0x26, 0x66, 0x4c, 0xac, 0x36, 0x6f, 0xc9, 0x8a, 0xc7, 0xa0, 0x12, 0xb2, 0x68, 0x2c, 0xbd, 0x96, 0x2e, 0x5a, 0xcb, 0x54, 0x46, 0x71, 0xd4, 0x1b, 0x94, 0x45, 0x70, 0x4d, 0x1d, +}; +static const u8 ecccdh_SECP256R1_1_test_vector_shared_secret[] = { + 0x05, 0x7d, 0x63, 0x60, 0x96, 0xcb, 0x80, 0xb6, 0x7a, 0x8c, 0x03, 0x8c, 0x89, 0x0e, 0x88, 0x7d, 0x1a, 0xdf, 0xa4, 0x19, 0x5e, 0x9b, 0x3c, 0xe2, 0x41, 0xc8, 0xa7, 0x78, 0xc5, 0x9c, 0xda, 0x67, +}; +static const ecdh_test_case ecccdh_SECP256R1_1_test_case = { + .name = "ECCCDH/SECP256R1 1", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_1_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_1_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_1_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_1_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_1_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_2 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_2_test_vector_our_priv_key[] = { + 0x1a, 0xcc, 0xfa, 0xf1, 0xb9, 0x77, 0x12, 0xb8, 0x5a, 0x6f, 0x54, 0xb1, 0x48, 0x98, 0x5a, 0x1b, 0xdc, 0x4c, 0x9b, 0xec, 0x0b, 0xd2, 0x58, 0xca, 0xd4, 0xb3, 0xd6, 0x03, 0xf4, 0x9f, 0x32, 0xc8, +}; +static const u8 ecccdh_SECP256R1_2_test_vector_peer_pub_key[] = { + 0xa2, 0x33, 0x9c, 0x12, 0xd4, 0xa0, 0x3c, 0x33, 0x54, 0x6d, 0xe5, 0x33, 0x26, 0x8b, 0x4a, 0xd6, 0x67, 0xde, 0xbf, 0x45, 0x8b, 0x46, 0x4d, 0x77, 0x44, 0x36, 0x36, 0x44, 0x0e, 0xe7, 0xfe, 0xc3, 0xef, 0x48, 0xa3, 0xab, 0x26, 0xe2, 0x02, 0x20, 0xbc, 0xda, 0x2c, 0x18, 0x51, 0x07, 0x68, 0x39, 0xda, 0xe8, 0x8e, 0xae, 0x96, 0x28, 0x69, 0xa4, 0x97, 0xbf, 0x73, 0xcb, 0x66, 0xfa, 0xf5, 0x36, +}; +static const u8 ecccdh_SECP256R1_2_test_vector_our_pub_key[] = { + 0xd9, 0xf2, 0xb7, 0x9c, 0x17, 0x28, 0x45, 0xbf, 0xdb, 0x56, 0x0b, 0xbb, 0x01, 0x44, 0x7c, 0xa5, 0xec, 0xc0, 0x47, 0x0a, 0x09, 0x51, 0x3b, 0x61, 0x26, 0x90, 0x2c, 0x6b, 0x4f, 0x8d, 0x10, 0x51, 0xf8, 0x15, 0xef, 0x5e, 0xc3, 0x21, 0x28, 0xd3, 0x48, 0x78, 0x34, 0x76, 0x46, 0x78, 0x70, 0x2e, 0x64, 0xe1, 0x64, 0xff, 0x73, 0x15, 0x18, 0x5e, 0x23, 0xaf, 0xf5, 0xfa, 0xcd, 0x96, 0xd7, 0xbc, +}; +static const u8 ecccdh_SECP256R1_2_test_vector_shared_secret[] = { + 0x2d, 0x45, 0x7b, 0x78, 0xb4, 0x61, 0x41, 0x32, 0x47, 0x76, 0x18, 0xa5, 0xb0, 0x77, 0x96, 0x5e, 0xc9, 0x07, 0x30, 0xa8, 0xc8, 0x1a, 0x1c, 0x75, 0xd6, 0xd4, 0xec, 0x68, 0x00, 0x5d, 0x67, 0xec, +}; +static const ecdh_test_case ecccdh_SECP256R1_2_test_case = { + .name = "ECCCDH/SECP256R1 2", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_2_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_2_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_2_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_2_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_2_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_3 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_3_test_vector_our_priv_key[] = { + 0x20, 0x7c, 0x43, 0xa7, 0x9b, 0xfe, 0xe0, 0x3d, 0xb6, 0xf4, 0xb9, 0x44, 0xf5, 0x3d, 0x2f, 0xb7, 0x6c, 0xc4, 0x9e, 0xf1, 0xc9, 0xc4, 0xd3, 0x4d, 0x51, 0xb6, 0xc6, 0x5c, 0x4d, 0xb6, 0x93, 0x2d, +}; +static const u8 ecccdh_SECP256R1_3_test_vector_peer_pub_key[] = { + 0xdf, 0x39, 0x89, 0xb9, 0xfa, 0x55, 0x49, 0x57, 0x19, 0xb3, 0xcf, 0x46, 0xdc, 0xcd, 0x28, 0xb5, 0x15, 0x3f, 0x78, 0x08, 0x19, 0x1d, 0xd5, 0x18, 0xef, 0xf0, 0xc3, 0xcf, 0xf2, 0xb7, 0x05, 0xed, 0x42, 0x22, 0x94, 0xff, 0x46, 0x00, 0x34, 0x29, 0xd7, 0x39, 0xa3, 0x32, 0x06, 0xc8, 0x75, 0x25, 0x52, 0xc8, 0xba, 0x54, 0xa2, 0x70, 0xde, 0xfc, 0x06, 0xe2, 0x21, 0xe0, 0xfe, 0xaf, 0x6a, 0xc4, +}; +static const u8 ecccdh_SECP256R1_3_test_vector_our_pub_key[] = { + 0x24, 0x27, 0x7c, 0x33, 0xf4, 0x50, 0x46, 0x2d, 0xcb, 0x3d, 0x48, 0x01, 0xd5, 0x7b, 0x9c, 0xed, 0x05, 0x18, 0x8f, 0x16, 0xc2, 0x8e, 0xda, 0x87, 0x32, 0x58, 0x04, 0x8c, 0xd1, 0x60, 0x7e, 0x0d, 0xc4, 0x78, 0x97, 0x53, 0xe2, 0xb1, 0xf6, 0x3b, 0x32, 0xff, 0x01, 0x4e, 0xc4, 0x2c, 0xd6, 0xa6, 0x9f, 0xac, 0x81, 0xdf, 0xe6, 0xd0, 0xd6, 0xfd, 0x4a, 0xf3, 0x72, 0xae, 0x27, 0xc4, 0x6f, 0x88, +}; +static const u8 ecccdh_SECP256R1_3_test_vector_shared_secret[] = { + 0x96, 0x44, 0x12, 0x59, 0x53, 0x4b, 0x80, 0xf6, 0xae, 0xe3, 0xd2, 0x87, 0xa6, 0xbb, 0x17, 0xb5, 0x09, 0x4d, 0xd4, 0x27, 0x7d, 0x9e, 0x29, 0x4f, 0x8f, 0xe7, 0x3e, 0x48, 0xbf, 0x2a, 0x00, 0x24, +}; +static const ecdh_test_case ecccdh_SECP256R1_3_test_case = { + .name = "ECCCDH/SECP256R1 3", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_3_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_3_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_3_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_3_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_3_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_4 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_4_test_vector_our_priv_key[] = { + 0x59, 0x13, 0x7e, 0x38, 0x15, 0x23, 0x50, 0xb1, 0x95, 0xc9, 0x71, 0x8d, 0x39, 0x67, 0x3d, 0x51, 0x98, 0x38, 0x05, 0x5a, 0xd9, 0x08, 0xdd, 0x47, 0x57, 0x15, 0x2f, 0xd8, 0x25, 0x5c, 0x09, 0xbf, +}; +static const u8 ecccdh_SECP256R1_4_test_vector_peer_pub_key[] = { + 0x41, 0x19, 0x2d, 0x28, 0x13, 0xe7, 0x95, 0x61, 0xe6, 0xa1, 0xd6, 0xf5, 0x3c, 0x8b, 0xc1, 0xa4, 0x33, 0xa1, 0x99, 0xc8, 0x35, 0xe1, 0x41, 0xb0, 0x5a, 0x74, 0xa9, 0x7b, 0x0f, 0xae, 0xb9, 0x22, 0x1a, 0xf9, 0x8c, 0xc4, 0x5e, 0x98, 0xa7, 0xe0, 0x41, 0xb0, 0x1c, 0xf3, 0x5f, 0x46, 0x2b, 0x75, 0x62, 0x28, 0x13, 0x51, 0xc8, 0xeb, 0xf3, 0xff, 0xa0, 0x2e, 0x33, 0xa0, 0x72, 0x2a, 0x13, 0x28, +}; +static const u8 ecccdh_SECP256R1_4_test_vector_our_pub_key[] = { + 0xa8, 0xc5, 0xfd, 0xce, 0x8b, 0x62, 0xc5, 0xad, 0xa5, 0x98, 0xf1, 0x41, 0xad, 0xb3, 0xb2, 0x6c, 0xf2, 0x54, 0xc2, 0x80, 0xb2, 0x85, 0x7a, 0x63, 0xd2, 0xad, 0x78, 0x3a, 0x73, 0x11, 0x5f, 0x6b, 0x80, 0x6e, 0x1a, 0xaf, 0xec, 0x4a, 0xf8, 0x0a, 0x0d, 0x78, 0x6b, 0x3d, 0xe4, 0x53, 0x75, 0xb5, 0x17, 0xa7, 0xe5, 0xb5, 0x1f, 0xfb, 0x2c, 0x35, 0x65, 0x37, 0xc9, 0xe6, 0xef, 0x22, 0x7d, 0x4a, +}; +static const u8 ecccdh_SECP256R1_4_test_vector_shared_secret[] = { + 0x19, 0xd4, 0x4c, 0x8d, 0x63, 0xe8, 0xe8, 0xdd, 0x12, 0xc2, 0x2a, 0x87, 0xb8, 0xcd, 0x4e, 0xce, 0x27, 0xac, 0xdd, 0xe0, 0x4d, 0xbf, 0x47, 0xf7, 0xf2, 0x75, 0x37, 0xa6, 0x99, 0x9a, 0x8e, 0x62, +}; +static const ecdh_test_case ecccdh_SECP256R1_4_test_case = { + .name = "ECCCDH/SECP256R1 4", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_4_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_4_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_4_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_4_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_4_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_5 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_5_test_vector_our_priv_key[] = { + 0xf5, 0xf8, 0xe0, 0x17, 0x46, 0x10, 0xa6, 0x61, 0x27, 0x79, 0x79, 0xb5, 0x8c, 0xe5, 0xc9, 0x0f, 0xee, 0x6c, 0x9b, 0x3b, 0xb3, 0x46, 0xa9, 0x0a, 0x71, 0x96, 0x25, 0x5e, 0x40, 0xb1, 0x32, 0xef, +}; +static const u8 ecccdh_SECP256R1_5_test_vector_peer_pub_key[] = { + 0x33, 0xe8, 0x20, 0x92, 0xa0, 0xf1, 0xfb, 0x38, 0xf5, 0x64, 0x9d, 0x58, 0x67, 0xfb, 0xa2, 0x8b, 0x50, 0x31, 0x72, 0xb7, 0x03, 0x55, 0x74, 0xbf, 0x8e, 0x5b, 0x71, 0x00, 0xa3, 0x05, 0x27, 0x92, 0xf2, 0xcf, 0x6b, 0x60, 0x1e, 0x0a, 0x05, 0x94, 0x5e, 0x33, 0x55, 0x50, 0xbf, 0x64, 0x8d, 0x78, 0x2f, 0x46, 0x18, 0x6c, 0x77, 0x2c, 0x0f, 0x20, 0xd3, 0xcd, 0x0d, 0x6b, 0x8c, 0xa1, 0x4b, 0x2f, +}; +static const u8 ecccdh_SECP256R1_5_test_vector_our_pub_key[] = { + 0x7b, 0x86, 0x1d, 0xcd, 0x28, 0x44, 0xa5, 0xa8, 0x36, 0x3f, 0x6b, 0x8e, 0xf8, 0xd4, 0x93, 0x64, 0x0f, 0x55, 0x87, 0x92, 0x17, 0x18, 0x9d, 0x80, 0x32, 0x6a, 0xad, 0x94, 0x80, 0xdf, 0xc1, 0x49, 0xc4, 0x67, 0x5b, 0x45, 0xee, 0xb3, 0x06, 0x40, 0x5f, 0x6c, 0x33, 0xc3, 0x8b, 0xc6, 0x9e, 0xb2, 0xbd, 0xec, 0x9b, 0x75, 0xad, 0x5a, 0xf4, 0x70, 0x6a, 0xab, 0x84, 0x54, 0x3b, 0x9c, 0xc6, 0x3a, +}; +static const u8 ecccdh_SECP256R1_5_test_vector_shared_secret[] = { + 0x66, 0x4e, 0x45, 0xd5, 0xbb, 0xa4, 0xac, 0x93, 0x1c, 0xd6, 0x5d, 0x52, 0x01, 0x7e, 0x4b, 0xe9, 0xb1, 0x9a, 0x51, 0x5f, 0x66, 0x9b, 0xea, 0x47, 0x03, 0x54, 0x2a, 0x2c, 0x52, 0x5c, 0xd3, 0xd3, +}; +static const ecdh_test_case ecccdh_SECP256R1_5_test_case = { + .name = "ECCCDH/SECP256R1 5", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_5_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_5_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_5_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_5_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_5_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_6 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_6_test_vector_our_priv_key[] = { + 0x3b, 0x58, 0x9a, 0xf7, 0xdb, 0x03, 0x45, 0x9c, 0x23, 0x06, 0x8b, 0x64, 0xf6, 0x3f, 0x28, 0xd3, 0xc3, 0xc6, 0xbc, 0x25, 0xb5, 0xbf, 0x76, 0xac, 0x05, 0xf3, 0x54, 0x82, 0x88, 0x8b, 0x51, 0x90, +}; +static const u8 ecccdh_SECP256R1_6_test_vector_peer_pub_key[] = { + 0x6a, 0x9e, 0x0c, 0x3f, 0x91, 0x6e, 0x4e, 0x31, 0x5c, 0x91, 0x14, 0x7b, 0xe5, 0x71, 0x68, 0x6d, 0x90, 0x46, 0x4e, 0x8b, 0xf9, 0x81, 0xd3, 0x4a, 0x90, 0xb6, 0x35, 0x3b, 0xca, 0x6e, 0xeb, 0xa7, 0x40, 0xf9, 0xbe, 0xad, 0x39, 0xc2, 0xf2, 0xbc, 0xc2, 0x60, 0x2f, 0x75, 0xb8, 0xa7, 0x3e, 0xc7, 0xbd, 0xff, 0xcb, 0xce, 0xad, 0x15, 0x9d, 0x01, 0x74, 0xc6, 0xc4, 0xd3, 0xc5, 0x35, 0x7f, 0x05, +}; +static const u8 ecccdh_SECP256R1_6_test_vector_our_pub_key[] = { + 0x9f, 0xb3, 0x8e, 0x2d, 0x58, 0xea, 0x1b, 0xaf, 0x76, 0x22, 0xe9, 0x67, 0x20, 0x10, 0x1c, 0xae, 0x3c, 0xde, 0x4b, 0xa6, 0xc1, 0xe9, 0xfa, 0x26, 0xd9, 0xb1, 0xde, 0x08, 0x99, 0x10, 0x28, 0x63, 0xd5, 0x56, 0x1b, 0x90, 0x04, 0x06, 0xed, 0xf5, 0x08, 0x02, 0xdd, 0x7d, 0x73, 0xe8, 0x93, 0x95, 0xf8, 0xae, 0xd7, 0x2f, 0xba, 0x0e, 0x1d, 0x1b, 0x61, 0xfe, 0x1d, 0x22, 0x30, 0x22, 0x60, 0xf0, +}; +static const u8 ecccdh_SECP256R1_6_test_vector_shared_secret[] = { + 0xca, 0x34, 0x2d, 0xaa, 0x50, 0xdc, 0x09, 0xd6, 0x1b, 0xe7, 0xc1, 0x96, 0xc8, 0x5e, 0x60, 0xa8, 0x0c, 0x5c, 0xb0, 0x49, 0x31, 0x74, 0x68, 0x20, 0xbe, 0x54, 0x8c, 0xdd, 0xe0, 0x55, 0x67, 0x9d, +}; +static const ecdh_test_case ecccdh_SECP256R1_6_test_case = { + .name = "ECCCDH/SECP256R1 6", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_6_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_6_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_6_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_6_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_6_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_7 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_7_test_vector_our_priv_key[] = { + 0xd8, 0xbf, 0x92, 0x9a, 0x20, 0xea, 0x74, 0x36, 0xb2, 0x46, 0x1b, 0x54, 0x1a, 0x11, 0xc8, 0x0e, 0x61, 0xd8, 0x26, 0xc0, 0xa4, 0xc9, 0xd3, 0x22, 0xb3, 0x1d, 0xd5, 0x4e, 0x7f, 0x58, 0xb9, 0xc8, +}; +static const u8 ecccdh_SECP256R1_7_test_vector_peer_pub_key[] = { + 0xa9, 0xc0, 0xac, 0xad, 0xe5, 0x5c, 0x2a, 0x73, 0xea, 0xd1, 0xa8, 0x6f, 0xb0, 0xa9, 0x71, 0x32, 0x23, 0xc8, 0x24, 0x75, 0x79, 0x1c, 0xd0, 0xe2, 0x10, 0xb0, 0x46, 0x41, 0x2c, 0xe2, 0x24, 0xbb, 0xf6, 0xde, 0x0a, 0xfa, 0x20, 0xe9, 0x3e, 0x07, 0x84, 0x67, 0xc0, 0x53, 0xd2, 0x41, 0x90, 0x3e, 0xda, 0xd7, 0x34, 0xc6, 0xb4, 0x03, 0xba, 0x75, 0x8c, 0x2b, 0x5f, 0xf0, 0x4c, 0x9d, 0x42, 0x29, +}; +static const u8 ecccdh_SECP256R1_7_test_vector_our_pub_key[] = { + 0x20, 0xf0, 0x76, 0x31, 0xe4, 0xa6, 0x51, 0x2a, 0x89, 0xad, 0x48, 0x7c, 0x4e, 0x9d, 0x63, 0x03, 0x9e, 0x57, 0x9c, 0xb0, 0xd7, 0xa5, 0x56, 0xcb, 0x9e, 0x66, 0x1c, 0xd5, 0x9c, 0x1e, 0x7f, 0xa4, 0x6d, 0xe9, 0x18, 0x46, 0xb3, 0xee, 0xe8, 0xa5, 0xec, 0x09, 0xc2, 0xab, 0x1f, 0x41, 0xe2, 0x1b, 0xd8, 0x36, 0x20, 0xcc, 0xdd, 0x1b, 0xdc, 0xe3, 0xab, 0x7e, 0xa6, 0xe0, 0x2d, 0xd2, 0x74, 0xf5, +}; +static const u8 ecccdh_SECP256R1_7_test_vector_shared_secret[] = { + 0x35, 0xaa, 0x9b, 0x52, 0x53, 0x6a, 0x46, 0x1b, 0xfd, 0xe4, 0xe8, 0x5f, 0xc7, 0x56, 0xbe, 0x92, 0x8c, 0x7d, 0xe9, 0x79, 0x23, 0xf0, 0x41, 0x6c, 0x7a, 0x3a, 0xc8, 0xf8, 0x8b, 0x3d, 0x44, 0x89, +}; +static const ecdh_test_case ecccdh_SECP256R1_7_test_case = { + .name = "ECCCDH/SECP256R1 7", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_7_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_7_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_7_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_7_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_7_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_8 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_8_test_vector_our_priv_key[] = { + 0x0f, 0x98, 0x83, 0xba, 0x0e, 0xf3, 0x2e, 0xe7, 0x5d, 0xed, 0x0d, 0x8b, 0xda, 0x39, 0xa5, 0x14, 0x6a, 0x29, 0xf1, 0xf2, 0x50, 0x7b, 0x3b, 0xd4, 0x58, 0xdb, 0xea, 0x0b, 0x2b, 0xb0, 0x5b, 0x4d, +}; +static const u8 ecccdh_SECP256R1_8_test_vector_peer_pub_key[] = { + 0x94, 0xe9, 0x4f, 0x16, 0xa9, 0x82, 0x55, 0xff, 0xf2, 0xb9, 0xac, 0x0c, 0x95, 0x98, 0xaa, 0xc3, 0x54, 0x87, 0xb3, 0x23, 0x2d, 0x32, 0x31, 0xbd, 0x93, 0xb7, 0xdb, 0x7d, 0xf3, 0x6f, 0x9e, 0xb9, 0xd8, 0x04, 0x9a, 0x43, 0x57, 0x9c, 0xfa, 0x90, 0xb8, 0x09, 0x3a, 0x94, 0x41, 0x6c, 0xbe, 0xfb, 0xf9, 0x33, 0x86, 0xf1, 0x5b, 0x3f, 0x6e, 0x19, 0x0b, 0x6e, 0x34, 0x55, 0xfe, 0xdf, 0xe6, 0x9a, +}; +static const u8 ecccdh_SECP256R1_8_test_vector_our_pub_key[] = { + 0xab, 0xb6, 0x1b, 0x42, 0x3b, 0xe5, 0xd6, 0xc2, 0x6e, 0x21, 0xc6, 0x05, 0x83, 0x2c, 0x91, 0x42, 0xdc, 0x1d, 0xfe, 0x5a, 0x5f, 0xff, 0x28, 0x72, 0x67, 0x37, 0x93, 0x6e, 0x6f, 0xbf, 0x51, 0x6d, 0x73, 0x3d, 0x25, 0x13, 0xef, 0x58, 0xbe, 0xab, 0x20, 0x20, 0x90, 0x58, 0x6f, 0xac, 0x91, 0xbf, 0x0f, 0xee, 0x31, 0xe8, 0x0a, 0xb3, 0x34, 0x73, 0xab, 0x23, 0xa2, 0xd8, 0x9e, 0x58, 0xfa, 0xd6, +}; +static const u8 ecccdh_SECP256R1_8_test_vector_shared_secret[] = { + 0x60, 0x5c, 0x16, 0x17, 0x8a, 0x9b, 0xc8, 0x75, 0xdc, 0xbf, 0xf5, 0x4d, 0x63, 0xfe, 0x00, 0xdf, 0x69, 0x9c, 0x03, 0xe8, 0xa8, 0x88, 0xe9, 0xe9, 0x4d, 0xfb, 0xab, 0x90, 0xb2, 0x5f, 0x39, 0xb4, +}; +static const ecdh_test_case ecccdh_SECP256R1_8_test_case = { + .name = "ECCCDH/SECP256R1 8", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_8_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_8_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_8_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_8_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_8_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_9 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_9_test_vector_our_priv_key[] = { + 0x2b, 0xee, 0xdb, 0x04, 0xb0, 0x5c, 0x69, 0x88, 0xf6, 0xa6, 0x75, 0x00, 0xbb, 0x81, 0x3f, 0xaf, 0x2c, 0xae, 0x0d, 0x58, 0x0c, 0x92, 0x53, 0xb6, 0x33, 0x9e, 0x4a, 0x33, 0x37, 0xbb, 0x6c, 0x08, +}; +static const u8 ecccdh_SECP256R1_9_test_vector_peer_pub_key[] = { + 0xe0, 0x99, 0xbf, 0x2a, 0x4d, 0x55, 0x74, 0x60, 0xb5, 0x54, 0x44, 0x30, 0xbb, 0xf6, 0xda, 0x11, 0x00, 0x4d, 0x12, 0x7c, 0xb5, 0xd6, 0x7f, 0x64, 0xab, 0x07, 0xc9, 0x4f, 0xcd, 0xf5, 0x27, 0x4f, 0xd9, 0xc5, 0x0d, 0xbe, 0x70, 0xd7, 0x14, 0xed, 0xb5, 0xe2, 0x21, 0xf4, 0xe0, 0x20, 0x61, 0x0e, 0xeb, 0x62, 0x70, 0x51, 0x7e, 0x68, 0x8c, 0xa6, 0x4f, 0xb0, 0xe9, 0x8c, 0x7e, 0xf8, 0xc1, 0xc5, +}; +static const u8 ecccdh_SECP256R1_9_test_vector_our_pub_key[] = { + 0x3d, 0x63, 0xe4, 0x29, 0xcb, 0x5f, 0xa8, 0x95, 0xa9, 0x24, 0x71, 0x29, 0xbf, 0x4e, 0x48, 0xe8, 0x9f, 0x35, 0xd7, 0xb1, 0x1d, 0xe8, 0x15, 0x8e, 0xfe, 0xb3, 0xe1, 0x06, 0xa2, 0xa8, 0x73, 0x95, 0x0c, 0xae, 0x9e, 0x47, 0x7e, 0xf4, 0x1e, 0x7c, 0x8c, 0x10, 0x64, 0x37, 0x9b, 0xb7, 0xb5, 0x54, 0xdd, 0xcb, 0xca, 0xe7, 0x9f, 0x98, 0x14, 0x28, 0x1f, 0x1e, 0x50, 0xf0, 0x40, 0x3c, 0x61, 0xf3, +}; +static const u8 ecccdh_SECP256R1_9_test_vector_shared_secret[] = { + 0xf9, 0x6e, 0x40, 0xa1, 0xb7, 0x28, 0x40, 0x85, 0x4b, 0xb6, 0x2b, 0xc1, 0x3c, 0x40, 0xcc, 0x27, 0x95, 0xe3, 0x73, 0xd4, 0xe7, 0x15, 0x98, 0x0b, 0x26, 0x14, 0x76, 0x83, 0x5a, 0x09, 0x2e, 0x0b, +}; +static const ecdh_test_case ecccdh_SECP256R1_9_test_case = { + .name = "ECCCDH/SECP256R1 9", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_9_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_9_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_9_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_9_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_9_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_10 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_10_test_vector_our_priv_key[] = { + 0x77, 0xc1, 0x5d, 0xcf, 0x44, 0x61, 0x0e, 0x41, 0x69, 0x6b, 0xab, 0x75, 0x89, 0x43, 0xef, 0xf1, 0x40, 0x93, 0x33, 0xe4, 0xd5, 0xa1, 0x1b, 0xbe, 0x72, 0xc8, 0xf6, 0xc3, 0x95, 0xe9, 0xf8, 0x48, +}; +static const u8 ecccdh_SECP256R1_10_test_vector_peer_pub_key[] = { + 0xf7, 0x5a, 0x5f, 0xe5, 0x6b, 0xda, 0x34, 0xf3, 0xc1, 0x39, 0x62, 0x96, 0x62, 0x6e, 0xf0, 0x12, 0xdc, 0x07, 0xe4, 0x82, 0x58, 0x38, 0x77, 0x8a, 0x64, 0x5c, 0x82, 0x48, 0xcf, 0xf0, 0x16, 0x58, 0x33, 0xbb, 0xdf, 0x1b, 0x17, 0x72, 0xd8, 0x05, 0x9d, 0xf5, 0x68, 0xb0, 0x61, 0xf3, 0xf1, 0x12, 0x2f, 0x28, 0xa8, 0xd8, 0x19, 0x16, 0x7c, 0x97, 0xbe, 0x44, 0x8e, 0x3d, 0xc3, 0xfb, 0x0c, 0x3c, +}; +static const u8 ecccdh_SECP256R1_10_test_vector_our_pub_key[] = { + 0xad, 0x5d, 0x13, 0xc3, 0xdb, 0x50, 0x8d, 0xdc, 0xd3, 0x84, 0x57, 0xe5, 0x99, 0x14, 0x34, 0xa2, 0x51, 0xbe, 0xd4, 0x9c, 0xf5, 0xdd, 0xcb, 0x59, 0xcd, 0xee, 0x73, 0x86, 0x5f, 0x13, 0x8c, 0x9f, 0x62, 0xce, 0xc1, 0xe7, 0x05, 0x88, 0xaa, 0x4f, 0xdf, 0xc7, 0xb9, 0xa0, 0x9d, 0xaa, 0x67, 0x80, 0x81, 0xc0, 0x4e, 0x12, 0x08, 0xb9, 0xd6, 0x62, 0xb8, 0xa2, 0x21, 0x4b, 0xf8, 0xe8, 0x1a, 0x21, +}; +static const u8 ecccdh_SECP256R1_10_test_vector_shared_secret[] = { + 0x83, 0x88, 0xfa, 0x79, 0xc4, 0xba, 0xbd, 0xca, 0x02, 0xa8, 0xe8, 0xa3, 0x4f, 0x9e, 0x43, 0x55, 0x49, 0x76, 0xe4, 0x20, 0xa4, 0xad, 0x27, 0x3c, 0x81, 0xb2, 0x6e, 0x42, 0x28, 0xe9, 0xd3, 0xa3, +}; +static const ecdh_test_case ecccdh_SECP256R1_10_test_case = { + .name = "ECCCDH/SECP256R1 10", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_10_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_10_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_10_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_10_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_10_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_11 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_11_test_vector_our_priv_key[] = { + 0x42, 0xa8, 0x3b, 0x98, 0x50, 0x11, 0xd1, 0x23, 0x03, 0xdb, 0x1a, 0x80, 0x0f, 0x26, 0x10, 0xf7, 0x4a, 0xa7, 0x1c, 0xdf, 0x19, 0xc6, 0x7d, 0x54, 0xce, 0x6c, 0x9e, 0xd9, 0x51, 0xe9, 0x09, 0x3e, +}; +static const u8 ecccdh_SECP256R1_11_test_vector_peer_pub_key[] = { + 0x2d, 0xb4, 0x54, 0x0d, 0x50, 0x23, 0x07, 0x56, 0x15, 0x8a, 0xbf, 0x61, 0xd9, 0x83, 0x57, 0x12, 0xb6, 0x48, 0x6c, 0x74, 0x31, 0x21, 0x83, 0xcc, 0xef, 0xca, 0xef, 0x27, 0x97, 0xb7, 0x67, 0x4d, 0x62, 0xf5, 0x7f, 0x31, 0x4e, 0x3f, 0x34, 0x95, 0xdc, 0x4e, 0x09, 0x90, 0x12, 0xf5, 0xe0, 0xba, 0x71, 0x77, 0x0f, 0x96, 0x60, 0xa1, 0xea, 0xda, 0x54, 0x10, 0x4c, 0xdf, 0xde, 0x77, 0x24, 0x3e, +}; +static const u8 ecccdh_SECP256R1_11_test_vector_our_pub_key[] = { + 0xab, 0x48, 0xca, 0xa6, 0x1e, 0xa3, 0x5f, 0x13, 0xf8, 0xed, 0x07, 0xff, 0xa6, 0xa1, 0x3e, 0x8d, 0xb2, 0x24, 0xdf, 0xec, 0xfa, 0xe1, 0xa7, 0xdf, 0x8b, 0x1b, 0xb6, 0xeb, 0xaf, 0x0c, 0xb9, 0x7d, 0x12, 0x74, 0x53, 0x0c, 0xa2, 0xc3, 0x85, 0xa3, 0x21, 0x8b, 0xdd, 0xfb, 0xcb, 0xf0, 0xb4, 0x02, 0x4c, 0x9b, 0xad, 0xd5, 0x24, 0x3b, 0xff, 0x83, 0x4e, 0xbf, 0xf2, 0x4a, 0x86, 0x18, 0xdc, 0xcb, +}; +static const u8 ecccdh_SECP256R1_11_test_vector_shared_secret[] = { + 0x72, 0x87, 0x7c, 0xea, 0x33, 0xcc, 0xc4, 0x71, 0x50, 0x38, 0xd4, 0xbc, 0xbd, 0xfe, 0x0e, 0x43, 0xf4, 0x2a, 0x9e, 0x2c, 0x0c, 0x3b, 0x01, 0x7f, 0xc2, 0x37, 0x0f, 0x4b, 0x9a, 0xcb, 0xda, 0x4a, +}; +static const ecdh_test_case ecccdh_SECP256R1_11_test_case = { + .name = "ECCCDH/SECP256R1 11", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_11_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_11_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_11_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_11_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_11_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_12 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_12_test_vector_our_priv_key[] = { + 0xce, 0xed, 0x35, 0x50, 0x7b, 0x5c, 0x93, 0xea, 0xd5, 0x98, 0x91, 0x19, 0xb9, 0xba, 0x34, 0x2c, 0xfe, 0x38, 0xe6, 0xe6, 0x38, 0xba, 0x6e, 0xea, 0x34, 0x3a, 0x55, 0x47, 0x5d, 0xe2, 0x80, 0x0b, +}; +static const u8 ecccdh_SECP256R1_12_test_vector_peer_pub_key[] = { + 0xcd, 0x94, 0xfc, 0x94, 0x97, 0xe8, 0x99, 0x07, 0x50, 0x30, 0x9e, 0x9a, 0x85, 0x34, 0xfd, 0x11, 0x4b, 0x0a, 0x6e, 0x54, 0xda, 0x89, 0xc4, 0x79, 0x61, 0x01, 0x89, 0x70, 0x41, 0xd1, 0x4e, 0xcb, 0xc3, 0xde, 0xf4, 0xb5, 0xfe, 0x04, 0xfa, 0xee, 0x0a, 0x11, 0x93, 0x22, 0x29, 0xff, 0xf5, 0x63, 0x63, 0x7b, 0xfd, 0xee, 0x0e, 0x79, 0xc6, 0xde, 0xea, 0xf4, 0x49, 0xf8, 0x54, 0x01, 0xc5, 0xc4, +}; +static const u8 ecccdh_SECP256R1_12_test_vector_our_pub_key[] = { + 0x9a, 0x8c, 0xd9, 0xbd, 0x72, 0xe7, 0x17, 0x52, 0xdf, 0x91, 0x44, 0x0f, 0x77, 0xc5, 0x47, 0x50, 0x9a, 0x84, 0xdf, 0x98, 0x11, 0x4e, 0x7d, 0xe4, 0xf2, 0x6c, 0xdb, 0x39, 0x23, 0x4a, 0x62, 0x5d, 0xd0, 0x7c, 0xfc, 0x84, 0xc8, 0xe1, 0x44, 0xfa, 0xb2, 0x83, 0x9f, 0x51, 0x89, 0xbb, 0x1d, 0x7c, 0x88, 0x63, 0x1d, 0x57, 0x9b, 0xbc, 0x58, 0x01, 0x2e, 0xd9, 0xa2, 0x32, 0x7d, 0xa5, 0x2f, 0x62, +}; +static const u8 ecccdh_SECP256R1_12_test_vector_shared_secret[] = { + 0xe4, 0xe7, 0x40, 0x8d, 0x85, 0xff, 0x0e, 0x0e, 0x9c, 0x83, 0x80, 0x03, 0xf2, 0x8c, 0xdb, 0xd5, 0x24, 0x7c, 0xdc, 0xe3, 0x1f, 0x32, 0xf6, 0x24, 0x94, 0xb7, 0x0e, 0x5f, 0x1b, 0xc3, 0x63, 0x07, +}; +static const ecdh_test_case ecccdh_SECP256R1_12_test_case = { + .name = "ECCCDH/SECP256R1 12", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_12_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_12_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_12_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_12_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_12_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_13 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_13_test_vector_our_priv_key[] = { + 0x43, 0xe0, 0xe9, 0xd9, 0x5a, 0xf4, 0xdc, 0x36, 0x48, 0x3c, 0xdd, 0x19, 0x68, 0xd2, 0xb7, 0xee, 0xb8, 0x61, 0x1f, 0xcc, 0xe7, 0x7f, 0x3a, 0x4e, 0x7d, 0x05, 0x9a, 0xe4, 0x3e, 0x50, 0x96, 0x04, +}; +static const u8 ecccdh_SECP256R1_13_test_vector_peer_pub_key[] = { + 0x15, 0xb9, 0xe4, 0x67, 0xaf, 0x4d, 0x29, 0x0c, 0x41, 0x74, 0x02, 0xe0, 0x40, 0x42, 0x6f, 0xe4, 0xcf, 0x23, 0x6b, 0xae, 0x72, 0xba, 0xa3, 0x92, 0xed, 0x89, 0x78, 0x0d, 0xfc, 0xcd, 0xb4, 0x71, 0xcd, 0xf4, 0xe9, 0x17, 0x0f, 0xb9, 0x04, 0x30, 0x2b, 0x8f, 0xd9, 0x3a, 0x82, 0x0b, 0xa8, 0xcc, 0x7e, 0xd4, 0xef, 0xd3, 0xa6, 0xf2, 0xd6, 0xb0, 0x5b, 0x80, 0xb2, 0xff, 0x2a, 0xee, 0x4e, 0x77, +}; +static const u8 ecccdh_SECP256R1_13_test_vector_our_pub_key[] = { + 0xf9, 0x89, 0xcf, 0x8e, 0xe9, 0x56, 0xa8, 0x2e, 0x7e, 0xbd, 0x98, 0x81, 0xcd, 0xbf, 0xb2, 0xfd, 0x94, 0x61, 0x89, 0xb0, 0x8d, 0xb5, 0x35, 0x59, 0xbc, 0x8c, 0xfd, 0xd4, 0x80, 0x71, 0xeb, 0x14, 0x5e, 0xff, 0x28, 0xf1, 0xa1, 0x8a, 0x61, 0x6b, 0x04, 0xb7, 0xd3, 0x37, 0x86, 0x86, 0x79, 0xf6, 0xdd, 0x84, 0xf9, 0xa7, 0xb3, 0xd7, 0xb6, 0xf8, 0xaf, 0x27, 0x6c, 0x19, 0x61, 0x1a, 0x54, 0x1d, +}; +static const u8 ecccdh_SECP256R1_13_test_vector_shared_secret[] = { + 0xed, 0x56, 0xbc, 0xf6, 0x95, 0xb7, 0x34, 0x14, 0x2c, 0x24, 0xec, 0xb1, 0xfc, 0x1b, 0xb6, 0x4d, 0x08, 0xf1, 0x75, 0xeb, 0x24, 0x3a, 0x31, 0xf3, 0x7b, 0x3d, 0x9b, 0xb4, 0x40, 0x7f, 0x3b, 0x96, +}; +static const ecdh_test_case ecccdh_SECP256R1_13_test_case = { + .name = "ECCCDH/SECP256R1 13", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_13_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_13_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_13_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_13_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_13_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_14 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_14_test_vector_our_priv_key[] = { + 0xb2, 0xf3, 0x60, 0x0d, 0xf3, 0x36, 0x8e, 0xf8, 0xa0, 0xbb, 0x85, 0xab, 0x22, 0xf4, 0x1f, 0xc0, 0xe5, 0xf4, 0xfd, 0xd5, 0x4b, 0xe8, 0x16, 0x7a, 0x5c, 0x3c, 0xd4, 0xb0, 0x8d, 0xb0, 0x49, 0x03, +}; +static const u8 ecccdh_SECP256R1_14_test_vector_peer_pub_key[] = { + 0x49, 0xc5, 0x03, 0xba, 0x6c, 0x4f, 0xa6, 0x05, 0x18, 0x2e, 0x18, 0x6b, 0x5e, 0x81, 0x11, 0x3f, 0x07, 0x5b, 0xc1, 0x1d, 0xcf, 0xd5, 0x1c, 0x93, 0x2f, 0xb2, 0x1e, 0x95, 0x1e, 0xee, 0x2f, 0xa1, 0x8a, 0xf7, 0x06, 0xff, 0x09, 0x22, 0xd8, 0x7b, 0x3f, 0x0c, 0x5e, 0x4e, 0x31, 0xd8, 0xb2, 0x59, 0xae, 0xb2, 0x60, 0xa9, 0x26, 0x96, 0x43, 0xed, 0x52, 0x0a, 0x13, 0xbb, 0x25, 0xda, 0x59, 0x24, +}; +static const u8 ecccdh_SECP256R1_14_test_vector_our_pub_key[] = { + 0x69, 0xc6, 0x27, 0x62, 0x5b, 0x36, 0xa4, 0x29, 0xc3, 0x98, 0xb4, 0x5c, 0x38, 0x67, 0x7c, 0xb3, 0x5d, 0x8b, 0xeb, 0x1c, 0xf7, 0x8a, 0x57, 0x1e, 0x40, 0xe9, 0x9f, 0xe4, 0xea, 0xc1, 0xcd, 0x4e, 0x81, 0x69, 0x01, 0x12, 0xb0, 0xa8, 0x8f, 0x20, 0xf7, 0x13, 0x6b, 0x28, 0xd7, 0xd4, 0x7e, 0x5f, 0xbc, 0x2a, 0xda, 0x3c, 0x8e, 0xdd, 0x87, 0x58, 0x9b, 0xc1, 0x9e, 0xc9, 0x59, 0x06, 0x37, 0xbd, +}; +static const u8 ecccdh_SECP256R1_14_test_vector_shared_secret[] = { + 0xbc, 0x5c, 0x70, 0x55, 0x08, 0x9f, 0xc9, 0xd6, 0xc8, 0x9f, 0x83, 0xc1, 0xea, 0x1a, 0xda, 0x87, 0x9d, 0x99, 0x34, 0xb2, 0xea, 0x28, 0xfc, 0xf4, 0xe4, 0xa7, 0xe9, 0x84, 0xb2, 0x8a, 0xd2, 0xcf, +}; +static const ecdh_test_case ecccdh_SECP256R1_14_test_case = { + .name = "ECCCDH/SECP256R1 14", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_14_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_14_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_14_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_14_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_14_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_15 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_15_test_vector_our_priv_key[] = { + 0x40, 0x02, 0x53, 0x43, 0x07, 0xf8, 0xb6, 0x2a, 0x9b, 0xf6, 0x7f, 0xf6, 0x41, 0xdd, 0xc6, 0x0f, 0xef, 0x59, 0x3b, 0x17, 0xc3, 0x34, 0x12, 0x39, 0xe9, 0x5b, 0xdb, 0x3e, 0x57, 0x9b, 0xfd, 0xc8, +}; +static const u8 ecccdh_SECP256R1_15_test_vector_peer_pub_key[] = { + 0x19, 0xb3, 0x8d, 0xe3, 0x9f, 0xdd, 0x2f, 0x70, 0xf7, 0x09, 0x16, 0x31, 0xa4, 0xf7, 0x5d, 0x19, 0x93, 0x74, 0x0b, 0xa9, 0x42, 0x91, 0x62, 0xc2, 0xa4, 0x53, 0x12, 0x40, 0x16, 0x36, 0xb2, 0x9c, 0x09, 0xae, 0xd7, 0x23, 0x2b, 0x28, 0xe0, 0x60, 0x94, 0x17, 0x41, 0xb6, 0x82, 0x8b, 0xcd, 0xfa, 0x2b, 0xc4, 0x9c, 0xc8, 0x44, 0xf3, 0x77, 0x36, 0x11, 0x50, 0x4f, 0x82, 0xa3, 0x90, 0xa5, 0xae, +}; +static const u8 ecccdh_SECP256R1_15_test_vector_our_pub_key[] = { + 0x5f, 0xe9, 0x64, 0x67, 0x13, 0x15, 0xa1, 0x8a, 0xa6, 0x8a, 0x2a, 0x6e, 0x3d, 0xd1, 0xfd, 0xe7, 0xe2, 0x3b, 0x8c, 0xe7, 0x18, 0x14, 0x71, 0xcf, 0xac, 0x43, 0xc9, 0x9e, 0x1a, 0xe8, 0x02, 0x62, 0xd5, 0x82, 0x7b, 0xe2, 0x82, 0xe6, 0x2c, 0x84, 0xde, 0x53, 0x1b, 0x96, 0x38, 0x84, 0xba, 0x83, 0x2d, 0xb5, 0xd6, 0xb2, 0xc3, 0xa2, 0x56, 0xf0, 0xe6, 0x04, 0xfe, 0x7e, 0x6b, 0x8a, 0x7f, 0x72, +}; +static const u8 ecccdh_SECP256R1_15_test_vector_shared_secret[] = { + 0x9a, 0x4e, 0x8e, 0x65, 0x7f, 0x6b, 0x0e, 0x09, 0x7f, 0x47, 0x95, 0x4a, 0x63, 0xc7, 0x5d, 0x74, 0xfc, 0xba, 0x71, 0xa3, 0x0d, 0x83, 0x65, 0x1e, 0x3e, 0x5a, 0x91, 0xaa, 0x7c, 0xcd, 0x83, 0x43, +}; +static const ecdh_test_case ecccdh_SECP256R1_15_test_case = { + .name = "ECCCDH/SECP256R1 15", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_15_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_15_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_15_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_15_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_15_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_16 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_16_test_vector_our_priv_key[] = { + 0x4d, 0xfa, 0x12, 0xde, 0xfc, 0x60, 0x31, 0x90, 0x21, 0xb6, 0x81, 0xb3, 0xff, 0x84, 0xa1, 0x0a, 0x51, 0x19, 0x58, 0xc8, 0x50, 0x93, 0x9e, 0xd4, 0x56, 0x35, 0x93, 0x4b, 0xa4, 0x97, 0x91, 0x47, +}; +static const u8 ecccdh_SECP256R1_16_test_vector_peer_pub_key[] = { + 0x2c, 0x91, 0xc6, 0x1f, 0x33, 0xad, 0xfe, 0x93, 0x11, 0xc9, 0x42, 0xfd, 0xbf, 0xf6, 0xba, 0x47, 0x02, 0x0f, 0xef, 0xf4, 0x16, 0xb7, 0xbb, 0x63, 0xce, 0xc1, 0x3f, 0xaf, 0x9b, 0x09, 0x99, 0x54, 0x6c, 0xab, 0x31, 0xb0, 0x64, 0x19, 0xe5, 0x22, 0x1f, 0xca, 0x01, 0x4f, 0xb8, 0x4e, 0xc8, 0x70, 0x62, 0x2a, 0x1b, 0x12, 0xba, 0xb5, 0xae, 0x43, 0x68, 0x2a, 0xa7, 0xea, 0x73, 0xea, 0x08, 0xd0, +}; +static const u8 ecccdh_SECP256R1_16_test_vector_our_pub_key[] = { + 0xc9, 0xb2, 0xb8, 0x49, 0x6f, 0x14, 0x40, 0xbd, 0x4a, 0x2d, 0x1e, 0x52, 0x75, 0x2f, 0xd3, 0x72, 0x83, 0x5b, 0x36, 0x48, 0x85, 0xe1, 0x54, 0xa7, 0xda, 0xc4, 0x92, 0x95, 0xf2, 0x81, 0xec, 0x7c, 0xfb, 0xe6, 0xb9, 0x26, 0xa8, 0xa4, 0xde, 0x26, 0xcc, 0xc8, 0x3b, 0x80, 0x2b, 0x12, 0x12, 0x40, 0x07, 0x54, 0xbe, 0x25, 0xd9, 0xf3, 0xee, 0xaf, 0x00, 0x8b, 0x09, 0x87, 0x0a, 0xe7, 0x63, 0x21, +}; +static const u8 ecccdh_SECP256R1_16_test_vector_shared_secret[] = { + 0x3c, 0xa1, 0xfc, 0x7a, 0xd8, 0x58, 0xfb, 0x1a, 0x6a, 0xba, 0x23, 0x25, 0x42, 0xf3, 0xe2, 0xa7, 0x49, 0xff, 0xc7, 0x20, 0x3a, 0x23, 0x74, 0xa3, 0xf3, 0xd3, 0x26, 0x7f, 0x1f, 0xc9, 0x7b, 0x78, +}; +static const ecdh_test_case ecccdh_SECP256R1_16_test_case = { + .name = "ECCCDH/SECP256R1 16", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_16_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_16_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_16_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_16_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_16_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_17 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_17_test_vector_our_priv_key[] = { + 0x13, 0x31, 0xf6, 0xd8, 0x74, 0xa4, 0xed, 0x3b, 0xc4, 0xa2, 0xc6, 0xe9, 0xc7, 0x43, 0x31, 0xd3, 0x03, 0x97, 0x96, 0x31, 0x4b, 0xee, 0xe3, 0xb7, 0x15, 0x2f, 0xcd, 0xba, 0x55, 0x56, 0x30, 0x4e, +}; +static const u8 ecccdh_SECP256R1_17_test_vector_peer_pub_key[] = { + 0xa2, 0x8a, 0x2e, 0xdf, 0x58, 0x02, 0x56, 0x68, 0xf7, 0x24, 0xaa, 0xf8, 0x3a, 0x50, 0x95, 0x6b, 0x7a, 0xc1, 0xcf, 0xbb, 0xff, 0x79, 0xb0, 0x8c, 0x3b, 0xf8, 0x7d, 0xfd, 0x28, 0x28, 0xd7, 0x67, 0xdf, 0xa7, 0xbf, 0xff, 0xd4, 0xc7, 0x66, 0xb8, 0x6a, 0xbe, 0xaf, 0x5c, 0x99, 0xb6, 0xe5, 0x0c, 0xb9, 0xcc, 0xc9, 0xd9, 0xd0, 0x0b, 0x7f, 0xfc, 0x78, 0x04, 0xb0, 0x49, 0x1b, 0x67, 0xbc, 0x03, +}; +static const u8 ecccdh_SECP256R1_17_test_vector_our_pub_key[] = { + 0x59, 0xe1, 0xe1, 0x01, 0x52, 0x10, 0x46, 0xad, 0x9c, 0xf1, 0xd0, 0x82, 0xe9, 0xd2, 0xec, 0x7d, 0xd2, 0x25, 0x30, 0xcc, 0xe0, 0x64, 0x99, 0x1f, 0x1e, 0x55, 0xc5, 0xbc, 0xf5, 0xfc, 0xb5, 0x91, 0x48, 0x2f, 0x4f, 0x67, 0x31, 0x76, 0xc8, 0xfd, 0xaa, 0x0b, 0xb6, 0xe5, 0x9b, 0x15, 0xa3, 0xe4, 0x74, 0x54, 0xe3, 0xa0, 0x42, 0x97, 0xd3, 0x86, 0x3c, 0x93, 0x38, 0xd9, 0x8a, 0xdd, 0x1f, 0x37, +}; +static const u8 ecccdh_SECP256R1_17_test_vector_shared_secret[] = { + 0x1a, 0xaa, 0xbe, 0x7e, 0xe6, 0xe4, 0xa6, 0xfa, 0x73, 0x22, 0x91, 0x20, 0x24, 0x33, 0xa2, 0x37, 0xdf, 0x1b, 0x49, 0xbc, 0x53, 0x86, 0x6b, 0xfb, 0xe0, 0x0d, 0xb9, 0x6a, 0x0f, 0x58, 0x22, 0x4f, +}; +static const ecdh_test_case ecccdh_SECP256R1_17_test_case = { + .name = "ECCCDH/SECP256R1 17", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_17_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_17_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_17_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_17_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_17_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_18 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_18_test_vector_our_priv_key[] = { + 0xdd, 0x5e, 0x9f, 0x70, 0xae, 0x74, 0x00, 0x73, 0xca, 0x02, 0x04, 0xdf, 0x60, 0x76, 0x3f, 0xb6, 0x03, 0x6c, 0x45, 0x70, 0x9b, 0xf4, 0xa7, 0xbb, 0x4e, 0x67, 0x14, 0x12, 0xfa, 0xd6, 0x5d, 0xa3, +}; +static const u8 ecccdh_SECP256R1_18_test_vector_peer_pub_key[] = { + 0xa2, 0xef, 0x85, 0x7a, 0x08, 0x1f, 0x9d, 0x6e, 0xb2, 0x06, 0xa8, 0x1c, 0x4c, 0xf7, 0x8a, 0x80, 0x2b, 0xdf, 0x59, 0x8a, 0xe3, 0x80, 0xc8, 0x88, 0x6e, 0xcd, 0x85, 0xfd, 0xc1, 0xed, 0x76, 0x44, 0x56, 0x3c, 0x4c, 0x20, 0x41, 0x9f, 0x07, 0xbc, 0x17, 0xd0, 0x53, 0x9f, 0xad, 0xe1, 0x85, 0x5e, 0x34, 0x83, 0x95, 0x15, 0xb8, 0x92, 0xc0, 0xf5, 0xd2, 0x65, 0x61, 0xf9, 0x7f, 0xa0, 0x4d, 0x1a, +}; +static const u8 ecccdh_SECP256R1_18_test_vector_our_pub_key[] = { + 0x30, 0xb9, 0xdb, 0x2e, 0x2e, 0x97, 0x7b, 0xcd, 0xc9, 0x8c, 0xb8, 0x7d, 0xd7, 0x36, 0xcb, 0xd8, 0xe7, 0x85, 0x52, 0x12, 0x19, 0x25, 0xcf, 0x16, 0xe1, 0x93, 0x36, 0x57, 0xc2, 0xfb, 0x23, 0x14, 0x6a, 0x45, 0x02, 0x88, 0x00, 0xb8, 0x12, 0x91, 0xbc, 0xe5, 0xc2, 0xe1, 0xfe, 0xd7, 0xde, 0xd6, 0x50, 0x62, 0x0e, 0xbb, 0xe6, 0x05, 0x0c, 0x6f, 0x3a, 0x7f, 0x0d, 0xfb, 0x46, 0x73, 0xab, 0x5c, +}; +static const u8 ecccdh_SECP256R1_18_test_vector_shared_secret[] = { + 0x43, 0x0e, 0x6a, 0x4f, 0xba, 0x44, 0x49, 0xd7, 0x00, 0xd2, 0x73, 0x3e, 0x55, 0x7f, 0x66, 0xa3, 0xbf, 0x3d, 0x50, 0x51, 0x7c, 0x12, 0x71, 0xb1, 0xdd, 0xae, 0x11, 0x61, 0xb7, 0xac, 0x79, 0x8c, +}; +static const ecdh_test_case ecccdh_SECP256R1_18_test_case = { + .name = "ECCCDH/SECP256R1 18", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_18_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_18_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_18_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_18_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_18_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_19 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_19_test_vector_our_priv_key[] = { + 0x5a, 0xe0, 0x26, 0xcf, 0xc0, 0x60, 0xd5, 0x56, 0x00, 0x71, 0x7e, 0x55, 0xb8, 0xa1, 0x2e, 0x11, 0x6d, 0x1d, 0x0d, 0xf3, 0x4a, 0xf8, 0x31, 0x97, 0x90, 0x57, 0x60, 0x7c, 0x2d, 0x9c, 0x2f, 0x76, +}; +static const u8 ecccdh_SECP256R1_19_test_vector_peer_pub_key[] = { + 0xcc, 0xd8, 0xa2, 0xd8, 0x6b, 0xc9, 0x2f, 0x2e, 0x01, 0xbc, 0xe4, 0xd6, 0x92, 0x2c, 0xf7, 0xfe, 0x16, 0x26, 0xae, 0xd0, 0x44, 0x68, 0x5e, 0x95, 0xe2, 0xee, 0xbd, 0x46, 0x45, 0x05, 0xf0, 0x1f, 0xe9, 0xdd, 0xd5, 0x83, 0xa9, 0x63, 0x5a, 0x66, 0x77, 0x77, 0xd5, 0xb8, 0xa8, 0xf3, 0x1b, 0x0f, 0x79, 0xeb, 0xa1, 0x2c, 0x75, 0x02, 0x34, 0x10, 0xb5, 0x4b, 0x85, 0x67, 0xdd, 0xdc, 0x0f, 0x38, +}; +static const u8 ecccdh_SECP256R1_19_test_vector_our_pub_key[] = { + 0x46, 0xc9, 0xeb, 0xd1, 0xa4, 0xa3, 0xc8, 0xc0, 0xb6, 0xd5, 0x72, 0xb5, 0xdc, 0xfb, 0xa1, 0x24, 0x67, 0x60, 0x32, 0x08, 0xa9, 0xcb, 0x5d, 0x2a, 0xcf, 0xbb, 0x73, 0x3c, 0x40, 0xcf, 0x63, 0x91, 0x46, 0xc9, 0x13, 0xa2, 0x7d, 0x04, 0x41, 0x85, 0xd3, 0x8b, 0x46, 0x7a, 0xce, 0x01, 0x1e, 0x04, 0xd4, 0xd9, 0xbb, 0xbb, 0x8c, 0xb9, 0xae, 0x25, 0xfa, 0x92, 0xaa, 0xf1, 0x5a, 0x59, 0x5e, 0x86, +}; +static const u8 ecccdh_SECP256R1_19_test_vector_shared_secret[] = { + 0x1c, 0xe9, 0xe6, 0x74, 0x05, 0x29, 0x49, 0x9f, 0x98, 0xd1, 0xf1, 0xd7, 0x13, 0x29, 0x14, 0x7a, 0x33, 0xdf, 0x1d, 0x05, 0xe4, 0x76, 0x5b, 0x53, 0x9b, 0x11, 0xcf, 0x61, 0x5d, 0x69, 0x74, 0xd3, +}; +static const ecdh_test_case ecccdh_SECP256R1_19_test_case = { + .name = "ECCCDH/SECP256R1 19", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_19_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_19_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_19_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_19_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_19_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_20 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_20_test_vector_our_priv_key[] = { + 0xb6, 0x01, 0xac, 0x42, 0x5d, 0x5d, 0xbf, 0x9e, 0x17, 0x35, 0xc5, 0xe2, 0xd5, 0xbd, 0xb7, 0x9c, 0xa9, 0x8b, 0x3d, 0x5b, 0xe4, 0xa2, 0xcf, 0xd6, 0xf2, 0x27, 0x3f, 0x15, 0x0e, 0x06, 0x4d, 0x9d, +}; +static const u8 ecccdh_SECP256R1_20_test_vector_peer_pub_key[] = { + 0xc1, 0x88, 0xff, 0xc8, 0x94, 0x7f, 0x73, 0x01, 0xfb, 0x7b, 0x53, 0xe3, 0x67, 0x46, 0x09, 0x7c, 0x21, 0x34, 0xbf, 0x9c, 0xc9, 0x81, 0xba, 0x74, 0xb4, 0xe9, 0xc4, 0x36, 0x1f, 0x59, 0x5e, 0x4e, 0xbf, 0x7d, 0x2f, 0x20, 0x56, 0xe7, 0x24, 0x21, 0xef, 0x39, 0x3f, 0x0c, 0x0f, 0x2b, 0x0e, 0x00, 0x13, 0x0e, 0x3c, 0xac, 0x4a, 0xbb, 0xcc, 0x00, 0x28, 0x61, 0x68, 0xe8, 0x5e, 0xc5, 0x50, 0x51, +}; +static const u8 ecccdh_SECP256R1_20_test_vector_our_pub_key[] = { + 0x7c, 0x9e, 0x95, 0x08, 0x41, 0xd2, 0x6c, 0x8d, 0xde, 0x89, 0x94, 0x39, 0x8b, 0x8f, 0x5d, 0x47, 0x5a, 0x02, 0x2b, 0xc6, 0x3d, 0xe7, 0x77, 0x3f, 0xcf, 0x8d, 0x55, 0x2e, 0x01, 0xf1, 0xba, 0x0a, 0xcc, 0x42, 0xb9, 0x88, 0x5c, 0x9b, 0x3b, 0xee, 0x0f, 0x8d, 0x8c, 0x57, 0xd3, 0xa8, 0xf6, 0x35, 0x50, 0x16, 0xc0, 0x19, 0xc4, 0x06, 0x2f, 0xa2, 0x2c, 0xff, 0x2f, 0x20, 0x9b, 0x5c, 0xc2, 0xe1, +}; +static const u8 ecccdh_SECP256R1_20_test_vector_shared_secret[] = { + 0x46, 0x90, 0xe3, 0x74, 0x3c, 0x07, 0xd6, 0x43, 0xf1, 0xbc, 0x18, 0x36, 0x36, 0xab, 0x2a, 0x9c, 0xb9, 0x36, 0xa6, 0x0a, 0x80, 0x21, 0x13, 0xc4, 0x9b, 0xb1, 0xb3, 0xf2, 0xd0, 0x66, 0x16, 0x60, +}; +static const ecdh_test_case ecccdh_SECP256R1_20_test_case = { + .name = "ECCCDH/SECP256R1 20", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_20_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_20_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_20_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_20_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_20_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_21 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_21_test_vector_our_priv_key[] = { + 0xfe, 0xfb, 0x1d, 0xda, 0x18, 0x45, 0x31, 0x2b, 0x5f, 0xce, 0x6b, 0x81, 0xb2, 0xbe, 0x20, 0x5a, 0xf2, 0xf3, 0xa2, 0x74, 0xf5, 0xa2, 0x12, 0xf6, 0x6c, 0x0d, 0x9f, 0xc3, 0x3d, 0x7a, 0xe5, 0x35, +}; +static const u8 ecccdh_SECP256R1_21_test_vector_peer_pub_key[] = { + 0x31, 0x7e, 0x10, 0x20, 0xff, 0x53, 0xfc, 0xce, 0xf1, 0x8b, 0xf4, 0x7b, 0xb7, 0xf2, 0xdd, 0x77, 0x07, 0xfb, 0x7b, 0x7a, 0x75, 0x78, 0xe0, 0x4f, 0x35, 0xb3, 0xbe, 0xed, 0x22, 0x2a, 0x0e, 0xb6, 0x09, 0x42, 0x0c, 0xe5, 0xa1, 0x9d, 0x77, 0xc6, 0xfe, 0x1e, 0xe5, 0x87, 0xe6, 0xa4, 0x9f, 0xba, 0xf8, 0xf2, 0x80, 0xe8, 0xdf, 0x03, 0x3d, 0x75, 0x40, 0x33, 0x02, 0xe5, 0xa2, 0x7d, 0xb2, 0xae, +}; +static const u8 ecccdh_SECP256R1_21_test_vector_our_pub_key[] = { + 0x38, 0xb5, 0x4d, 0xb8, 0x55, 0x00, 0xcb, 0x20, 0xc6, 0x10, 0x56, 0xed, 0xd3, 0xd8, 0x8b, 0x6a, 0x9d, 0xc2, 0x67, 0x80, 0xa0, 0x47, 0xf2, 0x13, 0xa6, 0xe1, 0xb9, 0x00, 0xf7, 0x65, 0x96, 0xeb, 0x63, 0x87, 0xe4, 0xe5, 0x78, 0x15, 0x71, 0xe4, 0xeb, 0x8a, 0xe6, 0x29, 0x91, 0xa3, 0x3b, 0x5d, 0xc3, 0x33, 0x01, 0xc5, 0xbc, 0x7e, 0x12, 0x5d, 0x53, 0x79, 0x4a, 0x39, 0x16, 0x0d, 0x8f, 0xd0, +}; +static const u8 ecccdh_SECP256R1_21_test_vector_shared_secret[] = { + 0x30, 0xc2, 0x26, 0x1b, 0xd0, 0x00, 0x4e, 0x61, 0xfe, 0xda, 0x2c, 0x16, 0xaa, 0x5e, 0x21, 0xff, 0xa8, 0xd7, 0xe7, 0xf7, 0xdb, 0xf6, 0xec, 0x37, 0x9a, 0x43, 0xb4, 0x8e, 0x4b, 0x36, 0xae, 0xb0, +}; +static const ecdh_test_case ecccdh_SECP256R1_21_test_case = { + .name = "ECCCDH/SECP256R1 21", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_21_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_21_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_21_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_21_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_21_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_22 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_22_test_vector_our_priv_key[] = { + 0x33, 0x4a, 0xe0, 0xc4, 0x69, 0x3d, 0x23, 0x93, 0x5a, 0x7e, 0x8e, 0x04, 0x3e, 0xbb, 0xde, 0x21, 0xe1, 0x68, 0xa7, 0xcb, 0xa3, 0xfa, 0x50, 0x7c, 0x9b, 0xe4, 0x1d, 0x76, 0x81, 0xe0, 0x49, 0xce, +}; +static const u8 ecccdh_SECP256R1_22_test_vector_peer_pub_key[] = { + 0x45, 0xfb, 0x02, 0xb2, 0xce, 0xb9, 0xd7, 0xc7, 0x9d, 0x9c, 0x2f, 0xa9, 0x3e, 0x9c, 0x79, 0x67, 0xc2, 0xfa, 0x4d, 0xf5, 0x78, 0x9f, 0x96, 0x40, 0xb2, 0x42, 0x64, 0xb1, 0xe5, 0x24, 0xfc, 0xb1, 0x5c, 0x6e, 0x8e, 0xcf, 0x1f, 0x7d, 0x30, 0x23, 0x89, 0x3b, 0x7b, 0x1c, 0xa1, 0xe4, 0xd1, 0x78, 0x97, 0x2e, 0xe2, 0xa2, 0x30, 0x75, 0x7d, 0xdc, 0x56, 0x4f, 0xfe, 0x37, 0xf5, 0xc5, 0xa3, 0x21, +}; +static const u8 ecccdh_SECP256R1_22_test_vector_our_pub_key[] = { + 0x3f, 0x2b, 0xf1, 0x58, 0x9a, 0xbf, 0x30, 0x47, 0xbf, 0x3e, 0x54, 0xac, 0x9a, 0x95, 0x37, 0x9b, 0xff, 0x95, 0xf8, 0xf5, 0x54, 0x05, 0xf6, 0x4e, 0xca, 0x36, 0xa7, 0xee, 0xbe, 0x8f, 0xfc, 0xa7, 0x52, 0x12, 0xa9, 0x4e, 0x66, 0xc5, 0xae, 0x9a, 0x89, 0x91, 0x87, 0x2f, 0x66, 0xa7, 0x27, 0x23, 0xd8, 0x0e, 0xc5, 0xb2, 0xe9, 0x25, 0x74, 0x5c, 0x45, 0x6f, 0x53, 0x71, 0x94, 0x3b, 0x3a, 0x06, +}; +static const u8 ecccdh_SECP256R1_22_test_vector_shared_secret[] = { + 0x2a, 0xda, 0xe4, 0xa1, 0x38, 0xa2, 0x39, 0xdc, 0xd9, 0x3c, 0x24, 0x3a, 0x38, 0x03, 0xc3, 0xe4, 0xcf, 0x96, 0xe3, 0x7f, 0xe1, 0x4e, 0x6a, 0x9b, 0x71, 0x7b, 0xe9, 0x59, 0x99, 0x59, 0xb1, 0x1c, +}; +static const ecdh_test_case ecccdh_SECP256R1_22_test_case = { + .name = "ECCCDH/SECP256R1 22", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_22_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_22_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_22_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_22_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_22_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_23 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_23_test_vector_our_priv_key[] = { + 0x2c, 0x4b, 0xde, 0x40, 0x21, 0x4f, 0xcc, 0x3b, 0xfc, 0x47, 0xd4, 0xcf, 0x43, 0x4b, 0x62, 0x9a, 0xcb, 0xe9, 0x15, 0x7f, 0x8f, 0xd0, 0x28, 0x25, 0x40, 0x33, 0x1d, 0xe7, 0x94, 0x2c, 0xf0, 0x9d, +}; +static const u8 ecccdh_SECP256R1_23_test_vector_peer_pub_key[] = { + 0xa1, 0x9e, 0xf7, 0xbf, 0xf9, 0x8a, 0xda, 0x78, 0x18, 0x42, 0xfb, 0xfc, 0x51, 0xa4, 0x7a, 0xff, 0x39, 0xb5, 0x93, 0x5a, 0x1c, 0x7d, 0x96, 0x25, 0xc8, 0xd3, 0x23, 0xd5, 0x11, 0xc9, 0x2d, 0xe6, 0xe9, 0xc1, 0x84, 0xdf, 0x75, 0xc9, 0x55, 0xe0, 0x2e, 0x02, 0xe4, 0x00, 0xff, 0xe4, 0x5f, 0x78, 0xf3, 0x39, 0xe1, 0xaf, 0xe6, 0xd0, 0x56, 0xfb, 0x32, 0x45, 0xf4, 0x70, 0x0c, 0xe6, 0x06, 0xef, +}; +static const u8 ecccdh_SECP256R1_23_test_vector_our_pub_key[] = { + 0x29, 0xc0, 0x80, 0x7f, 0x10, 0xcb, 0xc4, 0x2f, 0xb4, 0x5c, 0x99, 0x89, 0xda, 0x50, 0x68, 0x1e, 0xea, 0xd7, 0x16, 0xda, 0xa7, 0xb9, 0xe9, 0x1f, 0xd3, 0x2e, 0x06, 0x2f, 0x5e, 0xb9, 0x2c, 0xa0, 0xff, 0x1d, 0x6d, 0x19, 0x55, 0xd7, 0x37, 0x6b, 0x2d, 0xa2, 0x4f, 0xe1, 0x16, 0x3a, 0x27, 0x16, 0x59, 0x13, 0x63, 0x41, 0xbc, 0x2e, 0xb1, 0x19, 0x5f, 0xc7, 0x06, 0xdc, 0x62, 0xe7, 0xf3, 0x4d, +}; +static const u8 ecccdh_SECP256R1_23_test_vector_shared_secret[] = { + 0x2e, 0x27, 0x7e, 0xc3, 0x0f, 0x5e, 0xa0, 0x7d, 0x6c, 0xe5, 0x13, 0x14, 0x9b, 0x94, 0x79, 0xb9, 0x6e, 0x07, 0xf4, 0xb6, 0x91, 0x3b, 0x1b, 0x5c, 0x11, 0x30, 0x5c, 0x14, 0x44, 0xa1, 0xbc, 0x0b, +}; +static const ecdh_test_case ecccdh_SECP256R1_23_test_case = { + .name = "ECCCDH/SECP256R1 23", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_23_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_23_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_23_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_23_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_23_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP256R1 +#define ECCCDH_SECP256R1_SELF_TEST_24 +/*** Tests for ECCCDH/SECP256R1 ***/ +static const u8 ecccdh_SECP256R1_24_test_vector_our_priv_key[] = { + 0x85, 0xa2, 0x68, 0xf9, 0xd7, 0x77, 0x2f, 0x99, 0x0c, 0x36, 0xb4, 0x2b, 0x0a, 0x33, 0x1a, 0xdc, 0x92, 0xb5, 0x94, 0x1d, 0xe0, 0xb8, 0x62, 0xd5, 0xd8, 0x9a, 0x34, 0x7c, 0xbf, 0x8f, 0xaa, 0xb0, +}; +static const u8 ecccdh_SECP256R1_24_test_vector_peer_pub_key[] = { + 0x35, 0x6c, 0x5a, 0x44, 0x4c, 0x04, 0x9a, 0x52, 0xfe, 0xe0, 0xad, 0xeb, 0x7e, 0x5d, 0x82, 0xae, 0x5a, 0xa8, 0x30, 0x30, 0xbf, 0xff, 0x31, 0xbb, 0xf8, 0xce, 0x20, 0x96, 0xcf, 0x16, 0x1c, 0x4b, 0x57, 0xd1, 0x28, 0xde, 0x8b, 0x2a, 0x57, 0xa0, 0x94, 0xd1, 0xa0, 0x01, 0xe5, 0x72, 0x17, 0x3f, 0x96, 0xe8, 0x86, 0x6a, 0xe3, 0x52, 0xbf, 0x29, 0xcd, 0xda, 0xf9, 0x2f, 0xc8, 0x5b, 0x2f, 0x92, +}; +static const u8 ecccdh_SECP256R1_24_test_vector_our_pub_key[] = { + 0x9c, 0xf4, 0xb9, 0x85, 0x81, 0xca, 0x17, 0x79, 0x45, 0x3c, 0xc8, 0x16, 0xff, 0x28, 0xb4, 0x10, 0x0a, 0xf5, 0x6c, 0xf1, 0xbf, 0x2e, 0x5b, 0xc3, 0x12, 0xd8, 0x3b, 0x6b, 0x1b, 0x21, 0xd3, 0x33, 0x7a, 0x55, 0x04, 0xfc, 0xac, 0x52, 0x31, 0xa0, 0xd1, 0x2d, 0x65, 0x82, 0x18, 0x28, 0x48, 0x68, 0x22, 0x9c, 0x84, 0x4a, 0x04, 0xa3, 0x45, 0x0d, 0x6c, 0x73, 0x81, 0xab, 0xe0, 0x80, 0xbf, 0x3b, +}; +static const u8 ecccdh_SECP256R1_24_test_vector_shared_secret[] = { + 0x1e, 0x51, 0x37, 0x3b, 0xd2, 0xc6, 0x04, 0x4c, 0x12, 0x9c, 0x43, 0x6e, 0x74, 0x2a, 0x55, 0xbe, 0x2a, 0x66, 0x8a, 0x85, 0xae, 0x08, 0x44, 0x1b, 0x67, 0x56, 0x44, 0x5d, 0xf5, 0x49, 0x38, 0x57, +}; +static const ecdh_test_case ecccdh_SECP256R1_24_test_case = { + .name = "ECCCDH/SECP256R1 24", + .ecdh_type = ECCCDH, + .ec_str_p = &secp256r1_str_params, + .our_priv_key = ecccdh_SECP256R1_24_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP256R1_24_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP256R1_24_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP256R1_24_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP256R1_24_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP256R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_0 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_0_test_vector_our_priv_key[] = { + 0x3c, 0xc3, 0x12, 0x2a, 0x68, 0xf0, 0xd9, 0x50, 0x27, 0xad, 0x38, 0xc0, 0x67, 0x91, 0x6b, 0xa0, 0xeb, 0x8c, 0x38, 0x89, 0x4d, 0x22, 0xe1, 0xb1, 0x56, 0x18, 0xb6, 0x81, 0x8a, 0x66, 0x17, 0x74, 0xad, 0x46, 0x3b, 0x20, 0x5d, 0xa8, 0x8c, 0xf6, 0x99, 0xab, 0x4d, 0x43, 0xc9, 0xcf, 0x98, 0xa1, +}; +static const u8 ecccdh_SECP384R1_0_test_vector_peer_pub_key[] = { + 0xa7, 0xc7, 0x6b, 0x97, 0x0c, 0x3b, 0x5f, 0xe8, 0xb0, 0x5d, 0x28, 0x38, 0xae, 0x04, 0xab, 0x47, 0x69, 0x7b, 0x9e, 0xaf, 0x52, 0xe7, 0x64, 0x59, 0x2e, 0xfd, 0xa2, 0x7f, 0xe7, 0x51, 0x32, 0x72, 0x73, 0x44, 0x66, 0xb4, 0x00, 0x09, 0x1a, 0xdb, 0xf2, 0xd6, 0x8c, 0x58, 0xe0, 0xc5, 0x00, 0x66, 0xac, 0x68, 0xf1, 0x9f, 0x2e, 0x1c, 0xb8, 0x79, 0xae, 0xd4, 0x3a, 0x99, 0x69, 0xb9, 0x1a, 0x08, 0x39, 0xc4, 0xc3, 0x8a, 0x49, 0x74, 0x9b, 0x66, 0x1e, 0xfe, 0xdf, 0x24, 0x34, 0x51, 0x91, 0x5e, 0xd0, 0x90, 0x5a, 0x32, 0xb0, 0x60, 0x99, 0x2b, 0x46, 0x8c, 0x64, 0x76, 0x6f, 0xc8, 0x43, 0x7a, +}; +static const u8 ecccdh_SECP384R1_0_test_vector_our_pub_key[] = { + 0x98, 0x03, 0x80, 0x7f, 0x2f, 0x6d, 0x2f, 0xd9, 0x66, 0xcd, 0xd0, 0x29, 0x0b, 0xd4, 0x10, 0xc0, 0x19, 0x03, 0x52, 0xfb, 0xec, 0x7f, 0xf6, 0x24, 0x7d, 0xe1, 0x30, 0x2d, 0xf8, 0x6f, 0x25, 0xd3, 0x4f, 0xe4, 0xa9, 0x7b, 0xef, 0x60, 0xcf, 0xf5, 0x48, 0x35, 0x5c, 0x01, 0x5d, 0xbb, 0x3e, 0x5f, 0xba, 0x26, 0xca, 0x69, 0xec, 0x2f, 0x5b, 0x5d, 0x9d, 0xad, 0x20, 0xcc, 0x9d, 0xa7, 0x11, 0x38, 0x3a, 0x9d, 0xbe, 0x34, 0xea, 0x3f, 0xa5, 0xa2, 0xaf, 0x75, 0xb4, 0x65, 0x02, 0x62, 0x9a, 0xd5, 0x4d, 0xd8, 0xb7, 0xd7, 0x3a, 0x8a, 0xbb, 0x06, 0xa3, 0xa3, 0xbe, 0x47, 0xd6, 0x50, 0xcc, 0x99, +}; +static const u8 ecccdh_SECP384R1_0_test_vector_shared_secret[] = { + 0x5f, 0x9d, 0x29, 0xdc, 0x5e, 0x31, 0xa1, 0x63, 0x06, 0x03, 0x56, 0x21, 0x36, 0x69, 0xc8, 0xce, 0x13, 0x2e, 0x22, 0xf5, 0x7c, 0x9a, 0x04, 0xf4, 0x0b, 0xa7, 0xfc, 0xea, 0xd4, 0x93, 0xb4, 0x57, 0xe5, 0x62, 0x1e, 0x76, 0x6c, 0x40, 0xa2, 0xe3, 0xd4, 0xd6, 0xa0, 0x4b, 0x25, 0xe5, 0x33, 0xf1, +}; +static const ecdh_test_case ecccdh_SECP384R1_0_test_case = { + .name = "ECCCDH/SECP384R1 0", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_0_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_0_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_0_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_0_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_0_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_1 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_1_test_vector_our_priv_key[] = { + 0x92, 0x86, 0x0c, 0x21, 0xbd, 0xe0, 0x61, 0x65, 0xf8, 0xe9, 0x00, 0xc6, 0x87, 0xf8, 0xef, 0x0a, 0x05, 0xd1, 0x4f, 0x29, 0x0b, 0x3f, 0x07, 0xd8, 0xb3, 0xa8, 0xcc, 0x64, 0x04, 0x36, 0x6e, 0x5d, 0x51, 0x19, 0xcd, 0x6d, 0x03, 0xfb, 0x12, 0xdc, 0x58, 0xe8, 0x9f, 0x13, 0xdf, 0x9c, 0xd7, 0x83, +}; +static const u8 ecccdh_SECP384R1_1_test_vector_peer_pub_key[] = { + 0x30, 0xf4, 0x3f, 0xcf, 0x2b, 0x6b, 0x00, 0xde, 0x53, 0xf6, 0x24, 0xf1, 0x54, 0x30, 0x90, 0x68, 0x18, 0x39, 0x71, 0x7d, 0x53, 0xc7, 0xc9, 0x55, 0xd1, 0xd6, 0x9e, 0xfa, 0xf0, 0x34, 0x9b, 0x73, 0x63, 0xac, 0xb4, 0x47, 0x24, 0x01, 0x01, 0xcb, 0xb3, 0xaf, 0x66, 0x41, 0xce, 0x4b, 0x88, 0xe0, 0x25, 0xe4, 0x6c, 0x0c, 0x54, 0xf0, 0x16, 0x2a, 0x77, 0xef, 0xcc, 0x27, 0xb6, 0xea, 0x79, 0x20, 0x02, 0xae, 0x2b, 0xa8, 0x27, 0x14, 0x29, 0x9c, 0x86, 0x08, 0x57, 0xa6, 0x81, 0x53, 0xab, 0x62, 0xe5, 0x25, 0xec, 0x05, 0x30, 0xd8, 0x1b, 0x5a, 0xa1, 0x58, 0x97, 0x98, 0x1e, 0x85, 0x87, 0x57, +}; +static const u8 ecccdh_SECP384R1_1_test_vector_our_pub_key[] = { + 0xea, 0x40, 0x18, 0xf5, 0xa3, 0x07, 0xc3, 0x79, 0x18, 0x0b, 0xf6, 0xa6, 0x2f, 0xd2, 0xce, 0xce, 0xeb, 0xee, 0xb7, 0xd4, 0xdf, 0x06, 0x3a, 0x66, 0xfb, 0x83, 0x8a, 0xa3, 0x52, 0x43, 0x41, 0x97, 0x91, 0xf7, 0xe2, 0xc9, 0xd4, 0x80, 0x3c, 0x93, 0x19, 0xaa, 0x0e, 0xb0, 0x3c, 0x41, 0x6b, 0x66, 0x68, 0x83, 0x5a, 0x91, 0x48, 0x4f, 0x05, 0xef, 0x02, 0x82, 0x84, 0xdf, 0x64, 0x36, 0xfb, 0x88, 0xff, 0xeb, 0xab, 0xcd, 0xd6, 0x9a, 0xb0, 0x13, 0x3e, 0x67, 0x35, 0xa1, 0xbc, 0xfb, 0x37, 0x20, 0x3d, 0x10, 0xd3, 0x40, 0xa8, 0x32, 0x8a, 0x7b, 0x68, 0x77, 0x0c, 0xa7, 0x58, 0x78, 0xa1, 0xa6, +}; +static const u8 ecccdh_SECP384R1_1_test_vector_shared_secret[] = { + 0xa2, 0x37, 0x42, 0xa2, 0xc2, 0x67, 0xd7, 0x42, 0x5f, 0xda, 0x94, 0xb9, 0x3f, 0x93, 0xbb, 0xcc, 0x24, 0x79, 0x1a, 0xc5, 0x1c, 0xd8, 0xfd, 0x50, 0x1a, 0x23, 0x8d, 0x40, 0x81, 0x2f, 0x4c, 0xbf, 0xc5, 0x9a, 0xac, 0x95, 0x20, 0xd7, 0x58, 0xcf, 0x78, 0x9c, 0x76, 0x30, 0x0c, 0x69, 0xd2, 0xff, +}; +static const ecdh_test_case ecccdh_SECP384R1_1_test_case = { + .name = "ECCCDH/SECP384R1 1", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_1_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_1_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_1_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_1_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_1_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_2 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_2_test_vector_our_priv_key[] = { + 0x12, 0xcf, 0x6a, 0x22, 0x3a, 0x72, 0x35, 0x25, 0x43, 0x83, 0x0f, 0x3f, 0x18, 0x53, 0x0d, 0x5c, 0xb3, 0x7f, 0x26, 0x88, 0x0a, 0x0b, 0x29, 0x44, 0x82, 0xc8, 0xa8, 0xef, 0x8a, 0xfa, 0xd0, 0x9a, 0xa7, 0x8b, 0x7d, 0xc2, 0xf2, 0x78, 0x9a, 0x78, 0xc6, 0x6a, 0xf5, 0xd1, 0xcc, 0x55, 0x38, 0x53, +}; +static const u8 ecccdh_SECP384R1_2_test_vector_peer_pub_key[] = { + 0x1a, 0xef, 0xbf, 0xa2, 0xc6, 0xc8, 0xc8, 0x55, 0xa1, 0xa2, 0x16, 0x77, 0x45, 0x50, 0xb7, 0x9a, 0x24, 0xcd, 0xa3, 0x76, 0x07, 0xbb, 0x1f, 0x7c, 0xc9, 0x06, 0x65, 0x0e, 0xe4, 0xb3, 0x81, 0x6d, 0x68, 0xf6, 0xa9, 0xc7, 0x5d, 0xa6, 0xe4, 0x24, 0x2c, 0xeb, 0xfb, 0x66, 0x52, 0xf6, 0x51, 0x80, 0x41, 0x9d, 0x28, 0xb7, 0x23, 0xeb, 0xad, 0xb7, 0x65, 0x8f, 0xce, 0xbb, 0x9a, 0xd9, 0xb7, 0xad, 0xea, 0x67, 0x4f, 0x1d, 0xa3, 0xdc, 0x6b, 0x63, 0x97, 0xb5, 0x5d, 0xa0, 0xf6, 0x1a, 0x3e, 0xdd, 0xac, 0xb4, 0xac, 0xdb, 0x14, 0x44, 0x1c, 0xb2, 0x14, 0xb0, 0x4a, 0x08, 0x44, 0xc0, 0x2f, 0xa3, +}; +static const u8 ecccdh_SECP384R1_2_test_vector_our_pub_key[] = { + 0xfc, 0xfc, 0xea, 0x08, 0x5e, 0x8c, 0xf7, 0x4d, 0x0d, 0xce, 0xd1, 0x62, 0x0b, 0xa8, 0x42, 0x36, 0x94, 0xf9, 0x03, 0xa2, 0x19, 0xbb, 0xf9, 0x01, 0xb0, 0xb5, 0x9d, 0x6a, 0xc8, 0x1b, 0xaa, 0xd3, 0x16, 0xa2, 0x42, 0xba, 0x32, 0xbd, 0xe8, 0x5c, 0xb2, 0x48, 0x11, 0x9b, 0x85, 0x2f, 0xab, 0x66, 0x97, 0x2e, 0x3c, 0x68, 0xc7, 0xab, 0x40, 0x2c, 0x58, 0x36, 0xf2, 0xa1, 0x6e, 0xd4, 0x51, 0xa3, 0x31, 0x20, 0xa7, 0x75, 0x0a, 0x60, 0x39, 0xf3, 0xff, 0x15, 0x38, 0x8e, 0xe6, 0x22, 0xb7, 0x06, 0x5f, 0x71, 0x22, 0xbf, 0x6d, 0x51, 0xae, 0xfb, 0xc2, 0x9b, 0x37, 0xb0, 0x34, 0x04, 0x58, 0x1b, +}; +static const u8 ecccdh_SECP384R1_2_test_vector_shared_secret[] = { + 0x3d, 0x2e, 0x64, 0x0f, 0x35, 0x08, 0x05, 0xee, 0xd1, 0xff, 0x43, 0xb4, 0x0a, 0x72, 0xb2, 0xab, 0xed, 0x0a, 0x51, 0x8b, 0xce, 0xbe, 0x8f, 0x2d, 0x15, 0xb1, 0x11, 0xb6, 0x77, 0x32, 0x23, 0xda, 0x3c, 0x34, 0x89, 0x12, 0x1d, 0xb1, 0x73, 0xd4, 0x14, 0xb5, 0xbd, 0x5a, 0xd7, 0x15, 0x34, 0x35, +}; +static const ecdh_test_case ecccdh_SECP384R1_2_test_case = { + .name = "ECCCDH/SECP384R1 2", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_2_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_2_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_2_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_2_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_2_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_3 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_3_test_vector_our_priv_key[] = { + 0x8d, 0xd4, 0x80, 0x63, 0xa3, 0xa0, 0x58, 0xc3, 0x34, 0xb5, 0xcc, 0x7a, 0x4c, 0xe0, 0x7d, 0x02, 0xe5, 0xee, 0x6d, 0x8f, 0x1f, 0x3c, 0x51, 0xa1, 0x60, 0x09, 0x62, 0xcb, 0xab, 0x46, 0x26, 0x90, 0xae, 0x3c, 0xd9, 0x74, 0xfb, 0x39, 0xe4, 0x0b, 0x0e, 0x84, 0x3d, 0xaa, 0x0f, 0xd3, 0x2d, 0xe1, +}; +static const u8 ecccdh_SECP384R1_3_test_vector_peer_pub_key[] = { + 0x8b, 0xc0, 0x89, 0x32, 0x6e, 0xc5, 0x5b, 0x9c, 0xf5, 0x9b, 0x34, 0xf0, 0xeb, 0x75, 0x4d, 0x93, 0x59, 0x6c, 0xa2, 0x90, 0xfc, 0xb3, 0x44, 0x4c, 0x83, 0xd4, 0xde, 0x3a, 0x56, 0x07, 0x03, 0x7e, 0xc3, 0x97, 0x68, 0x3f, 0x8c, 0xef, 0x07, 0xea, 0xb2, 0xfe, 0x35, 0x7e, 0xae, 0x36, 0xc4, 0x49, 0xd9, 0xd1, 0x6c, 0xe8, 0xac, 0x85, 0xb3, 0xf1, 0xe9, 0x45, 0x68, 0x52, 0x1a, 0xae, 0x53, 0x4e, 0x67, 0x13, 0x9e, 0x31, 0x0e, 0xc7, 0x26, 0x93, 0x52, 0x6a, 0xa2, 0xe9, 0x27, 0xb5, 0xb3, 0x22, 0xc9, 0x5a, 0x1a, 0x03, 0x3c, 0x22, 0x9c, 0xb6, 0x77, 0x0c, 0x95, 0x7c, 0xd3, 0x14, 0x8d, 0xd7, +}; +static const u8 ecccdh_SECP384R1_3_test_vector_our_pub_key[] = { + 0xe3, 0x8c, 0x98, 0x46, 0x24, 0x81, 0x23, 0xc3, 0x42, 0x18, 0x61, 0xea, 0x4d, 0x32, 0x66, 0x9a, 0x7b, 0x5c, 0x3c, 0x08, 0x37, 0x6a, 0xd2, 0x81, 0x04, 0x39, 0x94, 0x94, 0xc8, 0x4f, 0xf5, 0xef, 0xa3, 0x89, 0x4a, 0xdb, 0x2c, 0x6c, 0xbe, 0x8c, 0x3c, 0x91, 0x3e, 0xf2, 0xee, 0xc5, 0xbd, 0x3c, 0x9f, 0xa8, 0x40, 0x24, 0xa1, 0x02, 0x87, 0x96, 0xdf, 0x84, 0x02, 0x1f, 0x7b, 0x6c, 0x9d, 0x02, 0xf0, 0xf4, 0xbd, 0x1a, 0x61, 0x2a, 0x03, 0xcb, 0xf7, 0x5a, 0x0b, 0xee, 0xa4, 0x3f, 0xef, 0x8a, 0xe8, 0x4b, 0x48, 0xc6, 0x01, 0x72, 0xaa, 0xdf, 0x09, 0xc1, 0xad, 0x01, 0x6d, 0x0b, 0xf3, 0xce, +}; +static const u8 ecccdh_SECP384R1_3_test_vector_shared_secret[] = { + 0x6a, 0x42, 0xcf, 0xc3, 0x92, 0xab, 0xa0, 0xbf, 0xd3, 0xd1, 0x7b, 0x7c, 0xcf, 0x06, 0x2b, 0x91, 0xfc, 0x09, 0xbb, 0xf3, 0x41, 0x76, 0x12, 0xd0, 0x2a, 0x90, 0xbd, 0xde, 0x62, 0xae, 0x40, 0xc5, 0x4b, 0xb2, 0xe5, 0x6e, 0x16, 0x7d, 0x6b, 0x70, 0xdb, 0x67, 0x00, 0x97, 0xeb, 0x8d, 0xb8, 0x54, +}; +static const ecdh_test_case ecccdh_SECP384R1_3_test_case = { + .name = "ECCCDH/SECP384R1 3", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_3_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_3_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_3_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_3_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_3_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_4 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_4_test_vector_our_priv_key[] = { + 0x84, 0xec, 0xe6, 0xcc, 0x34, 0x29, 0x30, 0x9b, 0xd5, 0xb2, 0x3e, 0x95, 0x97, 0x93, 0xed, 0x2b, 0x11, 0x1e, 0xc5, 0xcb, 0x43, 0xb6, 0xc1, 0x80, 0x85, 0xfc, 0xae, 0xa9, 0xef, 0xa0, 0x68, 0x5d, 0x98, 0xa6, 0x26, 0x2e, 0xe0, 0xd3, 0x30, 0xee, 0x25, 0x0b, 0xc8, 0xa6, 0x7d, 0x0e, 0x73, 0x3f, +}; +static const u8 ecccdh_SECP384R1_4_test_vector_peer_pub_key[] = { + 0xeb, 0x95, 0x2e, 0x2d, 0x9a, 0xc0, 0xc2, 0x0c, 0x6c, 0xc4, 0x8f, 0xb2, 0x25, 0xc2, 0xad, 0x15, 0x4f, 0x53, 0xc8, 0x75, 0x0b, 0x00, 0x3f, 0xd3, 0xb4, 0xed, 0x8e, 0xd1, 0xdc, 0x0d, 0xef, 0xac, 0x61, 0xbc, 0xdd, 0xe0, 0x2a, 0x2b, 0xcf, 0xee, 0x70, 0x67, 0xd7, 0x5d, 0x34, 0x2e, 0xd2, 0xb0, 0xf1, 0x82, 0x82, 0x05, 0xba, 0xec, 0xe8, 0x2d, 0x1b, 0x26, 0x7d, 0x0d, 0x7f, 0xf2, 0xf9, 0xc9, 0xe1, 0x5b, 0x69, 0xa7, 0x2d, 0xf4, 0x70, 0x58, 0xa9, 0x7f, 0x38, 0x91, 0x00, 0x5d, 0x1f, 0xb3, 0x88, 0x58, 0xf5, 0x60, 0x3d, 0xe8, 0x40, 0xe5, 0x91, 0xdf, 0xa4, 0xf6, 0xe7, 0xd4, 0x89, 0xe1, +}; +static const u8 ecccdh_SECP384R1_4_test_vector_our_pub_key[] = { + 0x32, 0x22, 0x06, 0x3a, 0x29, 0x97, 0xb3, 0x02, 0xee, 0x60, 0xee, 0x19, 0x61, 0x10, 0x8f, 0xf4, 0xc7, 0xac, 0xf1, 0xc0, 0xef, 0x1d, 0x5f, 0xb0, 0xd1, 0x64, 0xb8, 0x4b, 0xce, 0x71, 0xc4, 0x31, 0x70, 0x5c, 0xb9, 0xae, 0xa9, 0xa4, 0x5f, 0x5d, 0x73, 0x80, 0x66, 0x55, 0xa0, 0x58, 0xbe, 0xe3, 0xe6, 0x1f, 0xa9, 0xe7, 0xfb, 0xe7, 0xcd, 0x43, 0xab, 0xf9, 0x95, 0x96, 0xa3, 0xd3, 0xa0, 0x39, 0xe9, 0x9f, 0xa9, 0xdc, 0x93, 0xb0, 0xbd, 0xd9, 0xca, 0xd8, 0x19, 0x66, 0xd1, 0x7e, 0xea, 0xf5, 0x57, 0x06, 0x8a, 0xfa, 0x7c, 0x78, 0x46, 0x6b, 0xb5, 0xb2, 0x20, 0x32, 0xd1, 0x10, 0x0f, 0xa6, +}; +static const u8 ecccdh_SECP384R1_4_test_vector_shared_secret[] = { + 0xce, 0x7b, 0xa4, 0x54, 0xd4, 0x41, 0x27, 0x29, 0xa3, 0x2b, 0xb8, 0x33, 0xa2, 0xd1, 0xfd, 0x2a, 0xe6, 0x12, 0xd4, 0x66, 0x7c, 0x3a, 0x90, 0x0e, 0x06, 0x92, 0x14, 0x81, 0x86, 0x13, 0x44, 0x7d, 0xf8, 0xc6, 0x11, 0xde, 0x66, 0xda, 0x20, 0x0d, 0xb7, 0xc3, 0x75, 0xcf, 0x91, 0x3e, 0x44, 0x05, +}; +static const ecdh_test_case ecccdh_SECP384R1_4_test_case = { + .name = "ECCCDH/SECP384R1 4", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_4_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_4_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_4_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_4_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_4_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_5 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_5_test_vector_our_priv_key[] = { + 0x68, 0xfc, 0xe2, 0x12, 0x1d, 0xc3, 0xa1, 0xe3, 0x7b, 0x10, 0xf1, 0xdd, 0xe3, 0x09, 0xf9, 0xe2, 0xe1, 0x8f, 0xac, 0x47, 0xcd, 0x17, 0x70, 0x95, 0x14, 0x51, 0xc3, 0x48, 0x4c, 0xdb, 0x77, 0xcb, 0x13, 0x6d, 0x00, 0xe7, 0x31, 0x26, 0x05, 0x97, 0xcc, 0x28, 0x59, 0x60, 0x1c, 0x01, 0xa2, 0x5b, +}; +static const u8 ecccdh_SECP384R1_5_test_vector_peer_pub_key[] = { + 0x44, 0x1d, 0x02, 0x9e, 0x24, 0x4e, 0xb7, 0x16, 0x8d, 0x64, 0x7d, 0x4d, 0xf5, 0x0d, 0xb5, 0xf4, 0xe4, 0x97, 0x4a, 0xb3, 0xfd, 0xaf, 0x02, 0x2a, 0xff, 0x05, 0x8b, 0x36, 0x95, 0xd0, 0xb8, 0xc8, 0x14, 0xcc, 0x88, 0xda, 0x62, 0x85, 0xdc, 0x6d, 0xf1, 0xac, 0x55, 0xc5, 0x53, 0x88, 0x50, 0x03, 0xe8, 0x02, 0x5a, 0xc2, 0x3a, 0x41, 0xd4, 0xb1, 0xea, 0x2a, 0xa4, 0x6c, 0x50, 0xc6, 0xe4, 0x79, 0x94, 0x6b, 0x59, 0xb6, 0xd7, 0x64, 0x97, 0xcd, 0x92, 0x49, 0x97, 0x7e, 0x0b, 0xfe, 0x4a, 0x62, 0x62, 0x62, 0x2f, 0x13, 0xd4, 0x2a, 0x3c, 0x43, 0xd6, 0x6b, 0xdb, 0xb3, 0x04, 0x03, 0xc3, 0x45, +}; +static const u8 ecccdh_SECP384R1_5_test_vector_our_pub_key[] = { + 0x86, 0x8b, 0xe0, 0xe6, 0x94, 0x84, 0x18, 0x30, 0xe4, 0x24, 0xd9, 0x13, 0xd8, 0xe7, 0xd8, 0x6b, 0x84, 0xee, 0x10, 0x21, 0xd8, 0x2b, 0x0e, 0xcf, 0x52, 0x3f, 0x09, 0xfe, 0x89, 0xa7, 0x6c, 0x0c, 0x95, 0xc4, 0x9f, 0x2d, 0xfb, 0xcf, 0x82, 0x9c, 0x1e, 0x39, 0x70, 0x9d, 0x55, 0xef, 0xbb, 0x3b, 0x91, 0x95, 0xeb, 0x18, 0x36, 0x75, 0xb4, 0x0f, 0xd9, 0x2f, 0x51, 0xf3, 0x77, 0x13, 0x31, 0x7e, 0x4a, 0x9b, 0x4f, 0x71, 0x5c, 0x8a, 0xb2, 0x2e, 0x07, 0x73, 0xb1, 0xbc, 0x71, 0xd3, 0xa2, 0x19, 0xf0, 0x5b, 0x81, 0x16, 0x07, 0x46, 0x58, 0xee, 0x86, 0xb5, 0x2e, 0x36, 0xf3, 0x89, 0x71, 0x16, +}; +static const u8 ecccdh_SECP384R1_5_test_vector_shared_secret[] = { + 0xba, 0x69, 0xf0, 0xac, 0xdf, 0x3e, 0x1c, 0xa9, 0x5c, 0xaa, 0xac, 0x4e, 0xca, 0xf4, 0x75, 0xbb, 0xe5, 0x1b, 0x54, 0x77, 0x7e, 0xfc, 0xe0, 0x1c, 0xa3, 0x81, 0xf4, 0x53, 0x70, 0xe4, 0x86, 0xfe, 0x87, 0xf9, 0xf4, 0x19, 0xb1, 0x50, 0xc6, 0x1e, 0x32, 0x9a, 0x28, 0x6d, 0x1a, 0xa2, 0x65, 0xec, +}; +static const ecdh_test_case ecccdh_SECP384R1_5_test_case = { + .name = "ECCCDH/SECP384R1 5", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_5_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_5_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_5_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_5_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_5_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_6 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_6_test_vector_our_priv_key[] = { + 0xb1, 0x76, 0x4c, 0x54, 0x89, 0x7e, 0x7a, 0xae, 0x6d, 0xe9, 0xe7, 0x75, 0x1f, 0x2f, 0x37, 0xde, 0x84, 0x92, 0x91, 0xf8, 0x8f, 0x0f, 0x91, 0x09, 0x31, 0x55, 0xb8, 0x58, 0xd1, 0xcc, 0x32, 0xa3, 0xa8, 0x79, 0x80, 0xf7, 0x06, 0xb8, 0x6c, 0xc8, 0x3f, 0x92, 0x7b, 0xdf, 0xdb, 0xea, 0xe0, 0xbd, +}; +static const u8 ecccdh_SECP384R1_6_test_vector_peer_pub_key[] = { + 0x3d, 0x4e, 0x6b, 0xf0, 0x8a, 0x73, 0x40, 0x4a, 0xcc, 0xc1, 0x62, 0x98, 0x73, 0x46, 0x8e, 0x42, 0x69, 0xe8, 0x2d, 0x90, 0xd8, 0x32, 0xe5, 0x8a, 0xd7, 0x21, 0x42, 0x63, 0x9b, 0x5a, 0x05, 0x6a, 0xd8, 0xd3, 0x5c, 0x66, 0xc6, 0x0e, 0x81, 0x49, 0xfa, 0xc0, 0xc7, 0x97, 0xbc, 0xeb, 0x7c, 0x2f, 0x9b, 0x03, 0x08, 0xdc, 0x7f, 0x0e, 0x6d, 0x29, 0xf8, 0xc2, 0x77, 0xac, 0xbc, 0x65, 0xa2, 0x1e, 0x5a, 0xdb, 0x83, 0xd1, 0x1e, 0x68, 0x73, 0xbc, 0x0a, 0x07, 0xfd, 0xa0, 0x99, 0x7f, 0x48, 0x25, 0x04, 0x60, 0x2f, 0x59, 0xe1, 0x0b, 0xc5, 0xcb, 0x47, 0x6b, 0x83, 0xd0, 0xa4, 0xf7, 0x5e, 0x71, +}; +static const u8 ecccdh_SECP384R1_6_test_vector_our_pub_key[] = { + 0xc3, 0x71, 0x22, 0x2f, 0xea, 0xa6, 0x77, 0x0c, 0x6f, 0x3e, 0xa3, 0xe0, 0xda, 0xc9, 0x74, 0x0d, 0xef, 0x4f, 0xcf, 0x82, 0x13, 0x78, 0xb7, 0xf9, 0x1f, 0xf9, 0x37, 0xc2, 0x1e, 0x04, 0x70, 0xf7, 0x0f, 0x3a, 0x31, 0xd5, 0xc6, 0xb2, 0x91, 0x21, 0x95, 0xf1, 0x09, 0x26, 0x94, 0x2b, 0x48, 0xae, 0x04, 0x7d, 0x6b, 0x4d, 0x76, 0x51, 0x23, 0x56, 0x3f, 0x81, 0x11, 0x6b, 0xc6, 0x65, 0xb7, 0xb8, 0xcc, 0x62, 0x07, 0x83, 0x0d, 0x80, 0x5f, 0xd8, 0x4d, 0xa7, 0xcb, 0x80, 0x5a, 0x65, 0xba, 0xa7, 0xc1, 0x2f, 0xd5, 0x92, 0xd1, 0xb5, 0xb5, 0xe3, 0xe6, 0x5d, 0x96, 0x72, 0xa9, 0xef, 0x76, 0x62, +}; +static const u8 ecccdh_SECP384R1_6_test_vector_shared_secret[] = { + 0x1a, 0x66, 0x88, 0xee, 0x1d, 0x6e, 0x59, 0x86, 0x5d, 0x8e, 0x3a, 0xda, 0x37, 0x78, 0x1d, 0x36, 0xbb, 0x0c, 0x27, 0x17, 0xee, 0xf9, 0x2e, 0x61, 0x96, 0x4d, 0x39, 0x27, 0xcb, 0x76, 0x5c, 0x29, 0x65, 0xea, 0x80, 0xf7, 0xf6, 0x3e, 0x58, 0xc3, 0x22, 0xba, 0x03, 0x97, 0xfa, 0xea, 0xf6, 0x2b, +}; +static const ecdh_test_case ecccdh_SECP384R1_6_test_case = { + .name = "ECCCDH/SECP384R1 6", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_6_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_6_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_6_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_6_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_6_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_7 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_7_test_vector_our_priv_key[] = { + 0xf0, 0xf7, 0xa9, 0x6e, 0x70, 0xd9, 0x8f, 0xd5, 0xa3, 0x0a, 0xd6, 0x40, 0x6c, 0xf5, 0x6e, 0xb5, 0xb7, 0x2a, 0x51, 0x0e, 0x9f, 0x19, 0x2f, 0x50, 0xe1, 0xf8, 0x45, 0x24, 0xdb, 0xf3, 0xd2, 0x43, 0x9f, 0x72, 0x87, 0xbb, 0x36, 0xf5, 0xaa, 0x91, 0x2a, 0x79, 0xde, 0xaa, 0xb4, 0xad, 0xea, 0x82, +}; +static const u8 ecccdh_SECP384R1_7_test_vector_peer_pub_key[] = { + 0xf5, 0xf6, 0xbe, 0xf1, 0xd1, 0x10, 0xda, 0x03, 0xbe, 0x00, 0x17, 0xea, 0xc7, 0x60, 0xcc, 0x34, 0xb2, 0x4d, 0x09, 0x2f, 0x73, 0x6f, 0x23, 0x7b, 0xc7, 0x05, 0x4b, 0x38, 0x65, 0x31, 0x2a, 0x81, 0x3b, 0xcb, 0x62, 0xd2, 0x97, 0xfb, 0x10, 0xa4, 0xf7, 0xab, 0xf5, 0x47, 0x08, 0xfe, 0x2d, 0x3d, 0x06, 0xfd, 0xf8, 0xd7, 0xdc, 0x03, 0x2f, 0x4e, 0x10, 0x01, 0x0b, 0xf1, 0x9c, 0xbf, 0x61, 0x59, 0x32, 0x12, 0x52, 0xff, 0x41, 0x5f, 0xb9, 0x19, 0x20, 0xd4, 0x38, 0xf2, 0x4e, 0x67, 0xe6, 0x0c, 0x2e, 0xb0, 0x46, 0x32, 0x04, 0x67, 0x9f, 0xa3, 0x56, 0xaf, 0x44, 0xce, 0xa9, 0xc9, 0xeb, 0xf5, +}; +static const u8 ecccdh_SECP384R1_7_test_vector_our_pub_key[] = { + 0x99, 0xc8, 0xc4, 0x1c, 0xb1, 0xab, 0x5e, 0x08, 0x54, 0xa3, 0x46, 0xe4, 0xb0, 0x8a, 0x53, 0x7c, 0x17, 0x06, 0xa6, 0x15, 0x53, 0x38, 0x7c, 0x8d, 0x94, 0x94, 0x3a, 0xb1, 0x51, 0x96, 0xd4, 0x0d, 0xba, 0xa5, 0x5b, 0x82, 0x10, 0xa7, 0x7a, 0x5d, 0x00, 0x91, 0x5f, 0x2c, 0x4e, 0xa6, 0x9e, 0xab, 0x55, 0x31, 0x06, 0x5b, 0xdc, 0xf1, 0x7b, 0xfb, 0x3c, 0xb5, 0x5a, 0x02, 0xe4, 0x1a, 0x57, 0xc7, 0xf6, 0x94, 0xc3, 0x83, 0xad, 0x28, 0x9f, 0x90, 0x0f, 0xbd, 0x65, 0x6c, 0x22, 0x33, 0xa9, 0x3c, 0x92, 0xe9, 0x33, 0xe7, 0xa2, 0x6f, 0x54, 0xcb, 0xb5, 0x6f, 0x0a, 0xd8, 0x75, 0xc5, 0x1b, 0xb0, +}; +static const u8 ecccdh_SECP384R1_7_test_vector_shared_secret[] = { + 0xd0, 0x6a, 0x56, 0x8b, 0xf2, 0x33, 0x6b, 0x90, 0xcb, 0xac, 0x32, 0x51, 0x61, 0xbe, 0x76, 0x95, 0xea, 0xcb, 0x22, 0x95, 0xf5, 0x99, 0x50, 0x0d, 0x78, 0x7f, 0x07, 0x26, 0x12, 0xac, 0xa3, 0x13, 0xee, 0x5d, 0x87, 0x4f, 0x80, 0x7d, 0xde, 0xf6, 0xc1, 0xf0, 0x23, 0xfe, 0x2b, 0x6e, 0x7c, 0xd0, +}; +static const ecdh_test_case ecccdh_SECP384R1_7_test_case = { + .name = "ECCCDH/SECP384R1 7", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_7_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_7_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_7_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_7_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_7_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_8 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_8_test_vector_our_priv_key[] = { + 0x9e, 0xfb, 0x87, 0xdd, 0xc6, 0x1d, 0x43, 0xc4, 0x82, 0xba, 0x66, 0xe1, 0xb1, 0x43, 0xae, 0xf6, 0x78, 0xfb, 0xd0, 0xd1, 0xbe, 0xbc, 0x20, 0x00, 0x94, 0x1f, 0xab, 0xe6, 0x77, 0xfe, 0x5b, 0x70, 0x6b, 0xf7, 0x8f, 0xce, 0x36, 0xd1, 0x00, 0xb1, 0x7c, 0xc7, 0x87, 0xea, 0xd7, 0x4b, 0xbc, 0xa2, +}; +static const u8 ecccdh_SECP384R1_8_test_vector_peer_pub_key[] = { + 0x7c, 0xde, 0xc7, 0x7e, 0x07, 0x37, 0xea, 0x37, 0xc6, 0x7b, 0x89, 0xb7, 0x13, 0x7f, 0xe3, 0x88, 0x18, 0x01, 0x0f, 0x44, 0x64, 0x43, 0x8e, 0xe4, 0xd1, 0xd3, 0x5a, 0x0c, 0x48, 0x8c, 0xad, 0x3f, 0xde, 0x2f, 0x37, 0xd0, 0x08, 0x85, 0xd3, 0x6d, 0x3b, 0x79, 0x5b, 0x9f, 0x93, 0xd2, 0x3a, 0x67, 0x28, 0xc4, 0x2e, 0xe8, 0xd6, 0x02, 0x7c, 0x56, 0xcf, 0x97, 0x9b, 0xa4, 0xc2, 0x29, 0xfd, 0xb0, 0x1d, 0x23, 0x49, 0x44, 0xf8, 0xac, 0x43, 0x36, 0x50, 0x11, 0x2c, 0x3c, 0xf0, 0xf0, 0x28, 0x44, 0xe8, 0x88, 0xa3, 0x56, 0x9d, 0xfe, 0xf7, 0x82, 0x8a, 0x8a, 0x88, 0x45, 0x89, 0xaa, 0x05, 0x5e, +}; +static const u8 ecccdh_SECP384R1_8_test_vector_our_pub_key[] = { + 0x4c, 0x34, 0xef, 0xee, 0x8f, 0x0c, 0x95, 0x56, 0x5d, 0x20, 0x65, 0xd1, 0xbb, 0xac, 0x2a, 0x2d, 0xd2, 0x5a, 0xe9, 0x64, 0x32, 0x0e, 0xb6, 0xbc, 0xce, 0xdc, 0x5f, 0x3a, 0x9b, 0x42, 0xa8, 0x81, 0xa1, 0xaf, 0xca, 0x1b, 0xb6, 0xb8, 0x80, 0x58, 0x4f, 0xa2, 0x7b, 0x01, 0xc1, 0x93, 0xcd, 0x92, 0xd8, 0xfb, 0x01, 0xdb, 0xf7, 0xcd, 0x0a, 0x38, 0x68, 0xc2, 0x6b, 0x95, 0x1f, 0x39, 0x3c, 0x3c, 0x56, 0xc2, 0x85, 0x8c, 0xee, 0x90, 0x1f, 0x77, 0x93, 0xff, 0x5d, 0x27, 0x19, 0x25, 0xd1, 0x3a, 0x41, 0xf8, 0xe5, 0x24, 0x09, 0xf4, 0xeb, 0xa1, 0x99, 0x0f, 0x33, 0xac, 0xb0, 0xba, 0xc6, 0x69, +}; +static const u8 ecccdh_SECP384R1_8_test_vector_shared_secret[] = { + 0xbb, 0x3b, 0x1e, 0xda, 0x9c, 0x65, 0x60, 0xd8, 0x2f, 0xf5, 0xbe, 0xe4, 0x03, 0x33, 0x9f, 0x1e, 0x80, 0x34, 0x23, 0x38, 0xa9, 0x91, 0x34, 0x48, 0x53, 0xb5, 0x6b, 0x24, 0xf1, 0x09, 0xa4, 0xd9, 0x4b, 0x92, 0xf6, 0x54, 0xf0, 0x42, 0x5e, 0xdd, 0x4c, 0x20, 0x59, 0x03, 0xd7, 0x58, 0x61, 0x04, +}; +static const ecdh_test_case ecccdh_SECP384R1_8_test_case = { + .name = "ECCCDH/SECP384R1 8", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_8_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_8_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_8_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_8_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_8_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_9 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_9_test_vector_our_priv_key[] = { + 0xd7, 0x87, 0xa5, 0x7f, 0xde, 0x22, 0xec, 0x65, 0x6a, 0x0a, 0x52, 0x5c, 0xf3, 0xc7, 0x38, 0xb3, 0x0d, 0x73, 0xaf, 0x61, 0xe7, 0x43, 0xea, 0x90, 0x89, 0x3e, 0xcb, 0x2d, 0x7b, 0x62, 0x2a, 0xdd, 0x2f, 0x94, 0xee, 0x25, 0xc2, 0x17, 0x14, 0x67, 0xaf, 0xb0, 0x93, 0xf3, 0xf8, 0x4d, 0x00, 0x18, +}; +static const u8 ecccdh_SECP384R1_9_test_vector_peer_pub_key[] = { + 0x8e, 0xee, 0xa3, 0xa3, 0x19, 0xc8, 0xdf, 0x99, 0xfb, 0xc2, 0x9c, 0xb5, 0x5f, 0x24, 0x3a, 0x72, 0x0d, 0x95, 0x50, 0x95, 0x15, 0xee, 0x5c, 0xc5, 0x87, 0xa5, 0xc5, 0xae, 0x22, 0xfb, 0xbd, 0x00, 0x9e, 0x62, 0x6d, 0xb3, 0xe9, 0x11, 0xde, 0xf0, 0xb9, 0x9a, 0x4f, 0x7a, 0xe3, 0x04, 0xb1, 0xba, 0x73, 0x87, 0x7d, 0xc9, 0x4d, 0xb9, 0xad, 0xdd, 0xc0, 0xd9, 0xa4, 0xb2, 0x4e, 0x89, 0x76, 0xc2, 0x2d, 0x73, 0xc8, 0x44, 0x37, 0x0e, 0x1e, 0xe8, 0x57, 0xf8, 0xd1, 0xb1, 0x29, 0xa3, 0xbd, 0x5f, 0x63, 0xf4, 0x0c, 0xaf, 0x3b, 0xd0, 0x53, 0x3e, 0x38, 0xa5, 0xf5, 0x77, 0x70, 0x74, 0xff, 0x9e, +}; +static const u8 ecccdh_SECP384R1_9_test_vector_our_pub_key[] = { + 0x17, 0x15, 0x46, 0x92, 0x3b, 0x87, 0xb2, 0xcb, 0xba, 0xd6, 0x64, 0xf0, 0x1c, 0xe9, 0x32, 0xbf, 0x09, 0xd6, 0xa6, 0x11, 0x81, 0x68, 0x67, 0x84, 0x46, 0xbf, 0xa9, 0xf0, 0x93, 0x86, 0x08, 0xcb, 0x46, 0x67, 0xa9, 0x8f, 0x4e, 0xc8, 0xac, 0x14, 0x62, 0x28, 0x5c, 0x25, 0x08, 0xf7, 0x48, 0x62, 0xfa, 0x41, 0xcb, 0x4d, 0xb6, 0x8a, 0xe7, 0x1f, 0x1f, 0x8a, 0x3e, 0x89, 0x39, 0xdc, 0x52, 0xc2, 0xde, 0xc6, 0x1a, 0x83, 0xc9, 0x83, 0xbe, 0xb2, 0xa0, 0x2b, 0xaf, 0x29, 0xec, 0x49, 0x27, 0x80, 0x88, 0x88, 0x2e, 0xd0, 0xcf, 0x56, 0xc7, 0x4b, 0x5c, 0x17, 0x3b, 0x55, 0x2c, 0xcf, 0x63, 0xcf, +}; +static const u8 ecccdh_SECP384R1_9_test_vector_shared_secret[] = { + 0x1e, 0x97, 0xb6, 0x0a, 0xdd, 0x7c, 0xb3, 0x5c, 0x74, 0x03, 0xdd, 0x88, 0x4c, 0x0a, 0x75, 0x79, 0x5b, 0x76, 0x83, 0xff, 0xf8, 0xb4, 0x9f, 0x9d, 0x86, 0x72, 0xa8, 0x20, 0x6b, 0xfd, 0xcf, 0x0a, 0x10, 0x6b, 0x87, 0x68, 0xf9, 0x83, 0x25, 0x8c, 0x74, 0x16, 0x74, 0x22, 0xe4, 0x4e, 0x4d, 0x14, +}; +static const ecdh_test_case ecccdh_SECP384R1_9_test_case = { + .name = "ECCCDH/SECP384R1 9", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_9_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_9_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_9_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_9_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_9_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_10 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_10_test_vector_our_priv_key[] = { + 0x83, 0xd7, 0x0f, 0x7b, 0x16, 0x4d, 0x9f, 0x4c, 0x22, 0x7c, 0x76, 0x70, 0x46, 0xb2, 0x0e, 0xb3, 0x4d, 0xfc, 0x77, 0x8f, 0x53, 0x87, 0xe3, 0x2e, 0x83, 0x4b, 0x1e, 0x6d, 0xae, 0xc2, 0x0e, 0xdb, 0x8c, 0xa5, 0xbb, 0x41, 0x92, 0x09, 0x3f, 0x54, 0x3b, 0x68, 0xe6, 0xae, 0xb7, 0xce, 0x78, 0x8b, +}; +static const u8 ecccdh_SECP384R1_10_test_vector_peer_pub_key[] = { + 0xa7, 0x21, 0xf6, 0xa2, 0xd4, 0x52, 0x74, 0x11, 0x83, 0x4b, 0x13, 0xd4, 0xd3, 0xa3, 0x3c, 0x29, 0xbe, 0xb8, 0x3a, 0xb7, 0x68, 0x24, 0x65, 0xc6, 0xcb, 0xaf, 0x66, 0x24, 0xac, 0xa6, 0xea, 0x58, 0xc3, 0x0e, 0xb0, 0xf2, 0x9d, 0xd8, 0x42, 0x88, 0x66, 0x95, 0x40, 0x0d, 0x72, 0x54, 0xf2, 0x0f, 0x14, 0xba, 0x6e, 0x26, 0x35, 0x51, 0x09, 0xad, 0x35, 0x12, 0x93, 0x66, 0xd5, 0xe3, 0xa6, 0x40, 0xae, 0x79, 0x85, 0x05, 0xa7, 0xfa, 0x55, 0xa9, 0x6a, 0x36, 0xb5, 0xda, 0xd3, 0x3d, 0xe0, 0x04, 0x74, 0xf6, 0x67, 0x0f, 0x52, 0x22, 0x14, 0xdd, 0x79, 0x52, 0x14, 0x0a, 0xb0, 0xa7, 0xeb, 0x68, +}; +static const u8 ecccdh_SECP384R1_10_test_vector_our_pub_key[] = { + 0x57, 0xcd, 0x77, 0x0f, 0x3b, 0xbc, 0xbe, 0x0c, 0x78, 0xc7, 0x70, 0xea, 0xb0, 0xb1, 0x69, 0xbc, 0x45, 0xe1, 0x39, 0xf8, 0x63, 0x78, 0xff, 0xae, 0x1c, 0x2b, 0x16, 0x96, 0x67, 0x27, 0xc2, 0xf2, 0xeb, 0x72, 0x45, 0x72, 0xb8, 0xf3, 0xeb, 0x22, 0x8d, 0x13, 0x0d, 0xb4, 0xff, 0x86, 0x2c, 0x63, 0x7e, 0xc5, 0xc8, 0x81, 0x3b, 0x68, 0x55, 0x58, 0xd8, 0x3e, 0x92, 0x4f, 0x14, 0xbc, 0x71, 0x9f, 0x6e, 0xb7, 0xae, 0x0c, 0xbb, 0x2c, 0x47, 0x42, 0x27, 0xc5, 0xbd, 0xa8, 0x86, 0x37, 0xa4, 0xf2, 0x6c, 0x64, 0x81, 0x79, 0x29, 0xaf, 0x99, 0x95, 0x92, 0xda, 0x6f, 0x78, 0x74, 0x90, 0x33, 0x2f, +}; +static const u8 ecccdh_SECP384R1_10_test_vector_shared_secret[] = { + 0x10, 0x23, 0x47, 0x88, 0x40, 0xe5, 0x47, 0x75, 0xbf, 0xc6, 0x92, 0x93, 0xa3, 0xcf, 0x97, 0xf5, 0xbc, 0x91, 0x47, 0x26, 0x45, 0x5c, 0x66, 0x53, 0x8e, 0xb5, 0x62, 0x3e, 0x21, 0x8f, 0xee, 0xf7, 0xdf, 0x4b, 0xef, 0xa2, 0x3e, 0x09, 0xd7, 0x71, 0x45, 0xad, 0x57, 0x7d, 0xb3, 0x2b, 0x41, 0xf9, +}; +static const ecdh_test_case ecccdh_SECP384R1_10_test_case = { + .name = "ECCCDH/SECP384R1 10", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_10_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_10_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_10_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_10_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_10_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_11 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_11_test_vector_our_priv_key[] = { + 0x8f, 0x55, 0x8e, 0x05, 0x81, 0x8b, 0x88, 0xed, 0x38, 0x3d, 0x5f, 0xca, 0x96, 0x2e, 0x53, 0x41, 0x3d, 0xb1, 0xa0, 0xe4, 0x63, 0x7e, 0xda, 0x19, 0x4f, 0x76, 0x19, 0x44, 0xcb, 0xea, 0x11, 0x4a, 0xb9, 0xd5, 0xda, 0x17, 0x5a, 0x7d, 0x57, 0x88, 0x25, 0x50, 0xb0, 0xe4, 0x32, 0xf3, 0x95, 0xa9, +}; +static const u8 ecccdh_SECP384R1_11_test_vector_peer_pub_key[] = { + 0xd8, 0x82, 0xa8, 0x50, 0x5c, 0x2d, 0x5c, 0xb9, 0xb8, 0x85, 0x1f, 0xc6, 0x76, 0x67, 0x7b, 0xb0, 0x08, 0x76, 0x81, 0xad, 0x53, 0xfa, 0xce, 0xba, 0x17, 0x38, 0x28, 0x6b, 0x45, 0x82, 0x75, 0x61, 0xe7, 0xda, 0x37, 0xb8, 0x80, 0x27, 0x6c, 0x65, 0x6c, 0xfc, 0x38, 0xb3, 0x2a, 0xde, 0x84, 0x7e, 0x34, 0xb3, 0x14, 0xbd, 0xc1, 0x34, 0x57, 0x56, 0x54, 0x57, 0x3c, 0xff, 0xaf, 0x40, 0x44, 0x5d, 0xa2, 0xe6, 0xaa, 0xf9, 0x87, 0xf7, 0xe9, 0x13, 0xcd, 0x4c, 0x30, 0x91, 0x52, 0x30, 0x58, 0x98, 0x4a, 0x25, 0xd8, 0xf2, 0x1d, 0xa8, 0x32, 0x61, 0x92, 0x45, 0x6c, 0x6a, 0x0f, 0xa5, 0xf6, 0x0c, +}; +static const u8 ecccdh_SECP384R1_11_test_vector_our_pub_key[] = { + 0x9a, 0x2f, 0x57, 0xf4, 0x86, 0x7c, 0xe7, 0x53, 0xd7, 0x2b, 0x0d, 0x95, 0x19, 0x5d, 0xf6, 0xf9, 0x6c, 0x1f, 0xae, 0x93, 0x4f, 0x60, 0x2e, 0xfd, 0x7b, 0x6a, 0x54, 0x58, 0x2f, 0x55, 0x6c, 0xfa, 0x53, 0x9d, 0x89, 0x00, 0x5c, 0xa2, 0xed, 0xac, 0x08, 0xad, 0x9b, 0x72, 0xdd, 0x1f, 0x60, 0xba, 0xd9, 0xb9, 0x4e, 0xe8, 0x2d, 0xa9, 0xcc, 0x60, 0x1f, 0x34, 0x60, 0x44, 0x99, 0x8b, 0xa3, 0x87, 0xae, 0xe5, 0x64, 0x04, 0xdc, 0x6e, 0xcc, 0x8a, 0xb2, 0xb5, 0x90, 0x44, 0x33, 0x19, 0xd0, 0xb2, 0xb6, 0x17, 0x6f, 0x9d, 0x0e, 0xac, 0x2d, 0x44, 0x67, 0x8e, 0xd5, 0x61, 0x60, 0x7d, 0x09, 0xa9, +}; +static const u8 ecccdh_SECP384R1_11_test_vector_shared_secret[] = { + 0x6a, 0xd6, 0xb9, 0xdc, 0x8a, 0x6c, 0xf0, 0xd3, 0x69, 0x1c, 0x50, 0x1c, 0xbb, 0x96, 0x78, 0x67, 0xf6, 0xe4, 0xbb, 0xb7, 0x64, 0xb6, 0x0d, 0xbf, 0xf8, 0xfc, 0xff, 0x3e, 0xd4, 0x2d, 0xbb, 0xa3, 0x9d, 0x63, 0xcf, 0x32, 0x5b, 0x4b, 0x40, 0x78, 0x85, 0x84, 0x95, 0xdd, 0xee, 0x75, 0xf9, 0x54, +}; +static const ecdh_test_case ecccdh_SECP384R1_11_test_case = { + .name = "ECCCDH/SECP384R1 11", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_11_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_11_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_11_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_11_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_11_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_12 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_12_test_vector_our_priv_key[] = { + 0x0f, 0x5d, 0xee, 0x0a, 0xff, 0xa7, 0xbb, 0xf2, 0x39, 0xd5, 0xdf, 0xf3, 0x29, 0x87, 0xeb, 0xb7, 0xcf, 0x84, 0xfc, 0xce, 0xed, 0x64, 0x3e, 0x1d, 0x3c, 0x62, 0xd0, 0xb3, 0x35, 0x2a, 0xec, 0x23, 0xb6, 0xe5, 0xac, 0x7f, 0xa4, 0x10, 0x5c, 0x8c, 0xb2, 0x61, 0x26, 0xad, 0x2d, 0x18, 0x92, 0xcb, +}; +static const u8 ecccdh_SECP384R1_12_test_vector_peer_pub_key[] = { + 0x81, 0x5c, 0x9d, 0x77, 0x3d, 0xbf, 0x5f, 0xb6, 0xa1, 0xb8, 0x67, 0x99, 0x96, 0x62, 0x47, 0xf4, 0x00, 0x6a, 0x23, 0xc9, 0x2e, 0x68, 0xc5, 0x5e, 0x9e, 0xaa, 0x99, 0x8b, 0x17, 0xd8, 0x83, 0x2d, 0xd4, 0xd8, 0x4d, 0x92, 0x7d, 0x83, 0x1d, 0x4f, 0x68, 0xda, 0xc6, 0x7c, 0x64, 0x88, 0x21, 0x9f, 0xe7, 0x92, 0x69, 0x94, 0x8b, 0x26, 0x11, 0x48, 0x45, 0x60, 0xfd, 0x49, 0x0f, 0xee, 0xc8, 0x87, 0xcb, 0x55, 0xef, 0x99, 0xa4, 0xb5, 0x24, 0x88, 0x0f, 0xa7, 0x49, 0x9d, 0x6a, 0x07, 0x28, 0x3a, 0xae, 0x2a, 0xfa, 0x33, 0xfe, 0xab, 0x97, 0xde, 0xca, 0x40, 0xbc, 0x60, 0x6c, 0x4d, 0x87, 0x64, +}; +static const u8 ecccdh_SECP384R1_12_test_vector_our_pub_key[] = { + 0x23, 0x34, 0x6b, 0xdf, 0xbc, 0x9d, 0x7c, 0x7c, 0x73, 0x6e, 0x02, 0xbd, 0xf6, 0x07, 0x67, 0x1f, 0xf6, 0x08, 0x2f, 0xdd, 0x27, 0x33, 0x4a, 0x8b, 0xc7, 0x5f, 0x3b, 0x23, 0x68, 0x1e, 0xbe, 0x61, 0x4d, 0x05, 0x97, 0xdd, 0x61, 0x4f, 0xae, 0x58, 0x67, 0x7c, 0x83, 0x5a, 0x9f, 0x0b, 0x27, 0x3b, 0x82, 0xba, 0x36, 0x29, 0x0d, 0x2f, 0x94, 0xdb, 0x41, 0x47, 0x9e, 0xb4, 0x5a, 0xb4, 0xea, 0xf6, 0x79, 0x28, 0xa2, 0x31, 0x51, 0x38, 0xd5, 0x9e, 0xec, 0xc9, 0xb5, 0x28, 0x5d, 0xfd, 0xdd, 0x67, 0x14, 0xf7, 0x75, 0x57, 0x21, 0x6e, 0xa4, 0x4c, 0xc6, 0xfc, 0x11, 0x9d, 0x82, 0x43, 0xef, 0xaf, +}; +static const u8 ecccdh_SECP384R1_12_test_vector_shared_secret[] = { + 0xcc, 0x9e, 0x06, 0x35, 0x66, 0xd4, 0x6b, 0x35, 0x7b, 0x3f, 0xca, 0xe2, 0x18, 0x27, 0x37, 0x73, 0x31, 0xe5, 0xe2, 0x90, 0xa3, 0x6e, 0x60, 0xcd, 0x7c, 0x39, 0x10, 0x2b, 0x82, 0x8a, 0xe0, 0xb9, 0x18, 0xdc, 0x5a, 0x02, 0x21, 0x6b, 0x07, 0xfe, 0x6f, 0x19, 0x58, 0xd8, 0x34, 0xe4, 0x24, 0x37, +}; +static const ecdh_test_case ecccdh_SECP384R1_12_test_case = { + .name = "ECCCDH/SECP384R1 12", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_12_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_12_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_12_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_12_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_12_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_13 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_13_test_vector_our_priv_key[] = { + 0x03, 0x7b, 0x63, 0x3b, 0x5b, 0x8b, 0xa8, 0x57, 0xc0, 0xfc, 0x85, 0x65, 0x68, 0x68, 0x23, 0x2e, 0x2f, 0xeb, 0xf5, 0x95, 0x78, 0x71, 0x83, 0x91, 0xb8, 0x1d, 0xa8, 0x54, 0x1a, 0x00, 0xbf, 0xe5, 0x3c, 0x30, 0xae, 0x04, 0x15, 0x18, 0x47, 0xf2, 0x74, 0x99, 0xf8, 0xd7, 0xab, 0xad, 0x8c, 0xf4, +}; +static const u8 ecccdh_SECP384R1_13_test_vector_peer_pub_key[] = { + 0x1c, 0x0e, 0xed, 0xa7, 0xa2, 0xbe, 0x00, 0x0c, 0x5b, 0xdc, 0xda, 0x04, 0x78, 0xae, 0xd4, 0xdb, 0x73, 0x3d, 0x2a, 0x9e, 0x34, 0x12, 0x24, 0x37, 0x91, 0x23, 0xad, 0x84, 0x70, 0x30, 0xf2, 0x9e, 0x3b, 0x16, 0x8f, 0xa1, 0x8e, 0x89, 0xa3, 0xc0, 0xfb, 0xa2, 0xa6, 0xce, 0x1c, 0x28, 0xfc, 0x3b, 0xec, 0x8c, 0x1c, 0x83, 0xc1, 0x18, 0xc4, 0xdb, 0xea, 0x94, 0x27, 0x18, 0x69, 0xf2, 0xd8, 0x68, 0xeb, 0x65, 0xe8, 0xb4, 0x4e, 0x21, 0xe6, 0xf1, 0x4b, 0x0f, 0x4d, 0x9b, 0x38, 0xc0, 0x68, 0xda, 0xef, 0xa2, 0x71, 0x14, 0x25, 0x5b, 0x9a, 0x41, 0xd0, 0x84, 0xcc, 0x4a, 0x1a, 0xd8, 0x54, 0x56, +}; +static const u8 ecccdh_SECP384R1_13_test_vector_our_pub_key[] = { + 0x88, 0x78, 0xac, 0x8a, 0x94, 0x7f, 0x7d, 0x5c, 0xb2, 0xb4, 0x7a, 0xad, 0x24, 0xfb, 0xb8, 0x21, 0x0d, 0x86, 0x12, 0x65, 0x85, 0x39, 0x9a, 0x28, 0x71, 0xf8, 0x4a, 0xa9, 0xc5, 0xfd, 0xe3, 0x07, 0x4a, 0xe5, 0x40, 0xc6, 0xbf, 0x82, 0x27, 0x5c, 0xa8, 0x22, 0xd0, 0xfe, 0xb8, 0x62, 0xbc, 0x74, 0x63, 0x2f, 0x5c, 0xd2, 0xf9, 0x00, 0xc2, 0x71, 0x1c, 0x32, 0xf8, 0x93, 0x07, 0x28, 0xeb, 0x64, 0x7d, 0x31, 0xed, 0xd8, 0xd6, 0x50, 0xf9, 0x65, 0x4e, 0x7d, 0x33, 0xe5, 0xed, 0x1b, 0x47, 0x54, 0x89, 0xd0, 0x8d, 0xaa, 0x30, 0xd8, 0xcb, 0xcb, 0xa6, 0xbf, 0xc3, 0xb6, 0x0d, 0x9b, 0x5a, 0x37, +}; +static const u8 ecccdh_SECP384R1_13_test_vector_shared_secret[] = { + 0xde, 0xff, 0x7f, 0x03, 0xbd, 0x09, 0x86, 0x5b, 0xaf, 0x94, 0x5e, 0x73, 0xed, 0xff, 0x6d, 0x51, 0x22, 0xc0, 0x3f, 0xb5, 0x61, 0xdb, 0x87, 0xde, 0xc8, 0x66, 0x2e, 0x09, 0xbe, 0xd4, 0x34, 0x0b, 0x28, 0xa9, 0xef, 0xe1, 0x18, 0x33, 0x7b, 0xb7, 0xd3, 0xd4, 0xf7, 0xf5, 0x68, 0x63, 0x5f, 0xf9, +}; +static const ecdh_test_case ecccdh_SECP384R1_13_test_case = { + .name = "ECCCDH/SECP384R1 13", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_13_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_13_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_13_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_13_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_13_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_14 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_14_test_vector_our_priv_key[] = { + 0xe3, 0xd0, 0x71, 0x06, 0xbe, 0xdc, 0xc0, 0x96, 0xe7, 0xd9, 0x16, 0x30, 0xff, 0xd3, 0x09, 0x4d, 0xf2, 0xc7, 0x85, 0x9d, 0xb8, 0xd7, 0xed, 0xbb, 0x2e, 0x37, 0xb4, 0xac, 0x47, 0xf4, 0x29, 0xa6, 0x37, 0xd0, 0x6a, 0x67, 0xd2, 0xfb, 0xa3, 0x38, 0x38, 0x76, 0x4e, 0xf2, 0x03, 0x46, 0x49, 0x91, +}; +static const u8 ecccdh_SECP384R1_14_test_vector_peer_pub_key[] = { + 0xc9, 0x5c, 0x18, 0x5e, 0x25, 0x6b, 0xf9, 0x97, 0xf3, 0x0b, 0x31, 0x15, 0x48, 0xae, 0x7f, 0x76, 0x8a, 0x38, 0xde, 0xe4, 0x3e, 0xee, 0xef, 0x43, 0x08, 0x3f, 0x30, 0x77, 0xbe, 0x70, 0xe2, 0xbf, 0x39, 0xac, 0x1d, 0x4d, 0xaf, 0x36, 0x0c, 0x51, 0x4c, 0x8c, 0x6b, 0xe6, 0x23, 0x44, 0x3d, 0x1a, 0x3e, 0x63, 0xa6, 0x63, 0xea, 0xf7, 0x5d, 0x8a, 0x76, 0x5a, 0xb2, 0xb9, 0xa3, 0x55, 0x13, 0xd7, 0x93, 0x3f, 0xa5, 0xe2, 0x64, 0x20, 0xa5, 0x24, 0x45, 0x50, 0xec, 0x6c, 0x3b, 0x6f, 0x03, 0x3b, 0x96, 0xdb, 0x2a, 0xca, 0x3d, 0x6a, 0xc6, 0xaa, 0xb0, 0x52, 0xce, 0x92, 0x95, 0x95, 0xae, 0xa5, +}; +static const u8 ecccdh_SECP384R1_14_test_vector_our_pub_key[] = { + 0xe7, 0x4a, 0x1a, 0x2b, 0x85, 0xf1, 0xcb, 0xf8, 0xdb, 0xbd, 0xf0, 0x50, 0xcf, 0x1a, 0xff, 0x8a, 0xcb, 0x02, 0xfd, 0xa2, 0xfb, 0x65, 0x91, 0xf9, 0xd3, 0xcf, 0xe4, 0xe7, 0x9d, 0x0a, 0xe9, 0x38, 0xa9, 0xc1, 0x48, 0x3e, 0x7b, 0x75, 0xf8, 0xdb, 0x24, 0x50, 0x5d, 0x65, 0x06, 0x5c, 0xdb, 0x18, 0x17, 0x73, 0xee, 0x59, 0x18, 0x22, 0xf7, 0xab, 0xaa, 0x85, 0x6a, 0x1a, 0x60, 0xbc, 0x0a, 0x52, 0x03, 0x54, 0x8d, 0xbd, 0x1c, 0xb5, 0x02, 0x54, 0x66, 0xef, 0xf8, 0x48, 0x1b, 0xd0, 0x76, 0x14, 0xea, 0xa0, 0x4a, 0x16, 0xc3, 0xdb, 0x76, 0x90, 0x59, 0x13, 0xe9, 0x72, 0xa5, 0xb6, 0xb5, 0x9d, +}; +static const u8 ecccdh_SECP384R1_14_test_vector_shared_secret[] = { + 0xc8, 0xb1, 0x03, 0x8f, 0x73, 0x5a, 0xd3, 0xbb, 0x3e, 0x46, 0x37, 0xc3, 0xe4, 0x7e, 0xab, 0x48, 0x76, 0x37, 0x91, 0x1a, 0x6b, 0x79, 0x50, 0xa4, 0xe4, 0x61, 0x94, 0x83, 0x29, 0xd3, 0x92, 0x3b, 0x96, 0x9e, 0x5d, 0xb6, 0x63, 0x67, 0x56, 0x23, 0x61, 0x1a, 0x45, 0x7f, 0xcd, 0xa3, 0x5a, 0x71, +}; +static const ecdh_test_case ecccdh_SECP384R1_14_test_case = { + .name = "ECCCDH/SECP384R1 14", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_14_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_14_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_14_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_14_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_14_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_15 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_15_test_vector_our_priv_key[] = { + 0xf3, 0xf9, 0xb0, 0xc6, 0x5a, 0x49, 0xa5, 0x06, 0x63, 0x2c, 0x8a, 0x45, 0xb1, 0x0f, 0x66, 0xb5, 0x31, 0x6f, 0x9e, 0xeb, 0x06, 0xfa, 0xe2, 0x18, 0xf2, 0xda, 0x62, 0x33, 0x3f, 0x99, 0x90, 0x51, 0x17, 0xb1, 0x41, 0xc7, 0x60, 0xe8, 0x97, 0x4e, 0xfc, 0x4a, 0xf1, 0x05, 0x70, 0x63, 0x57, 0x91, +}; +static const u8 ecccdh_SECP384R1_15_test_vector_peer_pub_key[] = { + 0x34, 0x97, 0x23, 0x8a, 0x7e, 0x6a, 0xd1, 0x66, 0xdf, 0x2d, 0xac, 0x03, 0x9a, 0xa4, 0xda, 0xc8, 0xd1, 0x7a, 0xa9, 0x25, 0xe7, 0xc7, 0x63, 0x1e, 0xb3, 0xb5, 0x6e, 0x3a, 0xaa, 0x1c, 0x54, 0x5f, 0xcd, 0x54, 0xd2, 0xe5, 0x98, 0x58, 0x07, 0x91, 0x0f, 0xb2, 0x02, 0xb1, 0xfc, 0x19, 0x1d, 0x2a, 0xa4, 0x9e, 0x5c, 0x48, 0x7d, 0xcc, 0x7a, 0xa4, 0x0a, 0x8f, 0x23, 0x4c, 0x97, 0x94, 0x46, 0x04, 0x0d, 0x91, 0x74, 0xe3, 0xad, 0x35, 0x7d, 0x40, 0x4d, 0x77, 0x65, 0x18, 0x31, 0x95, 0xae, 0xd3, 0xf9, 0x13, 0x64, 0x1b, 0x90, 0xc8, 0x1a, 0x30, 0x6e, 0xbf, 0x0d, 0x89, 0x13, 0x86, 0x13, 0x16, +}; +static const u8 ecccdh_SECP384R1_15_test_vector_our_pub_key[] = { + 0xa4, 0xad, 0x77, 0xaa, 0x7d, 0x86, 0xe5, 0x36, 0x11, 0x18, 0xa6, 0xb9, 0x21, 0x71, 0x0c, 0x82, 0x07, 0x21, 0x21, 0x07, 0x12, 0xf4, 0xc3, 0x47, 0x98, 0x5f, 0xde, 0xe5, 0x8a, 0xa4, 0xef, 0xfa, 0x1e, 0x28, 0xbe, 0x80, 0xa1, 0x7b, 0x12, 0x0b, 0x13, 0x9f, 0x96, 0x30, 0x0f, 0x89, 0xb4, 0x9b, 0x1d, 0xdf, 0x22, 0xe0, 0x7e, 0x03, 0xf1, 0x56, 0x0d, 0x8f, 0x45, 0xa4, 0x80, 0x09, 0x45, 0x60, 0xdb, 0xa9, 0xfa, 0xe7, 0xf9, 0x53, 0x11, 0x30, 0xc1, 0xb5, 0x7e, 0xbb, 0x95, 0x98, 0x24, 0x96, 0x52, 0x4f, 0x31, 0xd3, 0x79, 0x77, 0x93, 0x39, 0x6f, 0xa8, 0x23, 0xf2, 0x2b, 0xdb, 0x43, 0x28, +}; +static const u8 ecccdh_SECP384R1_15_test_vector_shared_secret[] = { + 0xd3, 0x37, 0xea, 0xa3, 0x2b, 0x9f, 0x71, 0x6b, 0x87, 0x47, 0xb0, 0x05, 0xb9, 0x7a, 0x55, 0x3c, 0x59, 0xda, 0xb0, 0xc5, 0x1d, 0xf4, 0x1a, 0x2d, 0x49, 0x03, 0x9c, 0xda, 0xe7, 0x05, 0xaa, 0x75, 0xc7, 0xb9, 0xe7, 0xbc, 0x0b, 0x6a, 0x0e, 0x8c, 0x57, 0x8c, 0x90, 0x2b, 0xc4, 0xff, 0xf2, 0x3e, +}; +static const ecdh_test_case ecccdh_SECP384R1_15_test_case = { + .name = "ECCCDH/SECP384R1 15", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_15_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_15_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_15_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_15_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_15_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_16 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_16_test_vector_our_priv_key[] = { + 0x59, 0xfc, 0xe7, 0xfa, 0xd7, 0xde, 0x28, 0xba, 0xc0, 0x23, 0x06, 0x90, 0xc9, 0x57, 0x10, 0xc7, 0x20, 0xe5, 0x28, 0xf9, 0xa4, 0xe5, 0x4d, 0x3a, 0x6a, 0x8c, 0xd5, 0xfc, 0x5c, 0x5f, 0x21, 0x63, 0x70, 0x31, 0xce, 0x1c, 0x5b, 0x4e, 0x3d, 0x39, 0x64, 0x7d, 0x8d, 0xcb, 0x9b, 0x79, 0x46, 0x64, +}; +static const u8 ecccdh_SECP384R1_16_test_vector_peer_pub_key[] = { + 0x90, 0xa3, 0x47, 0x37, 0xd4, 0x5b, 0x1a, 0xa6, 0x5f, 0x74, 0xe0, 0xbd, 0x06, 0x59, 0xbc, 0x11, 0x8f, 0x8e, 0x4b, 0x77, 0x4b, 0x76, 0x19, 0x44, 0xff, 0xa6, 0x57, 0x3c, 0x6d, 0xf4, 0xf4, 0x1d, 0xec, 0x0d, 0x11, 0xb6, 0x97, 0xab, 0xd9, 0x34, 0xd3, 0x90, 0x87, 0x1d, 0x4b, 0x45, 0x32, 0x40, 0x9b, 0x59, 0x07, 0x19, 0xbb, 0x33, 0x07, 0xc1, 0x49, 0xa7, 0x81, 0x7b, 0xe3, 0x55, 0xd6, 0x84, 0x89, 0x3a, 0x30, 0x77, 0x64, 0xb5, 0x12, 0xee, 0xff, 0xe0, 0x7c, 0xb6, 0x99, 0xed, 0xb5, 0xa6, 0xff, 0xbf, 0x8d, 0x60, 0x32, 0xe6, 0xc7, 0x9d, 0x5e, 0x93, 0xe9, 0x42, 0x12, 0xc2, 0xaa, 0x4e, +}; +static const u8 ecccdh_SECP384R1_16_test_vector_our_pub_key[] = { + 0x9c, 0x43, 0xbf, 0x97, 0x1e, 0xdf, 0x09, 0x40, 0x28, 0x76, 0xee, 0x74, 0x20, 0x95, 0x38, 0x1f, 0x78, 0xb1, 0xbd, 0x3a, 0xa3, 0x9b, 0x51, 0x32, 0xaf, 0x75, 0xdb, 0xfe, 0x7e, 0x98, 0xbd, 0x78, 0xbd, 0xe1, 0x0f, 0xe2, 0xe9, 0x03, 0xc2, 0xb6, 0x37, 0x9e, 0x1d, 0xee, 0xe1, 0x75, 0xa1, 0xb0, 0xa6, 0xc5, 0x8e, 0xce, 0xa5, 0xa4, 0x77, 0xbb, 0x01, 0xbd, 0x54, 0x3b, 0x33, 0x9f, 0x1c, 0xc4, 0x9f, 0x13, 0x71, 0xa2, 0xcd, 0xa4, 0xd4, 0x6e, 0xb4, 0xe5, 0x3e, 0x25, 0x05, 0x97, 0x94, 0x23, 0x51, 0xa9, 0x96, 0x65, 0xa1, 0x22, 0xff, 0xea, 0x9b, 0xde, 0x06, 0x36, 0xc3, 0x75, 0xda, 0xf2, +}; +static const u8 ecccdh_SECP384R1_16_test_vector_shared_secret[] = { + 0x32, 0xd2, 0x92, 0xb6, 0x95, 0xa4, 0x48, 0x8e, 0x42, 0xa7, 0xb7, 0x92, 0x2e, 0x1a, 0xe5, 0x37, 0xd7, 0x6a, 0x3d, 0x21, 0xa0, 0xb2, 0xe3, 0x68, 0x75, 0xf6, 0x0e, 0x9f, 0x6d, 0x3e, 0x87, 0x79, 0xc2, 0xaf, 0xb3, 0xa4, 0x13, 0xb9, 0xdd, 0x79, 0xae, 0x18, 0xe7, 0x0b, 0x47, 0xd3, 0x37, 0xc1, +}; +static const ecdh_test_case ecccdh_SECP384R1_16_test_case = { + .name = "ECCCDH/SECP384R1 16", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_16_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_16_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_16_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_16_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_16_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_17 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_17_test_vector_our_priv_key[] = { + 0x3e, 0x49, 0xfb, 0xf9, 0x50, 0xa4, 0x24, 0xc5, 0xd8, 0x02, 0x28, 0xdc, 0x4b, 0xc3, 0x5e, 0x9f, 0x6c, 0x6c, 0x0c, 0x1d, 0x04, 0x44, 0x09, 0x98, 0xda, 0x0a, 0x60, 0x9a, 0x87, 0x75, 0x75, 0xdb, 0xe4, 0x37, 0xd6, 0xa5, 0xce, 0xda, 0xa2, 0xdd, 0xd2, 0xa1, 0xa1, 0x7f, 0xd1, 0x12, 0xad, 0xed, +}; +static const u8 ecccdh_SECP384R1_17_test_vector_peer_pub_key[] = { + 0xdd, 0xa5, 0x46, 0xac, 0xfc, 0x8f, 0x90, 0x3d, 0x11, 0xe2, 0xe3, 0x92, 0x06, 0x69, 0x63, 0x6d, 0x44, 0xb2, 0x06, 0x8a, 0xeb, 0x66, 0xff, 0x07, 0xaa, 0x26, 0x6f, 0x00, 0x30, 0xe1, 0x53, 0x5b, 0x0e, 0xd0, 0x20, 0x3c, 0xb8, 0xa4, 0x60, 0xac, 0x99, 0x0f, 0x13, 0x94, 0xfa, 0xf2, 0x2f, 0x1d, 0x15, 0xbb, 0xb2, 0x59, 0x79, 0x13, 0x03, 0x5f, 0xaa, 0xdf, 0x41, 0x34, 0x76, 0xf4, 0xc7, 0x0f, 0x72, 0x79, 0x76, 0x9a, 0x40, 0xc9, 0x86, 0xf4, 0x70, 0xc4, 0x27, 0xb4, 0xee, 0x49, 0x62, 0xab, 0xdf, 0x81, 0x73, 0xbb, 0xad, 0x81, 0x87, 0x47, 0x72, 0x92, 0x5f, 0xd3, 0x2f, 0x0b, 0x15, 0x9f, +}; +static const u8 ecccdh_SECP384R1_17_test_vector_our_pub_key[] = { + 0x5a, 0x94, 0x95, 0x94, 0x22, 0x8b, 0x1a, 0x3d, 0x6f, 0x59, 0x9e, 0xb3, 0xdb, 0x0d, 0x06, 0x07, 0x0f, 0xbc, 0x55, 0x1c, 0x65, 0x7b, 0x58, 0x23, 0x4b, 0xa1, 0x64, 0xce, 0x3f, 0xe4, 0x15, 0xfa, 0x5f, 0x3e, 0xb8, 0x23, 0xc0, 0x8d, 0xc2, 0x9b, 0x8c, 0x34, 0x12, 0x19, 0xc7, 0x7b, 0x6b, 0x3d, 0x2b, 0xaa, 0xd4, 0x47, 0xc8, 0xc2, 0x90, 0xcf, 0xed, 0x25, 0xed, 0xd9, 0x03, 0x1c, 0x41, 0xd0, 0xb7, 0x69, 0x21, 0x45, 0x73, 0x27, 0xf4, 0x2d, 0xb3, 0x11, 0x22, 0xb8, 0x1f, 0x33, 0x7b, 0xbf, 0x0b, 0x10, 0x39, 0xec, 0x83, 0x0c, 0xe9, 0x06, 0x1a, 0x37, 0x61, 0x95, 0x3c, 0x75, 0xe4, 0xa8, +}; +static const u8 ecccdh_SECP384R1_17_test_vector_shared_secret[] = { + 0x12, 0x20, 0xe7, 0xe6, 0xca, 0xd7, 0xb2, 0x5d, 0xf9, 0x8e, 0x5b, 0xbd, 0xcc, 0x6c, 0x0b, 0x65, 0xca, 0x6c, 0x2a, 0x50, 0xc5, 0xff, 0x6c, 0x41, 0xdc, 0xa7, 0x1e, 0x47, 0x56, 0x46, 0xfd, 0x48, 0x96, 0x15, 0x97, 0x9c, 0xa9, 0x2f, 0xb4, 0x38, 0x9a, 0xea, 0xde, 0xfd, 0xe7, 0x9a, 0x24, 0xf1, +}; +static const ecdh_test_case ecccdh_SECP384R1_17_test_case = { + .name = "ECCCDH/SECP384R1 17", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_17_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_17_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_17_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_17_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_17_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_18 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_18_test_vector_our_priv_key[] = { + 0x50, 0xcc, 0xc1, 0xf7, 0x07, 0x6e, 0x92, 0xf4, 0x63, 0x8e, 0x85, 0xf2, 0xdb, 0x98, 0xe0, 0xb4, 0x83, 0xe6, 0xe2, 0x20, 0x4c, 0x92, 0xbd, 0xd4, 0x40, 0xa6, 0xde, 0xea, 0x04, 0xe3, 0x7a, 0x07, 0xc6, 0xe7, 0x27, 0x91, 0xc1, 0x90, 0xad, 0x4e, 0x4e, 0x86, 0xe0, 0x1e, 0xfb, 0xa8, 0x42, 0x69, +}; +static const u8 ecccdh_SECP384R1_18_test_vector_peer_pub_key[] = { + 0x78, 0x8b, 0xe2, 0x33, 0x6c, 0x52, 0xf4, 0x45, 0x4d, 0x63, 0xee, 0x94, 0x4b, 0x1e, 0x49, 0xbf, 0xb6, 0x19, 0xa0, 0x83, 0x71, 0x04, 0x8e, 0x6d, 0xa9, 0x2e, 0x58, 0x4e, 0xae, 0x70, 0xbd, 0xe1, 0xf1, 0x71, 0xc4, 0xdf, 0x37, 0x8b, 0xd1, 0xf3, 0xc0, 0xab, 0x03, 0x04, 0x8a, 0x23, 0x78, 0x02, 0x46, 0x73, 0xeb, 0xd8, 0xdb, 0x60, 0x4e, 0xaf, 0x41, 0x71, 0x17, 0x48, 0xba, 0xb2, 0x96, 0x8a, 0x23, 0xca, 0x44, 0x76, 0xce, 0x14, 0x4e, 0x72, 0x82, 0x47, 0xf0, 0x8a, 0xf7, 0x52, 0x92, 0x91, 0x57, 0xb5, 0x83, 0x0f, 0x1e, 0x26, 0x06, 0x74, 0x66, 0xbd, 0xfa, 0x8b, 0x65, 0x14, 0x5a, 0x33, +}; +static const u8 ecccdh_SECP384R1_18_test_vector_our_pub_key[] = { + 0x75, 0x6c, 0x07, 0xdf, 0x0c, 0xe3, 0x2c, 0x83, 0x9d, 0xac, 0x9f, 0xb4, 0x73, 0x3c, 0x9c, 0x28, 0xb7, 0x01, 0x13, 0xa6, 0x76, 0xa7, 0x05, 0x7c, 0x38, 0xd2, 0x23, 0xf2, 0x2a, 0x3a, 0x90, 0x95, 0xa8, 0xd5, 0x64, 0x65, 0x3a, 0xf5, 0x28, 0xe0, 0x4c, 0x7e, 0x18, 0x24, 0xbe, 0x4a, 0x65, 0x12, 0x17, 0xc2, 0xce, 0x69, 0x62, 0xcb, 0xd2, 0xa2, 0xe0, 0x66, 0x29, 0x7b, 0x39, 0xd5, 0x7d, 0xd9, 0xbb, 0x46, 0x80, 0xf0, 0x19, 0x1d, 0x39, 0x0f, 0x70, 0xb4, 0xe4, 0x61, 0x41, 0x9b, 0x29, 0x72, 0xce, 0x68, 0xad, 0x46, 0x12, 0x7f, 0xdd, 0xa6, 0xc3, 0x91, 0x95, 0x77, 0x4e, 0xa8, 0x6d, 0xf3, +}; +static const u8 ecccdh_SECP384R1_18_test_vector_shared_secret[] = { + 0x79, 0x3b, 0xb9, 0xcd, 0x22, 0xa9, 0x3c, 0xf4, 0x68, 0xfa, 0xf8, 0x04, 0xa3, 0x8d, 0x12, 0xb7, 0x8c, 0xb1, 0x21, 0x89, 0xec, 0x67, 0x9d, 0xdd, 0x2e, 0x9a, 0xa2, 0x1f, 0xa9, 0xa5, 0xa0, 0xb0, 0x49, 0xab, 0x16, 0xa2, 0x35, 0x74, 0xfe, 0x04, 0xc1, 0xc3, 0xc0, 0x23, 0x43, 0xb9, 0x1b, 0xeb, +}; +static const ecdh_test_case ecccdh_SECP384R1_18_test_case = { + .name = "ECCCDH/SECP384R1 18", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_18_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_18_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_18_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_18_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_18_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_19 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_19_test_vector_our_priv_key[] = { + 0x06, 0xf1, 0x32, 0xb7, 0x1f, 0x74, 0xd8, 0x7b, 0xf9, 0x98, 0x57, 0xe1, 0xe4, 0x35, 0x0a, 0x59, 0x4e, 0x5f, 0xe3, 0x55, 0x33, 0xb8, 0x88, 0x55, 0x2c, 0xec, 0xcb, 0xc0, 0xd8, 0x92, 0x3c, 0x90, 0x2e, 0x36, 0x14, 0x1d, 0x76, 0x91, 0xe2, 0x86, 0x31, 0xb8, 0xbc, 0x9b, 0xaf, 0xe5, 0xe0, 0x64, +}; +static const u8 ecccdh_SECP384R1_19_test_vector_peer_pub_key[] = { + 0xd0, 0x9b, 0xb8, 0x22, 0xeb, 0x99, 0xe3, 0x80, 0x60, 0x95, 0x47, 0x47, 0xc8, 0x2b, 0xb3, 0x27, 0x8c, 0xf9, 0x6b, 0xbf, 0x36, 0xfe, 0xce, 0x34, 0x00, 0xf4, 0xc8, 0x73, 0x83, 0x8a, 0x40, 0xc1, 0x35, 0xeb, 0x3b, 0xab, 0xb9, 0x29, 0x3b, 0xd1, 0x00, 0x1b, 0xf3, 0xec, 0xde, 0xe7, 0xbf, 0x26, 0xd4, 0x16, 0xdb, 0x6e, 0x1b, 0x87, 0xbb, 0xb7, 0x42, 0x77, 0x88, 0xa3, 0xb6, 0xc7, 0xa7, 0xab, 0x2c, 0x16, 0x5b, 0x1e, 0x36, 0x6f, 0x96, 0x08, 0xdf, 0x51, 0x20, 0x37, 0x58, 0x4f, 0x21, 0x3a, 0x64, 0x8d, 0x47, 0xf1, 0x6a, 0xc3, 0x26, 0xe1, 0x9a, 0xae, 0x97, 0x2f, 0x63, 0xfd, 0x76, 0xc9, +}; +static const u8 ecccdh_SECP384R1_19_test_vector_our_pub_key[] = { + 0x2a, 0x3c, 0xc6, 0xb8, 0xff, 0x5c, 0xde, 0x92, 0x6e, 0x7e, 0x3a, 0x18, 0x9a, 0x1b, 0xd0, 0x29, 0xc9, 0xb5, 0x86, 0x35, 0x1a, 0xf8, 0x83, 0x8f, 0x4f, 0x20, 0x1c, 0xb8, 0xf4, 0xb7, 0x0e, 0xf3, 0xb0, 0xda, 0x06, 0xd3, 0x52, 0xc8, 0x0f, 0xc2, 0x6b, 0xaf, 0x8f, 0x42, 0xb7, 0x84, 0x45, 0x9e, 0xbf, 0x99, 0x85, 0x96, 0x01, 0x76, 0xda, 0x6d, 0x23, 0xc7, 0x45, 0x2a, 0x29, 0x54, 0xff, 0xcb, 0xbc, 0xb2, 0x42, 0x49, 0xb4, 0x30, 0x19, 0xa2, 0xa0, 0x23, 0xe0, 0xb3, 0xda, 0xbd, 0x46, 0x1f, 0x19, 0xad, 0x3e, 0x77, 0x5c, 0x36, 0x4f, 0x3f, 0x11, 0xad, 0x49, 0xf3, 0x09, 0x94, 0x00, 0xd3, +}; +static const u8 ecccdh_SECP384R1_19_test_vector_shared_secret[] = { + 0x01, 0x2d, 0x19, 0x1c, 0xf7, 0x40, 0x4a, 0x52, 0x36, 0x78, 0xc6, 0xfc, 0x07, 0x5d, 0xe8, 0x28, 0x5b, 0x24, 0x37, 0x20, 0xa9, 0x03, 0x04, 0x77, 0x08, 0xbb, 0x33, 0xe5, 0x01, 0xe0, 0xdb, 0xee, 0x5b, 0xcc, 0x40, 0xd7, 0xc3, 0xef, 0x6c, 0x6d, 0xa3, 0x9e, 0xa2, 0x4d, 0x83, 0x0d, 0xa1, 0xe8, +}; +static const ecdh_test_case ecccdh_SECP384R1_19_test_case = { + .name = "ECCCDH/SECP384R1 19", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_19_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_19_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_19_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_19_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_19_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_20 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_20_test_vector_our_priv_key[] = { + 0x12, 0x04, 0x8e, 0xbb, 0x43, 0x31, 0xec, 0x19, 0xa1, 0xe2, 0x3f, 0x1a, 0x2c, 0x77, 0x3b, 0x66, 0x4c, 0xcf, 0xe9, 0x0a, 0x28, 0xbf, 0xb8, 0x46, 0xfc, 0x12, 0xf8, 0x1d, 0xff, 0x44, 0xb7, 0x44, 0x3c, 0x77, 0x64, 0x71, 0x64, 0xbf, 0x1e, 0x9e, 0x67, 0xfd, 0x2c, 0x07, 0xa6, 0x76, 0x62, 0x41, +}; +static const u8 ecccdh_SECP384R1_20_test_vector_peer_pub_key[] = { + 0x13, 0x74, 0x12, 0x62, 0xed, 0xe5, 0x86, 0x1d, 0xad, 0x71, 0x06, 0x3d, 0xfd, 0x20, 0x4b, 0x91, 0xea, 0x1d, 0x3b, 0x7c, 0x63, 0x1d, 0xf6, 0x8e, 0xb9, 0x49, 0x96, 0x95, 0x27, 0xd7, 0x9a, 0x1d, 0xc5, 0x92, 0x95, 0xef, 0x7d, 0x2b, 0xca, 0x67, 0x43, 0xe8, 0xcd, 0x77, 0xb0, 0x4d, 0x1b, 0x58, 0x0b, 0xaa, 0xea, 0xdc, 0x7e, 0x19, 0xd7, 0x4a, 0x8a, 0x04, 0x45, 0x1a, 0x13, 0x5f, 0x1b, 0xe1, 0xb0, 0x2f, 0xe2, 0x99, 0xf9, 0xdc, 0x00, 0xbf, 0xdf, 0x20, 0x1e, 0x83, 0xd9, 0x95, 0xc6, 0x95, 0x0b, 0xcc, 0x1c, 0xb8, 0x9d, 0x6f, 0x7b, 0x30, 0xbf, 0x54, 0x65, 0x6b, 0x9a, 0x4d, 0xa5, 0x86, +}; +static const u8 ecccdh_SECP384R1_20_test_vector_our_pub_key[] = { + 0xbc, 0x18, 0x83, 0x6b, 0xc7, 0xa9, 0xfd, 0xf5, 0x4b, 0x53, 0x52, 0xf3, 0x7d, 0x75, 0x28, 0xab, 0x8f, 0xa8, 0xec, 0x54, 0x4a, 0x8c, 0x61, 0x80, 0x51, 0x1c, 0xbf, 0xdd, 0x49, 0xcc, 0xe3, 0x77, 0xc3, 0x9e, 0x34, 0xc0, 0x31, 0xb5, 0x24, 0x0d, 0xc9, 0x98, 0x05, 0x03, 0xed, 0x2f, 0x26, 0x2c, 0x80, 0x86, 0xcb, 0xe3, 0x38, 0x19, 0x10, 0x80, 0xf0, 0xb7, 0xa1, 0x6c, 0x7a, 0xfc, 0x4c, 0x7b, 0x03, 0x26, 0xf9, 0xac, 0x66, 0xf5, 0x85, 0x52, 0xef, 0x4b, 0xb9, 0xd2, 0x4d, 0xe3, 0x42, 0x9e, 0xd5, 0xd3, 0x27, 0x7e, 0xd5, 0x8f, 0xcf, 0x48, 0xf2, 0xb5, 0xf6, 0x13, 0x26, 0xbe, 0xc6, 0xc6, +}; +static const u8 ecccdh_SECP384R1_20_test_vector_shared_secret[] = { + 0xad, 0x0f, 0xd3, 0xdd, 0xff, 0xe8, 0x88, 0x4b, 0x92, 0x63, 0xf3, 0xc1, 0x5f, 0xe1, 0xf0, 0x7f, 0x2a, 0x5a, 0x22, 0xff, 0xdc, 0x7e, 0x96, 0x70, 0x85, 0xee, 0xa4, 0x5f, 0x0c, 0xd9, 0x59, 0xf2, 0x0f, 0x18, 0xf5, 0x22, 0x76, 0x3e, 0x28, 0xbc, 0xc9, 0x25, 0xe4, 0x96, 0xa5, 0x2d, 0xda, 0x98, +}; +static const ecdh_test_case ecccdh_SECP384R1_20_test_case = { + .name = "ECCCDH/SECP384R1 20", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_20_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_20_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_20_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_20_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_20_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_21 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_21_test_vector_our_priv_key[] = { + 0x34, 0xd6, 0x1a, 0x69, 0x9c, 0xa5, 0x76, 0x16, 0x9f, 0xcd, 0xc0, 0xcc, 0x7e, 0x44, 0xe4, 0xe1, 0x22, 0x1d, 0xb0, 0xfe, 0x63, 0xd1, 0x68, 0x50, 0xc8, 0x10, 0x40, 0x29, 0xf7, 0xd4, 0x84, 0x49, 0x71, 0x4b, 0x98, 0x84, 0x32, 0x8c, 0xae, 0x18, 0x99, 0x78, 0x75, 0x4a, 0xb4, 0x60, 0xb4, 0x86, +}; +static const u8 ecccdh_SECP384R1_21_test_vector_peer_pub_key[] = { + 0x9e, 0x22, 0xcb, 0xc1, 0x86, 0x57, 0xf5, 0x16, 0xa8, 0x64, 0xb3, 0x7b, 0x78, 0x33, 0x48, 0xb6, 0x6f, 0x1a, 0xa9, 0x62, 0x6c, 0xd6, 0x31, 0xf4, 0xfa, 0x1b, 0xd3, 0x2a, 0xd8, 0x8c, 0xf1, 0x1d, 0xb5, 0x20, 0x57, 0xc6, 0x60, 0x86, 0x0d, 0x39, 0xd1, 0x1f, 0xbf, 0x02, 0x4f, 0xab, 0xd4, 0x44, 0x6b, 0x0d, 0x53, 0xc7, 0x96, 0x81, 0xc2, 0x81, 0x16, 0xdf, 0x71, 0xe9, 0xce, 0xe7, 0x4f, 0xd5, 0x6c, 0x8b, 0x7f, 0x04, 0xb3, 0x9f, 0x11, 0x98, 0xcc, 0x72, 0x28, 0x4e, 0x98, 0xbe, 0x95, 0x62, 0xe3, 0x59, 0x26, 0xfb, 0x4f, 0x48, 0xa9, 0xfb, 0xec, 0xaf, 0xe7, 0x29, 0x30, 0x9e, 0x8b, 0x6f, +}; +static const u8 ecccdh_SECP384R1_21_test_vector_our_pub_key[] = { + 0x86, 0x7f, 0x81, 0x10, 0x4c, 0xcd, 0x6b, 0x16, 0x3a, 0x79, 0x02, 0xb6, 0x70, 0xef, 0x40, 0x60, 0x42, 0xcb, 0x0c, 0xce, 0x7d, 0xcd, 0xc6, 0x3d, 0x1d, 0xfc, 0x91, 0xb2, 0xc4, 0x0e, 0x3c, 0xdf, 0x75, 0x95, 0x83, 0x4b, 0xf9, 0xec, 0xeb, 0x79, 0x84, 0x9f, 0x16, 0x36, 0xfc, 0x84, 0x62, 0xfc, 0x9d, 0x4b, 0xde, 0x8e, 0x87, 0x5e, 0xc4, 0x96, 0x97, 0xd2, 0x58, 0xd1, 0xd5, 0x94, 0x65, 0xf8, 0x43, 0x1c, 0x6f, 0x55, 0x31, 0xe1, 0xc5, 0x9e, 0x9f, 0x9e, 0xbe, 0x3c, 0xf1, 0x64, 0xa8, 0xd9, 0xce, 0x10, 0xa1, 0x2f, 0x19, 0x79, 0x28, 0x3a, 0x95, 0x9b, 0xad, 0x24, 0x4d, 0xd8, 0x38, 0x63, +}; +static const u8 ecccdh_SECP384R1_21_test_vector_shared_secret[] = { + 0xdc, 0x4c, 0xa3, 0x92, 0xdc, 0x15, 0xe2, 0x01, 0x85, 0xf2, 0xc6, 0xa8, 0xea, 0x5e, 0xc3, 0x1d, 0xfc, 0x96, 0xf5, 0x61, 0x53, 0xa4, 0x73, 0x94, 0xb3, 0x07, 0x2b, 0x13, 0xd0, 0x01, 0x5f, 0x5d, 0x4a, 0xe1, 0x3b, 0xeb, 0x3b, 0xed, 0x54, 0xd6, 0x58, 0x48, 0xf9, 0xb8, 0x38, 0x3e, 0x6c, 0x95, +}; +static const ecdh_test_case ecccdh_SECP384R1_21_test_case = { + .name = "ECCCDH/SECP384R1 21", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_21_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_21_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_21_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_21_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_21_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_22 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_22_test_vector_our_priv_key[] = { + 0xdc, 0x60, 0xfa, 0x87, 0x36, 0xd7, 0x02, 0x13, 0x5f, 0xf1, 0x6a, 0xab, 0x99, 0x2b, 0xb8, 0x8e, 0xac, 0x39, 0x7f, 0x59, 0x72, 0x45, 0x6c, 0x72, 0xec, 0x44, 0x73, 0x74, 0xd0, 0xd8, 0xce, 0x61, 0x15, 0x38, 0x31, 0xbf, 0xc8, 0x6a, 0xd5, 0xa6, 0xeb, 0x5b, 0x60, 0xbf, 0xb9, 0x6a, 0x86, 0x2c, +}; +static const u8 ecccdh_SECP384R1_22_test_vector_peer_pub_key[] = { + 0x2d, 0xb5, 0xda, 0x5f, 0x94, 0x0e, 0xaa, 0x88, 0x4f, 0x4d, 0xb5, 0xec, 0x21, 0x39, 0xb0, 0x46, 0x9f, 0x38, 0xe4, 0xe6, 0xfb, 0xbc, 0xc5, 0x2d, 0xf1, 0x5c, 0x0f, 0x7c, 0xf7, 0xfc, 0xb1, 0x80, 0x8c, 0x74, 0x97, 0x64, 0xb6, 0xbe, 0x85, 0xd2, 0xfd, 0xc5, 0xb1, 0x6f, 0x58, 0xad, 0x5d, 0xc0, 0x22, 0xe8, 0xb0, 0x2d, 0xcf, 0x33, 0xe1, 0xb5, 0xa0, 0x83, 0x84, 0x95, 0x45, 0xf8, 0x4a, 0xd5, 0xe4, 0x3f, 0x77, 0xcb, 0x71, 0x54, 0x6d, 0xbb, 0xac, 0x0d, 0x11, 0xbd, 0xb2, 0xee, 0x20, 0x2e, 0x9d, 0x38, 0x72, 0xe8, 0xd0, 0x28, 0xc0, 0x89, 0x90, 0x74, 0x6c, 0x5e, 0x1d, 0xde, 0x99, 0x89, +}; +static const u8 ecccdh_SECP384R1_22_test_vector_our_pub_key[] = { + 0xb6, 0x9b, 0xee, 0xde, 0x85, 0xd0, 0xf8, 0x29, 0xfe, 0xc1, 0xb8, 0x93, 0xcc, 0xb9, 0xc3, 0xe0, 0x52, 0xff, 0x69, 0x2e, 0x13, 0xb9, 0x74, 0x53, 0x7b, 0xc5, 0xb0, 0xf9, 0xfe, 0xaf, 0x7b, 0x22, 0xe8, 0x4f, 0x03, 0x23, 0x16, 0x29, 0xb2, 0x48, 0x66, 0xbd, 0xb4, 0xb8, 0xcf, 0x90, 0x89, 0x14, 0x66, 0xf8, 0x5e, 0x2b, 0xfc, 0xab, 0xa2, 0x84, 0x32, 0x85, 0xb0, 0xe1, 0x4e, 0xbc, 0x07, 0xef, 0x7d, 0xaf, 0xff, 0x8b, 0x42, 0x44, 0x16, 0xfe, 0xe6, 0x47, 0xb5, 0x98, 0x97, 0xb6, 0x19, 0xf2, 0x0e, 0xed, 0x95, 0xa6, 0x32, 0xe6, 0xa4, 0x20, 0x6b, 0xf7, 0xda, 0x42, 0x9c, 0x04, 0xc5, 0x60, +}; +static const u8 ecccdh_SECP384R1_22_test_vector_shared_secret[] = { + 0xd7, 0x65, 0xb2, 0x08, 0x11, 0x2d, 0x2b, 0x9e, 0xd5, 0xad, 0x10, 0xc4, 0x04, 0x6e, 0x2e, 0x3b, 0x0d, 0xbf, 0x57, 0xc4, 0x69, 0x32, 0x95, 0x19, 0xe2, 0x39, 0xac, 0x28, 0xb2, 0x5c, 0x7d, 0x85, 0x2b, 0xf7, 0x57, 0xd5, 0xde, 0x0e, 0xe2, 0x71, 0xca, 0xdd, 0x02, 0x1d, 0x86, 0xcf, 0xd3, 0x47, +}; +static const ecdh_test_case ecccdh_SECP384R1_22_test_case = { + .name = "ECCCDH/SECP384R1 22", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_22_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_22_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_22_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_22_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_22_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_23 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_23_test_vector_our_priv_key[] = { + 0x6f, 0xa6, 0xa1, 0xc7, 0x04, 0x73, 0x09, 0x87, 0xaa, 0x63, 0x4b, 0x05, 0x16, 0xa8, 0x26, 0xab, 0xa8, 0xc6, 0xd6, 0x41, 0x1d, 0x3a, 0x4c, 0x89, 0x77, 0x2d, 0x7a, 0x62, 0x61, 0x02, 0x56, 0xa2, 0xe2, 0xf2, 0x89, 0xf5, 0xc3, 0x44, 0x0b, 0x0e, 0xc1, 0xe7, 0x0f, 0xa3, 0x39, 0xe2, 0x51, 0xce, +}; +static const u8 ecccdh_SECP384R1_23_test_vector_peer_pub_key[] = { + 0x32, 0x96, 0x47, 0xba, 0xa3, 0x54, 0x22, 0x4e, 0xb4, 0x41, 0x48, 0x29, 0xc5, 0x36, 0x8c, 0x82, 0xd7, 0x89, 0x3b, 0x39, 0x80, 0x4e, 0x08, 0xcb, 0xb2, 0x18, 0x0f, 0x45, 0x9b, 0xef, 0xc4, 0xb3, 0x47, 0xa3, 0x89, 0xa7, 0x0c, 0x91, 0xa2, 0x3b, 0xd9, 0xd3, 0x0c, 0x83, 0xbe, 0x52, 0x95, 0xd3, 0xcc, 0x8f, 0x61, 0x92, 0x3f, 0xad, 0x2a, 0xa8, 0xe5, 0x05, 0xd6, 0xcf, 0xa1, 0x26, 0xb9, 0xfa, 0xbd, 0x5a, 0xf9, 0xdc, 0xe2, 0x90, 0xb7, 0x56, 0x60, 0xef, 0x06, 0xd1, 0xca, 0xa7, 0x36, 0x81, 0xd0, 0x60, 0x89, 0xc3, 0x3b, 0xc4, 0x24, 0x6b, 0x3a, 0xa3, 0x0d, 0xbc, 0xd2, 0x43, 0x5b, 0x12, +}; +static const u8 ecccdh_SECP384R1_23_test_vector_our_pub_key[] = { + 0x53, 0xde, 0x1f, 0xc1, 0x32, 0x8e, 0x8d, 0xe1, 0x4a, 0xec, 0xab, 0x29, 0xad, 0x8a, 0x40, 0xd6, 0xb1, 0x37, 0x68, 0xf8, 0x6f, 0x7d, 0x29, 0x84, 0x33, 0xd2, 0x0f, 0xec, 0x79, 0x1f, 0x86, 0xf8, 0xbc, 0x73, 0xf3, 0x58, 0x09, 0x8b, 0x25, 0x6a, 0x29, 0x8b, 0xb4, 0x88, 0xde, 0x25, 0x7b, 0xf4, 0xac, 0x28, 0x94, 0x4f, 0xd2, 0x7f, 0x17, 0xb8, 0x29, 0x46, 0xc0, 0x4c, 0x66, 0xc4, 0x1f, 0x00, 0x53, 0xd3, 0x69, 0x2f, 0x27, 0x5d, 0xa5, 0x5c, 0xd8, 0x73, 0x9a, 0x95, 0xbd, 0x8c, 0xd3, 0xaf, 0x2f, 0x96, 0xe4, 0xde, 0x95, 0x9e, 0xa8, 0x34, 0x4d, 0x89, 0x45, 0x37, 0x59, 0x05, 0x85, 0x8b, +}; +static const u8 ecccdh_SECP384R1_23_test_vector_shared_secret[] = { + 0xd3, 0x77, 0x88, 0x50, 0xae, 0xb5, 0x88, 0x04, 0xfb, 0xe9, 0xdf, 0xe6, 0xf3, 0x8b, 0x9f, 0xa8, 0xe2, 0x0c, 0x2c, 0xa4, 0xe0, 0xde, 0xc3, 0x35, 0xaa, 0xfc, 0xec, 0xa0, 0x33, 0x3e, 0x3f, 0x24, 0x90, 0xb5, 0x3c, 0x0c, 0x1a, 0x14, 0xa8, 0x31, 0xba, 0x37, 0xc4, 0xb9, 0xd7, 0x4b, 0xe0, 0xf2, +}; +static const ecdh_test_case ecccdh_SECP384R1_23_test_case = { + .name = "ECCCDH/SECP384R1 23", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_23_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_23_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_23_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_23_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_23_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP384R1 +#define ECCCDH_SECP384R1_SELF_TEST_24 +/*** Tests for ECCCDH/SECP384R1 ***/ +static const u8 ecccdh_SECP384R1_24_test_vector_our_priv_key[] = { + 0x74, 0xad, 0x83, 0x86, 0xc1, 0xcb, 0x2c, 0xa0, 0xfc, 0xde, 0xb3, 0x1e, 0x08, 0x69, 0xbb, 0x3f, 0x48, 0xc0, 0x36, 0xaf, 0xe2, 0xef, 0x11, 0x0c, 0xa3, 0x02, 0xbc, 0x8b, 0x91, 0x0f, 0x62, 0x1c, 0x9f, 0xcc, 0x54, 0xce, 0xc3, 0x2b, 0xb8, 0x9e, 0xc7, 0xca, 0xa8, 0x4c, 0x7b, 0x8e, 0x54, 0xa8, +}; +static const u8 ecccdh_SECP384R1_24_test_vector_peer_pub_key[] = { + 0x29, 0xd8, 0xa3, 0x6d, 0x22, 0x20, 0x0a, 0x75, 0xb7, 0xae, 0xa1, 0xbb, 0x47, 0xcd, 0xfc, 0xb1, 0xb7, 0xfd, 0x66, 0xde, 0x96, 0x70, 0x41, 0x43, 0x47, 0x28, 0xab, 0x5d, 0x53, 0x3a, 0x06, 0x0d, 0xf7, 0x32, 0x13, 0x06, 0x00, 0xfe, 0x6f, 0x75, 0x85, 0x2a, 0x87, 0x1f, 0xb2, 0x93, 0x8e, 0x39, 0xe1, 0x9b, 0x53, 0xdb, 0x52, 0x83, 0x95, 0xde, 0x89, 0x7a, 0x45, 0x10, 0x89, 0x67, 0x71, 0x5e, 0xb8, 0xcb, 0x55, 0xc3, 0xfc, 0xbf, 0x23, 0x37, 0x93, 0x72, 0xc0, 0x87, 0x3a, 0x05, 0x8d, 0x57, 0x54, 0x4b, 0x10, 0x2e, 0xcc, 0xe7, 0x22, 0xb2, 0xcc, 0xab, 0xb1, 0xa6, 0x03, 0x77, 0x4f, 0xd5, +}; +static const u8 ecccdh_SECP384R1_24_test_vector_our_pub_key[] = { + 0x27, 0xa3, 0xe8, 0x3c, 0xfb, 0x9d, 0x51, 0x22, 0xe7, 0x31, 0x29, 0xd8, 0x01, 0x61, 0x58, 0x57, 0xda, 0x7c, 0xc0, 0x89, 0xcc, 0xcc, 0x9c, 0x54, 0xab, 0x30, 0x32, 0xa1, 0x9e, 0x0a, 0x0a, 0x9f, 0x67, 0x73, 0x46, 0xe3, 0x7f, 0x08, 0xa0, 0xb3, 0xed, 0x8d, 0xa6, 0xe5, 0xdd, 0x69, 0x10, 0x63, 0x8d, 0x60, 0xe4, 0x4a, 0xa5, 0xe0, 0xfd, 0x30, 0xc9, 0x18, 0x45, 0x67, 0x96, 0xaf, 0x37, 0xf0, 0xe4, 0x19, 0x57, 0x90, 0x16, 0x45, 0xe5, 0xc5, 0x96, 0xc6, 0xd9, 0x89, 0xf5, 0x85, 0x9b, 0x03, 0xa0, 0xbd, 0x7d, 0x1f, 0x4e, 0x77, 0x93, 0x6f, 0xff, 0x3c, 0x74, 0xd2, 0x04, 0xe5, 0x38, 0x8e, +}; +static const u8 ecccdh_SECP384R1_24_test_vector_shared_secret[] = { + 0x81, 0xe1, 0xe7, 0x15, 0x75, 0xbb, 0x45, 0x05, 0x49, 0x8d, 0xe0, 0x97, 0x35, 0x01, 0x86, 0x43, 0x0a, 0x62, 0x42, 0xfa, 0x6c, 0x57, 0xb8, 0x5a, 0x5f, 0x98, 0x4a, 0x23, 0x37, 0x11, 0x23, 0xd2, 0xd1, 0x42, 0x4e, 0xef, 0xbf, 0x80, 0x42, 0x58, 0x39, 0x2b, 0xc7, 0x23, 0xe4, 0xef, 0x1e, 0x35, +}; +static const ecdh_test_case ecccdh_SECP384R1_24_test_case = { + .name = "ECCCDH/SECP384R1 24", + .ecdh_type = ECCCDH, + .ec_str_p = &secp384r1_str_params, + .our_priv_key = ecccdh_SECP384R1_24_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP384R1_24_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP384R1_24_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP384R1_24_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP384R1_24_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP384R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_0 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_0_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0x7e, 0xec, 0xc0, 0x7a, 0xb4, 0xb3, 0x29, 0x06, 0x8f, 0xba, 0x65, 0xe5, 0x6a, 0x1f, 0x88, 0x90, 0xaa, 0x93, 0x5e, 0x57, 0x13, 0x4a, 0xe0, 0xff, 0xcc, 0xe8, 0x02, 0x73, 0x51, 0x51, 0xf4, 0xea, 0xc6, 0x56, 0x4f, 0x6e, 0xe9, 0x97, 0x4c, 0x5e, 0x68, 0x87, 0xa1, 0xfe, 0xfe, 0xe5, 0x74, 0x3a, 0xe2, 0x24, 0x1b, 0xfe, 0xb9, 0x5d, 0x5c, 0xe3, 0x1d, 0xdc, 0xb6, 0xf9, 0xed, 0xb4, 0xd6, 0xfc, 0x47, +}; +static const u8 ecccdh_SECP521R1_0_test_vector_peer_pub_key[] = { + 0x00, 0x68, 0x5a, 0x48, 0xe8, 0x6c, 0x79, 0xf0, 0xf0, 0x87, 0x5f, 0x7b, 0xc1, 0x8d, 0x25, 0xeb, 0x5f, 0xc8, 0xc0, 0xb0, 0x7e, 0x5d, 0xa4, 0xf4, 0x37, 0x0f, 0x3a, 0x94, 0x90, 0x34, 0x08, 0x54, 0x33, 0x4b, 0x1e, 0x1b, 0x87, 0xfa, 0x39, 0x54, 0x64, 0xc6, 0x06, 0x26, 0x12, 0x4a, 0x4e, 0x70, 0xd0, 0xf7, 0x85, 0x60, 0x1d, 0x37, 0xc0, 0x98, 0x70, 0xeb, 0xf1, 0x76, 0x66, 0x68, 0x77, 0xa2, 0x04, 0x6d, 0x01, 0xba, 0x52, 0xc5, 0x6f, 0xc8, 0x77, 0x6d, 0x9e, 0x8f, 0x5d, 0xb4, 0xf0, 0xcc, 0x27, 0x63, 0x6d, 0x0b, 0x74, 0x1b, 0xbe, 0x05, 0x40, 0x06, 0x97, 0x94, 0x2e, 0x80, 0xb7, 0x39, 0x88, 0x4a, 0x83, 0xbd, 0xe9, 0x9e, 0x0f, 0x67, 0x16, 0x93, 0x9e, 0x63, 0x2b, 0xc8, 0x98, 0x6f, 0xa1, 0x8d, 0xcc, 0xd4, 0x43, 0xa3, 0x48, 0xb6, 0xc3, 0xe5, 0x22, 0x49, 0x79, 0x55, 0xa4, 0xf3, 0xc3, 0x02, 0xf6, 0x76, +}; +static const u8 ecccdh_SECP521R1_0_test_vector_our_pub_key[] = { + 0x00, 0x60, 0x2f, 0x9d, 0x0c, 0xf9, 0xe5, 0x26, 0xb2, 0x9e, 0x22, 0x38, 0x1c, 0x20, 0x3c, 0x48, 0xa8, 0x86, 0xc2, 0xb0, 0x67, 0x30, 0x33, 0x36, 0x63, 0x14, 0xf1, 0xff, 0xbc, 0xba, 0x24, 0x0b, 0xa4, 0x2f, 0x4e, 0xf3, 0x8a, 0x76, 0x17, 0x46, 0x35, 0xf9, 0x1e, 0x6b, 0x4e, 0xd3, 0x42, 0x75, 0xeb, 0x01, 0xc8, 0x46, 0x7d, 0x05, 0xca, 0x80, 0x31, 0x5b, 0xf1, 0xa7, 0xbb, 0xd9, 0x45, 0xf5, 0x50, 0xa5, 0x01, 0xb7, 0xc8, 0x5f, 0x26, 0xf5, 0xd4, 0xb2, 0xd7, 0x35, 0x5c, 0xf6, 0xb0, 0x21, 0x17, 0x65, 0x99, 0x43, 0x76, 0x2b, 0x6d, 0x1d, 0xb5, 0xab, 0x4f, 0x1d, 0xbc, 0x44, 0xce, 0x7b, 0x29, 0x46, 0xeb, 0x6c, 0x7d, 0xe3, 0x42, 0x96, 0x28, 0x93, 0xfd, 0x38, 0x7d, 0x1b, 0x73, 0xd7, 0xa8, 0x67, 0x2d, 0x1f, 0x23, 0x69, 0x61, 0x17, 0x0b, 0x7e, 0xb3, 0x57, 0x99, 0x53, 0xee, 0x5c, 0xdc, 0x88, 0xcd, 0x2d, +}; +static const u8 ecccdh_SECP521R1_0_test_vector_shared_secret[] = { + 0x00, 0x5f, 0xc7, 0x04, 0x77, 0xc3, 0xe6, 0x3b, 0xc3, 0x95, 0x4b, 0xd0, 0xdf, 0x3e, 0xa0, 0xd1, 0xf4, 0x1e, 0xe2, 0x17, 0x46, 0xed, 0x95, 0xfc, 0x5e, 0x1f, 0xdf, 0x90, 0x93, 0x0d, 0x5e, 0x13, 0x66, 0x72, 0xd7, 0x2c, 0xc7, 0x70, 0x74, 0x2d, 0x17, 0x11, 0xc3, 0xc3, 0xa4, 0xc3, 0x34, 0xa0, 0xad, 0x97, 0x59, 0x43, 0x6a, 0x4d, 0x3c, 0x5b, 0xf6, 0xe7, 0x4b, 0x95, 0x78, 0xfa, 0xc1, 0x48, 0xc8, 0x31, +}; +static const ecdh_test_case ecccdh_SECP521R1_0_test_case = { + .name = "ECCCDH/SECP521R1 0", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_0_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_0_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_0_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_0_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_0_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_1 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_1_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x81, 0x6f, 0x19, 0xc1, 0xfb, 0x10, 0xef, 0x94, 0xd4, 0xa1, 0xd8, 0x1c, 0x15, 0x6e, 0xc3, 0xd1, 0xde, 0x08, 0xb6, 0x67, 0x61, 0xf0, 0x3f, 0x06, 0xee, 0x4b, 0xb9, 0xdc, 0xeb, 0xbb, 0xfe, 0x1e, 0xaa, 0x1e, 0xd4, 0x9a, 0x6a, 0x99, 0x08, 0x38, 0xd8, 0xed, 0x31, 0x8c, 0x14, 0xd7, 0x4c, 0xc8, 0x72, 0xf9, 0x5d, 0x05, 0xd0, 0x7a, 0xd5, 0x0f, 0x62, 0x1c, 0xeb, 0x62, 0x0c, 0xd9, 0x05, 0xcf, 0xb8, +}; +static const u8 ecccdh_SECP521R1_1_test_vector_peer_pub_key[] = { + 0x01, 0xdf, 0x27, 0x7c, 0x15, 0x21, 0x08, 0x34, 0x9b, 0xc3, 0x4d, 0x53, 0x9e, 0xe0, 0xcf, 0x06, 0xb2, 0x4f, 0x5d, 0x35, 0x00, 0x67, 0x7b, 0x44, 0x45, 0x45, 0x3c, 0xcc, 0x21, 0x40, 0x94, 0x53, 0xaa, 0xfb, 0x8a, 0x72, 0xa0, 0xbe, 0x9e, 0xbe, 0x54, 0xd1, 0x22, 0x70, 0xaa, 0x51, 0xb3, 0xab, 0x7f, 0x31, 0x6a, 0xa5, 0xe7, 0x4a, 0x95, 0x1c, 0x5e, 0x53, 0xf7, 0x4c, 0xd9, 0x5f, 0xc2, 0x9a, 0xee, 0x7a, 0x01, 0x3d, 0x52, 0xf3, 0x3a, 0x9f, 0x3c, 0x14, 0x38, 0x4d, 0x15, 0x87, 0xfa, 0x8a, 0xbe, 0x7a, 0xed, 0x74, 0xbc, 0x33, 0x74, 0x9a, 0xd9, 0xc5, 0x70, 0xb4, 0x71, 0x77, 0x64, 0x22, 0xc7, 0xd4, 0x50, 0x5d, 0x9b, 0x0a, 0x96, 0xb3, 0xbf, 0xac, 0x04, 0x1e, 0x4c, 0x6a, 0x69, 0x90, 0xae, 0x7f, 0x70, 0x0e, 0x5b, 0x4a, 0x66, 0x40, 0x22, 0x91, 0x12, 0xde, 0xaf, 0xa0, 0xcd, 0x8b, 0xb0, 0xd0, 0x89, 0xb0, +}; +static const u8 ecccdh_SECP521R1_1_test_vector_our_pub_key[] = { + 0x00, 0xd4, 0x56, 0x15, 0xed, 0x5d, 0x37, 0xfd, 0xe6, 0x99, 0x61, 0x0a, 0x62, 0xcd, 0x43, 0xba, 0x76, 0xbe, 0xdd, 0x8f, 0x85, 0xed, 0x31, 0x00, 0x5f, 0xe0, 0x0d, 0x64, 0x50, 0xfb, 0xbd, 0x10, 0x12, 0x91, 0xab, 0xd9, 0x6d, 0x49, 0x45, 0xa8, 0xb5, 0x7b, 0xc7, 0x3b, 0x3f, 0xe9, 0xf4, 0x67, 0x11, 0x05, 0x30, 0x9e, 0xc9, 0xb6, 0x87, 0x9d, 0x05, 0x51, 0xd9, 0x30, 0xda, 0xc8, 0xba, 0x45, 0xd2, 0x55, 0x01, 0x42, 0x53, 0x32, 0x84, 0x4e, 0x59, 0x2b, 0x44, 0x0c, 0x00, 0x27, 0x97, 0x2a, 0xd1, 0x52, 0x64, 0x31, 0xc0, 0x67, 0x32, 0xdf, 0x19, 0xcd, 0x46, 0xa2, 0x42, 0x17, 0x2d, 0x4d, 0xd6, 0x7c, 0x2c, 0x8c, 0x99, 0xdf, 0xc2, 0x2e, 0x49, 0x94, 0x9a, 0x56, 0xcf, 0x90, 0xc6, 0x47, 0x36, 0x35, 0xce, 0x82, 0xf2, 0x5b, 0x33, 0x68, 0x2f, 0xb1, 0x9b, 0xc3, 0x3b, 0xd9, 0x10, 0xed, 0x8c, 0xe3, 0xa7, 0xfa, +}; +static const u8 ecccdh_SECP521R1_1_test_vector_shared_secret[] = { + 0x00, 0x0b, 0x39, 0x20, 0xac, 0x83, 0x0a, 0xde, 0x81, 0x2c, 0x8f, 0x96, 0x80, 0x5d, 0xa2, 0x23, 0x6e, 0x00, 0x2a, 0xcb, 0xbf, 0x13, 0x59, 0x6a, 0x9a, 0xb2, 0x54, 0xd4, 0x4d, 0x0e, 0x91, 0xb6, 0x25, 0x5e, 0xbf, 0x12, 0x29, 0xf3, 0x66, 0xfb, 0x5a, 0x05, 0xc5, 0x88, 0x4e, 0xf4, 0x60, 0x32, 0xc2, 0x6d, 0x42, 0x18, 0x92, 0x73, 0xca, 0x4e, 0xfa, 0x4c, 0x3d, 0xb6, 0xbd, 0x12, 0xa6, 0x85, 0x37, 0x59, +}; +static const ecdh_test_case ecccdh_SECP521R1_1_test_case = { + .name = "ECCCDH/SECP521R1 1", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_1_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_1_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_1_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_1_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_1_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_2 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_2_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0x2f, 0x2e, 0x0c, 0x6d, 0x9e, 0x9d, 0x11, 0x7c, 0xeb, 0x97, 0x23, 0xbc, 0xed, 0x02, 0xeb, 0x3d, 0x4e, 0xeb, 0xf5, 0xfe, 0xea, 0xf8, 0xee, 0x01, 0x13, 0xcc, 0xd8, 0x05, 0x7b, 0x13, 0xdd, 0xd4, 0x16, 0xe0, 0xb7, 0x42, 0x80, 0xc2, 0xd0, 0xba, 0x8e, 0xd2, 0x91, 0xc4, 0x43, 0xbc, 0x1b, 0x14, 0x1c, 0xaf, 0x8a, 0xfb, 0x3a, 0x71, 0xf9, 0x7f, 0x57, 0xc2, 0x25, 0xc0, 0x3e, 0x1e, 0x4d, 0x42, 0xb0, +}; +static const u8 ecccdh_SECP521R1_2_test_vector_peer_pub_key[] = { + 0x00, 0x92, 0xdb, 0x31, 0x42, 0x56, 0x4d, 0x27, 0xa5, 0xf0, 0x00, 0x6f, 0x81, 0x99, 0x08, 0xfb, 0xa1, 0xb8, 0x50, 0x38, 0xa5, 0xbc, 0x25, 0x09, 0x90, 0x6a, 0x49, 0x7d, 0xaa, 0xc6, 0x7f, 0xd7, 0xae, 0xe0, 0xfc, 0x2d, 0xab, 0xa4, 0xe4, 0x33, 0x4e, 0xea, 0xef, 0x0e, 0x00, 0x19, 0x20, 0x4b, 0x47, 0x1c, 0xd8, 0x80, 0x24, 0xf8, 0x21, 0x15, 0xd8, 0x14, 0x9c, 0xc0, 0xcf, 0x4f, 0x7c, 0xe1, 0xa4, 0xd5, 0x01, 0x6b, 0xad, 0x06, 0x23, 0xf5, 0x17, 0xb1, 0x58, 0xd9, 0x88, 0x18, 0x41, 0xd2, 0x57, 0x1e, 0xfb, 0xad, 0x63, 0xf8, 0x5c, 0xbe, 0x2e, 0x58, 0x19, 0x60, 0xc5, 0xd6, 0x70, 0x60, 0x1a, 0x67, 0x60, 0x27, 0x26, 0x75, 0xa5, 0x48, 0x99, 0x62, 0x17, 0xe4, 0xab, 0x2b, 0x8e, 0xbc, 0xe3, 0x1d, 0x71, 0xfc, 0xa6, 0x3f, 0xcc, 0x3c, 0x08, 0xe9, 0x1c, 0x1d, 0x8e, 0xdd, 0x91, 0xcf, 0x6f, 0xe8, 0x45, 0xf8, +}; +static const u8 ecccdh_SECP521R1_2_test_vector_our_pub_key[] = { + 0x00, 0x71, 0x7f, 0xcb, 0x3d, 0x4a, 0x40, 0xd1, 0x03, 0x87, 0x1e, 0xde, 0x04, 0x4d, 0xc8, 0x03, 0xdb, 0x50, 0x8a, 0xaa, 0x4a, 0xe7, 0x4b, 0x70, 0xb9, 0xfb, 0x8d, 0x8d, 0xfd, 0x84, 0xbf, 0xec, 0xfa, 0xd1, 0x78, 0x71, 0x87, 0x96, 0x98, 0xc2, 0x92, 0xd2, 0xfd, 0x5e, 0x17, 0xb4, 0xf9, 0x34, 0x36, 0x36, 0xc5, 0x31, 0xa4, 0xfa, 0xc6, 0x8a, 0x35, 0xa9, 0x36, 0x65, 0x54, 0x6b, 0x9a, 0x87, 0x86, 0x79, 0x00, 0xf3, 0xd9, 0x6a, 0x86, 0x37, 0x03, 0x69, 0x93, 0xab, 0x5d, 0x24, 0x45, 0x00, 0xff, 0xf9, 0xd2, 0x77, 0x21, 0x12, 0x82, 0x6f, 0x64, 0x36, 0x60, 0x3d, 0x3e, 0xb2, 0x34, 0xa4, 0x4d, 0x5c, 0x4e, 0x5c, 0x57, 0x72, 0x34, 0x67, 0x9c, 0x4f, 0x9d, 0xf7, 0x25, 0xee, 0x5b, 0x91, 0x18, 0xf2, 0x3d, 0x8a, 0x58, 0xd0, 0xcc, 0x01, 0x09, 0x6d, 0xaf, 0x70, 0xe8, 0xdf, 0xec, 0x01, 0x28, 0xbd, 0xc2, 0xe8, +}; +static const u8 ecccdh_SECP521R1_2_test_vector_shared_secret[] = { + 0x00, 0x6b, 0x38, 0x0a, 0x6e, 0x95, 0x67, 0x92, 0x77, 0xcf, 0xee, 0x4e, 0x83, 0x53, 0xbf, 0x96, 0xef, 0x2a, 0x1e, 0xbd, 0xd0, 0x60, 0x74, 0x9f, 0x2f, 0x04, 0x6f, 0xe5, 0x71, 0x05, 0x37, 0x40, 0xbb, 0xcc, 0x9a, 0x0b, 0x55, 0x79, 0x0b, 0xc9, 0xab, 0x56, 0xc3, 0x20, 0x8a, 0xa0, 0x5d, 0xdf, 0x74, 0x6a, 0x10, 0xa3, 0xad, 0x69, 0x4d, 0xaa, 0xe0, 0x0d, 0x98, 0x0d, 0x94, 0x4a, 0xab, 0xc6, 0xa0, 0x8f, +}; +static const ecdh_test_case ecccdh_SECP521R1_2_test_case = { + .name = "ECCCDH/SECP521R1 2", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_2_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_2_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_2_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_2_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_2_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_3 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_3_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0xe5, 0x48, 0xa7, 0x9d, 0x8b, 0x05, 0xf9, 0x23, 0xb9, 0x82, 0x5d, 0x11, 0xb6, 0x56, 0xf2, 0x22, 0xe8, 0xcb, 0x98, 0xb0, 0xf8, 0x9d, 0xe1, 0xd3, 0x17, 0x18, 0x4d, 0xc5, 0xa6, 0x98, 0xf7, 0xc7, 0x11, 0x61, 0xee, 0x7d, 0xc1, 0x1c, 0xd3, 0x1f, 0x4f, 0x4f, 0x8a, 0xe3, 0xa9, 0x81, 0xe1, 0xa3, 0xe7, 0x8b, 0xde, 0xbb, 0x97, 0xd7, 0xc2, 0x04, 0xb9, 0x26, 0x1b, 0x4e, 0xf9, 0x2e, 0x09, 0x18, 0xe0, +}; +static const u8 ecccdh_SECP521R1_3_test_vector_peer_pub_key[] = { + 0x00, 0xfd, 0xd4, 0x0d, 0x9e, 0x9d, 0x97, 0x40, 0x27, 0xcb, 0x3b, 0xae, 0x68, 0x21, 0x62, 0xea, 0xc1, 0x32, 0x8a, 0xd6, 0x1b, 0xc4, 0x35, 0x3c, 0x45, 0xbf, 0x5a, 0xfe, 0x76, 0xbf, 0x60, 0x7d, 0x28, 0x94, 0xc8, 0xcc, 0xe2, 0x36, 0x95, 0xd9, 0x20, 0xf2, 0x46, 0x4f, 0xda, 0x47, 0x73, 0xd4, 0x69, 0x3b, 0xe4, 0xb3, 0x77, 0x35, 0x84, 0x69, 0x1b, 0xdb, 0x03, 0x29, 0xb7, 0xf4, 0xc8, 0x6c, 0xc2, 0x99, 0x00, 0x34, 0xce, 0xac, 0x6a, 0x3f, 0xef, 0x1c, 0x3e, 0x1c, 0x49, 0x4b, 0xfe, 0x8d, 0x87, 0x2b, 0x18, 0x38, 0x32, 0x21, 0x9a, 0x7e, 0x14, 0xda, 0x41, 0x4d, 0x4e, 0x34, 0x74, 0x57, 0x36, 0x71, 0xec, 0x19, 0xb0, 0x33, 0xbe, 0x83, 0x1b, 0x91, 0x54, 0x35, 0x90, 0x59, 0x25, 0xb4, 0x49, 0x47, 0xc5, 0x92, 0x95, 0x99, 0x45, 0xb4, 0xeb, 0x7c, 0x95, 0x1c, 0x3b, 0x9c, 0x8c, 0xf5, 0x25, 0x30, 0xba, 0x23, +}; +static const u8 ecccdh_SECP521R1_3_test_vector_our_pub_key[] = { + 0x00, 0x0c, 0xe8, 0x00, 0x21, 0x7e, 0xd2, 0x43, 0xdd, 0x10, 0xa7, 0x9a, 0xd7, 0x3d, 0xf5, 0x78, 0xaa, 0x8a, 0x3f, 0x91, 0x94, 0xaf, 0x52, 0x8c, 0xd1, 0x09, 0x4b, 0xbf, 0xee, 0x27, 0xa3, 0xb5, 0x48, 0x1a, 0xd5, 0x86, 0x2c, 0x88, 0x76, 0xc0, 0xc3, 0xf9, 0x12, 0x94, 0xc0, 0xab, 0x3a, 0xa8, 0x06, 0xd9, 0x02, 0x0c, 0xba, 0xa2, 0xed, 0x72, 0xb7, 0xfe, 0xcd, 0xc5, 0xa0, 0x9a, 0x6d, 0xad, 0x6f, 0x32, 0x01, 0x54, 0x3c, 0x9a, 0xb4, 0x5b, 0x12, 0x46, 0x92, 0x32, 0x91, 0x8e, 0x21, 0xd5, 0xa3, 0x51, 0xf9, 0xa4, 0xb9, 0xcb, 0xf9, 0xef, 0xb2, 0xaf, 0xcc, 0x40, 0x2f, 0xa9, 0xb3, 0x16, 0x50, 0xbe, 0xc2, 0xd6, 0x41, 0xa0, 0x5c, 0x44, 0x0d, 0x35, 0x33, 0x1c, 0x08, 0x93, 0xd1, 0x1f, 0xb1, 0x31, 0x51, 0x33, 0x59, 0x88, 0xb3, 0x03, 0x34, 0x13, 0x01, 0xa7, 0x3d, 0xc5, 0xf6, 0x1d, 0x57, 0x4e, 0x67, 0xd9, +}; +static const u8 ecccdh_SECP521R1_3_test_vector_shared_secret[] = { + 0x00, 0xfb, 0xbc, 0xd0, 0xb8, 0xd0, 0x53, 0x31, 0xfe, 0xf6, 0x08, 0x6f, 0x22, 0xa6, 0xcc, 0xe4, 0xd3, 0x57, 0x24, 0xab, 0x7a, 0x2f, 0x49, 0xdd, 0x84, 0x58, 0xd0, 0xbf, 0xd5, 0x7a, 0x0b, 0x8b, 0x70, 0xf2, 0x46, 0xc1, 0x7c, 0x44, 0x68, 0xc0, 0x76, 0x87, 0x4b, 0x0d, 0xff, 0x7a, 0x03, 0x36, 0x82, 0x3b, 0x19, 0xe9, 0x8b, 0xf1, 0xce, 0xc0, 0x5e, 0x4b, 0xef, 0xfb, 0x05, 0x91, 0xf9, 0x77, 0x13, 0xc6, +}; +static const ecdh_test_case ecccdh_SECP521R1_3_test_case = { + .name = "ECCCDH/SECP521R1 3", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_3_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_3_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_3_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_3_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_3_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_4 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_4_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0xc8, 0xaa, 0xe9, 0x4b, 0xb1, 0x0b, 0x8c, 0xa4, 0xf7, 0xbe, 0x57, 0x7b, 0x4f, 0xb3, 0x2b, 0xb2, 0x38, 0x10, 0x32, 0xc4, 0x94, 0x2c, 0x24, 0xfc, 0x2d, 0x75, 0x3e, 0x7c, 0xc5, 0xe4, 0x7b, 0x48, 0x33, 0x89, 0xd9, 0xf3, 0xb9, 0x56, 0xd2, 0x0e, 0xe9, 0x00, 0x1b, 0x1e, 0xef, 0x9f, 0x23, 0x54, 0x5f, 0x72, 0xc5, 0x60, 0x21, 0x40, 0x04, 0x68, 0x39, 0xe9, 0x63, 0x31, 0x3c, 0x3d, 0xec, 0xc8, 0x64, +}; +static const u8 ecccdh_SECP521R1_4_test_vector_peer_pub_key[] = { + 0x00, 0x98, 0xd9, 0x9d, 0xee, 0x08, 0x16, 0x55, 0x0e, 0x84, 0xdb, 0xfc, 0xed, 0x7e, 0x88, 0x13, 0x7f, 0xdd, 0xcf, 0x58, 0x1a, 0x72, 0x5a, 0x45, 0x50, 0x21, 0x11, 0x5f, 0xe4, 0x9f, 0x8d, 0xc3, 0xcf, 0x23, 0x3c, 0xd9, 0xea, 0x0e, 0x6f, 0x03, 0x9d, 0xc7, 0x91, 0x9d, 0xa9, 0x73, 0xcd, 0xce, 0xac, 0xa2, 0x05, 0xda, 0x39, 0xe0, 0xbd, 0x98, 0xc8, 0x06, 0x25, 0x36, 0xc4, 0x7f, 0x25, 0x8f, 0x44, 0xb5, 0x00, 0xcd, 0x22, 0x5c, 0x87, 0x97, 0x37, 0x1b, 0xe0, 0xc4, 0x29, 0x7d, 0x2b, 0x45, 0x77, 0x40, 0x10, 0x0c, 0x77, 0x41, 0x41, 0xd8, 0xf2, 0x14, 0xc2, 0x3b, 0x61, 0xaa, 0x2b, 0x6c, 0xd4, 0x80, 0x6b, 0x9b, 0x70, 0x72, 0x2a, 0xa4, 0x96, 0x5f, 0xb6, 0x22, 0xf4, 0x2b, 0x73, 0x91, 0xe2, 0x7e, 0x5e, 0xc2, 0x1c, 0x56, 0x79, 0xc5, 0xb0, 0x6b, 0x59, 0x12, 0x73, 0x72, 0x99, 0x7d, 0x42, 0x1a, 0xdc, 0x1e, +}; +static const u8 ecccdh_SECP521R1_4_test_vector_our_pub_key[] = { + 0x01, 0x06, 0xa1, 0x4e, 0x2e, 0xe8, 0xff, 0x97, 0x0a, 0xa8, 0xab, 0x0c, 0x79, 0xb9, 0x7a, 0x33, 0xbb, 0xa2, 0x95, 0x8e, 0x07, 0x0b, 0x75, 0xb9, 0x47, 0x36, 0xb7, 0x7b, 0xbe, 0x3f, 0x77, 0x73, 0x24, 0xfa, 0x52, 0x87, 0x27, 0x71, 0xaa, 0x88, 0xa6, 0x3a, 0x9e, 0x84, 0x90, 0xc3, 0x37, 0x8d, 0xf4, 0xdc, 0x76, 0x0c, 0xd1, 0x4d, 0x62, 0xbe, 0x70, 0x07, 0x79, 0xdd, 0x1a, 0x43, 0x77, 0x94, 0x36, 0x56, 0x00, 0x23, 0x66, 0xce, 0x39, 0x41, 0xe0, 0xb2, 0x84, 0xb1, 0xaa, 0x81, 0x21, 0x5d, 0x0d, 0x3b, 0x97, 0x78, 0xfc, 0xe2, 0x3c, 0x8c, 0xd1, 0xe4, 0xed, 0x6f, 0xa0, 0xab, 0xf6, 0x21, 0x56, 0xc9, 0x1d, 0x4b, 0x3e, 0xb5, 0x59, 0x99, 0xc3, 0x47, 0x1b, 0xed, 0x27, 0x5e, 0x9e, 0x60, 0xe5, 0xaa, 0x9d, 0x69, 0x0d, 0x31, 0x0b, 0xfb, 0x15, 0xc9, 0xc5, 0xbb, 0xd6, 0xf5, 0xe9, 0xeb, 0x39, 0x68, 0x2b, 0x74, +}; +static const u8 ecccdh_SECP521R1_4_test_vector_shared_secret[] = { + 0x01, 0x45, 0xcf, 0xa3, 0x8f, 0x25, 0x94, 0x35, 0x16, 0xc9, 0x6a, 0x5f, 0xd4, 0xbf, 0xeb, 0xb2, 0xf6, 0x45, 0xd1, 0x05, 0x20, 0x11, 0x7a, 0xa5, 0x19, 0x71, 0xef, 0xf4, 0x42, 0x80, 0x8a, 0x23, 0xb4, 0xe2, 0x3c, 0x18, 0x7e, 0x63, 0x9f, 0xf9, 0x28, 0xc3, 0x72, 0x5f, 0xbd, 0x1c, 0x0c, 0x2a, 0xd0, 0xd4, 0xae, 0xb2, 0x07, 0xbc, 0x1a, 0x6f, 0xb6, 0xcb, 0x6d, 0x46, 0x78, 0x88, 0xdc, 0x04, 0x4b, 0x3c, +}; +static const ecdh_test_case ecccdh_SECP521R1_4_test_case = { + .name = "ECCCDH/SECP521R1 4", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_4_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_4_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_4_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_4_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_4_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_5 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_5_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x9b, 0x0a, 0xf1, 0x37, 0xc9, 0x69, 0x6c, 0x75, 0xb7, 0xe6, 0xdf, 0x7b, 0x73, 0x15, 0x6b, 0xb2, 0xd4, 0x5f, 0x48, 0x2e, 0x5a, 0x42, 0x17, 0x32, 0x4f, 0x47, 0x8b, 0x10, 0xce, 0xb7, 0x6a, 0xf0, 0x97, 0x24, 0xcf, 0x86, 0xaf, 0xa3, 0x16, 0xe7, 0xf8, 0x99, 0x18, 0xd3, 0x1d, 0x54, 0x82, 0x4a, 0x5c, 0x33, 0x10, 0x7a, 0x48, 0x3c, 0x15, 0xc1, 0x5b, 0x96, 0xed, 0xc6, 0x61, 0x34, 0x0b, 0x1c, 0x0e, +}; +static const u8 ecccdh_SECP521R1_5_test_vector_peer_pub_key[] = { + 0x00, 0x7a, 0xe1, 0x15, 0xad, 0xaa, 0xf0, 0x41, 0x69, 0x1a, 0xb6, 0xb7, 0xfb, 0x8c, 0x92, 0x1f, 0x99, 0xd8, 0xed, 0x32, 0xd2, 0x83, 0xd6, 0x70, 0x84, 0xe8, 0x0b, 0x9a, 0xd9, 0xc4, 0x0c, 0x56, 0xcd, 0x98, 0x38, 0x9f, 0xb0, 0xa8, 0x49, 0xd9, 0xec, 0xf7, 0x26, 0x8c, 0x29, 0x7b, 0x6f, 0x93, 0x40, 0x61, 0x19, 0xf4, 0x0e, 0x32, 0xb5, 0x77, 0x3e, 0xd2, 0x5a, 0x28, 0xa9, 0xa8, 0x5c, 0x4a, 0x75, 0x88, 0x01, 0xa2, 0x8e, 0x00, 0x4e, 0x37, 0xee, 0xae, 0xfe, 0x1f, 0x4d, 0xbb, 0x71, 0xf1, 0x87, 0x86, 0x96, 0x14, 0x1a, 0xf3, 0xa1, 0x0a, 0x96, 0x91, 0xc4, 0xed, 0x93, 0x48, 0x72, 0x14, 0x64, 0x3b, 0x76, 0x1f, 0xa4, 0xb0, 0xfb, 0xee, 0xb2, 0x47, 0xcf, 0x6d, 0x3f, 0xba, 0x7a, 0x60, 0x69, 0x75, 0x36, 0xad, 0x03, 0xf4, 0x9b, 0x80, 0xa9, 0xd1, 0xcb, 0x07, 0x96, 0x73, 0x65, 0x49, 0x77, 0xc5, 0xfa, 0x94, +}; +static const u8 ecccdh_SECP521R1_5_test_vector_our_pub_key[] = { + 0x00, 0x74, 0x8c, 0xdb, 0xb8, 0x75, 0xd3, 0x5f, 0x4b, 0xcc, 0xb6, 0x2a, 0xbe, 0x20, 0xe8, 0x2d, 0x32, 0xe4, 0xc1, 0x4d, 0xc2, 0xfe, 0xb5, 0xb8, 0x7d, 0xa2, 0xd0, 0xcc, 0xb1, 0x1c, 0x9b, 0x6d, 0x4b, 0x77, 0x37, 0xb6, 0xc4, 0x6f, 0x0d, 0xfb, 0x4d, 0x89, 0x6e, 0x2d, 0xb9, 0x2f, 0xcf, 0x53, 0xcd, 0xbb, 0xae, 0x2a, 0x40, 0x4c, 0x0b, 0xab, 0xd5, 0x64, 0xad, 0x7a, 0xde, 0xac, 0x62, 0x73, 0xef, 0xa3, 0x01, 0x98, 0x4a, 0xca, 0xb8, 0xd8, 0xf1, 0x73, 0x32, 0x3d, 0xe0, 0xbb, 0x60, 0x27, 0x4b, 0x22, 0x88, 0x71, 0x60, 0x93, 0x73, 0xbb, 0x22, 0xa1, 0x72, 0x87, 0xe9, 0xde, 0xc7, 0x49, 0x58, 0x73, 0xab, 0xc0, 0x9a, 0x89, 0x15, 0xb5, 0x4c, 0x84, 0x55, 0xc8, 0xe0, 0x2f, 0x65, 0x4f, 0x60, 0x2e, 0x23, 0xa2, 0xbb, 0xd7, 0xa9, 0xeb, 0xb7, 0x4f, 0x30, 0x09, 0xbd, 0x65, 0xec, 0xc6, 0x50, 0x81, 0x4c, 0xc0, +}; +static const u8 ecccdh_SECP521R1_5_test_vector_shared_secret[] = { + 0x00, 0x5c, 0x57, 0x21, 0xe9, 0x6c, 0x27, 0x33, 0x19, 0xfd, 0x60, 0xec, 0xc4, 0x6b, 0x59, 0x62, 0xf6, 0x98, 0xe9, 0x74, 0xb4, 0x29, 0xf2, 0x8f, 0xe6, 0x96, 0x2f, 0x4a, 0xc6, 0x56, 0xbe, 0x2e, 0xb8, 0x67, 0x4c, 0x4a, 0xaf, 0xc0, 0x37, 0xea, 0xb4, 0x8e, 0xce, 0x61, 0x29, 0x53, 0xb1, 0xe8, 0xd8, 0x61, 0x01, 0x6b, 0x6a, 0xd0, 0xc7, 0x98, 0x05, 0x78, 0x4c, 0x67, 0xf7, 0x3a, 0xda, 0x96, 0xf3, 0x51, +}; +static const ecdh_test_case ecccdh_SECP521R1_5_test_case = { + .name = "ECCCDH/SECP521R1 5", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_5_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_5_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_5_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_5_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_5_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_6 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_6_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0xe4, 0x8f, 0xaa, 0xce, 0xe6, 0xde, 0xc8, 0x3f, 0xfc, 0xde, 0x94, 0x4c, 0xf6, 0xbd, 0xf4, 0xce, 0x4b, 0xae, 0x72, 0x74, 0x78, 0x88, 0xeb, 0xaf, 0xee, 0x45, 0x5b, 0x1e, 0x91, 0x58, 0x49, 0x71, 0xef, 0xb4, 0x91, 0x27, 0x97, 0x6a, 0x52, 0xf4, 0x14, 0x29, 0x52, 0xf7, 0xc2, 0x07, 0xec, 0x02, 0x65, 0xf2, 0xb7, 0x18, 0xcf, 0x3e, 0xad, 0x96, 0xea, 0x4f, 0x62, 0xc7, 0x52, 0xe4, 0xf7, 0xac, 0xd3, +}; +static const u8 ecccdh_SECP521R1_6_test_vector_peer_pub_key[] = { + 0x01, 0x25, 0x88, 0x11, 0x5e, 0x6f, 0x7f, 0x7b, 0xdc, 0xfd, 0xf5, 0x7f, 0x03, 0xb1, 0x69, 0xb4, 0x79, 0x75, 0x8b, 0xaa, 0xfd, 0xaf, 0x56, 0x9d, 0x04, 0x13, 0x59, 0x87, 0xb2, 0xce, 0x61, 0x64, 0xc0, 0x2a, 0x57, 0x68, 0x5e, 0xb5, 0x27, 0x6b, 0x5d, 0xae, 0x62, 0x95, 0xd3, 0xfe, 0x90, 0x62, 0x0f, 0x38, 0xb5, 0x53, 0x5c, 0x6d, 0x22, 0x60, 0xc1, 0x73, 0xe6, 0x1e, 0xb8, 0x88, 0xca, 0x92, 0x02, 0x03, 0x01, 0x54, 0x2c, 0x16, 0x9c, 0xf9, 0x7c, 0x25, 0x96, 0xfe, 0x2d, 0xdd, 0x84, 0x8a, 0x22, 0x2e, 0x36, 0x7c, 0x5f, 0x7e, 0x62, 0x67, 0xeb, 0xc1, 0xbc, 0xd9, 0xab, 0x5d, 0xcf, 0x49, 0x15, 0x8f, 0x1a, 0x48, 0xe4, 0xaf, 0x29, 0xa8, 0x97, 0xb7, 0xe6, 0xa8, 0x20, 0x91, 0xc2, 0xdb, 0x87, 0x4d, 0x8e, 0x7a, 0xbf, 0x0f, 0x58, 0x06, 0x46, 0x91, 0x34, 0x41, 0x54, 0xf3, 0x96, 0xdb, 0xae, 0xd1, 0x88, 0xb6, +}; +static const u8 ecccdh_SECP521R1_6_test_vector_our_pub_key[] = { + 0x01, 0x0e, 0xb1, 0xb4, 0xd9, 0x17, 0x2b, 0xcc, 0x23, 0xf4, 0xf2, 0x0c, 0xc9, 0x56, 0x0f, 0xc5, 0x49, 0x28, 0xc3, 0xf3, 0x4e, 0xa6, 0x1c, 0x00, 0x39, 0x1d, 0xc7, 0x66, 0xc7, 0x6e, 0xd9, 0xfa, 0x60, 0x84, 0x49, 0x37, 0x7d, 0x1e, 0x4f, 0xad, 0xd1, 0x23, 0x60, 0x25, 0x41, 0x73, 0x30, 0xb4, 0xb9, 0x10, 0x86, 0x70, 0x4a, 0xce, 0x3e, 0x4e, 0x64, 0x84, 0xc6, 0x06, 0xe2, 0xa9, 0x43, 0x47, 0x8c, 0x86, 0x01, 0x49, 0x41, 0x38, 0x64, 0x06, 0x98, 0x25, 0xee, 0x1d, 0x08, 0x28, 0xda, 0x9f, 0x4a, 0x97, 0x71, 0x30, 0x05, 0xe9, 0xbd, 0x1a, 0xdb, 0xc3, 0xb3, 0x8c, 0x5b, 0x94, 0x69, 0x00, 0x72, 0x1a, 0x96, 0x0f, 0xe9, 0x6a, 0xd2, 0xc1, 0xb3, 0xa4, 0x4f, 0xe3, 0xde, 0x91, 0x56, 0x13, 0x6d, 0x44, 0xcb, 0x17, 0xcb, 0xc2, 0x41, 0x57, 0x29, 0xbb, 0x78, 0x2e, 0x16, 0xbf, 0xe2, 0xde, 0xb3, 0x06, 0x9e, 0x43, +}; +static const u8 ecccdh_SECP521R1_6_test_vector_shared_secret[] = { + 0x01, 0x73, 0x6d, 0x97, 0x17, 0x42, 0x9b, 0x4f, 0x41, 0x2e, 0x90, 0x3f, 0xeb, 0xe2, 0xf9, 0xe0, 0xff, 0xfd, 0x81, 0x35, 0x5d, 0x6c, 0xe2, 0xc0, 0x6f, 0xf3, 0xf6, 0x6a, 0x3b, 0xe1, 0x5c, 0xee, 0xc6, 0xe6, 0x5e, 0x30, 0x83, 0x47, 0x59, 0x3f, 0x00, 0xd7, 0xf3, 0x35, 0x91, 0xda, 0x40, 0x43, 0xc3, 0x07, 0x63, 0xd7, 0x27, 0x49, 0xf7, 0x2c, 0xdc, 0xee, 0xbe, 0x82, 0x5e, 0x4b, 0x34, 0xec, 0xd5, 0x70, +}; +static const ecdh_test_case ecccdh_SECP521R1_6_test_case = { + .name = "ECCCDH/SECP521R1 6", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_6_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_6_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_6_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_6_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_6_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_7 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_7_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0xc2, 0x9a, 0xa2, 0x23, 0xea, 0x8d, 0x64, 0xb4, 0xa1, 0xed, 0xa2, 0x7f, 0x39, 0xd3, 0xbc, 0x98, 0xea, 0x01, 0x48, 0xdd, 0x98, 0xc1, 0xcb, 0xe5, 0x95, 0xf8, 0xfd, 0x2b, 0xfb, 0xde, 0x11, 0x9c, 0x9e, 0x01, 0x7a, 0x50, 0xf5, 0xd1, 0xfc, 0x12, 0x1c, 0x08, 0xc1, 0xce, 0xf3, 0x1b, 0x75, 0x88, 0x59, 0x55, 0x6e, 0xb3, 0xe0, 0xe0, 0x42, 0xd8, 0xdd, 0x6a, 0xaa, 0xc5, 0x7a, 0x05, 0xca, 0x61, 0xe3, +}; +static const u8 ecccdh_SECP521R1_7_test_vector_peer_pub_key[] = { + 0x01, 0x69, 0x49, 0x1d, 0x55, 0xbd, 0x09, 0x04, 0x9f, 0xdf, 0x4c, 0x2a, 0x53, 0xa6, 0x60, 0x48, 0x0f, 0xee, 0x4c, 0x03, 0xa0, 0x53, 0x86, 0x75, 0xd1, 0xcd, 0x09, 0xb5, 0xbb, 0xa7, 0x8d, 0xac, 0x48, 0x54, 0x3e, 0xf1, 0x18, 0xa1, 0x17, 0x3b, 0x3f, 0xbf, 0x8b, 0x20, 0xe3, 0x9c, 0xe0, 0xe6, 0xb8, 0x90, 0xa1, 0x63, 0xc5, 0x0f, 0x96, 0x45, 0xb3, 0xd2, 0x1d, 0x1c, 0xbb, 0x3b, 0x60, 0xa6, 0xff, 0xf4, 0x00, 0x83, 0x49, 0x4b, 0x2e, 0xba, 0x76, 0x91, 0x0f, 0xed, 0x33, 0xc7, 0x61, 0x80, 0x45, 0x15, 0x01, 0x1f, 0xab, 0x50, 0xe3, 0xb3, 0x77, 0xab, 0xd8, 0xa8, 0xa0, 0x45, 0xd8, 0x86, 0xd2, 0x23, 0x8d, 0x2c, 0x26, 0x8a, 0xc1, 0xb6, 0xec, 0x88, 0xbd, 0x71, 0xb7, 0xba, 0x78, 0xe2, 0xc3, 0x3c, 0x15, 0x2e, 0x4b, 0xf7, 0xda, 0x5d, 0x56, 0x5e, 0x4a, 0xcb, 0xec, 0xf5, 0xe9, 0x2c, 0x7a, 0xd6, 0x62, 0xbb, +}; +static const u8 ecccdh_SECP521R1_7_test_vector_our_pub_key[] = { + 0x00, 0x15, 0x11, 0xc8, 0x48, 0xef, 0x60, 0xd5, 0x41, 0x9a, 0x98, 0xd1, 0x02, 0x04, 0xdb, 0x0f, 0xe5, 0x82, 0x24, 0x12, 0x43, 0x70, 0x06, 0x1b, 0xcf, 0xa4, 0xe9, 0x24, 0x9d, 0x50, 0x61, 0x8c, 0x56, 0xbf, 0x37, 0x22, 0x47, 0x1b, 0x25, 0x9f, 0x38, 0x26, 0x3b, 0xb7, 0xb2, 0x80, 0xd2, 0x3c, 0xaf, 0x2a, 0x1e, 0xe8, 0x73, 0x7f, 0x93, 0x71, 0xcd, 0xb2, 0x73, 0x2c, 0xdc, 0x95, 0x83, 0x69, 0x93, 0x0c, 0x01, 0xd4, 0x61, 0x68, 0x1a, 0xe6, 0xd8, 0xc4, 0x9b, 0x4c, 0x5f, 0x4d, 0x60, 0x16, 0x14, 0x3f, 0xb1, 0xbd, 0x74, 0x91, 0x57, 0x3e, 0x3e, 0xd0, 0xe6, 0xc4, 0x8b, 0x82, 0xe8, 0x21, 0x64, 0x4f, 0x87, 0xf8, 0x2f, 0x0e, 0x5f, 0x08, 0xfd, 0x16, 0xf1, 0xf9, 0x8f, 0xa1, 0x75, 0x86, 0x20, 0x0a, 0xb0, 0x2e, 0xd8, 0xc6, 0x27, 0xb3, 0x5c, 0x3f, 0x27, 0x61, 0x7e, 0xc5, 0xfd, 0x92, 0xf4, 0x56, 0x20, 0x3f, +}; +static const u8 ecccdh_SECP521R1_7_test_vector_shared_secret[] = { + 0x01, 0x8f, 0x2a, 0xe9, 0x47, 0x6c, 0x77, 0x17, 0x26, 0xa7, 0x77, 0x80, 0x20, 0x8d, 0xed, 0xfe, 0xfa, 0x20, 0x54, 0x88, 0x99, 0x6b, 0x18, 0xfe, 0xcc, 0x50, 0xbf, 0xd4, 0xc1, 0x32, 0x75, 0x3f, 0x57, 0x66, 0xb2, 0xcd, 0x74, 0x4a, 0xfa, 0x99, 0x18, 0x60, 0x6d, 0xe2, 0xe0, 0x16, 0xef, 0xfc, 0x63, 0x62, 0x2e, 0x90, 0x29, 0xe7, 0x6d, 0xc6, 0xe3, 0xf0, 0xc6, 0x9f, 0x7a, 0xec, 0xed, 0x56, 0x5c, 0x2c, +}; +static const ecdh_test_case ecccdh_SECP521R1_7_test_case = { + .name = "ECCCDH/SECP521R1 7", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_7_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_7_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_7_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_7_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_7_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_8 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_8_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x28, 0x69, 0x2b, 0xe2, 0xbf, 0x5c, 0x4b, 0x48, 0x93, 0x98, 0x46, 0xfb, 0x3d, 0x5b, 0xce, 0x74, 0x65, 0x4b, 0xb2, 0x64, 0x6e, 0x15, 0xf8, 0x38, 0x9e, 0x23, 0x70, 0x8a, 0x1a, 0xfa, 0xdf, 0x56, 0x15, 0x11, 0xea, 0x0d, 0x99, 0x57, 0xd0, 0xb5, 0x34, 0x53, 0x81, 0x9d, 0x60, 0xfb, 0xa8, 0xf6, 0x5a, 0x18, 0xf7, 0xb2, 0x9d, 0xf0, 0x21, 0xb1, 0xbb, 0x01, 0xcd, 0x16, 0x32, 0x93, 0xac, 0xc3, 0xcc, +}; +static const u8 ecccdh_SECP521R1_8_test_vector_peer_pub_key[] = { + 0x00, 0x84, 0x15, 0xf5, 0xbb, 0xd0, 0xee, 0xe3, 0x87, 0xd6, 0xc0, 0x9d, 0x0e, 0xf8, 0xac, 0xaf, 0x29, 0xc6, 0x6d, 0xb4, 0x5d, 0x6b, 0xa1, 0x01, 0x86, 0x0a, 0xe4, 0x5d, 0x3c, 0x60, 0xe1, 0xe0, 0xe3, 0xf7, 0x24, 0x7a, 0x46, 0x26, 0xa6, 0x0f, 0xdd, 0x40, 0x49, 0x65, 0xc3, 0x56, 0x6c, 0x79, 0xf6, 0x44, 0x9e, 0x85, 0x6c, 0xe0, 0xbf, 0x94, 0x61, 0x9f, 0x97, 0xda, 0x8d, 0xa2, 0x4b, 0xd2, 0xcf, 0xb6, 0x00, 0xfd, 0xd7, 0xc5, 0x9c, 0x58, 0xc3, 0x61, 0xbc, 0x50, 0xa7, 0xa5, 0xd0, 0xd3, 0x6f, 0x72, 0x3b, 0x17, 0xc4, 0xf2, 0xad, 0x2b, 0x03, 0xc2, 0x4d, 0x42, 0xdc, 0x50, 0xf7, 0x4a, 0x8c, 0x46, 0x5a, 0x0a, 0xfc, 0x46, 0x83, 0xf1, 0x0f, 0xab, 0x84, 0x65, 0x2d, 0xfe, 0x9e, 0x92, 0x8c, 0x26, 0x26, 0xb5, 0x45, 0x64, 0x53, 0xe1, 0x57, 0x3f, 0xf6, 0x0b, 0xe1, 0x50, 0x74, 0x67, 0xd4, 0x31, 0xfb, 0xb2, +}; +static const u8 ecccdh_SECP521R1_8_test_vector_our_pub_key[] = { + 0x01, 0xcf, 0xdc, 0x10, 0xc7, 0x99, 0xf5, 0xc7, 0x9c, 0xb6, 0x93, 0x0a, 0x65, 0xfb, 0xa3, 0x51, 0x74, 0x8e, 0x07, 0x56, 0x79, 0x93, 0xe5, 0xe4, 0x10, 0xef, 0x4c, 0xac, 0xc4, 0xcd, 0x8a, 0x25, 0x78, 0x49, 0x91, 0xeb, 0x46, 0x74, 0xe4, 0x10, 0x50, 0xf9, 0x30, 0xc7, 0x19, 0x0a, 0xc8, 0x12, 0xb9, 0x24, 0x5f, 0x48, 0xa7, 0x97, 0x3b, 0x65, 0x8d, 0xaf, 0x40, 0x88, 0x22, 0xfe, 0x5b, 0x85, 0xf6, 0x68, 0x01, 0x80, 0xd9, 0xdd, 0xfc, 0x9a, 0xf7, 0x7b, 0x9c, 0x4a, 0x6f, 0x02, 0xa8, 0x34, 0xdb, 0x15, 0xe5, 0x35, 0xe0, 0xb3, 0x84, 0x5b, 0x2c, 0xce, 0x30, 0x38, 0x83, 0x01, 0xb5, 0x1c, 0xec, 0xbe, 0x32, 0x76, 0x30, 0x7e, 0xf4, 0x39, 0xb5, 0xc9, 0xe6, 0xa7, 0x2d, 0xc2, 0xd9, 0x4d, 0x87, 0x9b, 0xc3, 0x95, 0x05, 0x2d, 0xbb, 0x4a, 0x57, 0x87, 0xd0, 0x6e, 0xfb, 0x28, 0x02, 0x10, 0xfb, 0x8b, 0xe0, 0x37, +}; +static const u8 ecccdh_SECP521R1_8_test_vector_shared_secret[] = { + 0x01, 0x05, 0xa3, 0x46, 0x98, 0x8b, 0x92, 0xed, 0x8c, 0x7a, 0x25, 0xce, 0x4d, 0x79, 0xd2, 0x1b, 0xc8, 0x6c, 0xfc, 0xc7, 0xf9, 0x9c, 0x6c, 0xd1, 0x9d, 0xbb, 0x4a, 0x39, 0xf4, 0x8a, 0xb9, 0x43, 0xb7, 0x9e, 0x4f, 0x06, 0x47, 0x34, 0x8d, 0xa0, 0xb8, 0x0b, 0xd8, 0x64, 0xb8, 0x5c, 0x6b, 0x8d, 0x92, 0x53, 0x6d, 0x6a, 0xa5, 0x44, 0xdc, 0x75, 0x37, 0xa0, 0x0c, 0x85, 0x8f, 0x8b, 0x66, 0x31, 0x9e, 0x25, +}; +static const ecdh_test_case ecccdh_SECP521R1_8_test_case = { + .name = "ECCCDH/SECP521R1 8", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_8_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_8_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_8_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_8_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_8_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_9 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_9_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0x19, 0x4d, 0x1e, 0xe6, 0x13, 0xf5, 0x36, 0x6c, 0xbc, 0x44, 0xb5, 0x04, 0xd2, 0x1a, 0x0c, 0xf6, 0x71, 0x5e, 0x20, 0x9c, 0xd3, 0x58, 0xf2, 0xdd, 0x5f, 0x3e, 0x71, 0xcc, 0x0d, 0x67, 0xd0, 0xe9, 0x64, 0x16, 0x8c, 0x42, 0xa0, 0x84, 0xeb, 0xda, 0x74, 0x6f, 0x98, 0x63, 0xa8, 0x6b, 0xac, 0xff, 0xc8, 0x19, 0xf1, 0xed, 0xf1, 0xb8, 0xc7, 0x27, 0xcc, 0xfb, 0x30, 0x47, 0x24, 0x0a, 0x57, 0xc4, 0x35, +}; +static const u8 ecccdh_SECP521R1_9_test_vector_peer_pub_key[] = { + 0x01, 0xc7, 0x21, 0xee, 0xa8, 0x05, 0xa5, 0xcb, 0xa2, 0x9f, 0x34, 0xba, 0x57, 0x58, 0x77, 0x5b, 0xe0, 0xcf, 0x61, 0x60, 0xe6, 0xc0, 0x87, 0x23, 0xf5, 0xab, 0x17, 0xbf, 0x96, 0xa1, 0xff, 0x2b, 0xd9, 0x42, 0x79, 0x61, 0xa4, 0xf3, 0x4b, 0x07, 0xfc, 0x0b, 0x14, 0xca, 0x4b, 0x2b, 0xf6, 0x84, 0x5d, 0xeb, 0xd5, 0xa8, 0x69, 0xf1, 0x24, 0xeb, 0xfa, 0x7a, 0xa7, 0x2f, 0xe5, 0x65, 0x05, 0x0b, 0x7f, 0x18, 0x00, 0xb6, 0xe8, 0x9e, 0xb0, 0xe1, 0xdc, 0xf1, 0x81, 0x23, 0x6f, 0x7c, 0x54, 0x8f, 0xd1, 0xa8, 0xc1, 0x6b, 0x25, 0x8b, 0x52, 0xc1, 0xa9, 0xbf, 0xd3, 0xfe, 0x8f, 0x22, 0x84, 0x1b, 0x26, 0x76, 0x32, 0x65, 0xf0, 0x74, 0xc4, 0xcc, 0xf2, 0xd6, 0x34, 0xae, 0x97, 0xb7, 0x01, 0x95, 0x6f, 0x67, 0xa1, 0x10, 0x06, 0xc5, 0x2d, 0x97, 0x19, 0x7d, 0x92, 0xf5, 0x85, 0xf5, 0x74, 0x8b, 0xc2, 0x67, 0x2e, 0xeb, +}; +static const u8 ecccdh_SECP521R1_9_test_vector_our_pub_key[] = { + 0x01, 0x6b, 0xd1, 0x5c, 0x8a, 0x58, 0xd3, 0x66, 0xf7, 0xf2, 0xb2, 0xf2, 0x98, 0xcc, 0x87, 0xb7, 0x48, 0x5e, 0x9e, 0xe7, 0x0d, 0x11, 0xd1, 0x24, 0x48, 0xb8, 0x37, 0x7c, 0x0a, 0x82, 0xc7, 0x62, 0x6f, 0x67, 0xaf, 0xf7, 0xf9, 0x7b, 0xe7, 0xa3, 0x54, 0x6b, 0xf4, 0x17, 0xee, 0xed, 0xdf, 0x75, 0xa9, 0x3c, 0x13, 0x01, 0x91, 0xc8, 0x41, 0x08, 0x04, 0x2e, 0xa2, 0xfc, 0xa1, 0x7f, 0xd3, 0xf8, 0x0d, 0x14, 0x01, 0x56, 0x05, 0x02, 0xd0, 0x4b, 0x74, 0xfc, 0xe1, 0x74, 0x3a, 0xab, 0x47, 0x7a, 0x9d, 0x1e, 0xac, 0x93, 0xe5, 0x22, 0x69, 0x81, 0xfd, 0xb9, 0x7a, 0x74, 0x78, 0xce, 0x4c, 0xe5, 0x66, 0xff, 0x72, 0x43, 0x93, 0x12, 0x84, 0xfa, 0xd8, 0x50, 0xb0, 0xc2, 0xbc, 0xae, 0x0d, 0xdd, 0x2d, 0x97, 0x79, 0x01, 0x60, 0xc1, 0xa2, 0xe7, 0x7c, 0x3e, 0xd6, 0xc9, 0x5e, 0xcc, 0x44, 0xb8, 0x9e, 0x26, 0x37, 0xfc, +}; +static const u8 ecccdh_SECP521R1_9_test_vector_shared_secret[] = { + 0x00, 0x45, 0x31, 0xb3, 0xd2, 0xc6, 0xcd, 0x12, 0xf2, 0x16, 0x04, 0xc8, 0x61, 0x0e, 0x67, 0x23, 0xdb, 0xf4, 0xda, 0xf8, 0x0b, 0x5a, 0x45, 0x9d, 0x6b, 0xa5, 0x81, 0x43, 0x97, 0xd1, 0xc1, 0xf7, 0xa2, 0x1d, 0x7c, 0x11, 0x4b, 0xe9, 0x64, 0xe2, 0x73, 0x76, 0xaa, 0xeb, 0xe3, 0xa7, 0xbc, 0x3d, 0x6a, 0xf7, 0xa7, 0xf8, 0xc7, 0xbe, 0xfb, 0x61, 0x1a, 0xfe, 0x48, 0x7f, 0xf0, 0x32, 0x92, 0x1f, 0x75, 0x0f, +}; +static const ecdh_test_case ecccdh_SECP521R1_9_test_case = { + .name = "ECCCDH/SECP521R1 9", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_9_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_9_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_9_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_9_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_9_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_10 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_10_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0xfd, 0x90, 0xe3, 0xe4, 0x16, 0xe9, 0x8a, 0xa3, 0xf2, 0xb6, 0xaf, 0xa7, 0xf3, 0xbf, 0x36, 0x8e, 0x45, 0x1a, 0xd9, 0xca, 0x5b, 0xd5, 0x4b, 0x5b, 0x14, 0xae, 0xe2, 0xed, 0x67, 0x23, 0xdd, 0xe5, 0x18, 0x1f, 0x50, 0x85, 0xb6, 0x81, 0x69, 0xb0, 0x9f, 0xbe, 0xc7, 0x21, 0x37, 0x2c, 0xcf, 0x6b, 0x28, 0x47, 0x13, 0xf9, 0xa6, 0x35, 0x6b, 0x8d, 0x56, 0x0a, 0x8f, 0xf7, 0x8c, 0xa3, 0x73, 0x7c, 0x88, +}; +static const u8 ecccdh_SECP521R1_10_test_vector_peer_pub_key[] = { + 0x01, 0xc3, 0x58, 0x23, 0xe4, 0x40, 0xa9, 0x36, 0x3a, 0xb9, 0x8d, 0x9f, 0xc7, 0xa7, 0xbc, 0x0c, 0x05, 0x32, 0xdc, 0x79, 0x77, 0xa7, 0x91, 0x65, 0x59, 0x9b, 0xf1, 0xa9, 0xcc, 0x64, 0xc0, 0x0f, 0xb3, 0x87, 0xb4, 0x2c, 0xca, 0x36, 0x52, 0x86, 0xe8, 0x43, 0x03, 0x60, 0xbf, 0xad, 0x36, 0x43, 0xbc, 0x31, 0x35, 0x4e, 0xda, 0x50, 0xdc, 0x93, 0x6c, 0x32, 0x9e, 0xcd, 0xb6, 0x09, 0x05, 0xc4, 0x0f, 0xcb, 0x00, 0xd9, 0xe7, 0xf4, 0x33, 0x53, 0x1e, 0x44, 0xdf, 0x4f, 0x6d, 0x51, 0x42, 0x01, 0xcb, 0xaa, 0xbb, 0x06, 0xba, 0xdd, 0x67, 0x83, 0xe0, 0x11, 0x11, 0x72, 0x6d, 0x81, 0x55, 0x31, 0xd2, 0x33, 0xc5, 0xcd, 0xb7, 0x22, 0x89, 0x3f, 0xfb, 0xb2, 0x02, 0x72, 0x59, 0xd5, 0x94, 0xde, 0x77, 0x43, 0x88, 0x09, 0x73, 0x81, 0x20, 0xc6, 0xf7, 0x83, 0x93, 0x4f, 0x92, 0x6c, 0x3f, 0xb6, 0x9b, 0x40, 0xc4, 0x09, +}; +static const u8 ecccdh_SECP521R1_10_test_vector_our_pub_key[] = { + 0x01, 0xeb, 0xea, 0x1b, 0x10, 0xd3, 0xe3, 0xb9, 0x71, 0xb7, 0xef, 0xb6, 0x9f, 0xc8, 0x78, 0xde, 0x11, 0xc7, 0xf4, 0x72, 0xe4, 0xe4, 0xd3, 0x84, 0xc3, 0x1b, 0x8d, 0x62, 0x88, 0xd8, 0x07, 0x15, 0x17, 0xac, 0xad, 0xe9, 0xb3, 0x97, 0x96, 0xc7, 0xaf, 0x51, 0x63, 0xbc, 0xf7, 0x1a, 0xed, 0xa7, 0x77, 0x53, 0x3f, 0x38, 0x2c, 0x6c, 0xf0, 0xa4, 0xd9, 0xbb, 0xb9, 0x38, 0xc8, 0x5f, 0x44, 0xb7, 0x80, 0x37, 0x01, 0x6b, 0x0e, 0x3e, 0x19, 0xc2, 0x99, 0x6b, 0x2c, 0xbd, 0x1f, 0xf6, 0x47, 0x30, 0xe7, 0xca, 0x90, 0xed, 0xca, 0x19, 0x84, 0xf9, 0xb2, 0x95, 0x13, 0x33, 0x53, 0x5e, 0x57, 0x48, 0xba, 0xa3, 0x4a, 0x99, 0xf6, 0x1f, 0xf4, 0xd5, 0xf8, 0x12, 0x07, 0x9e, 0x0f, 0x01, 0xe8, 0x77, 0x89, 0xf3, 0x4e, 0xfd, 0xad, 0x80, 0x98, 0x01, 0x5e, 0xe7, 0x4a, 0x4f, 0x84, 0x6d, 0xd1, 0x90, 0xd1, 0x6d, 0xc6, 0xe1, +}; +static const u8 ecccdh_SECP521R1_10_test_vector_shared_secret[] = { + 0x01, 0x00, 0xc8, 0x93, 0x59, 0x69, 0x07, 0x7b, 0xae, 0x0b, 0xa8, 0x9e, 0xf0, 0xdf, 0x81, 0x61, 0xd9, 0x75, 0xec, 0x58, 0x70, 0xac, 0x81, 0x1a, 0xe7, 0xe6, 0x5c, 0xa5, 0x39, 0x4e, 0xfb, 0xa4, 0xf0, 0x63, 0x3d, 0x41, 0xbf, 0x79, 0xea, 0x5e, 0x5b, 0x94, 0x96, 0xbb, 0xd7, 0xaa, 0xe0, 0x00, 0xb0, 0x59, 0x4b, 0xaa, 0x82, 0xef, 0x8f, 0x24, 0x4e, 0x69, 0x84, 0xae, 0x87, 0xae, 0x1e, 0xd1, 0x24, 0xb7, +}; +static const ecdh_test_case ecccdh_SECP521R1_10_test_case = { + .name = "ECCCDH/SECP521R1 10", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_10_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_10_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_10_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_10_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_10_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_11 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_11_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x90, 0x12, 0xec, 0xfd, 0xad, 0xc8, 0x5c, 0xed, 0x63, 0x0a, 0xfe, 0xa5, 0x34, 0xcd, 0xc8, 0xe9, 0xd1, 0xab, 0x8b, 0xe5, 0xf3, 0x75, 0x3d, 0xcf, 0x5f, 0x2b, 0x09, 0xb4, 0x0e, 0xda, 0x66, 0xfc, 0x68, 0x58, 0x54, 0x9b, 0xc3, 0x6e, 0x6f, 0x8d, 0xf5, 0x59, 0x98, 0xcf, 0xa9, 0xa0, 0x70, 0x3a, 0xec, 0xf6, 0xc4, 0x27, 0x99, 0xc2, 0x45, 0x01, 0x10, 0x64, 0xf5, 0x30, 0xc0, 0x9d, 0xb9, 0x83, 0x69, +}; +static const u8 ecccdh_SECP521R1_11_test_vector_peer_pub_key[] = { + 0x00, 0x09, 0x30, 0x57, 0xfb, 0x86, 0x2f, 0x2a, 0xd2, 0xe8, 0x2e, 0x58, 0x1b, 0xae, 0xb3, 0x32, 0x4e, 0x7b, 0x32, 0x94, 0x6f, 0x2b, 0xa8, 0x45, 0xa9, 0xbe, 0xee, 0xd8, 0x7d, 0x69, 0x95, 0xf5, 0x49, 0x18, 0xec, 0x66, 0x19, 0xb9, 0x93, 0x19, 0x55, 0xd5, 0xa8, 0x9d, 0x4d, 0x74, 0xad, 0xf1, 0x04, 0x6b, 0xb3, 0x62, 0x19, 0x2f, 0x2e, 0xf6, 0xbd, 0x3e, 0x3d, 0x2d, 0x04, 0xdd, 0x1f, 0x87, 0x05, 0x4a, 0x00, 0xaa, 0x3f, 0xb2, 0x44, 0x83, 0x35, 0xf6, 0x94, 0xe3, 0xcd, 0xa4, 0xae, 0x0c, 0xc7, 0x1b, 0x1b, 0x2f, 0x2a, 0x20, 0x6f, 0xa8, 0x02, 0xd7, 0x26, 0x2f, 0x19, 0x98, 0x3c, 0x44, 0x67, 0x4f, 0xe1, 0x53, 0x27, 0xac, 0xaa, 0xc1, 0xfa, 0x40, 0x42, 0x4c, 0x39, 0x5a, 0x65, 0x56, 0xcb, 0x81, 0x67, 0x31, 0x25, 0x27, 0xfa, 0xe5, 0x86, 0x5e, 0xcf, 0xfc, 0x14, 0xbb, 0xdc, 0x17, 0xda, 0x78, 0xcd, 0xcf, +}; +static const u8 ecccdh_SECP521R1_11_test_vector_our_pub_key[] = { + 0x00, 0x23, 0x4e, 0x32, 0xbe, 0x0a, 0x90, 0x71, 0x31, 0xd2, 0xd1, 0x28, 0xa6, 0x47, 0x7e, 0x0c, 0xac, 0xeb, 0x86, 0xf0, 0x24, 0x79, 0x74, 0x5e, 0x0f, 0xe2, 0x45, 0xcb, 0x33, 0x2d, 0xe6, 0x31, 0xc0, 0x78, 0x87, 0x11, 0x60, 0x48, 0x2e, 0xee, 0xf5, 0x84, 0xe2, 0x74, 0xdf, 0x7f, 0xa4, 0x12, 0xce, 0xa3, 0xe1, 0xe9, 0x1f, 0x71, 0xec, 0xba, 0x87, 0x81, 0xd9, 0x20, 0x5d, 0x48, 0x38, 0x63, 0x41, 0xad, 0x01, 0xcf, 0x86, 0x45, 0x5b, 0x09, 0xb1, 0xc0, 0x05, 0xcf, 0xfb, 0xa8, 0xd7, 0x62, 0x89, 0xa3, 0x75, 0x96, 0x28, 0xc8, 0x74, 0xbe, 0xea, 0x46, 0x2f, 0x51, 0xf3, 0x0b, 0xd5, 0x81, 0xe3, 0x80, 0x31, 0x34, 0x30, 0x7d, 0xed, 0xbb, 0x77, 0x1b, 0x33, 0x34, 0xee, 0x15, 0xbe, 0x2e, 0x24, 0x2c, 0xd7, 0x9c, 0x34, 0x07, 0xd2, 0xf5, 0x89, 0x35, 0x45, 0x6c, 0x69, 0x41, 0xdd, 0x9b, 0x6d, 0x15, 0x5a, 0x46, +}; +static const u8 ecccdh_SECP521R1_11_test_vector_shared_secret[] = { + 0x01, 0x7f, 0x36, 0xaf, 0x19, 0x30, 0x38, 0x41, 0xd1, 0x3a, 0x38, 0x9d, 0x95, 0xec, 0x0b, 0x80, 0x1c, 0x7f, 0x9a, 0x67, 0x9a, 0x82, 0x31, 0x46, 0xc7, 0x5c, 0x17, 0xbc, 0x44, 0x25, 0x6e, 0x9a, 0xd4, 0x22, 0xa4, 0xf8, 0xb3, 0x1f, 0x14, 0x64, 0x7b, 0x2c, 0x7d, 0x31, 0x7b, 0x93, 0x3f, 0x7c, 0x29, 0x46, 0xc4, 0xb8, 0xab, 0xd1, 0xd5, 0x6d, 0x62, 0x0f, 0xab, 0x1b, 0x5f, 0xf1, 0xa3, 0xad, 0xc7, 0x1f, +}; +static const ecdh_test_case ecccdh_SECP521R1_11_test_case = { + .name = "ECCCDH/SECP521R1 11", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_11_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_11_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_11_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_11_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_11_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_12 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_12_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0xb5, 0xff, 0x84, 0x7f, 0x8e, 0xff, 0x20, 0xb8, 0x8c, 0xfa, 0xd4, 0x2c, 0x06, 0xe5, 0x8c, 0x37, 0x42, 0xf2, 0xf8, 0xf1, 0xfd, 0xfd, 0x64, 0xb5, 0x39, 0xba, 0x48, 0xc2, 0x59, 0x26, 0x92, 0x6b, 0xd5, 0xe3, 0x32, 0xb4, 0x56, 0x49, 0xc0, 0xb1, 0x84, 0xf7, 0x72, 0x55, 0xe9, 0xd5, 0x8f, 0xe8, 0xaf, 0xa1, 0xa6, 0xd9, 0x68, 0xe2, 0xcb, 0x1d, 0x46, 0x37, 0x77, 0x71, 0x20, 0xc7, 0x65, 0xc1, 0x28, +}; +static const u8 ecccdh_SECP521R1_12_test_vector_peer_pub_key[] = { + 0x00, 0x83, 0x19, 0x2e, 0xd0, 0xb1, 0xcb, 0x31, 0xf7, 0x58, 0x17, 0x79, 0x49, 0x37, 0xf6, 0x6a, 0xd9, 0x1c, 0xf7, 0x45, 0x52, 0xcd, 0x51, 0x0c, 0xed, 0xb9, 0xfd, 0x64, 0x13, 0x10, 0x42, 0x2a, 0xf5, 0xd0, 0x9f, 0x22, 0x1c, 0xad, 0x24, 0x9e, 0xe8, 0x14, 0xd1, 0x6d, 0xd7, 0xac, 0x84, 0xde, 0xd9, 0xea, 0xcd, 0xc2, 0x83, 0x40, 0xfc, 0xfc, 0x9c, 0x0c, 0x06, 0xab, 0xe3, 0x0a, 0x2f, 0xc2, 0x8c, 0xd8, 0x00, 0x22, 0x12, 0xed, 0x86, 0x8c, 0x9b, 0xa0, 0xfb, 0x2c, 0x91, 0xe2, 0xc3, 0x9b, 0xa9, 0x39, 0x96, 0xa3, 0xe4, 0xeb, 0xf4, 0x5f, 0x28, 0x52, 0xd0, 0x92, 0x8c, 0x48, 0x93, 0x0e, 0x87, 0x5c, 0xc7, 0xb4, 0x28, 0xd0, 0xe7, 0xf3, 0xf4, 0xd5, 0x03, 0xe5, 0xd6, 0x0c, 0x68, 0xcb, 0x49, 0xb1, 0x3c, 0x24, 0x80, 0xcd, 0x48, 0x6b, 0xed, 0x92, 0x00, 0xca, 0xdd, 0xad, 0xdf, 0xe4, 0xff, 0x8e, 0x35, 0x62, +}; +static const u8 ecccdh_SECP521R1_12_test_vector_our_pub_key[] = { + 0x01, 0xde, 0x3d, 0xc9, 0x26, 0x3b, 0xc8, 0xc4, 0x96, 0x9d, 0xc6, 0x84, 0xbe, 0x0e, 0xec, 0x54, 0xbe, 0xfd, 0x9a, 0x9f, 0x3d, 0xba, 0x19, 0x4d, 0x86, 0x58, 0xa7, 0x89, 0x34, 0x1b, 0xf0, 0xd7, 0x8d, 0x84, 0xda, 0x67, 0x35, 0x22, 0x7c, 0xaf, 0xaf, 0x09, 0x35, 0x19, 0x51, 0x69, 0x11, 0x97, 0x57, 0x3c, 0x8c, 0x36, 0x0a, 0x11, 0xe5, 0x28, 0x57, 0x12, 0xb8, 0xbb, 0xdf, 0x5a, 0xc9, 0x1b, 0x97, 0x7c, 0x00, 0x81, 0x2d, 0xe5, 0x8c, 0xd0, 0x95, 0xec, 0x2e, 0x5a, 0x9b, 0x24, 0x7e, 0xb3, 0xed, 0x41, 0xd8, 0xbe, 0xf6, 0xae, 0xac, 0xe1, 0x94, 0xa7, 0xa0, 0x5b, 0x65, 0xaa, 0x5d, 0x28, 0x9f, 0xbc, 0x9b, 0x17, 0x70, 0xec, 0x84, 0xbb, 0x6b, 0xe0, 0xc2, 0xc6, 0x4c, 0xc3, 0x7c, 0x1d, 0x54, 0xa7, 0xf5, 0xd7, 0x13, 0x77, 0xa9, 0xad, 0xbe, 0x20, 0xf2, 0x6f, 0x6f, 0x2b, 0x54, 0x4a, 0x82, 0x1e, 0xa8, 0x31, +}; +static const u8 ecccdh_SECP521R1_12_test_vector_shared_secret[] = { + 0x00, 0x06, 0x2f, 0x9f, 0xc2, 0x9a, 0xe1, 0xa6, 0x8b, 0x2e, 0xe0, 0xdc, 0xf9, 0x56, 0xcb, 0xd3, 0x8c, 0x88, 0xae, 0x5f, 0x64, 0x5e, 0xaa, 0x54, 0x6b, 0x00, 0xeb, 0xe8, 0x7a, 0x72, 0x60, 0xbf, 0x72, 0x4b, 0xe2, 0x0d, 0x34, 0xb9, 0xd0, 0x20, 0x76, 0x65, 0x5c, 0x93, 0x3d, 0x05, 0x6b, 0x21, 0xe3, 0x04, 0xc2, 0x4d, 0xdb, 0x1d, 0xed, 0xf1, 0xdd, 0x76, 0xde, 0x61, 0x1f, 0xc4, 0xa2, 0x34, 0x03, 0x36, +}; +static const ecdh_test_case ecccdh_SECP521R1_12_test_case = { + .name = "ECCCDH/SECP521R1 12", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_12_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_12_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_12_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_12_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_12_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_13 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_13_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0x1a, 0x63, 0x47, 0xd4, 0xe8, 0x01, 0xc9, 0x19, 0x23, 0x48, 0x83, 0x54, 0xcc, 0x53, 0x3e, 0x7e, 0x35, 0xfd, 0xdf, 0x81, 0xff, 0x0f, 0xb7, 0xf5, 0x6b, 0xb0, 0x72, 0x6e, 0x0c, 0x29, 0xee, 0x5d, 0xcd, 0xc5, 0xf3, 0x94, 0xba, 0x54, 0xcf, 0x57, 0x26, 0x90, 0x48, 0xaa, 0xb6, 0xe0, 0x55, 0x89, 0x5c, 0x8d, 0xa2, 0x4b, 0x8b, 0x06, 0x39, 0xa7, 0x42, 0x31, 0x43, 0x90, 0xcc, 0x04, 0x19, 0x0e, 0xd6, +}; +static const u8 ecccdh_SECP521R1_13_test_vector_peer_pub_key[] = { + 0x01, 0xa8, 0x9b, 0x63, 0x6a, 0x93, 0xe5, 0xd2, 0xba, 0x6c, 0x22, 0x92, 0xbf, 0x23, 0x03, 0x3a, 0x84, 0xf0, 0x6a, 0x3a, 0xc1, 0x22, 0x0e, 0xa7, 0x1e, 0x80, 0x6a, 0xfb, 0xe0, 0x97, 0xa8, 0x04, 0xcc, 0x67, 0xe9, 0xba, 0xa5, 0x14, 0xcf, 0xb6, 0xc1, 0x2c, 0x91, 0x94, 0xbe, 0x30, 0x21, 0x2b, 0xf7, 0xaa, 0xe7, 0xfd, 0xf6, 0xd3, 0x76, 0xc2, 0x12, 0xf0, 0x55, 0x4e, 0x65, 0x64, 0x63, 0xff, 0xab, 0x7e, 0x01, 0x82, 0xef, 0xca, 0xf7, 0x0f, 0xc4, 0x12, 0xd3, 0x36, 0x60, 0x2e, 0x01, 0x4d, 0xa4, 0x72, 0x56, 0xa0, 0xb6, 0x06, 0xf2, 0xad, 0xdc, 0xce, 0x80, 0x53, 0xbf, 0x81, 0x7a, 0xc8, 0x65, 0x6b, 0xb4, 0xe4, 0x2f, 0x14, 0xc8, 0xcb, 0xf2, 0xa6, 0x8f, 0x48, 0x8a, 0xb3, 0x5d, 0xcd, 0xf6, 0x40, 0x56, 0x27, 0x1d, 0xee, 0x1f, 0x60, 0x6a, 0x44, 0x0b, 0xa4, 0xbd, 0x4e, 0x5a, 0x11, 0xb8, 0xb8, 0xe5, 0x4f, +}; +static const u8 ecccdh_SECP521R1_13_test_vector_our_pub_key[] = { + 0x00, 0xfe, 0x30, 0x26, 0x7f, 0x33, 0xba, 0x5c, 0xde, 0xfc, 0x25, 0xcb, 0xb3, 0xc9, 0x32, 0x0d, 0xad, 0x9c, 0xcb, 0x1d, 0x7d, 0x37, 0x66, 0x44, 0x62, 0x0c, 0xa4, 0xfa, 0xde, 0xe5, 0x62, 0x6a, 0x3c, 0xed, 0xe2, 0x5a, 0xd2, 0x54, 0x62, 0x4d, 0xef, 0x72, 0x7a, 0x70, 0x48, 0xf7, 0x14, 0x5f, 0x76, 0x16, 0x2a, 0xa9, 0x80, 0x42, 0xf9, 0xb1, 0x23, 0xb2, 0x07, 0x6f, 0x8e, 0x8c, 0xf5, 0x9b, 0x3f, 0xdf, 0x00, 0x11, 0x45, 0xdc, 0x66, 0x31, 0x95, 0x3b, 0x6e, 0x29, 0x45, 0xe9, 0x43, 0x01, 0xd6, 0xcb, 0xb0, 0x98, 0xfe, 0x4b, 0x04, 0xf7, 0xee, 0x9b, 0x09, 0x41, 0x1d, 0xf1, 0x04, 0xdc, 0x82, 0xd7, 0xd7, 0x9e, 0xc4, 0x6a, 0x01, 0xed, 0x0f, 0x2d, 0x3e, 0x7d, 0xb6, 0xeb, 0x68, 0x06, 0x94, 0xbd, 0xeb, 0x10, 0x7c, 0x10, 0x78, 0xae, 0xc6, 0xca, 0xbd, 0x9e, 0xbe, 0xe3, 0xd3, 0x42, 0xfe, 0x7e, 0x54, 0xdf, +}; +static const u8 ecccdh_SECP521R1_13_test_vector_shared_secret[] = { + 0x01, 0x28, 0xab, 0x09, 0xbf, 0xec, 0x54, 0x06, 0x79, 0x9e, 0x61, 0x0f, 0x77, 0x2b, 0xa1, 0x7e, 0x89, 0x22, 0x49, 0xfa, 0x8e, 0x0e, 0x7b, 0x18, 0xa0, 0x4b, 0x91, 0x97, 0x03, 0x4b, 0x25, 0x0b, 0x48, 0x29, 0x4f, 0x18, 0x67, 0xfb, 0x96, 0x41, 0x51, 0x8f, 0x92, 0x76, 0x60, 0x66, 0xa0, 0x7a, 0x8b, 0x91, 0x7b, 0x0e, 0x76, 0x87, 0x9e, 0x10, 0x11, 0xe5, 0x1c, 0xcb, 0xd9, 0xf5, 0x40, 0xc5, 0x4d, 0x4f, +}; +static const ecdh_test_case ecccdh_SECP521R1_13_test_case = { + .name = "ECCCDH/SECP521R1 13", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_13_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_13_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_13_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_13_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_13_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_14 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_14_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x22, 0xb6, 0xd2, 0xa2, 0x2d, 0x71, 0xdf, 0xaa, 0x81, 0x1d, 0x2d, 0x9f, 0x9f, 0x31, 0xfb, 0xed, 0x27, 0xf2, 0xe1, 0xf3, 0xd2, 0x39, 0x53, 0x8d, 0xdf, 0x3e, 0x4c, 0xc8, 0xc3, 0x9a, 0x33, 0x02, 0x66, 0xdb, 0x25, 0xb7, 0xbc, 0x0a, 0x97, 0x04, 0xf1, 0x7b, 0xde, 0x7f, 0x35, 0x92, 0xbf, 0x5f, 0x1f, 0x2d, 0x4b, 0x56, 0x01, 0x3a, 0xac, 0xc3, 0xd8, 0xd1, 0xbc, 0x02, 0xf0, 0x0d, 0x31, 0x46, 0xcc, +}; +static const u8 ecccdh_SECP521R1_14_test_vector_peer_pub_key[] = { + 0x01, 0x72, 0x00, 0xb3, 0xf1, 0x6a, 0x68, 0xcb, 0xae, 0xd2, 0xbf, 0x78, 0xba, 0x8c, 0xdd, 0xfb, 0x6c, 0xff, 0xac, 0x26, 0x2b, 0xba, 0x00, 0xfb, 0xc2, 0x5f, 0x9d, 0xc7, 0x2a, 0x07, 0xce, 0x59, 0x37, 0x29, 0x04, 0x89, 0x9f, 0x36, 0x4c, 0x44, 0xcb, 0x26, 0x4c, 0x09, 0x7b, 0x64, 0x7d, 0x44, 0x12, 0xbe, 0xe3, 0xe5, 0x19, 0x89, 0x2d, 0x53, 0x4d, 0x91, 0x29, 0xf8, 0xa2, 0x8f, 0x75, 0x00, 0xfe, 0xe7, 0x00, 0xba, 0xba, 0x8d, 0x67, 0x2a, 0x4f, 0x4a, 0x3b, 0x63, 0xde, 0x48, 0xb9, 0x6f, 0x56, 0xe1, 0x8d, 0xf5, 0xd6, 0x8f, 0x7d, 0x70, 0xd5, 0x10, 0x98, 0x33, 0xf4, 0x37, 0x70, 0xd6, 0x73, 0x2e, 0x06, 0xb3, 0x9a, 0xd6, 0x0d, 0x93, 0xe5, 0xb4, 0x3d, 0xb8, 0x78, 0x9f, 0x1e, 0xc0, 0xab, 0xa4, 0x72, 0x86, 0xa3, 0x9e, 0xa5, 0x84, 0x23, 0x5a, 0xce, 0xa7, 0x57, 0xdb, 0xf1, 0x3d, 0x53, 0xb5, 0x83, 0x64, +}; +static const u8 ecccdh_SECP521R1_14_test_vector_our_pub_key[] = { + 0x00, 0xba, 0x38, 0xcf, 0xbf, 0x9f, 0xd2, 0x51, 0x8a, 0x3f, 0x61, 0xd4, 0x35, 0x49, 0xe7, 0xa6, 0xa6, 0xd2, 0x8b, 0x2b, 0xe5, 0x7f, 0xfd, 0x3e, 0x0f, 0xac, 0xeb, 0x63, 0x6b, 0x34, 0xed, 0x17, 0xe0, 0x44, 0xa9, 0xf2, 0x49, 0xda, 0xe8, 0xfc, 0x13, 0x2e, 0x93, 0x7e, 0x2d, 0x93, 0x49, 0xcd, 0x2e, 0xd7, 0x7b, 0xb1, 0x04, 0x9c, 0xeb, 0x69, 0x2a, 0x2e, 0xc5, 0xb1, 0x7a, 0xd6, 0x15, 0x02, 0xa6, 0x4c, 0x00, 0x1e, 0xc9, 0x1d, 0x30, 0x58, 0x57, 0x3f, 0xa6, 0xc0, 0x56, 0x4a, 0x02, 0xa1, 0xa0, 0x10, 0x16, 0x0c, 0x31, 0x3b, 0xc7, 0xc7, 0x35, 0x10, 0xdc, 0x98, 0x3e, 0x54, 0x61, 0x68, 0x2b, 0x5b, 0xe0, 0x0d, 0xbc, 0xe7, 0xe2, 0xc6, 0x82, 0xad, 0x73, 0xf2, 0x9c, 0xa8, 0x22, 0xcd, 0xc1, 0x11, 0xf6, 0x8f, 0xab, 0xe3, 0x3a, 0x7b, 0x38, 0x4a, 0x64, 0x83, 0x42, 0xc3, 0xcd, 0xb9, 0xf0, 0x50, 0xbc, 0xdb, +}; +static const u8 ecccdh_SECP521R1_14_test_vector_shared_secret[] = { + 0x01, 0x01, 0xe4, 0x62, 0xe9, 0xd9, 0x15, 0x99, 0x68, 0xf6, 0x44, 0x0e, 0x95, 0x6f, 0x11, 0xdc, 0xf2, 0x22, 0x7a, 0xe4, 0xae, 0xa8, 0x16, 0x67, 0x12, 0x2b, 0x6a, 0xf9, 0x23, 0x9a, 0x29, 0x1e, 0xb5, 0xd6, 0xcf, 0x5a, 0x40, 0x87, 0xf3, 0x58, 0x52, 0x5f, 0xca, 0xcf, 0xa4, 0x6b, 0xb2, 0xdb, 0x01, 0xa7, 0x5a, 0xf1, 0xba, 0x51, 0x9b, 0x2d, 0x31, 0xda, 0x33, 0xed, 0xa8, 0x7a, 0x9d, 0x56, 0x57, 0x48, +}; +static const ecdh_test_case ecccdh_SECP521R1_14_test_case = { + .name = "ECCCDH/SECP521R1 14", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_14_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_14_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_14_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_14_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_14_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_15 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_15_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x5b, 0xac, 0xff, 0xf2, 0x68, 0xac, 0xf6, 0x55, 0x3c, 0x3c, 0x58, 0x3b, 0x46, 0x4e, 0xa3, 0x6a, 0x1d, 0x35, 0xe2, 0xb2, 0x57, 0xa5, 0xd4, 0x9e, 0xb3, 0x41, 0x9d, 0x5a, 0x09, 0x50, 0x87, 0xc2, 0xfb, 0x4d, 0x15, 0xcf, 0x5b, 0xf5, 0xaf, 0x81, 0x6d, 0x0f, 0x3f, 0xf7, 0x58, 0x64, 0x90, 0xcc, 0xd3, 0xdd, 0xc1, 0xa9, 0x8b, 0x39, 0xce, 0x63, 0x74, 0x9c, 0x62, 0x88, 0xce, 0x0d, 0xbd, 0xac, 0x7d, +}; +static const u8 ecccdh_SECP521R1_15_test_vector_peer_pub_key[] = { + 0x00, 0x4e, 0xfd, 0x5d, 0xbd, 0x2f, 0x97, 0x9e, 0x38, 0x31, 0xce, 0x98, 0xf8, 0x23, 0x55, 0xd6, 0xca, 0x14, 0xa5, 0x75, 0x78, 0x42, 0x87, 0x58, 0x82, 0x99, 0x0a, 0xb8, 0x5a, 0xb9, 0xb7, 0x35, 0x2d, 0xd6, 0xb9, 0xb2, 0xf4, 0xea, 0x9a, 0x1e, 0x95, 0xc3, 0x88, 0x0d, 0x65, 0xd1, 0xf3, 0x60, 0x2f, 0x9c, 0xa6, 0x53, 0xdc, 0x34, 0x6f, 0xac, 0x85, 0x86, 0x58, 0xd7, 0x56, 0x26, 0xf4, 0xd4, 0xfb, 0x08, 0x00, 0x61, 0xcf, 0x15, 0xdb, 0xda, 0xa7, 0xf3, 0x15, 0x89, 0xc9, 0x84, 0x00, 0x37, 0x3d, 0xa2, 0x84, 0x50, 0x6d, 0x70, 0xc8, 0x9f, 0x07, 0x4e, 0xd2, 0x62, 0xa9, 0xe2, 0x81, 0x40, 0x79, 0x6b, 0x72, 0x36, 0xc2, 0xee, 0xf9, 0x90, 0x16, 0x08, 0x5e, 0x71, 0x55, 0x2f, 0xf4, 0x88, 0xc7, 0x2b, 0x73, 0x39, 0xfe, 0xfb, 0x79, 0x15, 0xc3, 0x84, 0x59, 0xcb, 0x20, 0xab, 0x85, 0xae, 0xc4, 0xe4, 0x50, 0x52, +}; +static const u8 ecccdh_SECP521R1_15_test_vector_our_pub_key[] = { + 0x00, 0x36, 0xe4, 0x88, 0xda, 0x75, 0x81, 0x47, 0x2a, 0x9d, 0x8e, 0x62, 0x8c, 0x58, 0xd6, 0xad, 0x72, 0x73, 0x11, 0xb7, 0xe6, 0xa3, 0xf6, 0xae, 0x33, 0xa8, 0x54, 0x4f, 0x34, 0xb0, 0x92, 0x80, 0x24, 0x90, 0x20, 0xbe, 0x71, 0x96, 0x91, 0x6f, 0xaf, 0xd9, 0x0e, 0x2e, 0xc5, 0x4b, 0x66, 0xb5, 0x46, 0x8d, 0x23, 0x61, 0xb9, 0x9b, 0x56, 0xfa, 0x00, 0xd7, 0xac, 0x37, 0xab, 0xb8, 0xc6, 0xf1, 0x66, 0x53, 0x01, 0x1e, 0xdb, 0x9f, 0xb8, 0xad, 0xb6, 0xa4, 0x3f, 0x4f, 0x5f, 0x5f, 0xdc, 0x14, 0x21, 0xc9, 0xfe, 0x04, 0xfc, 0x8b, 0xa4, 0x6c, 0x9b, 0x66, 0x33, 0x4e, 0x3a, 0xf9, 0x27, 0xc8, 0xbe, 0xfb, 0x43, 0x07, 0x10, 0x4f, 0x29, 0x9a, 0xce, 0xc4, 0xe3, 0x0f, 0x81, 0x2d, 0x93, 0x45, 0xc9, 0x72, 0x0d, 0x19, 0x86, 0x9d, 0xbf, 0xff, 0xd4, 0xca, 0x3e, 0x7d, 0x27, 0x13, 0xeb, 0x5f, 0xc3, 0xf4, 0x26, 0x15, +}; +static const u8 ecccdh_SECP521R1_15_test_vector_shared_secret[] = { + 0x01, 0x41, 0xd6, 0xa4, 0xb7, 0x19, 0xab, 0x67, 0xea, 0xf0, 0x4a, 0x92, 0xc0, 0xa4, 0x1e, 0x2d, 0xda, 0x78, 0xf4, 0x35, 0x4f, 0xb9, 0x0b, 0xdc, 0x35, 0x20, 0x2c, 0xc7, 0x69, 0x9b, 0x9b, 0x04, 0xd4, 0x96, 0x16, 0xf8, 0x22, 0x55, 0xde, 0xbf, 0x7b, 0xbe, 0xc0, 0x45, 0xae, 0x58, 0xf9, 0x82, 0xa6, 0x69, 0x05, 0xfc, 0xfa, 0xe6, 0x9d, 0x68, 0x97, 0x85, 0xe3, 0x8c, 0x86, 0x8e, 0xb4, 0xa2, 0x7e, 0x7b, +}; +static const ecdh_test_case ecccdh_SECP521R1_15_test_case = { + .name = "ECCCDH/SECP521R1 15", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_15_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_15_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_15_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_15_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_15_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_16 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_16_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x8e, 0x2c, 0x93, 0xc5, 0x42, 0x38, 0x76, 0x22, 0x3a, 0x63, 0x7c, 0xad, 0x36, 0x7c, 0x85, 0x89, 0xda, 0x69, 0xa2, 0xd0, 0xfc, 0x68, 0x61, 0x2f, 0x31, 0x92, 0x3a, 0xe5, 0x02, 0x19, 0xdf, 0x24, 0x52, 0xe7, 0xcc, 0x92, 0x61, 0x5b, 0x67, 0xf1, 0x7b, 0x57, 0xff, 0xd2, 0xf5, 0x2b, 0x19, 0x15, 0x4b, 0xb4, 0x0d, 0x77, 0x15, 0x33, 0x64, 0x20, 0xfd, 0xe2, 0xe8, 0x9f, 0xee, 0x24, 0x4f, 0x59, 0xdc, +}; +static const u8 ecccdh_SECP521R1_16_test_vector_peer_pub_key[] = { + 0x01, 0x29, 0x89, 0x1d, 0xe0, 0xcf, 0x3c, 0xf8, 0x2e, 0x8c, 0x2c, 0xf1, 0xbf, 0x90, 0xbb, 0x29, 0x6f, 0xe0, 0x0a, 0xb0, 0x8c, 0xa4, 0x5b, 0xb7, 0x89, 0x2e, 0x0e, 0x22, 0x7a, 0x50, 0x4f, 0xdd, 0x05, 0xd2, 0x38, 0x1a, 0x44, 0x48, 0xb6, 0x8a, 0xdf, 0xf9, 0xc4, 0x15, 0x3c, 0x87, 0xea, 0xcb, 0x78, 0x33, 0x0d, 0x8b, 0xd5, 0x25, 0x15, 0xf9, 0xf9, 0xa0, 0xb5, 0x8e, 0x85, 0xf4, 0x46, 0xbb, 0x4e, 0x10, 0x00, 0x9e, 0xdd, 0x67, 0x96, 0x96, 0xd3, 0xd1, 0xd0, 0xef, 0x32, 0x7f, 0x20, 0x03, 0x83, 0x25, 0x3f, 0x64, 0x13, 0x68, 0x3d, 0x9e, 0x4f, 0xcc, 0x87, 0xbb, 0x35, 0xf1, 0x12, 0xc2, 0xf1, 0x10, 0x09, 0x8d, 0x15, 0xe5, 0x70, 0x1d, 0x7c, 0xee, 0xe4, 0x16, 0x29, 0x1f, 0xf5, 0xfe, 0xd8, 0x5e, 0x68, 0x7f, 0x72, 0x73, 0x88, 0xb9, 0xaf, 0xe2, 0x6a, 0x4f, 0x6f, 0xee, 0xd5, 0x60, 0xb2, 0x18, 0xe6, 0xbb, +}; +static const u8 ecccdh_SECP521R1_16_test_vector_our_pub_key[] = { + 0x00, 0xfa, 0x3b, 0x35, 0x11, 0x8d, 0x6c, 0x42, 0x25, 0x70, 0xf7, 0x24, 0xa2, 0x6f, 0x90, 0xb2, 0x83, 0x3b, 0x19, 0x23, 0x91, 0x74, 0xce, 0xa0, 0x81, 0xc5, 0x31, 0x33, 0xf6, 0x4d, 0xb6, 0x0d, 0x69, 0x40, 0xea, 0x12, 0x61, 0x29, 0x9c, 0x04, 0xc1, 0xf4, 0x58, 0x7c, 0xdb, 0x0c, 0x4c, 0x39, 0x61, 0x64, 0x79, 0xc1, 0xbb, 0x0c, 0x14, 0x67, 0x99, 0xa1, 0x18, 0x03, 0x2d, 0xcf, 0x98, 0xf8, 0x99, 0xc0, 0x00, 0x69, 0xf0, 0x40, 0x22, 0x90, 0x06, 0x15, 0x1f, 0xa3, 0x2b, 0x51, 0xf6, 0x79, 0xc8, 0x81, 0x6f, 0x7c, 0x17, 0x50, 0x6b, 0x40, 0x38, 0x09, 0xdc, 0x77, 0xcd, 0x58, 0xa2, 0xae, 0xc4, 0x30, 0xd9, 0x4d, 0x13, 0xb6, 0xc9, 0x16, 0xde, 0x99, 0xf3, 0x55, 0xaa, 0x45, 0xfc, 0xfb, 0xc6, 0x85, 0x3d, 0x68, 0x6c, 0x71, 0xbe, 0x49, 0x6a, 0x06, 0x7d, 0x24, 0xbf, 0xae, 0xa4, 0x81, 0x8f, 0xc5, 0x1f, 0x75, +}; +static const u8 ecccdh_SECP521R1_16_test_vector_shared_secret[] = { + 0x00, 0x34, 0x5e, 0x26, 0xe0, 0xab, 0xb1, 0xaa, 0xc1, 0x2b, 0x75, 0xf3, 0xa9, 0xcf, 0x41, 0xef, 0xe1, 0xc3, 0x36, 0x39, 0x6d, 0xff, 0xa4, 0xa0, 0x67, 0xa4, 0xc2, 0xcf, 0xeb, 0x87, 0x8c, 0x68, 0xb2, 0xb0, 0x45, 0xfa, 0xa4, 0xe5, 0xb4, 0xe6, 0xfa, 0x46, 0x78, 0xf5, 0xb6, 0x03, 0xc3, 0x51, 0x90, 0x3b, 0x14, 0xbf, 0x9a, 0x6a, 0x70, 0xc4, 0x39, 0x25, 0x71, 0x99, 0xa6, 0x40, 0x89, 0x0b, 0x61, 0xd1, +}; +static const ecdh_test_case ecccdh_SECP521R1_16_test_case = { + .name = "ECCCDH/SECP521R1 16", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_16_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_16_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_16_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_16_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_16_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_17 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_17_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x9d, 0x39, 0xd4, 0x0d, 0x81, 0x11, 0xbf, 0x16, 0xd2, 0x8c, 0x59, 0x36, 0x55, 0x43, 0x26, 0xb1, 0x97, 0x35, 0x3e, 0xeb, 0xbc, 0xf4, 0x75, 0x45, 0x39, 0x3b, 0xc8, 0xd3, 0xaa, 0xf9, 0x8f, 0x14, 0xf5, 0xbe, 0x70, 0x74, 0xbf, 0xb3, 0x8e, 0x6c, 0xc9, 0x7b, 0x98, 0x97, 0x54, 0x07, 0x4d, 0xad, 0xdb, 0x30, 0x45, 0xf4, 0xe4, 0xce, 0x74, 0x56, 0x69, 0xfd, 0xb3, 0xec, 0x0d, 0x5f, 0xa8, +}; +static const u8 ecccdh_SECP521R1_17_test_vector_peer_pub_key[] = { + 0x01, 0xa3, 0xc2, 0x02, 0x40, 0xe5, 0x9f, 0x5b, 0x7a, 0x3e, 0x17, 0xc2, 0x75, 0xd2, 0x31, 0x4b, 0xa1, 0x74, 0x12, 0x10, 0xad, 0x58, 0xb7, 0x10, 0x36, 0xf8, 0xc8, 0x3c, 0xc1, 0xf6, 0xb0, 0xf4, 0x09, 0xdf, 0xdd, 0x91, 0x13, 0xe9, 0x4b, 0x67, 0xec, 0x39, 0xc3, 0x29, 0x14, 0x26, 0xc2, 0x3f, 0xfc, 0xc4, 0x47, 0x05, 0x46, 0x70, 0xd2, 0x90, 0x8f, 0xf8, 0xfe, 0x67, 0xdc, 0x23, 0x06, 0x03, 0x4c, 0x5c, 0x01, 0xd2, 0x82, 0x5b, 0xfd, 0x3a, 0xf8, 0xb1, 0xe1, 0x32, 0x05, 0x78, 0x0c, 0x13, 0x7f, 0xe9, 0x38, 0xf8, 0x4f, 0xde, 0x40, 0x18, 0x8e, 0x61, 0xea, 0x02, 0xce, 0xad, 0x81, 0xba, 0xdf, 0xdb, 0x42, 0x5c, 0x29, 0xf7, 0xd7, 0xfb, 0x03, 0x24, 0xde, 0xba, 0xdc, 0x10, 0xbb, 0xb9, 0x3d, 0xe6, 0x8f, 0x62, 0xc3, 0x50, 0x69, 0x26, 0x82, 0x83, 0xf5, 0x26, 0x58, 0x65, 0xdb, 0x57, 0xa7, 0x9f, 0x7b, 0xf7, +}; +static const u8 ecccdh_SECP521R1_17_test_vector_our_pub_key[] = { + 0x01, 0x2e, 0xc2, 0x26, 0xd0, 0x50, 0xce, 0x07, 0xc7, 0x9b, 0x3d, 0xf4, 0xd0, 0xf0, 0x89, 0x1f, 0x9f, 0x7a, 0xdf, 0x46, 0x2e, 0x8c, 0x98, 0xdb, 0xc1, 0xa2, 0xa1, 0x4f, 0x5e, 0x53, 0xa3, 0xf5, 0xad, 0x89, 0x44, 0x33, 0x58, 0x7c, 0xc4, 0x29, 0xa8, 0xbe, 0x9e, 0xa1, 0xd8, 0x4f, 0xa3, 0x3b, 0x18, 0x03, 0x69, 0x0d, 0xae, 0x04, 0xda, 0x72, 0x18, 0xd3, 0x00, 0x26, 0x15, 0x7f, 0xc9, 0x95, 0xcf, 0x52, 0x00, 0x48, 0x37, 0xdf, 0xbf, 0x34, 0x26, 0xf5, 0x7b, 0x5c, 0x79, 0x32, 0x69, 0x13, 0x0a, 0xbb, 0x9a, 0x38, 0xf6, 0x18, 0x53, 0x22, 0x11, 0x93, 0x11, 0x54, 0xdb, 0x4e, 0xeb, 0x9a, 0xed, 0xe8, 0x8e, 0x57, 0x29, 0x0f, 0x84, 0x2e, 0xa0, 0xf2, 0xea, 0x9a, 0x5f, 0x74, 0xc6, 0x20, 0x3a, 0x39, 0x20, 0xfe, 0x4e, 0x30, 0x5f, 0x61, 0x18, 0xf6, 0x76, 0xb1, 0x54, 0xe1, 0xd7, 0x5b, 0x9c, 0xb5, 0xeb, 0x88, +}; +static const u8 ecccdh_SECP521R1_17_test_vector_shared_secret[] = { + 0x00, 0x6f, 0xe9, 0xde, 0x6f, 0xb8, 0xe6, 0x72, 0xe7, 0xfd, 0x15, 0x0f, 0xdc, 0x5e, 0x61, 0x7f, 0xab, 0xb0, 0xd4, 0x39, 0x06, 0x35, 0x4c, 0xcf, 0xd2, 0x24, 0x75, 0x7c, 0x72, 0x76, 0xf7, 0xa1, 0x01, 0x00, 0x91, 0xb1, 0x7e, 0xd0, 0x72, 0x07, 0x4f, 0x8d, 0x10, 0xa5, 0xec, 0x97, 0x1e, 0xb3, 0x5a, 0x5c, 0xb7, 0x07, 0x66, 0x03, 0xb7, 0xbc, 0x38, 0xd4, 0x32, 0xcb, 0xc0, 0x59, 0xf8, 0x0f, 0x94, 0x88, +}; +static const ecdh_test_case ecccdh_SECP521R1_17_test_case = { + .name = "ECCCDH/SECP521R1 17", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_17_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_17_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_17_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_17_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_17_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_18 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_18_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0x1a, 0x5d, 0x1c, 0xc7, 0x9c, 0xd2, 0xbf, 0x73, 0xea, 0x10, 0x6f, 0x0e, 0x60, 0xa5, 0xac, 0xe2, 0x20, 0x81, 0x3b, 0x53, 0xe2, 0x7b, 0x73, 0x98, 0x64, 0x33, 0x4a, 0x07, 0xc0, 0x33, 0x67, 0xef, 0xda, 0x7a, 0x46, 0x19, 0xfa, 0x6e, 0xef, 0x3a, 0x97, 0x46, 0x49, 0x22, 0x83, 0xb3, 0xc4, 0x45, 0x61, 0x0a, 0x02, 0x3a, 0x9c, 0xc4, 0x9b, 0xf4, 0x59, 0x11, 0x40, 0x38, 0x4f, 0xca, 0x5c, 0x8b, 0xb5, +}; +static const u8 ecccdh_SECP521R1_18_test_vector_peer_pub_key[] = { + 0x00, 0x7e, 0x2d, 0x13, 0x8f, 0x28, 0x32, 0xe3, 0x45, 0xae, 0x8f, 0xf6, 0x59, 0x57, 0xe4, 0x0e, 0x5e, 0xc7, 0x16, 0x3f, 0x01, 0x6b, 0xdf, 0x6d, 0x24, 0xa2, 0x24, 0x3d, 0xaa, 0x63, 0x1d, 0x87, 0x8a, 0x4a, 0x16, 0x78, 0x39, 0x90, 0xc7, 0x22, 0x38, 0x21, 0x30, 0xf9, 0xe5, 0x1f, 0x0c, 0x1b, 0xd6, 0xff, 0x5a, 0xc9, 0x67, 0x80, 0xe4, 0x8b, 0x68, 0xf5, 0xde, 0xc9, 0x5f, 0x42, 0xe6, 0x14, 0x4b, 0xb5, 0x00, 0xb0, 0xde, 0x5c, 0x89, 0x67, 0x91, 0xf5, 0x28, 0x86, 0xb0, 0xf0, 0x99, 0x13, 0xe2, 0x6e, 0x78, 0xdd, 0x0b, 0x69, 0x79, 0x8f, 0xc4, 0xdf, 0x6d, 0x95, 0xe3, 0xca, 0x70, 0x8e, 0xcb, 0xcb, 0xcc, 0xe1, 0xc1, 0x89, 0x5f, 0x55, 0x61, 0xbb, 0xab, 0xaa, 0xe3, 0x72, 0xe9, 0xe6, 0x7e, 0x6e, 0x1a, 0x3b, 0xe6, 0x0e, 0x19, 0xb4, 0x70, 0xcd, 0xf6, 0x73, 0xec, 0x1f, 0xc3, 0x93, 0xd3, 0x42, 0x6e, 0x20, +}; +static const u8 ecccdh_SECP521R1_18_test_vector_our_pub_key[] = { + 0x00, 0xeb, 0x07, 0xc7, 0x33, 0x2e, 0xed, 0xb7, 0xd3, 0x03, 0x60, 0x59, 0xd3, 0x5f, 0x7d, 0x22, 0x88, 0xd4, 0x37, 0x7d, 0x5f, 0x42, 0x33, 0x7a, 0xd3, 0x96, 0x40, 0x79, 0xfb, 0x12, 0x0c, 0xcd, 0x4c, 0x8b, 0xd3, 0x84, 0xb5, 0x85, 0x62, 0x10, 0x55, 0x21, 0x70, 0x23, 0xac, 0xd9, 0xa9, 0x4f, 0xcb, 0x3b, 0x96, 0x5b, 0xfb, 0x39, 0x46, 0x75, 0xe7, 0x88, 0xad, 0xe4, 0x1a, 0x1d, 0xe7, 0x3e, 0x62, 0x0c, 0x00, 0x49, 0x1a, 0x83, 0x5d, 0xe2, 0xe6, 0xe7, 0xde, 0xb7, 0xe0, 0x90, 0xf4, 0xa1, 0x1f, 0x2c, 0x46, 0x0c, 0x0b, 0x1f, 0x3d, 0x5e, 0x94, 0xee, 0x8d, 0x75, 0x10, 0x14, 0xdc, 0x72, 0x07, 0x84, 0xfd, 0x3b, 0x54, 0x50, 0x0c, 0x86, 0xeb, 0xae, 0xf1, 0x84, 0x29, 0xf0, 0x9e, 0x8e, 0x87, 0x6d, 0x5d, 0x15, 0x38, 0x96, 0x8a, 0x03, 0x0d, 0x77, 0x15, 0xdd, 0xe9, 0x9f, 0x0d, 0x8f, 0x06, 0xe2, 0x9d, 0x59, +}; +static const u8 ecccdh_SECP521R1_18_test_vector_shared_secret[] = { + 0x01, 0xe4, 0xe7, 0x59, 0xec, 0xed, 0xce, 0x10, 0x13, 0xba, 0xf7, 0x3e, 0x6f, 0xcc, 0x0b, 0x92, 0x45, 0x1d, 0x03, 0xbd, 0xd5, 0x04, 0x89, 0xb7, 0x88, 0x71, 0xc3, 0x33, 0x11, 0x49, 0x90, 0xc9, 0xba, 0x6a, 0x9b, 0x2f, 0xc7, 0xb1, 0xa2, 0xd9, 0xa1, 0x79, 0x4c, 0x1b, 0x60, 0xd9, 0x27, 0x9a, 0xf6, 0xf1, 0x46, 0xf0, 0xbb, 0xfb, 0x06, 0x83, 0x14, 0x04, 0x03, 0xbf, 0xa4, 0xcc, 0xdb, 0x52, 0x4a, 0x29, +}; +static const ecdh_test_case ecccdh_SECP521R1_18_test_case = { + .name = "ECCCDH/SECP521R1 18", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_18_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_18_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_18_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_18_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_18_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_19 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_19_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0x0c, 0x90, 0x8c, 0xaf, 0x1b, 0xe7, 0x4c, 0x61, 0x6b, 0x62, 0x5f, 0xc8, 0xc1, 0xf5, 0x14, 0x44, 0x6a, 0x6a, 0xec, 0x83, 0xb5, 0x93, 0x71, 0x41, 0xd6, 0xaf, 0xbb, 0x0a, 0x8c, 0x76, 0x66, 0xa7, 0x74, 0x6f, 0xa1, 0xf7, 0xa6, 0x66, 0x4a, 0x21, 0x23, 0xe8, 0xcd, 0xf6, 0xcd, 0x8b, 0xf8, 0x36, 0xc5, 0x6d, 0x3c, 0x0e, 0xbd, 0xcc, 0x98, 0x0e, 0x43, 0xa1, 0x86, 0xf9, 0x38, 0xf3, 0xa7, 0x8a, 0xe7, +}; +static const u8 ecccdh_SECP521R1_19_test_vector_peer_pub_key[] = { + 0x00, 0x11, 0x8c, 0x36, 0x02, 0x22, 0x09, 0xb1, 0xaf, 0x8e, 0xba, 0xd1, 0xa1, 0x2b, 0x56, 0x6f, 0xc4, 0x87, 0x44, 0x57, 0x6e, 0x11, 0x99, 0xfe, 0x80, 0xde, 0x1c, 0xdf, 0x85, 0x1c, 0xdf, 0x03, 0xe5, 0xb9, 0x09, 0x1a, 0x8f, 0x7e, 0x07, 0x9e, 0x83, 0xb7, 0xf8, 0x27, 0x25, 0x9b, 0x69, 0x1d, 0x0c, 0x22, 0xee, 0x29, 0xd6, 0xbd, 0xf7, 0x3e, 0xc7, 0xbb, 0xfd, 0x74, 0x6f, 0x2c, 0xd9, 0x7a, 0x35, 0x7d, 0x00, 0xda, 0x5f, 0xf4, 0x90, 0x45, 0x48, 0xa3, 0x42, 0xe2, 0xe7, 0xba, 0x6a, 0x1f, 0x4e, 0xe5, 0xf8, 0x40, 0x41, 0x1a, 0x96, 0xcf, 0x63, 0xe6, 0xfe, 0x62, 0x2f, 0x22, 0xc1, 0x3e, 0x61, 0x4e, 0x0a, 0x84, 0x7c, 0x11, 0xa1, 0xab, 0x3f, 0x1d, 0x12, 0xcc, 0x85, 0x0c, 0x32, 0xe0, 0x95, 0x61, 0x4c, 0xa8, 0xf7, 0xe2, 0x72, 0x14, 0x77, 0xb4, 0x86, 0xe9, 0xff, 0x40, 0x37, 0x29, 0x77, 0xc3, 0xf6, 0x5c, +}; +static const u8 ecccdh_SECP521R1_19_test_vector_our_pub_key[] = { + 0x00, 0x31, 0x89, 0x0f, 0x4c, 0x7a, 0xbe, 0xc3, 0xf7, 0x23, 0x36, 0x22, 0x85, 0xd7, 0x7d, 0x26, 0x36, 0xf8, 0x76, 0x81, 0x7d, 0xb3, 0xbb, 0xc8, 0x8b, 0x01, 0xe7, 0x73, 0x59, 0x7b, 0x96, 0x9f, 0xf6, 0xf0, 0x13, 0xea, 0x47, 0x0c, 0x85, 0x4a, 0xb4, 0xa7, 0x73, 0x90, 0x04, 0xeb, 0x8c, 0xbe, 0xa6, 0x9b, 0x82, 0xdd, 0xf3, 0x6a, 0xca, 0xdd, 0x40, 0x68, 0x71, 0x79, 0x8e, 0xcb, 0x2a, 0xc3, 0xaa, 0x7f, 0x00, 0xd8, 0xb4, 0x29, 0xae, 0x32, 0x50, 0x26, 0x6b, 0x96, 0x43, 0xc0, 0xc7, 0x65, 0xa6, 0x0d, 0xc1, 0x01, 0x55, 0xbc, 0x25, 0x31, 0xcf, 0x86, 0x27, 0x29, 0x6f, 0x49, 0x78, 0xb6, 0x64, 0x0a, 0x9e, 0x60, 0x0e, 0x19, 0xd0, 0x03, 0x7d, 0x58, 0x50, 0x3f, 0xa8, 0x07, 0x99, 0x54, 0x6a, 0x81, 0x4d, 0x74, 0x78, 0xa5, 0x50, 0xaa, 0x90, 0xe5, 0xeb, 0xeb, 0x05, 0x25, 0x27, 0xfa, 0xae, 0xae, 0x5d, 0x08, +}; +static const u8 ecccdh_SECP521R1_19_test_vector_shared_secret[] = { + 0x01, 0x63, 0xc9, 0x19, 0x1d, 0x65, 0x10, 0x39, 0xa5, 0xfe, 0x98, 0x5a, 0x0e, 0xea, 0x1e, 0xba, 0x01, 0x8a, 0x40, 0xab, 0x19, 0x37, 0xfc, 0xd2, 0xb6, 0x12, 0x20, 0x82, 0x0e, 0xe8, 0xf2, 0x30, 0x2e, 0x97, 0x99, 0xf6, 0xed, 0xfc, 0x3f, 0x51, 0x74, 0xf3, 0x69, 0xd6, 0x72, 0xd3, 0x77, 0xea, 0x89, 0x54, 0xa8, 0xd0, 0xc8, 0xb8, 0x51, 0xe8, 0x1a, 0x56, 0xfd, 0xa9, 0x52, 0x12, 0xa6, 0x57, 0x8f, 0x0e, +}; +static const ecdh_test_case ecccdh_SECP521R1_19_test_case = { + .name = "ECCCDH/SECP521R1 19", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_19_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_19_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_19_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_19_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_19_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_20 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_20_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x01, 0xb3, 0x7d, 0x6b, 0x72, 0x88, 0xde, 0x67, 0x13, 0x60, 0x42, 0x5d, 0x3e, 0x5a, 0xc1, 0xcc, 0xb2, 0x18, 0x15, 0x07, 0x9d, 0x8d, 0x73, 0x43, 0x1e, 0x9b, 0x74, 0xa6, 0xf0, 0xe7, 0xae, 0x00, 0x4a, 0x35, 0x75, 0x75, 0xb1, 0x1a, 0xd6, 0x66, 0x42, 0xce, 0x8b, 0x77, 0x55, 0x93, 0xeb, 0xa9, 0xd9, 0x8b, 0xf2, 0x5c, 0x75, 0xef, 0x0b, 0x4d, 0x3a, 0x20, 0x98, 0xbb, 0xc6, 0x41, 0xf5, 0x9a, 0x2b, 0x77, +}; +static const u8 ecccdh_SECP521R1_20_test_vector_peer_pub_key[] = { + 0x01, 0x78, 0x0e, 0xdf, 0xf1, 0xca, 0x1c, 0x03, 0xcf, 0xbe, 0x59, 0x3e, 0xdc, 0x6c, 0x04, 0x9b, 0xcb, 0x28, 0x60, 0x29, 0x4a, 0x92, 0xc3, 0x55, 0x48, 0x9d, 0x9a, 0xfb, 0x2e, 0x70, 0x20, 0x75, 0xad, 0xe1, 0xc9, 0x53, 0x89, 0x5a, 0x45, 0x62, 0x30, 0xa0, 0xcd, 0xe9, 0x05, 0xde, 0x4a, 0x3f, 0x38, 0x57, 0x3d, 0xbf, 0xcc, 0xcd, 0x67, 0xad, 0x6e, 0x7e, 0x93, 0xf0, 0xb5, 0x58, 0x1e, 0x92, 0x6a, 0x5d, 0x00, 0xa5, 0x48, 0x19, 0x62, 0xc9, 0x16, 0x29, 0x62, 0xe7, 0xf0, 0xeb, 0xde, 0xc9, 0x36, 0x93, 0x5d, 0x0e, 0xaa, 0x81, 0x3e, 0x82, 0x26, 0xd4, 0x0d, 0x7f, 0x61, 0x19, 0xbf, 0xd9, 0x40, 0x60, 0x23, 0x80, 0xc8, 0x67, 0x21, 0xe6, 0x1d, 0xb1, 0x83, 0x0f, 0x51, 0xe1, 0x39, 0xf2, 0x10, 0x00, 0x0b, 0xce, 0xc0, 0xd8, 0xed, 0xd3, 0x9e, 0x54, 0xd7, 0x3a, 0x9a, 0x12, 0x9f, 0x95, 0xcd, 0x5f, 0xa9, 0x79, +}; +static const u8 ecccdh_SECP521R1_20_test_vector_our_pub_key[] = { + 0x00, 0x18, 0x9a, 0x5e, 0xe3, 0x4d, 0xe7, 0xe3, 0x5a, 0xef, 0xea, 0xee, 0xf9, 0x22, 0x0c, 0x18, 0x07, 0x1b, 0x4c, 0x29, 0xa4, 0xc3, 0xbd, 0x9d, 0x95, 0x44, 0x58, 0xbd, 0x3e, 0x82, 0xa7, 0xa3, 0x4d, 0xa3, 0x4c, 0xff, 0x55, 0x79, 0xb8, 0x10, 0x1c, 0x06, 0x5b, 0x1f, 0x2f, 0x52, 0x7c, 0xf4, 0x58, 0x15, 0x01, 0xe2, 0x8e, 0xf5, 0x67, 0x18, 0x73, 0xe6, 0x52, 0x67, 0x73, 0x3d, 0x00, 0x35, 0x20, 0xaf, 0x01, 0xeb, 0x4b, 0xc5, 0x0a, 0x7b, 0x4d, 0x45, 0x99, 0xd7, 0xe3, 0xfa, 0x77, 0x3d, 0xdb, 0x9e, 0xb2, 0x52, 0xc9, 0xb3, 0x42, 0x28, 0x72, 0xe5, 0x44, 0xbd, 0xf7, 0x5c, 0x7b, 0xf6, 0x0f, 0x51, 0x66, 0xdd, 0xc1, 0x1e, 0xb0, 0x8f, 0xa7, 0xc3, 0x08, 0x22, 0xda, 0xba, 0xee, 0x37, 0x3a, 0xb4, 0x68, 0xeb, 0x2d, 0x92, 0x2e, 0x48, 0x4e, 0x2a, 0x52, 0x7f, 0xff, 0x2e, 0xbb, 0x80, 0x4b, 0x7d, 0x9a, 0x37, +}; +static const u8 ecccdh_SECP521R1_20_test_vector_shared_secret[] = { + 0x01, 0x5d, 0x61, 0x3e, 0x26, 0x7a, 0x36, 0x34, 0x2e, 0x0d, 0x12, 0x5c, 0xda, 0xd6, 0x43, 0xd8, 0x0d, 0x97, 0xed, 0x06, 0x00, 0xaf, 0xb9, 0xe6, 0xb9, 0x54, 0x5c, 0x9e, 0x64, 0xa9, 0x8c, 0xc6, 0xda, 0x7c, 0x5a, 0xaa, 0x3a, 0x8d, 0xa0, 0xbd, 0xd9, 0xdd, 0x3b, 0x97, 0xe9, 0x78, 0x82, 0x18, 0xa8, 0x0a, 0xba, 0xfc, 0x10, 0x6e, 0xf0, 0x65, 0xc8, 0xf1, 0xc4, 0xe1, 0x11, 0x9e, 0xf5, 0x8d, 0x29, 0x8b, +}; +static const ecdh_test_case ecccdh_SECP521R1_20_test_case = { + .name = "ECCCDH/SECP521R1 20", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_20_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_20_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_20_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_20_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_20_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_21 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_21_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0xf2, 0x66, 0x1a, 0xc7, 0x62, 0xf6, 0x0c, 0x5f, 0xff, 0x23, 0xbe, 0x5d, 0x96, 0x9c, 0xcd, 0x4e, 0xc6, 0xf9, 0x8e, 0x4e, 0x72, 0x61, 0x8d, 0x12, 0xbd, 0xcd, 0xb9, 0xb4, 0x10, 0x21, 0x62, 0x33, 0x37, 0x88, 0xc0, 0xba, 0xe5, 0x9f, 0x91, 0xcd, 0xfc, 0x17, 0x2c, 0x7a, 0x16, 0x81, 0xee, 0x44, 0xd9, 0x6a, 0xb2, 0x13, 0x5a, 0x6e, 0x5f, 0x34, 0x15, 0xeb, 0xbc, 0xd5, 0x51, 0x65, 0xb1, 0xaf, 0xb0, +}; +static const u8 ecccdh_SECP521R1_21_test_vector_peer_pub_key[] = { + 0x01, 0x6d, 0xac, 0xff, 0xa1, 0x83, 0xe5, 0x30, 0x30, 0x83, 0xa3, 0x34, 0xf7, 0x65, 0xde, 0x72, 0x4e, 0xc5, 0xec, 0x94, 0x02, 0x02, 0x6d, 0x47, 0x97, 0x88, 0x4a, 0x98, 0x28, 0xa0, 0xd3, 0x21, 0xa8, 0xcf, 0xac, 0x74, 0xab, 0x73, 0x7f, 0xe2, 0x0a, 0x7d, 0x6b, 0xef, 0xcf, 0xc7, 0x3b, 0x6a, 0x35, 0xc1, 0xc7, 0xb0, 0x1d, 0x37, 0x3e, 0x31, 0xab, 0xc1, 0x92, 0xd4, 0x8a, 0x42, 0x41, 0xa3, 0x58, 0x03, 0x01, 0x1e, 0x53, 0x27, 0xca, 0xc2, 0x2d, 0x30, 0x5e, 0x71, 0x56, 0xe5, 0x59, 0x17, 0x6e, 0x19, 0xbe, 0xe7, 0xe4, 0xf2, 0xf5, 0x9e, 0x86, 0xf1, 0xa9, 0xd0, 0xb6, 0x60, 0x3b, 0x6a, 0x7d, 0xf1, 0x06, 0x9b, 0xde, 0x63, 0x87, 0xfe, 0xb7, 0x15, 0x87, 0xb8, 0xff, 0xce, 0x5b, 0x26, 0x6e, 0x1b, 0xae, 0x86, 0xde, 0x29, 0x37, 0x8a, 0x34, 0xe5, 0xc7, 0x4b, 0x67, 0x24, 0xc4, 0xd4, 0x0a, 0x71, 0x99, 0x23, +}; +static const u8 ecccdh_SECP521R1_21_test_vector_our_pub_key[] = { + 0x00, 0xa8, 0xe2, 0x5a, 0x69, 0x02, 0xd6, 0x87, 0xb4, 0x78, 0x7c, 0xdc, 0x94, 0xc3, 0x64, 0xac, 0x7c, 0xec, 0xc5, 0xc4, 0x95, 0x48, 0x3e, 0xd3, 0x63, 0xdc, 0x0a, 0xa9, 0x5e, 0xe2, 0xbd, 0x73, 0x9c, 0x4c, 0x4d, 0x46, 0xb1, 0x70, 0x06, 0xc7, 0x28, 0xb0, 0x76, 0x35, 0x0d, 0x7d, 0x7e, 0x54, 0xc6, 0x82, 0x2f, 0x52, 0xf4, 0x71, 0x62, 0xa2, 0x51, 0x09, 0xaa, 0xab, 0xa6, 0x90, 0xca, 0xb6, 0x96, 0xec, 0x01, 0x68, 0xd2, 0xf0, 0x8f, 0xe1, 0x9e, 0x4d, 0xc9, 0xee, 0x7a, 0x19, 0x5b, 0x03, 0xc9, 0xf7, 0xfe, 0x66, 0x76, 0xf9, 0xf5, 0x20, 0xb6, 0x27, 0x05, 0x57, 0x50, 0x4e, 0x72, 0xca, 0x43, 0x94, 0xa2, 0xc6, 0x91, 0x86, 0x25, 0xe1, 0x5a, 0xc0, 0xc5, 0x1b, 0x8f, 0x95, 0xcd, 0x56, 0x01, 0x23, 0x65, 0x3f, 0xb8, 0xe8, 0xee, 0x6d, 0xb9, 0x61, 0xe2, 0xc4, 0xc6, 0x2c, 0xc5, 0x4e, 0x92, 0xe2, 0xa2, 0xa9, +}; +static const u8 ecccdh_SECP521R1_21_test_vector_shared_secret[] = { + 0x01, 0x4d, 0x60, 0x82, 0xa3, 0xb5, 0xce, 0xd1, 0xab, 0x8c, 0xa2, 0x65, 0xa8, 0x10, 0x6f, 0x30, 0x21, 0x46, 0xc4, 0xac, 0xb8, 0xc3, 0x0b, 0xb1, 0x4a, 0x4c, 0x99, 0x1e, 0x3c, 0x82, 0xa9, 0x73, 0x12, 0x88, 0xbd, 0xb9, 0x1e, 0x0e, 0x85, 0xbd, 0xa3, 0x13, 0x91, 0x2d, 0x06, 0x38, 0x4f, 0xc4, 0x4f, 0x21, 0x53, 0xfb, 0x13, 0x50, 0x6f, 0xa9, 0xcf, 0x43, 0xc9, 0xaa, 0xb5, 0x75, 0x09, 0x88, 0xc9, 0x43, +}; +static const ecdh_test_case ecccdh_SECP521R1_21_test_case = { + .name = "ECCCDH/SECP521R1 21", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_21_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_21_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_21_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_21_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_21_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_22 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_22_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0xf4, 0x30, 0xca, 0x12, 0x61, 0xf0, 0x96, 0x81, 0xa9, 0x28, 0x2e, 0x9e, 0x97, 0x0a, 0x92, 0x34, 0x22, 0x7b, 0x1d, 0x5e, 0x58, 0xd5, 0x58, 0xc3, 0xcc, 0x6e, 0xff, 0x44, 0xd1, 0xbd, 0xf5, 0x3d, 0xe1, 0x6a, 0xd5, 0xee, 0x2b, 0x18, 0xb9, 0x2d, 0x62, 0xfc, 0x79, 0x58, 0x61, 0x16, 0xb0, 0xef, 0xc1, 0x5f, 0x79, 0x34, 0x0f, 0xb7, 0xea, 0xf5, 0xce, 0x6c, 0x44, 0x34, 0x1d, 0xcf, 0x8d, 0xde, 0x27, +}; +static const u8 ecccdh_SECP521R1_22_test_vector_peer_pub_key[] = { + 0x00, 0xa0, 0x91, 0x42, 0x1d, 0x37, 0x03, 0xe3, 0xb3, 0x41, 0xe9, 0xf1, 0xe7, 0xd5, 0x8f, 0x8c, 0xf7, 0xbd, 0xbd, 0x17, 0x98, 0xd0, 0x01, 0x96, 0x7b, 0x80, 0x1d, 0x1c, 0xec, 0x27, 0xe6, 0x05, 0xc5, 0x80, 0xb2, 0x38, 0x7c, 0x1c, 0xb4, 0x64, 0xf5, 0x5c, 0xe7, 0xac, 0x80, 0x33, 0x41, 0x02, 0xab, 0x03, 0xcf, 0xb8, 0x6d, 0x88, 0xaf, 0x76, 0xc9, 0xf4, 0x12, 0x9c, 0x01, 0xbe, 0xdd, 0x3b, 0xbf, 0xc4, 0x00, 0x8c, 0x9c, 0x57, 0x7a, 0x8e, 0x6f, 0xc4, 0x46, 0x81, 0x5e, 0x9d, 0x40, 0xba, 0xa6, 0x60, 0x25, 0xf1, 0x5d, 0xae, 0x28, 0x5f, 0x19, 0xeb, 0x66, 0x8e, 0xe6, 0x0a, 0xe9, 0xc9, 0x8e, 0x7e, 0xcd, 0xbf, 0x2b, 0x2a, 0x68, 0xe2, 0x29, 0x28, 0x05, 0x9f, 0x67, 0xdb, 0x18, 0x80, 0x07, 0x16, 0x1d, 0x3e, 0xcf, 0x39, 0x7e, 0x08, 0x83, 0xf0, 0xc4, 0xeb, 0x7e, 0xaf, 0x78, 0x27, 0xa6, 0x22, 0x05, 0xcc, +}; +static const u8 ecccdh_SECP521R1_22_test_vector_our_pub_key[] = { + 0x00, 0x6c, 0x1d, 0x9b, 0x5e, 0xca, 0x87, 0xde, 0x1f, 0xb8, 0x71, 0xa0, 0xa3, 0x2f, 0x80, 0x7c, 0x72, 0x5a, 0xdc, 0xcd, 0xe9, 0xb3, 0x96, 0x74, 0x53, 0xa7, 0x13, 0x47, 0xd6, 0x08, 0xf0, 0xc0, 0x30, 0xcd, 0x09, 0xe3, 0x38, 0xcd, 0xec, 0xbf, 0x4a, 0x02, 0x01, 0x5b, 0xc8, 0xa6, 0xe8, 0xd3, 0xe2, 0x59, 0x5f, 0xe7, 0x73, 0xff, 0xc2, 0xfc, 0x4e, 0x4a, 0x55, 0xd0, 0xb1, 0xa2, 0xcc, 0x00, 0x32, 0x3b, 0x01, 0x14, 0x1b, 0x21, 0x09, 0xe7, 0xf4, 0x98, 0x1c, 0x95, 0x2a, 0xa8, 0x18, 0xa2, 0xb9, 0xf6, 0xf5, 0xc4, 0x1f, 0xec, 0xcd, 0xb7, 0xa7, 0xa4, 0x5b, 0x9b, 0x4b, 0x67, 0x29, 0x37, 0x77, 0x1b, 0x00, 0x8c, 0xae, 0x5f, 0x93, 0x4d, 0xfe, 0x3f, 0xed, 0x10, 0xd3, 0x83, 0xab, 0x1f, 0x38, 0x76, 0x9c, 0x92, 0xce, 0x88, 0xd9, 0xbe, 0x54, 0x14, 0x81, 0x7e, 0xcb, 0x07, 0x3a, 0x31, 0xab, 0x36, 0x8c, 0xcb, +}; +static const u8 ecccdh_SECP521R1_22_test_vector_shared_secret[] = { + 0x00, 0x20, 0xc0, 0x07, 0x47, 0xcb, 0x8d, 0x49, 0x2f, 0xd4, 0x97, 0xe0, 0xfe, 0xc5, 0x46, 0x44, 0xbf, 0x02, 0x7d, 0x41, 0x8a, 0xb6, 0x86, 0x38, 0x1f, 0x10, 0x97, 0x12, 0xa9, 0x9c, 0xab, 0xe3, 0x28, 0xb9, 0x74, 0x3d, 0x22, 0x25, 0x83, 0x6f, 0x9a, 0xd6, 0x6e, 0x5d, 0x7f, 0xed, 0x1d, 0xe2, 0x47, 0xe0, 0xda, 0x92, 0xf6, 0x0d, 0x5b, 0x31, 0xf9, 0xe4, 0x76, 0x72, 0xe5, 0x7f, 0x71, 0x05, 0x98, 0xf4, +}; +static const ecdh_test_case ecccdh_SECP521R1_22_test_case = { + .name = "ECCCDH/SECP521R1 22", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_22_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_22_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_22_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_22_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_22_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_23 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_23_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0x5d, 0xc3, 0x3a, 0xed, 0xa0, 0x3c, 0x2e, 0xb2, 0x33, 0x01, 0x4e, 0xe4, 0x68, 0xdf, 0xf7, 0x53, 0xb7, 0x2f, 0x73, 0xb0, 0x09, 0x91, 0x04, 0x3e, 0xa3, 0x53, 0x82, 0x8a, 0xe6, 0x9d, 0x4c, 0xd0, 0xfa, 0xde, 0xda, 0x7b, 0xb2, 0x78, 0xb5, 0x35, 0xd7, 0xc5, 0x74, 0x06, 0xff, 0x2e, 0x6e, 0x47, 0x3a, 0x5a, 0x4f, 0xf9, 0x8e, 0x90, 0xf9, 0x0d, 0x6d, 0xad, 0xd2, 0x51, 0x00, 0xe8, 0xd8, 0x56, 0x66, +}; +static const u8 ecccdh_SECP521R1_23_test_vector_peer_pub_key[] = { + 0x00, 0x4f, 0x38, 0x81, 0x66, 0x81, 0x77, 0x12, 0x89, 0xce, 0x0c, 0xb8, 0x3a, 0x5e, 0x29, 0xa1, 0xab, 0x06, 0xfc, 0x91, 0xf7, 0x86, 0x99, 0x4b, 0x23, 0x70, 0x8f, 0xf0, 0x8a, 0x08, 0xa0, 0xf6, 0x75, 0xb8, 0x09, 0xae, 0x99, 0xe9, 0xf9, 0x96, 0x7e, 0xb1, 0xa4, 0x9f, 0x19, 0x60, 0x57, 0xd6, 0x9e, 0x50, 0xd6, 0xde, 0xdb, 0x4d, 0xd2, 0xd9, 0xa8, 0x1c, 0x02, 0xbd, 0xcc, 0x8f, 0x7f, 0x51, 0x84, 0x60, 0x00, 0x9e, 0xfb, 0x24, 0x4c, 0x8b, 0x91, 0x08, 0x7d, 0xe1, 0xee, 0xd7, 0x66, 0x50, 0x0f, 0x0e, 0x81, 0x53, 0x07, 0x52, 0xd4, 0x69, 0x25, 0x6e, 0xf7, 0x9f, 0x6b, 0x96, 0x5d, 0x8a, 0x22, 0x32, 0xa0, 0xc2, 0xdb, 0xc4, 0xe8, 0xe1, 0xd0, 0x92, 0x14, 0xba, 0xb3, 0x84, 0x85, 0xbe, 0x6e, 0x35, 0x7c, 0x42, 0x00, 0xd0, 0x73, 0xb5, 0x2f, 0x04, 0xe4, 0xa1, 0x6f, 0xc6, 0xf5, 0x24, 0x71, 0x87, 0xae, 0xcb, +}; +static const u8 ecccdh_SECP521R1_23_test_vector_our_pub_key[] = { + 0x00, 0xc8, 0x25, 0xba, 0x30, 0x73, 0x73, 0xce, 0xc8, 0xdd, 0x24, 0x98, 0xee, 0xf8, 0x2e, 0x21, 0xfd, 0x98, 0x62, 0x16, 0x8d, 0xbf, 0xeb, 0x83, 0x59, 0x39, 0x80, 0xca, 0x9f, 0x82, 0x87, 0x53, 0x33, 0x89, 0x9f, 0xe9, 0x4f, 0x13, 0x7d, 0xaf, 0x1c, 0x41, 0x89, 0xeb, 0x50, 0x29, 0x37, 0xc3, 0xa3, 0x67, 0xea, 0x79, 0x51, 0xed, 0x8b, 0x0f, 0x33, 0x77, 0xfc, 0xdf, 0x29, 0x22, 0x02, 0x1d, 0x46, 0xa5, 0x01, 0x6b, 0x8a, 0x25, 0x40, 0xd5, 0xe6, 0x54, 0x93, 0x88, 0x8b, 0xc3, 0x37, 0x24, 0x9e, 0x67, 0xc0, 0xa6, 0x87, 0x74, 0xf3, 0xe8, 0xd8, 0x1e, 0x3b, 0x45, 0x74, 0xa0, 0x12, 0x51, 0x65, 0xf0, 0xbd, 0x58, 0xb8, 0xaf, 0x9d, 0xe7, 0x4b, 0x35, 0x83, 0x25, 0x39, 0xf9, 0x5c, 0x3c, 0xd9, 0xf1, 0xb7, 0x59, 0x40, 0x85, 0x60, 0xaa, 0x68, 0x51, 0xae, 0x3a, 0xc7, 0x55, 0x53, 0x47, 0xb0, 0xd3, 0xb1, 0x3b, +}; +static const u8 ecccdh_SECP521R1_23_test_vector_shared_secret[] = { + 0x00, 0xc2, 0xbf, 0xaf, 0xcd, 0x7f, 0xbd, 0x3e, 0x2f, 0xd1, 0xc7, 0x50, 0xfd, 0xea, 0x61, 0xe7, 0x0b, 0xd4, 0x78, 0x7a, 0x7e, 0x68, 0x46, 0x8c, 0x57, 0x4e, 0xe9, 0x9e, 0xbc, 0x47, 0xee, 0xde, 0xf0, 0x64, 0xe8, 0x94, 0x4a, 0x73, 0xbc, 0xb7, 0x91, 0x3d, 0xba, 0xb5, 0xd9, 0x3d, 0xca, 0x66, 0x0d, 0x21, 0x6c, 0x55, 0x36, 0x22, 0x36, 0x27, 0x94, 0xf7, 0xa2, 0xac, 0xc7, 0x10, 0x22, 0xbd, 0xb1, 0x6f, +}; +static const ecdh_test_case ecccdh_SECP521R1_23_test_case = { + .name = "ECCCDH/SECP521R1 23", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_23_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_23_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_23_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_23_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_23_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + +#ifdef WITH_CURVE_SECP521R1 +#define ECCCDH_SECP521R1_SELF_TEST_24 +/*** Tests for ECCCDH/SECP521R1 ***/ +static const u8 ecccdh_SECP521R1_24_test_vector_our_priv_key[] = { + 0x00, 0x00, 0x00, 0xdf, 0x14, 0xb1, 0xf1, 0x43, 0x2a, 0x7b, 0x0f, 0xb0, 0x53, 0x96, 0x5f, 0xd8, 0x64, 0x3a, 0xfe, 0xe2, 0x6b, 0x24, 0x51, 0xec, 0xb6, 0xa8, 0xa5, 0x3a, 0x65, 0x5d, 0x5f, 0xbe, 0x16, 0xe4, 0xc6, 0x4c, 0xe8, 0x64, 0x72, 0x25, 0xeb, 0x11, 0xe7, 0xfd, 0xcb, 0x23, 0x62, 0x74, 0x71, 0xdf, 0xfc, 0x5c, 0x25, 0x23, 0xbd, 0x2a, 0xe8, 0x99, 0x57, 0xcb, 0xa3, 0xa5, 0x7a, 0x23, 0x93, 0x3e, 0x5a, 0x78, +}; +static const u8 ecccdh_SECP521R1_24_test_vector_peer_pub_key[] = { + 0x01, 0xa3, 0x20, 0x99, 0xb0, 0x2c, 0x0b, 0xd8, 0x53, 0x71, 0xf6, 0x0b, 0x0d, 0xd2, 0x08, 0x90, 0xe6, 0xc7, 0xaf, 0x04, 0x8c, 0x81, 0x79, 0x89, 0x0f, 0xda, 0x30, 0x8b, 0x35, 0x9d, 0xbb, 0xc2, 0xb7, 0xa8, 0x32, 0xbb, 0x8c, 0x65, 0x26, 0xc4, 0xaf, 0x99, 0xa7, 0xea, 0x3f, 0x0b, 0x3c, 0xb9, 0x6a, 0xe1, 0xeb, 0x76, 0x84, 0x13, 0x27, 0x95, 0xc4, 0x78, 0xad, 0x6f, 0x96, 0x2e, 0x4a, 0x6f, 0x44, 0x6d, 0x01, 0x76, 0x27, 0x35, 0x7b, 0x39, 0xe9, 0xd7, 0x63, 0x2a, 0x13, 0x70, 0xb3, 0xe9, 0x3c, 0x1a, 0xfb, 0x5c, 0x85, 0x1b, 0x91, 0x0e, 0xb4, 0xea, 0xd0, 0xc9, 0xd3, 0x87, 0xdf, 0x67, 0xcd, 0xe8, 0x50, 0x03, 0xe0, 0xe4, 0x27, 0x55, 0x2f, 0x1c, 0xd0, 0x90, 0x59, 0xaa, 0xd0, 0x26, 0x2e, 0x23, 0x5c, 0xce, 0x5f, 0xba, 0x8c, 0xed, 0xc4, 0xfd, 0xc1, 0x46, 0x3d, 0xa7, 0x6d, 0xcd, 0x4b, 0x6d, 0x1a, 0x46, +}; +static const u8 ecccdh_SECP521R1_24_test_vector_our_pub_key[] = { + 0x00, 0x4e, 0x85, 0x83, 0xbb, 0xbb, 0x2e, 0xcd, 0x93, 0xf0, 0x71, 0x4c, 0x33, 0x2d, 0xff, 0x5a, 0xb3, 0xbc, 0x63, 0x96, 0xe6, 0x2f, 0x3c, 0x56, 0x02, 0x29, 0x66, 0x43, 0x29, 0xba, 0xa5, 0x13, 0x8c, 0x3b, 0xb1, 0xc3, 0x64, 0x28, 0xab, 0xd4, 0xe2, 0x3d, 0x17, 0xfc, 0xb7, 0xa2, 0xcf, 0xcc, 0x22, 0x4b, 0x2e, 0x73, 0x4c, 0x89, 0x41, 0xf6, 0xf1, 0x21, 0x72, 0x2d, 0x7b, 0x6b, 0x94, 0x15, 0x45, 0x76, 0x01, 0xcf, 0x08, 0x74, 0xf2, 0x04, 0xb0, 0x36, 0x3f, 0x02, 0x08, 0x64, 0x67, 0x2f, 0xad, 0xbf, 0x87, 0xc8, 0x81, 0x1e, 0xb1, 0x47, 0x75, 0x8b, 0x25, 0x4b, 0x74, 0xb1, 0x4f, 0xae, 0x74, 0x21, 0x59, 0xf0, 0xf6, 0x71, 0xa0, 0x18, 0x21, 0x2b, 0xbf, 0x25, 0xb8, 0x51, 0x9e, 0x12, 0x6d, 0x4c, 0xad, 0x77, 0x8c, 0xff, 0xf5, 0x0d, 0x28, 0x8f, 0xd3, 0x9c, 0xeb, 0x0c, 0xac, 0x63, 0x5b, 0x17, 0x5e, 0xc0, +}; +static const u8 ecccdh_SECP521R1_24_test_vector_shared_secret[] = { + 0x01, 0xaa, 0xf2, 0x4e, 0x5d, 0x47, 0xe4, 0x08, 0x0c, 0x18, 0xc5, 0x5e, 0xa3, 0x55, 0x81, 0xcd, 0x8d, 0xa3, 0x0f, 0x1a, 0x07, 0x95, 0x65, 0x04, 0x5d, 0x20, 0x08, 0xd5, 0x1b, 0x12, 0xd0, 0xab, 0xb4, 0x41, 0x1c, 0xda, 0x7a, 0x07, 0x85, 0xb1, 0x5d, 0x14, 0x9e, 0xd3, 0x01, 0xa3, 0x69, 0x70, 0x62, 0xf4, 0x2d, 0xa2, 0x37, 0xaa, 0x7f, 0x07, 0xe0, 0xaf, 0x3f, 0xd0, 0x0e, 0xb1, 0x80, 0x0d, 0x9c, 0x41, +}; +static const ecdh_test_case ecccdh_SECP521R1_24_test_case = { + .name = "ECCCDH/SECP521R1 24", + .ecdh_type = ECCCDH, + .ec_str_p = &secp521r1_str_params, + .our_priv_key = ecccdh_SECP521R1_24_test_vector_our_priv_key, + .our_priv_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_our_priv_key), + .peer_pub_key = ecccdh_SECP521R1_24_test_vector_peer_pub_key, + .peer_pub_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_peer_pub_key), + .exp_our_pub_key = ecccdh_SECP521R1_24_test_vector_our_pub_key, + .exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_our_pub_key), + .exp_shared_secret = ecccdh_SECP521R1_24_test_vector_shared_secret, + .exp_shared_secret_len = sizeof(ecccdh_SECP521R1_24_test_vector_shared_secret), +}; +#endif /* WITH_CURVE_SECP521R1 */ + diff --git a/crypto/libecc/src/tests/ed25519_test_vectors.h b/crypto/libecc/src/tests/ed25519_test_vectors.h new file mode 100644 index 0000000000000000000000000000000000000000..f3bc299b32610e2c5734b8d0b6627ba0e508d1f5 GIT binary patch literal 4575075 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

QVWlc=zpH`XZ8WwoD;Rxil@d| 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%0DL36dmUxEf>g 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

dQVoHmZ|50VPkg}o@Il1g!bYK`Km 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

XS5*>jt+G2D9lklPCRU&0C#IeYbxR|(&kme7Ht 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�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

OAJyPJSwJ+ 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�>A24+Mm@8~cb~Q?$YcGS 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
  1. Lv|6HX4C;4`4HJo(wZWRm029ia`eJxO@(<#gJ_%acwqFqZr3-`$fB4{uXp zVeW7*{mWB+_W76A`^7Zi{=cOG_kWZI{7HW3SJHq#`Rc!#2K+pQ^K}~V^Y8qA8t{vg z^?e%fi!c8dX~5&VG$5$Lq-Z4(%~%cpkpG|N{KR5o&sMI8VbOG&Df3Au9rW{6U5ZbV z5}rrT^i#ec=x#1uDZ2S1rub4r9^a$^t&DhWYJm10_*~YOk~#$B$2E9p$x8R-t^!IE zm4EfWsGd^}PU>O>gam*`HP2OQPpRf8Un$c#N&@3^g9~N?1wFbR9NPfuQrvOm2?f@^ z*TaTW4RZJS1ZtN8BMd_l5h!aEB@Tsx>~#B3L)SvZCJ+c3#a&0iX(H1aLfgTB4ejgJ;>Fp6pg3M z1%yND;Nw_H$n3|tZ{GzEEJ{J}cemH@kn9A1P-ZBF*>##1;e-;t%Q;PREnGHCFVYB= zhDtIg0$0P;pNkzAeR7boPwPCn*r$@KsXKagot|!%@3^rfqmsCTZk${aiMmY@ zcM#`>Pz)e;uB-;OyvwO1X}3ya<`mt1{v>Jy&WFoOY3mtEob=g2?b^5Gw)3-p352Y= zKuHSb9?uDaoZ% zPuMFDnSh~NB593#_L;fMr!WREDdjnHKcA_0wlK@}lw3 z6#|TNmIWasd<3ZDR4%0zbmN@HCURy~qwlswgsqVrPLN>EK@ek7ZF0U?A(lN*F2U}j zv`sBFPs8T{d{W{uDO}lJ8{;= z->*s5ST_okGRDfGMCiTH7z%Gm0(FX7Z?Z>KE z=UUlFG2q@kMjl?3#@yFswP&9kh)bS-rU}WzjAq+Q^K^E=D!t3WB;W4t4mj|XpP7@6 zZ@?*ADvg{${Gt>!2>ecCq@fa$A_YLZclVAAoGOAy^*r2HN(XKR0MhBpjWRw%bReK{ z77YK8H;CrRy(WjJXchjBcR{Qt4>kZlR6+;hm#W&8-!nsUsFdcOp$Zl}fqYV0Ol`z^}9?Dsw@x9EgjURmrHu`P51u*a`Zg6NhWc5j8Zk{GAt z);?SKMND_}`I(uC_Tbz}Pukad$WkB!q~&jEOK7`G6Qc8zDBx_$4`J6S4MU&6ou$to zb#o&V1<(FBjc_>~BuVi7&?kKUs^nxYChH@|3Rd9HN`K&q?wYn1^p+zogSf`ERQdIKGXNULi;< z@x@y_dY5`XG$keinkyl(ELfRW*OO=wPN669BCfs{NlV%djkNv$w})%^SBgV}_HcgX zYh`{ilEdH8-j)G059kE?lZacz6t1lgN+aEVDo)wtwGlVxW!0sxN)4Lo!W zX~M}{_R2$A&`WdPI`wI3%dS;W86O*8NHY8uZj&Mrk_2a|%@fkF8Vbl3WV)l$L{5KY zR;qjqJoyw0zx$S;KyZBRniEM8%e?!SSts-mH#vQH-Mn`ddXRL>Rqmvlz{j_+FYe2b zdx_ZVL6j$D_wIf@Gx;HV>c-cbBek>@uwv}`*-s{w2T#FU z6zOnMQf316z&#Yvd*0qd-e6|N0-OuAh;_ayC+lC<|97D7&y#^E69qv~nhU5@^(o6Z2J{CyK+3&{AACrXdowx@W+F}0-*Z9R`;PJmD1CM`{4E#x! z=vR_~Kl$pvnhg9rk@Iyj@bmBdelqZjll6Tv@QW}12g$(g@m(@7I!7lU*(*+l3Mi27 zm*SL3iMv?vNA=iK{wF%)kY367o2BpFkZ0&ouf36ydvOuuv|$5TFVUNAf9SdSVNgn7!H#26;QBBPY9>VI>= zPC2TRfbg^(*sD@mZCd={P{1^t1x&Z91203%szYM6r@#-GoM~pbigG_Qgd0~;N<695 zqvGZ}Aqm1z@vg!VESHY&nAxEs8JL9K30m8f`b)Kpl4*b$03J_;n5;bAzA^qvwj|Yn z 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

    Z3Q1~!xIhGT6SLSJNJ$*O|d7D`{Q$J7l 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 jKmYXa{>?xA?Qj45ANZ>8O8VRX{ + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __ED25519CTX_TEST_VECTORS_H__ +#define __ED25519CTX_TEST_VECTORS_H__ + +/************************************************/ +static const u8 ed25519ctx_1_test_vectors_priv_key[] = { + 0x03, 0x05, 0x33, 0x4e, 0x38, 0x1a, 0xf7, 0x8f, 0x14, 0x1c, 0xb6, 0x66, 0xf6, 0x19, 0x9f, 0x57, 0xbc, 0x34, 0x95, 0x33, 0x5a, 0x25, 0x6a, 0x95, 0xbd, 0x2a, 0x55, 0xbf, 0x54, 0x66, 0x63, 0xf6, +}; +static const u8 ed25519ctx_1_test_vectors_message[] = { + 0xf7, 0x26, 0x93, 0x6d, 0x19, 0xc8, 0x00, 0x49, 0x4e, 0x3f, 0xda, 0xff, 0x20, 0xb2, 0x76, 0xa8, +}; +static const u8 ed25519ctx_1_test_vectors_expected_sig[] = { + 0x55, 0xa4, 0xcc, 0x2f, 0x70, 0xa5, 0x4e, 0x04, 0x28, 0x8c, 0x5f, 0x4c, 0xd1, 0xe4, 0x5a, 0x7b, 0xb5, 0x20, 0xb3, 0x62, 0x92, 0x91, 0x18, 0x76, 0xca, 0xda, 0x73, 0x23, 0x19, 0x8d, 0xd8, 0x7a, 0x8b, 0x36, 0x95, 0x0b, 0x95, 0x13, 0x00, 0x22, 0x90, 0x7a, 0x7f, 0xb7, 0xc4, 0xe9, 0xb2, 0xd5, 0xf6, 0xcc, 0xa6, 0x85, 0xa5, 0x87, 0xb4, 0xb2, 0x1f, 0x4b, 0x88, 0x8e, 0x4e, 0x7e, 0xdb, 0x0d, +}; +static const u8 ed25519ctx_1_test_vectors_adata[] = { + 0x66, 0x6f, 0x6f, +}; +static const ec_test_case ed25519ctx_1_test_case = { + .name = "EDDSA25519CTX-SHA512/wei25519 1", + .ec_str_p = &wei25519_str_params, + .priv_key = ed25519ctx_1_test_vectors_priv_key, + .priv_key_len = sizeof(ed25519ctx_1_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = (const char *)ed25519ctx_1_test_vectors_message, + .msglen = sizeof(ed25519ctx_1_test_vectors_message), + .sig_type = EDDSA25519CTX, + .exp_sig = ed25519ctx_1_test_vectors_expected_sig, + .exp_siglen = sizeof(ed25519ctx_1_test_vectors_expected_sig), + .adata = ed25519ctx_1_test_vectors_adata, + .adata_len = sizeof(ed25519ctx_1_test_vectors_adata), +}; + +/************************************************/ +static const u8 ed25519ctx_2_test_vectors_priv_key[] = { + 0x03, 0x05, 0x33, 0x4e, 0x38, 0x1a, 0xf7, 0x8f, 0x14, 0x1c, 0xb6, 0x66, 0xf6, 0x19, 0x9f, 0x57, 0xbc, 0x34, 0x95, 0x33, 0x5a, 0x25, 0x6a, 0x95, 0xbd, 0x2a, 0x55, 0xbf, 0x54, 0x66, 0x63, 0xf6, +}; +static const u8 ed25519ctx_2_test_vectors_message[] = { + 0xf7, 0x26, 0x93, 0x6d, 0x19, 0xc8, 0x00, 0x49, 0x4e, 0x3f, 0xda, 0xff, 0x20, 0xb2, 0x76, 0xa8, +}; +static const u8 ed25519ctx_2_test_vectors_expected_sig[] = { + 0xfc, 0x60, 0xd5, 0x87, 0x2f, 0xc4, 0x6b, 0x3a, 0xa6, 0x9f, 0x8b, 0x5b, 0x43, 0x51, 0xd5, 0x80, 0x8f, 0x92, 0xbc, 0xc0, 0x44, 0x60, 0x6d, 0xb0, 0x97, 0xab, 0xab, 0x6d, 0xbc, 0xb1, 0xae, 0xe3, 0x21, 0x6c, 0x48, 0xe8, 0xb3, 0xb6, 0x64, 0x31, 0xb5, 0xb1, 0x86, 0xd1, 0xd2, 0x8f, 0x8e, 0xe1, 0x5a, 0x5c, 0xa2, 0xdf, 0x66, 0x68, 0x34, 0x62, 0x91, 0xc2, 0x04, 0x3d, 0x4e, 0xb3, 0xe9, 0x0d, +}; +static const u8 ed25519ctx_2_test_vectors_adata[] = { + 0x62, 0x61, 0x72, +}; +static const ec_test_case ed25519ctx_2_test_case = { + .name = "EDDSA25519CTX-SHA512/wei25519 2", + .ec_str_p = &wei25519_str_params, + .priv_key = ed25519ctx_2_test_vectors_priv_key, + .priv_key_len = sizeof(ed25519ctx_2_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = (const char *)ed25519ctx_2_test_vectors_message, + .msglen = sizeof(ed25519ctx_2_test_vectors_message), + .sig_type = EDDSA25519CTX, + .exp_sig = ed25519ctx_2_test_vectors_expected_sig, + .exp_siglen = sizeof(ed25519ctx_2_test_vectors_expected_sig), + .adata = ed25519ctx_2_test_vectors_adata, + .adata_len = sizeof(ed25519ctx_2_test_vectors_adata), +}; + +/************************************************/ +static const u8 ed25519ctx_3_test_vectors_priv_key[] = { + 0x03, 0x05, 0x33, 0x4e, 0x38, 0x1a, 0xf7, 0x8f, 0x14, 0x1c, 0xb6, 0x66, 0xf6, 0x19, 0x9f, 0x57, 0xbc, 0x34, 0x95, 0x33, 0x5a, 0x25, 0x6a, 0x95, 0xbd, 0x2a, 0x55, 0xbf, 0x54, 0x66, 0x63, 0xf6, +}; +static const u8 ed25519ctx_3_test_vectors_message[] = { + 0x50, 0x8e, 0x9e, 0x68, 0x82, 0xb9, 0x79, 0xfe, 0xa9, 0x00, 0xf6, 0x2a, 0xdc, 0xea, 0xca, 0x35, +}; +static const u8 ed25519ctx_3_test_vectors_expected_sig[] = { + 0x8b, 0x70, 0xc1, 0xcc, 0x83, 0x10, 0xe1, 0xde, 0x20, 0xac, 0x53, 0xce, 0x28, 0xae, 0x6e, 0x72, 0x07, 0xf3, 0x3c, 0x32, 0x95, 0xe0, 0x3b, 0xb5, 0xc0, 0x73, 0x2a, 0x1d, 0x20, 0xdc, 0x64, 0x90, 0x89, 0x22, 0xa8, 0xb0, 0x52, 0xcf, 0x99, 0xb7, 0xc4, 0xfe, 0x10, 0x7a, 0x5a, 0xbb, 0x5b, 0x2c, 0x40, 0x85, 0xae, 0x75, 0x89, 0x0d, 0x02, 0xdf, 0x26, 0x26, 0x9d, 0x89, 0x45, 0xf8, 0x4b, 0x0b, +}; +static const u8 ed25519ctx_3_test_vectors_adata[] = { + 0x66, 0x6f, 0x6f, +}; +static const ec_test_case ed25519ctx_3_test_case = { + .name = "EDDSA25519CTX-SHA512/wei25519 3", + .ec_str_p = &wei25519_str_params, + .priv_key = ed25519ctx_3_test_vectors_priv_key, + .priv_key_len = sizeof(ed25519ctx_3_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = (const char *)ed25519ctx_3_test_vectors_message, + .msglen = sizeof(ed25519ctx_3_test_vectors_message), + .sig_type = EDDSA25519CTX, + .exp_sig = ed25519ctx_3_test_vectors_expected_sig, + .exp_siglen = sizeof(ed25519ctx_3_test_vectors_expected_sig), + .adata = ed25519ctx_3_test_vectors_adata, + .adata_len = sizeof(ed25519ctx_3_test_vectors_adata), +}; + +/************************************************/ +static const u8 ed25519ctx_4_test_vectors_priv_key[] = { + 0xab, 0x9c, 0x28, 0x53, 0xce, 0x29, 0x7d, 0xda, 0xb8, 0x5c, 0x99, 0x3b, 0x3a, 0xe1, 0x4b, 0xca, 0xd3, 0x9b, 0x2c, 0x68, 0x2b, 0xea, 0xbc, 0x27, 0xd6, 0xd4, 0xeb, 0x20, 0x71, 0x1d, 0x65, 0x60, +}; +static const u8 ed25519ctx_4_test_vectors_message[] = { + 0xf7, 0x26, 0x93, 0x6d, 0x19, 0xc8, 0x00, 0x49, 0x4e, 0x3f, 0xda, 0xff, 0x20, 0xb2, 0x76, 0xa8, +}; +static const u8 ed25519ctx_4_test_vectors_expected_sig[] = { + 0x21, 0x65, 0x5b, 0x5f, 0x1a, 0xa9, 0x65, 0x99, 0x6b, 0x3f, 0x97, 0xb3, 0xc8, 0x49, 0xea, 0xfb, 0xa9, 0x22, 0xa0, 0xa6, 0x29, 0x92, 0xf7, 0x3b, 0x3d, 0x1b, 0x73, 0x10, 0x6a, 0x84, 0xad, 0x85, 0xe9, 0xb8, 0x6a, 0x7b, 0x60, 0x05, 0xea, 0x86, 0x83, 0x37, 0xff, 0x2d, 0x20, 0xa7, 0xf5, 0xfb, 0xd4, 0xcd, 0x10, 0xb0, 0xbe, 0x49, 0xa6, 0x8d, 0xa2, 0xb2, 0xe0, 0xdc, 0x0a, 0xd8, 0x96, 0x0f, +}; +static const u8 ed25519ctx_4_test_vectors_adata[] = { + 0x66, 0x6f, 0x6f, +}; +static const ec_test_case ed25519ctx_4_test_case = { + .name = "EDDSA25519CTX-SHA512/wei25519 4", + .ec_str_p = &wei25519_str_params, + .priv_key = ed25519ctx_4_test_vectors_priv_key, + .priv_key_len = sizeof(ed25519ctx_4_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = (const char *)ed25519ctx_4_test_vectors_message, + .msglen = sizeof(ed25519ctx_4_test_vectors_message), + .sig_type = EDDSA25519CTX, + .exp_sig = ed25519ctx_4_test_vectors_expected_sig, + .exp_siglen = sizeof(ed25519ctx_4_test_vectors_expected_sig), + .adata = ed25519ctx_4_test_vectors_adata, + .adata_len = sizeof(ed25519ctx_4_test_vectors_adata), +}; + + +/************************************************/ +#define EDDSA25519CTX_SHA512_WEI25519_ALL_TESTS() \ + &ed25519ctx_1_test_case,\ + &ed25519ctx_2_test_case,\ + &ed25519ctx_3_test_case,\ + &ed25519ctx_4_test_case, + +#endif /* __ED25519CTX_TEST_VECTORS_H__ */ diff --git a/crypto/libecc/src/tests/ed25519ph_test_vectors.h b/crypto/libecc/src/tests/ed25519ph_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ed25519ph_test_vectors.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __ED25519PH_TEST_VECTORS_H__ +#define __ED25519PH_TEST_VECTORS_H__ + +/************************************************/ +static const u8 ed25519ph_1_test_vectors_priv_key[] = { + 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b, 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, +}; +static const u8 ed25519ph_1_test_vectors_message[] = { + 0x61, 0x62, 0x63, +}; +static const u8 ed25519ph_1_test_vectors_expected_sig[] = { + 0x98, 0xa7, 0x02, 0x22, 0xf0, 0xb8, 0x12, 0x1a, 0xa9, 0xd3, 0x0f, 0x81, 0x3d, 0x68, 0x3f, 0x80, 0x9e, 0x46, 0x2b, 0x46, 0x9c, 0x7f, 0xf8, 0x76, 0x39, 0x49, 0x9b, 0xb9, 0x4e, 0x6d, 0xae, 0x41, 0x31, 0xf8, 0x50, 0x42, 0x46, 0x3c, 0x2a, 0x35, 0x5a, 0x20, 0x03, 0xd0, 0x62, 0xad, 0xf5, 0xaa, 0xa1, 0x0b, 0x8c, 0x61, 0xe6, 0x36, 0x06, 0x2a, 0xaa, 0xd1, 0x1c, 0x2a, 0x26, 0x08, 0x34, 0x06, +}; +static const ec_test_case ed25519ph_1_test_case = { + .name = "EDDSA25519PH-SHA512/wei25519 1", + .ec_str_p = &wei25519_str_params, + .priv_key = ed25519ph_1_test_vectors_priv_key, + .priv_key_len = sizeof(ed25519ph_1_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHA512, + .msg = (const char *)ed25519ph_1_test_vectors_message, + .msglen = sizeof(ed25519ph_1_test_vectors_message), + .sig_type = EDDSA25519PH, + .exp_sig = ed25519ph_1_test_vectors_expected_sig, + .exp_siglen = sizeof(ed25519ph_1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +#define EDDSA25519PH_SHA512_WEI25519_ALL_TESTS() \ + &ed25519ph_1_test_case, + +#endif /* __ED25519PH_TEST_VECTORS_H__ */ + diff --git a/crypto/libecc/src/tests/ed448_test_vectors.h b/crypto/libecc/src/tests/ed448_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ed448_test_vectors.h @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __ED448_TEST_VECTORS_H__ +#define __ED448_TEST_VECTORS_H__ + +/************************************************/ +static const u8 ed448_1_test_vectors_priv_key[] = { + 0x6c, 0x82, 0xa5, 0x62, 0xcb, 0x80, 0x8d, 0x10, 0xd6, 0x32, 0xbe, 0x89, 0xc8, 0x51, 0x3e, 0xbf, 0x6c, 0x92, 0x9f, 0x34, 0xdd, 0xfa, 0x8c, 0x9f, 0x63, 0xc9, 0x96, 0x0e, 0xf6, 0xe3, 0x48, 0xa3, 0x52, 0x8c, 0x8a, 0x3f, 0xcc, 0x2f, 0x04, 0x4e, 0x39, 0xa3, 0xfc, 0x5b, 0x94, 0x49, 0x2f, 0x8f, 0x03, 0x2e, 0x75, 0x49, 0xa2, 0x00, 0x98, 0xf9, 0x5b, + }; +static const u8 ed448_1_test_vectors_expected_sig[] = { + 0x53, 0x3a, 0x37, 0xf6, 0xbb, 0xe4, 0x57, 0x25, 0x1f, 0x02, 0x3c, 0x0d, 0x88, 0xf9, 0x76, 0xae, 0x2d, 0xfb, 0x50, 0x4a, 0x84, 0x3e, 0x34, 0xd2, 0x07, 0x4f, 0xd8, 0x23, 0xd4, 0x1a, 0x59, 0x1f, 0x2b, 0x23, 0x3f, 0x03, 0x4f, 0x62, 0x82, 0x81, 0xf2, 0xfd, 0x7a, 0x22, 0xdd, 0xd4, 0x7d, 0x78, 0x28, 0xc5, 0x9b, 0xd0, 0xa2, 0x1b, 0xfd, 0x39, 0x80, 0xff, 0x0d, 0x20, 0x28, 0xd4, 0xb1, 0x8a, 0x9d, 0xf6, 0x3e, 0x00, 0x6c, 0x5d, 0x1c, 0x2d, 0x34, 0x5b, 0x92, 0x5d, 0x8d, 0xc0, 0x0b, 0x41, 0x04, 0x85, 0x2d, 0xb9, 0x9a, 0xc5, 0xc7, 0xcd, 0xda, 0x85, 0x30, 0xa1, 0x13, 0xa0, 0xf4, 0xdb, 0xb6, 0x11, 0x49, 0xf0, 0x5a, 0x73, 0x63, 0x26, 0x8c, 0x71, 0xd9, 0x58, 0x08, 0xff, 0x2e, 0x65, 0x26, 0x00, + }; +static const ec_test_case ed448_1_test_case = { + .name = "EDDSA448-SHAKE256/wei448 1", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_1_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_1_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = "", + .msglen = 0, + .sig_type = EDDSA448, + .exp_sig = ed448_1_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_2_test_vectors_priv_key[] = { + 0xc4, 0xea, 0xb0, 0x5d, 0x35, 0x70, 0x07, 0xc6, 0x32, 0xf3, 0xdb, 0xb4, 0x84, 0x89, 0x92, 0x4d, 0x55, 0x2b, 0x08, 0xfe, 0x0c, 0x35, 0x3a, 0x0d, 0x4a, 0x1f, 0x00, 0xac, 0xda, 0x2c, 0x46, 0x3a, 0xfb, 0xea, 0x67, 0xc5, 0xe8, 0xd2, 0x87, 0x7c, 0x5e, 0x3b, 0xc3, 0x97, 0xa6, 0x59, 0x94, 0x9e, 0xf8, 0x02, 0x1e, 0x95, 0x4e, 0x0a, 0x12, 0x27, 0x4e, + }; +static const u8 ed448_2_test_vectors_expected_sig[] = { + 0x26, 0xb8, 0xf9, 0x17, 0x27, 0xbd, 0x62, 0x89, 0x7a, 0xf1, 0x5e, 0x41, 0xeb, 0x43, 0xc3, 0x77, 0xef, 0xb9, 0xc6, 0x10, 0xd4, 0x8f, 0x23, 0x35, 0xcb, 0x0b, 0xd0, 0x08, 0x78, 0x10, 0xf4, 0x35, 0x25, 0x41, 0xb1, 0x43, 0xc4, 0xb9, 0x81, 0xb7, 0xe1, 0x8f, 0x62, 0xde, 0x8c, 0xcd, 0xf6, 0x33, 0xfc, 0x1b, 0xf0, 0x37, 0xab, 0x7c, 0xd7, 0x79, 0x80, 0x5e, 0x0d, 0xbc, 0xc0, 0xaa, 0xe1, 0xcb, 0xce, 0xe1, 0xaf, 0xb2, 0xe0, 0x27, 0xdf, 0x36, 0xbc, 0x04, 0xdc, 0xec, 0xbf, 0x15, 0x43, 0x36, 0xc1, 0x9f, 0x0a, 0xf7, 0xe0, 0xa6, 0x47, 0x29, 0x05, 0xe7, 0x99, 0xf1, 0x95, 0x3d, 0x2a, 0x0f, 0xf3, 0x34, 0x8a, 0xb2, 0x1a, 0xa4, 0xad, 0xaf, 0xd1, 0xd2, 0x34, 0x44, 0x1c, 0xf8, 0x07, 0xc0, 0x3a, 0x00, + }; +static const ec_test_case ed448_2_test_case = { + .name = "EDDSA448-SHAKE256/wei448 2", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_2_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_2_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = "\x03", + .msglen = 1, + .sig_type = EDDSA448, + .exp_sig = ed448_2_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_2_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_3_test_vectors_priv_key[] = { + 0xcd, 0x23, 0xd2, 0x4f, 0x71, 0x42, 0x74, 0xe7, 0x44, 0x34, 0x32, 0x37, 0xb9, 0x32, 0x90, 0xf5, 0x11, 0xf6, 0x42, 0x5f, 0x98, 0xe6, 0x44, 0x59, 0xff, 0x20, 0x3e, 0x89, 0x85, 0x08, 0x3f, 0xfd, 0xf6, 0x05, 0x00, 0x55, 0x3a, 0xbc, 0x0e, 0x05, 0xcd, 0x02, 0x18, 0x4b, 0xdb, 0x89, 0xc4, 0xcc, 0xd6, 0x7e, 0x18, 0x79, 0x51, 0x26, 0x7e, 0xb3, 0x28, + }; +static const u8 ed448_3_test_vectors_expected_sig[] = { + 0x1f, 0x0a, 0x88, 0x88, 0xce, 0x25, 0xe8, 0xd4, 0x58, 0xa2, 0x11, 0x30, 0x87, 0x9b, 0x84, 0x0a, 0x90, 0x89, 0xd9, 0x99, 0xaa, 0xba, 0x03, 0x9e, 0xaf, 0x3e, 0x3a, 0xfa, 0x09, 0x0a, 0x09, 0xd3, 0x89, 0xdb, 0xa8, 0x2c, 0x4f, 0xf2, 0xae, 0x8a, 0xc5, 0xcd, 0xfb, 0x7c, 0x55, 0xe9, 0x4d, 0x5d, 0x96, 0x1a, 0x29, 0xfe, 0x01, 0x09, 0x94, 0x1e, 0x00, 0xb8, 0xdb, 0xde, 0xea, 0x6d, 0x3b, 0x05, 0x10, 0x68, 0xdf, 0x72, 0x54, 0xc0, 0xcd, 0xc1, 0x29, 0xcb, 0xe6, 0x2d, 0xb2, 0xdc, 0x95, 0x7d, 0xbb, 0x47, 0xb5, 0x1f, 0xd3, 0xf2, 0x13, 0xfb, 0x86, 0x98, 0xf0, 0x64, 0x77, 0x42, 0x50, 0xa5, 0x02, 0x89, 0x61, 0xc9, 0xbf, 0x8f, 0xfd, 0x97, 0x3f, 0xe5, 0xd5, 0xc2, 0x06, 0x49, 0x2b, 0x14, 0x0e, 0x00, + }; +static const ec_test_case ed448_3_test_case = { + .name = "EDDSA448-SHAKE256/wei448 3", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_3_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_3_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = "\x0c\x3e\x54\x40\x74\xec\x63\xb0\x26\x5e\x0c", + .msglen = 11, + .sig_type = EDDSA448, + .exp_sig = ed448_3_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_3_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_4_test_vectors_priv_key[] = { + 0x25, 0x8c, 0xdd, 0x4a, 0xda, 0x32, 0xed, 0x9c, 0x9f, 0xf5, 0x4e, 0x63, 0x75, 0x6a, 0xe5, 0x82, 0xfb, 0x8f, 0xab, 0x2a, 0xc7, 0x21, 0xf2, 0xc8, 0xe6, 0x76, 0xa7, 0x27, 0x68, 0x51, 0x3d, 0x93, 0x9f, 0x63, 0xdd, 0xdb, 0x55, 0x60, 0x91, 0x33, 0xf2, 0x9a, 0xdf, 0x86, 0xec, 0x99, 0x29, 0xdc, 0xcb, 0x52, 0xc1, 0xc5, 0xfd, 0x2f, 0xf7, 0xe2, 0x1b, + }; +static const u8 ed448_4_test_vectors_expected_sig[] = { + 0x7e, 0xee, 0xab, 0x7c, 0x4e, 0x50, 0xfb, 0x79, 0x9b, 0x41, 0x8e, 0xe5, 0xe3, 0x19, 0x7f, 0xf6, 0xbf, 0x15, 0xd4, 0x3a, 0x14, 0xc3, 0x43, 0x89, 0xb5, 0x9d, 0xd1, 0xa7, 0xb1, 0xb8, 0x5b, 0x4a, 0xe9, 0x04, 0x38, 0xac, 0xa6, 0x34, 0xbe, 0xa4, 0x5e, 0x3a, 0x26, 0x95, 0xf1, 0x27, 0x0f, 0x07, 0xfd, 0xcd, 0xf7, 0xc6, 0x2b, 0x8e, 0xfe, 0xaf, 0x00, 0xb4, 0x5c, 0x2c, 0x96, 0xba, 0x45, 0x7e, 0xb1, 0xa8, 0xbf, 0x07, 0x5a, 0x3d, 0xb2, 0x8e, 0x5c, 0x24, 0xf6, 0xb9, 0x23, 0xed, 0x4a, 0xd7, 0x47, 0xc3, 0xc9, 0xe0, 0x3c, 0x70, 0x79, 0xef, 0xb8, 0x7c, 0xb1, 0x10, 0xd3, 0xa9, 0x98, 0x61, 0xe7, 0x20, 0x03, 0xcb, 0xae, 0x6d, 0x6b, 0x8b, 0x82, 0x7e, 0x4e, 0x6c, 0x14, 0x30, 0x64, 0xff, 0x3c, 0x00, + }; +static const u8 ed448_4_test_vectors_message[] = { + 0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66, 0x81, 0x1e, 0x29, 0x15, + }; +static const ec_test_case ed448_4_test_case = { + .name = "EDDSA448-SHAKE256/wei448 4", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_4_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_4_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448_4_test_vectors_message, + .msglen = sizeof(ed448_4_test_vectors_message), + .sig_type = EDDSA448, + .exp_sig = ed448_4_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_4_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_5_test_vectors_priv_key[] = { + 0x7e, 0xf4, 0xe8, 0x45, 0x44, 0x23, 0x67, 0x52, 0xfb, 0xb5, 0x6b, 0x8f, 0x31, 0xa2, 0x3a, 0x10, 0xe4, 0x28, 0x14, 0xf5, 0xf5, 0x5c, 0xa0, 0x37, 0xcd, 0xcc, 0x11, 0xc6, 0x4c, 0x9a, 0x3b, 0x29, 0x49, 0xc1, 0xbb, 0x60, 0x70, 0x03, 0x14, 0x61, 0x17, 0x32, 0xa6, 0xc2, 0xfe, 0xa9, 0x8e, 0xeb, 0xc0, 0x26, 0x6a, 0x11, 0xa9, 0x39, 0x70, 0x10, 0x0e, + }; +static const u8 ed448_5_test_vectors_expected_sig[] = { + 0x6a, 0x12, 0x06, 0x6f, 0x55, 0x33, 0x1b, 0x6c, 0x22, 0xac, 0xd5, 0xd5, 0xbf, 0xc5, 0xd7, 0x12, 0x28, 0xfb, 0xda, 0x80, 0xae, 0x8d, 0xec, 0x26, 0xbd, 0xd3, 0x06, 0x74, 0x3c, 0x50, 0x27, 0xcb, 0x48, 0x90, 0x81, 0x0c, 0x16, 0x2c, 0x02, 0x74, 0x68, 0x67, 0x5e, 0xcf, 0x64, 0x5a, 0x83, 0x17, 0x6c, 0x0d, 0x73, 0x23, 0xa2, 0xcc, 0xde, 0x2d, 0x80, 0xef, 0xe5, 0xa1, 0x26, 0x8e, 0x8a, 0xca, 0x1d, 0x6f, 0xbc, 0x19, 0x4d, 0x3f, 0x77, 0xc4, 0x49, 0x86, 0xeb, 0x4a, 0xb4, 0x17, 0x79, 0x19, 0xad, 0x8b, 0xec, 0x33, 0xeb, 0x47, 0xbb, 0xb5, 0xfc, 0x6e, 0x28, 0x19, 0x6f, 0xd1, 0xca, 0xf5, 0x6b, 0x4e, 0x7e, 0x0b, 0xa5, 0x51, 0x92, 0x34, 0xd0, 0x47, 0x15, 0x5a, 0xc7, 0x27, 0xa1, 0x05, 0x31, 0x00, + }; +static const u8 ed448_5_test_vectors_message[] = { + 0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66, 0x81, 0x1e, 0x29, 0x15, 0xe7, + }; +static const ec_test_case ed448_5_test_case = { + .name = "EDDSA448-SHAKE256/wei448 5", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_5_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_5_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448_5_test_vectors_message, + .msglen = sizeof(ed448_5_test_vectors_message), + .sig_type = EDDSA448, + .exp_sig = ed448_5_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_5_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_6_test_vectors_priv_key[] = { + 0xd6, 0x5d, 0xf3, 0x41, 0xad, 0x13, 0xe0, 0x08, 0x56, 0x76, 0x88, 0xba, 0xed, 0xda, 0x8e, 0x9d, 0xcd, 0xc1, 0x7d, 0xc0, 0x24, 0x97, 0x4e, 0xa5, 0xb4, 0x22, 0x7b, 0x65, 0x30, 0xe3, 0x39, 0xbf, 0xf2, 0x1f, 0x99, 0xe6, 0x8c, 0xa6, 0x96, 0x8f, 0x3c, 0xca, 0x6d, 0xfe, 0x0f, 0xb9, 0xf4, 0xfa, 0xb4, 0xfa, 0x13, 0x5d, 0x55, 0x42, 0xea, 0x3f, 0x01, + }; +static const u8 ed448_6_test_vectors_expected_sig[] = { + 0x55, 0x4b, 0xc2, 0x48, 0x08, 0x60, 0xb4, 0x9e, 0xab, 0x85, 0x32, 0xd2, 0xa5, 0x33, 0xb7, 0xd5, 0x78, 0xef, 0x47, 0x3e, 0xeb, 0x58, 0xc9, 0x8b, 0xb2, 0xd0, 0xe1, 0xce, 0x48, 0x8a, 0x98, 0xb1, 0x8d, 0xfd, 0xe9, 0xb9, 0xb9, 0x07, 0x75, 0xe6, 0x7f, 0x47, 0xd4, 0xa1, 0xc3, 0x48, 0x20, 0x58, 0xef, 0xc9, 0xf4, 0x0d, 0x2c, 0xa0, 0x33, 0xa0, 0x80, 0x1b, 0x63, 0xd4, 0x5b, 0x3b, 0x72, 0x2e, 0xf5, 0x52, 0xba, 0xd3, 0xb4, 0xcc, 0xb6, 0x67, 0xda, 0x35, 0x01, 0x92, 0xb6, 0x1c, 0x50, 0x8c, 0xf7, 0xb6, 0xb5, 0xad, 0xad, 0xc2, 0xc8, 0xd9, 0xa4, 0x46, 0xef, 0x00, 0x3f, 0xb0, 0x5c, 0xba, 0x5f, 0x30, 0xe8, 0x8e, 0x36, 0xec, 0x27, 0x03, 0xb3, 0x49, 0xca, 0x22, 0x9c, 0x26, 0x70, 0x83, 0x39, 0x00, + }; +static const u8 ed448_6_test_vectors_message[] = { + 0xbd, 0x0f, 0x6a, 0x37, 0x47, 0xcd, 0x56, 0x1b, 0xdd, 0xdf, 0x46, 0x40, 0xa3, 0x32, 0x46, 0x1a, 0x4a, 0x30, 0xa1, 0x2a, 0x43, 0x4c, 0xd0, 0xbf, 0x40, 0xd7, 0x66, 0xd9, 0xc6, 0xd4, 0x58, 0xe5, 0x51, 0x22, 0x04, 0xa3, 0x0c, 0x17, 0xd1, 0xf5, 0x0b, 0x50, 0x79, 0x63, 0x1f, 0x64, 0xeb, 0x31, 0x12, 0x18, 0x2d, 0xa3, 0x00, 0x58, 0x35, 0x46, 0x11, 0x13, 0x71, 0x8d, 0x1a, 0x5e, 0xf9, 0x44, + }; +static const ec_test_case ed448_6_test_case = { + .name = "EDDSA448-SHAKE256/wei448 6", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_6_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_6_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448_6_test_vectors_message, + .msglen = sizeof(ed448_6_test_vectors_message), + .sig_type = EDDSA448, + .exp_sig = ed448_6_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_6_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_7_test_vectors_priv_key[] = { + 0x2e, 0xc5, 0xfe, 0x3c, 0x17, 0x04, 0x5a, 0xbd, 0xb1, 0x36, 0xa5, 0xe6, 0xa9, 0x13, 0xe3, 0x2a, 0xb7, 0x5a, 0xe6, 0x8b, 0x53, 0xd2, 0xfc, 0x14, 0x9b, 0x77, 0xe5, 0x04, 0x13, 0x2d, 0x37, 0x56, 0x9b, 0x7e, 0x76, 0x6b, 0xa7, 0x4a, 0x19, 0xbd, 0x61, 0x62, 0x34, 0x3a, 0x21, 0xc8, 0x59, 0x0a, 0xa9, 0xce, 0xbc, 0xa9, 0x01, 0x4c, 0x63, 0x6d, 0xf5, + }; +static const u8 ed448_7_test_vectors_expected_sig[] = { + 0xc6, 0x50, 0xdd, 0xbb, 0x06, 0x01, 0xc1, 0x9c, 0xa1, 0x14, 0x39, 0xe1, 0x64, 0x0d, 0xd9, 0x31, 0xf4, 0x3c, 0x51, 0x8e, 0xa5, 0xbe, 0xa7, 0x0d, 0x3d, 0xcd, 0xe5, 0xf4, 0x19, 0x1f, 0xe5, 0x3f, 0x00, 0xcf, 0x96, 0x65, 0x46, 0xb7, 0x2b, 0xcc, 0x7d, 0x58, 0xbe, 0x2b, 0x9b, 0xad, 0xef, 0x28, 0x74, 0x39, 0x54, 0xe3, 0xa4, 0x4a, 0x23, 0xf8, 0x80, 0xe8, 0xd4, 0xf1, 0xcf, 0xce, 0x2d, 0x7a, 0x61, 0x45, 0x2d, 0x26, 0xda, 0x05, 0x89, 0x6f, 0x0a, 0x50, 0xda, 0x66, 0xa2, 0x39, 0xa8, 0xa1, 0x88, 0xb6, 0xd8, 0x25, 0xb3, 0x30, 0x5a, 0xd7, 0x7b, 0x73, 0xfb, 0xac, 0x08, 0x36, 0xec, 0xc6, 0x09, 0x87, 0xfd, 0x08, 0x52, 0x7c, 0x1a, 0x8e, 0x80, 0xd5, 0x82, 0x3e, 0x65, 0xca, 0xfe, 0x2a, 0x3d, 0x00, + }; +static const u8 ed448_7_test_vectors_message[] = { + 0x15, 0x77, 0x75, 0x32, 0xb0, 0xbd, 0xd0, 0xd1, 0x38, 0x9f, 0x63, 0x6c, 0x5f, 0x6b, 0x9b, 0xa7, 0x34, 0xc9, 0x0a, 0xf5, 0x72, 0x87, 0x7e, 0x2d, 0x27, 0x2d, 0xd0, 0x78, 0xaa, 0x1e, 0x56, 0x7c, 0xfa, 0x80, 0xe1, 0x29, 0x28, 0xbb, 0x54, 0x23, 0x30, 0xe8, 0x40, 0x9f, 0x31, 0x74, 0x50, 0x41, 0x07, 0xec, 0xd5, 0xef, 0xac, 0x61, 0xae, 0x75, 0x04, 0xda, 0xbe, 0x2a, 0x60, 0x2e, 0xde, 0x89, 0xe5, 0xcc, 0xa6, 0x25, 0x7a, 0x7c, 0x77, 0xe2, 0x7a, 0x70, 0x2b, 0x3a, 0xe3, 0x9f, 0xc7, 0x69, 0xfc, 0x54, 0xf2, 0x39, 0x5a, 0xe6, 0xa1, 0x17, 0x8c, 0xab, 0x47, 0x38, 0xe5, 0x43, 0x07, 0x2f, 0xc1, 0xc1, 0x77, 0xfe, 0x71, 0xe9, 0x2e, 0x25, 0xbf, 0x03, 0xe4, 0xec, 0xb7, 0x2f, 0x47, 0xb6, 0x4d, 0x04, 0x65, 0xaa, 0xea, 0x4c, 0x7f, 0xad, 0x37, 0x25, 0x36, 0xc8, 0xba, 0x51, 0x6a, 0x60, 0x39, 0xc3, 0xc2, 0xa3, 0x9f, 0x0e, 0x4d, 0x83, 0x2b, 0xe4, 0x32, 0xdf, 0xa9, 0xa7, 0x06, 0xa6, 0xe5, 0xc7, 0xe1, 0x9f, 0x39, 0x79, 0x64, 0xca, 0x42, 0x58, 0x00, 0x2f, 0x7c, 0x05, 0x41, 0xb5, 0x90, 0x31, 0x6d, 0xbc, 0x56, 0x22, 0xb6, 0xb2, 0xa6, 0xfe, 0x7a, 0x4a, 0xbf, 0xfd, 0x96, 0x10, 0x5e, 0xca, 0x76, 0xea, 0x7b, 0x98, 0x81, 0x6a, 0xf0, 0x74, 0x8c, 0x10, 0xdf, 0x04, 0x8c, 0xe0, 0x12, 0xd9, 0x01, 0x01, 0x5a, 0x51, 0xf1, 0x89, 0xf3, 0x88, 0x81, 0x45, 0xc0, 0x36, 0x50, 0xaa, 0x23, 0xce, 0x89, 0x4c, 0x3b, 0xd8, 0x89, 0xe0, 0x30, 0xd5, 0x65, 0x07, 0x1c, 0x59, 0xf4, 0x09, 0xa9, 0x98, 0x1b, 0x51, 0x87, 0x8f, 0xd6, 0xfc, 0x11, 0x06, 0x24, 0xdc, 0xbc, 0xde, 0x0b, 0xf7, 0xa6, 0x9c, 0xcc, 0xe3, 0x8f, 0xab, 0xdf, 0x86, 0xf3, 0xbe, 0xf6, 0x04, 0x48, 0x19, 0xde, 0x11, + }; +static const ec_test_case ed448_7_test_case = { + .name = "EDDSA448-SHAKE256/wei448 7", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_7_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_7_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448_7_test_vectors_message, + .msglen = sizeof(ed448_7_test_vectors_message), + .sig_type = EDDSA448, + .exp_sig = ed448_7_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_7_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_8_test_vectors_priv_key[] = { +0x87, 0x2d, 0x09, 0x37, 0x80, 0xf5, 0xd3, 0x73, 0x0d, 0xf7, 0xc2, 0x12, 0x66, 0x4b, 0x37, 0xb8, 0xa0, 0xf2, 0x4f, 0x56, 0x81, 0x0d, 0xaa, 0x83, 0x82, 0xcd, 0x4f, 0xa3, 0xf7, 0x76, 0x34, 0xec, 0x44, 0xdc, 0x54, 0xf1, 0xc2, 0xed, 0x9b, 0xea, 0x86, 0xfa, 0xfb, 0x76, 0x32, 0xd8, 0xbe, 0x19, 0x9e, 0xa1, 0x65, 0xf5, 0xad, 0x55, 0xdd, 0x9c, 0xe8, + }; +static const u8 ed448_8_test_vectors_expected_sig[] = { +0xe3, 0x01, 0x34, 0x5a, 0x41, 0xa3, 0x9a, 0x4d, 0x72, 0xff, 0xf8, 0xdf, 0x69, 0xc9, 0x80, 0x75, 0xa0, 0xcc, 0x08, 0x2b, 0x80, 0x2f, 0xc9, 0xb2, 0xb6, 0xbc, 0x50, 0x3f, 0x92, 0x6b, 0x65, 0xbd, 0xdf, 0x7f, 0x4c, 0x8f, 0x1c, 0xb4, 0x9f, 0x63, 0x96, 0xaf, 0xc8, 0xa7, 0x0a, 0xbe, 0x6d, 0x8a, 0xef, 0x0d, 0xb4, 0x78, 0xd4, 0xc6, 0xb2, 0x97, 0x00, 0x76, 0xc6, 0xa0, 0x48, 0x4f, 0xe7, 0x6d, 0x76, 0xb3, 0xa9, 0x76, 0x25, 0xd7, 0x9f, 0x1c, 0xe2, 0x40, 0xe7, 0xc5, 0x76, 0x75, 0x0d, 0x29, 0x55, 0x28, 0x28, 0x6f, 0x71, 0x9b, 0x41, 0x3d, 0xe9, 0xad, 0xa3, 0xe8, 0xeb, 0x78, 0xed, 0x57, 0x36, 0x03, 0xce, 0x30, 0xd8, 0xbb, 0x76, 0x17, 0x85, 0xdc, 0x30, 0xdb, 0xc3, 0x20, 0x86, 0x9e, 0x1a, 0x00, + }; +static const u8 ed448_8_test_vectors_message[] = { +0x6d, 0xdf, 0x80, 0x2e, 0x1a, 0xae, 0x49, 0x86, 0x93, 0x5f, 0x7f, 0x98, 0x1b, 0xa3, 0xf0, 0x35, +0x1d, 0x62, 0x73, 0xc0, 0xa0, 0xc2, 0x2c, 0x9c, 0x0e, 0x83, 0x39, 0x16, 0x8e, 0x67, 0x54, 0x12, +0xa3, 0xde, 0xbf, 0xaf, 0x43, 0x5e, 0xd6, 0x51, 0x55, 0x80, 0x07, 0xdb, 0x43, 0x84, 0xb6, 0x50, +0xfc, 0xc0, 0x7e, 0x3b, 0x58, 0x6a, 0x27, 0xa4, 0xf7, 0xa0, 0x0a, 0xc8, 0xa6, 0xfe, 0xc2, 0xcd, +0x86, 0xae, 0x4b, 0xf1, 0x57, 0x0c, 0x41, 0xe6, 0xa4, 0x0c, 0x93, 0x1d, 0xb2, 0x7b, 0x2f, 0xaa, +0x15, 0xa8, 0xce, 0xdd, 0x52, 0xcf, 0xf7, 0x36, 0x2c, 0x4e, 0x6e, 0x23, 0xda, 0xec, 0x0f, 0xbc, +0x3a, 0x79, 0xb6, 0x80, 0x6e, 0x31, 0x6e, 0xfc, 0xc7, 0xb6, 0x81, 0x19, 0xbf, 0x46, 0xbc, 0x76, +0xa2, 0x60, 0x67, 0xa5, 0x3f, 0x29, 0x6d, 0xaf, 0xdb, 0xdc, 0x11, 0xc7, 0x7f, 0x77, 0x77, 0xe9, +0x72, 0x66, 0x0c, 0xf4, 0xb6, 0xa9, 0xb3, 0x69, 0xa6, 0x66, 0x5f, 0x02, 0xe0, 0xcc, 0x9b, 0x6e, +0xdf, 0xad, 0x13, 0x6b, 0x4f, 0xab, 0xe7, 0x23, 0xd2, 0x81, 0x3d, 0xb3, 0x13, 0x6c, 0xfd, 0xe9, +0xb6, 0xd0, 0x44, 0x32, 0x2f, 0xee, 0x29, 0x47, 0x95, 0x2e, 0x03, 0x1b, 0x73, 0xab, 0x5c, 0x60, +0x33, 0x49, 0xb3, 0x07, 0xbd, 0xc2, 0x7b, 0xc6, 0xcb, 0x8b, 0x8b, 0xbd, 0x7b, 0xd3, 0x23, 0x21, +0x9b, 0x80, 0x33, 0xa5, 0x81, 0xb5, 0x9e, 0xad, 0xeb, 0xb0, 0x9b, 0x3c, 0x4f, 0x3d, 0x22, 0x77, +0xd4, 0xf0, 0x34, 0x36, 0x24, 0xac, 0xc8, 0x17, 0x80, 0x47, 0x28, 0xb2, 0x5a, 0xb7, 0x97, 0x17, +0x2b, 0x4c, 0x5c, 0x21, 0xa2, 0x2f, 0x9c, 0x78, 0x39, 0xd6, 0x43, 0x00, 0x23, 0x2e, 0xb6, 0x6e, +0x53, 0xf3, 0x1c, 0x72, 0x3f, 0xa3, 0x7f, 0xe3, 0x87, 0xc7, 0xd3, 0xe5, 0x0b, 0xdf, 0x98, 0x13, +0xa3, 0x0e, 0x5b, 0xb1, 0x2c, 0xf4, 0xcd, 0x93, 0x0c, 0x40, 0xcf, 0xb4, 0xe1, 0xfc, 0x62, 0x25, +0x92, 0xa4, 0x95, 0x88, 0x79, 0x44, 0x94, 0xd5, 0x6d, 0x24, 0xea, 0x4b, 0x40, 0xc8, 0x9f, 0xc0, +0x59, 0x6c, 0xc9, 0xeb, 0xb9, 0x61, 0xc8, 0xcb, 0x10, 0xad, 0xde, 0x97, 0x6a, 0x5d, 0x60, 0x2b, +0x1c, 0x3f, 0x85, 0xb9, 0xb9, 0xa0, 0x01, 0xed, 0x3c, 0x6a, 0x4d, 0x3b, 0x14, 0x37, 0xf5, 0x20, +0x96, 0xcd, 0x19, 0x56, 0xd0, 0x42, 0xa5, 0x97, 0xd5, 0x61, 0xa5, 0x96, 0xec, 0xd3, 0xd1, 0x73, +0x5a, 0x8d, 0x57, 0x0e, 0xa0, 0xec, 0x27, 0x22, 0x5a, 0x2c, 0x4a, 0xaf, 0xf2, 0x63, 0x06, 0xd1, +0x52, 0x6c, 0x1a, 0xf3, 0xca, 0x6d, 0x9c, 0xf5, 0xa2, 0xc9, 0x8f, 0x47, 0xe1, 0xc4, 0x6d, 0xb9, +0xa3, 0x32, 0x34, 0xcf, 0xd4, 0xd8, 0x1f, 0x2c, 0x98, 0x53, 0x8a, 0x09, 0xeb, 0xe7, 0x69, 0x98, +0xd0, 0xd8, 0xfd, 0x25, 0x99, 0x7c, 0x7d, 0x25, 0x5c, 0x6d, 0x66, 0xec, 0xe6, 0xfa, 0x56, 0xf1, +0x11, 0x44, 0x95, 0x0f, 0x02, 0x77, 0x95, 0xe6, 0x53, 0x00, 0x8f, 0x4b, 0xd7, 0xca, 0x2d, 0xee, +0x85, 0xd8, 0xe9, 0x0f, 0x3d, 0xc3, 0x15, 0x13, 0x0c, 0xe2, 0xa0, 0x03, 0x75, 0xa3, 0x18, 0xc7, +0xc3, 0xd9, 0x7b, 0xe2, 0xc8, 0xce, 0x5b, 0x6d, 0xb4, 0x1a, 0x62, 0x54, 0xff, 0x26, 0x4f, 0xa6, +0x15, 0x5b, 0xae, 0xe3, 0xb0, 0x77, 0x3c, 0x0f, 0x49, 0x7c, 0x57, 0x3f, 0x19, 0xbb, 0x4f, 0x42, +0x40, 0x28, 0x1f, 0x0b, 0x1f, 0x4f, 0x7b, 0xe8, 0x57, 0xa4, 0xe5, 0x9d, 0x41, 0x6c, 0x06, 0xb4, +0xc5, 0x0f, 0xa0, 0x9e, 0x18, 0x10, 0xdd, 0xc6, 0xb1, 0x46, 0x7b, 0xae, 0xac, 0x5a, 0x36, 0x68, +0xd1, 0x1b, 0x6e, 0xca, 0xa9, 0x01, 0x44, 0x00, 0x16, 0xf3, 0x89, 0xf8, 0x0a, 0xcc, 0x4d, 0xb9, +0x77, 0x02, 0x5e, 0x7f, 0x59, 0x24, 0x38, 0x8c, 0x7e, 0x34, 0x0a, 0x73, 0x2e, 0x55, 0x44, 0x40, +0xe7, 0x65, 0x70, 0xf8, 0xdd, 0x71, 0xb7, 0xd6, 0x40, 0xb3, 0x45, 0x0d, 0x1f, 0xd5, 0xf0, 0x41, +0x0a, 0x18, 0xf9, 0xa3, 0x49, 0x4f, 0x70, 0x7c, 0x71, 0x7b, 0x79, 0xb4, 0xbf, 0x75, 0xc9, 0x84, +0x00, 0xb0, 0x96, 0xb2, 0x16, 0x53, 0xb5, 0xd2, 0x17, 0xcf, 0x35, 0x65, 0xc9, 0x59, 0x74, 0x56, +0xf7, 0x07, 0x03, 0x49, 0x7a, 0x07, 0x87, 0x63, 0x82, 0x9b, 0xc0, 0x1b, 0xb1, 0xcb, 0xc8, 0xfa, +0x04, 0xea, 0xdc, 0x9a, 0x6e, 0x3f, 0x66, 0x99, 0x58, 0x7a, 0x9e, 0x75, 0xc9, 0x4e, 0x5b, 0xab, +0x00, 0x36, 0xe0, 0xb2, 0xe7, 0x11, 0x39, 0x2c, 0xff, 0x00, 0x47, 0xd0, 0xd6, 0xb0, 0x5b, 0xd2, +0xa5, 0x88, 0xbc, 0x10, 0x97, 0x18, 0x95, 0x42, 0x59, 0xf1, 0xd8, 0x66, 0x78, 0xa5, 0x79, 0xa3, +0x12, 0x0f, 0x19, 0xcf, 0xb2, 0x96, 0x3f, 0x17, 0x7a, 0xeb, 0x70, 0xf2, 0xd4, 0x84, 0x48, 0x26, +0x26, 0x2e, 0x51, 0xb8, 0x02, 0x71, 0x27, 0x20, 0x68, 0xef, 0x5b, 0x38, 0x56, 0xfa, 0x85, 0x35, +0xaa, 0x2a, 0x88, 0xb2, 0xd4, 0x1f, 0x2a, 0x0e, 0x2f, 0xda, 0x76, 0x24, 0xc2, 0x85, 0x02, 0x72, +0xac, 0x4a, 0x2f, 0x56, 0x1f, 0x8f, 0x2f, 0x7a, 0x31, 0x8b, 0xfd, 0x5c, 0xaf, 0x96, 0x96, 0x14, +0x9e, 0x4a, 0xc8, 0x24, 0xad, 0x34, 0x60, 0x53, 0x8f, 0xdc, 0x25, 0x42, 0x1b, 0xee, 0xc2, 0xcc, +0x68, 0x18, 0x16, 0x2d, 0x06, 0xbb, 0xed, 0x0c, 0x40, 0xa3, 0x87, 0x19, 0x23, 0x49, 0xdb, 0x67, +0xa1, 0x18, 0xba, 0xda, 0x6c, 0xd5, 0xab, 0x01, 0x40, 0xee, 0x27, 0x32, 0x04, 0xf6, 0x28, 0xaa, +0xd1, 0xc1, 0x35, 0xf7, 0x70, 0x27, 0x9a, 0x65, 0x1e, 0x24, 0xd8, 0xc1, 0x4d, 0x75, 0xa6, 0x05, +0x9d, 0x76, 0xb9, 0x6a, 0x6f, 0xd8, 0x57, 0xde, 0xf5, 0xe0, 0xb3, 0x54, 0xb2, 0x7a, 0xb9, 0x37, +0xa5, 0x81, 0x5d, 0x16, 0xb5, 0xfa, 0xe4, 0x07, 0xff, 0x18, 0x22, 0x2c, 0x6d, 0x1e, 0xd2, 0x63, +0xbe, 0x68, 0xc9, 0x5f, 0x32, 0xd9, 0x08, 0xbd, 0x89, 0x5c, 0xd7, 0x62, 0x07, 0xae, 0x72, 0x64, +0x87, 0x56, 0x7f, 0x9a, 0x67, 0xda, 0xd7, 0x9a, 0xbe, 0xc3, 0x16, 0xf6, 0x83, 0xb1, 0x7f, 0x2d, +0x02, 0xbf, 0x07, 0xe0, 0xac, 0x8b, 0x5b, 0xc6, 0x16, 0x2c, 0xf9, 0x46, 0x97, 0xb3, 0xc2, 0x7c, +0xd1, 0xfe, 0xa4, 0x9b, 0x27, 0xf2, 0x3b, 0xa2, 0x90, 0x18, 0x71, 0x96, 0x25, 0x06, 0x52, 0x0c, +0x39, 0x2d, 0xa8, 0xb6, 0xad, 0x0d, 0x99, 0xf7, 0x01, 0x3f, 0xbc, 0x06, 0xc2, 0xc1, 0x7a, 0x56, +0x95, 0x00, 0xc8, 0xa7, 0x69, 0x64, 0x81, 0xc1, 0xcd, 0x33, 0xe9, 0xb1, 0x4e, 0x40, 0xb8, 0x2e, +0x79, 0xa5, 0xf5, 0xdb, 0x82, 0x57, 0x1b, 0xa9, 0x7b, 0xae, 0x3a, 0xd3, 0xe0, 0x47, 0x95, 0x15, +0xbb, 0x0e, 0x2b, 0x0f, 0x3b, 0xfc, 0xd1, 0xfd, 0x33, 0x03, 0x4e, 0xfc, 0x62, 0x45, 0xed, 0xdd, +0x7e, 0xe2, 0x08, 0x6d, 0xda, 0xe2, 0x60, 0x0d, 0x8c, 0xa7, 0x3e, 0x21, 0x4e, 0x8c, 0x2b, 0x0b, +0xdb, 0x2b, 0x04, 0x7c, 0x6a, 0x46, 0x4a, 0x56, 0x2e, 0xd7, 0x7b, 0x73, 0xd2, 0xd8, 0x41, 0xc4, +0xb3, 0x49, 0x73, 0x55, 0x12, 0x57, 0x71, 0x3b, 0x75, 0x36, 0x32, 0xef, 0xba, 0x34, 0x81, 0x69, +0xab, 0xc9, 0x0a, 0x68, 0xf4, 0x26, 0x11, 0xa4, 0x01, 0x26, 0xd7, 0xcb, 0x21, 0xb5, 0x86, 0x95, +0x56, 0x81, 0x86, 0xf7, 0xe5, 0x69, 0xd2, 0xff, 0x0f, 0x9e, 0x74, 0x5d, 0x04, 0x87, 0xdd, 0x2e, +0xb9, 0x97, 0xca, 0xfc, 0x5a, 0xbf, 0x9d, 0xd1, 0x02, 0xe6, 0x2f, 0xf6, 0x6c, 0xba, 0x87, + }; +static const ec_test_case ed448_8_test_case = { + .name = "EDDSA448-SHAKE256/wei448 8", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_8_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_8_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448_8_test_vectors_message, + .msglen = sizeof(ed448_8_test_vectors_message), + .sig_type = EDDSA448, + .exp_sig = ed448_8_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_8_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0 +}; + +/************************************************/ +static const u8 ed448_9_test_vectors_priv_key[] = { + 0xc4, 0xea, 0xb0, 0x5d, 0x35, 0x70, 0x07, 0xc6, 0x32, 0xf3, 0xdb, 0xb4, 0x84, 0x89, 0x92, 0x4d, 0x55, 0x2b, 0x08, 0xfe, 0x0c, 0x35, 0x3a, 0x0d, 0x4a, 0x1f, 0x00, 0xac, 0xda, 0x2c, 0x46, 0x3a, 0xfb, 0xea, 0x67, 0xc5, 0xe8, 0xd2, 0x87, 0x7c, 0x5e, 0x3b, 0xc3, 0x97, 0xa6, 0x59, 0x94, 0x9e, 0xf8, 0x02, 0x1e, 0x95, 0x4e, 0x0a, 0x12, 0x27, 0x4e, + }; +static const u8 ed448_9_test_vectors_expected_sig[] = { + 0xd4, 0xf8, 0xf6, 0x13, 0x17, 0x70, 0xdd, 0x46, 0xf4, 0x08, 0x67, 0xd6, 0xfd, 0x5d, 0x50, 0x55, 0xde, 0x43, 0x54, 0x1f, 0x8c, 0x5e, 0x35, 0xab, 0xbc, 0xd0, 0x01, 0xb3, 0x2a, 0x89, 0xf7, 0xd2, 0x15, 0x1f, 0x76, 0x47, 0xf1, 0x1d, 0x8c, 0xa2, 0xae, 0x27, 0x9f, 0xb8, 0x42, 0xd6, 0x07, 0x21, 0x7f, 0xce, 0x6e, 0x04, 0x2f, 0x68, 0x15, 0xea, 0x00, 0x0c, 0x85, 0x74, 0x1d, 0xe5, 0xc8, 0xda, 0x11, 0x44, 0xa6, 0xa1, 0xab, 0xa7, 0xf9, 0x6d, 0xe4, 0x25, 0x05, 0xd7, 0xa7, 0x29, 0x85, 0x24, 0xfd, 0xa5, 0x38, 0xfc, 0xcb, 0xbb, 0x75, 0x4f, 0x57, 0x8c, 0x1c, 0xad, 0x10, 0xd5, 0x4d, 0x0d, 0x54, 0x28, 0x40, 0x7e, 0x85, 0xdc, 0xbc, 0x98, 0xa4, 0x91, 0x55, 0xc1, 0x37, 0x64, 0xe6, 0x6c, 0x3c, 0x00, + }; +static const u8 ed448_9_test_vectors_message[] = { + 0x03, + }; +static const u8 ed448_9_test_vectors_adata[] = { + 0x66, 0x6f, 0x6f, + }; +static const ec_test_case ed448_9_test_case = { + .name = "EDDSA448-SHAKE256/wei448 9", + .ec_str_p = &wei448_str_params, + .priv_key = ed448_9_test_vectors_priv_key, + .priv_key_len = sizeof(ed448_9_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448_9_test_vectors_message, + .msglen = sizeof(ed448_9_test_vectors_message), + .sig_type = EDDSA448, + .exp_sig = ed448_9_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448_9_test_vectors_expected_sig), + .adata = ed448_9_test_vectors_adata, + .adata_len = sizeof(ed448_9_test_vectors_adata), +}; + +/************************************************/ +#define EDDSA448_SHAKE256_WEI448_ALL_TESTS() \ + &ed448_1_test_case,\ + &ed448_2_test_case,\ + &ed448_3_test_case,\ + &ed448_4_test_case,\ + &ed448_5_test_case,\ + &ed448_6_test_case,\ + &ed448_7_test_case,\ + &ed448_8_test_case,\ + &ed448_9_test_case, + +#endif /* __ED448_TEST_VECTORS_H__ */ diff --git a/crypto/libecc/src/tests/ed448ph_test_vectors.h b/crypto/libecc/src/tests/ed448ph_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/ed448ph_test_vectors.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Arnaud EBALARD + * Ryad BENADJILA + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __ED448PH_TEST_VECTORS_H__ +#define __ED448PH_TEST_VECTORS_H__ + +/************************************************/ +static const u8 ed448ph_1_test_vectors_priv_key[] = { + 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b, 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, 0xef, 0x78, 0x22, 0xe0, 0xd5, 0x10, 0x41, 0x27, 0xdc, 0x05, 0xd6, 0xdb, 0xef, 0xde, 0x69, 0xe3, 0xab, 0x2c, 0xec, 0x7c, 0x86, 0x7c, 0x6e, 0x2c, 0x49, + }; +static const u8 ed448ph_1_test_vectors_expected_sig[] = { + 0x82, 0x2f, 0x69, 0x01, 0xf7, 0x48, 0x0f, 0x3d, 0x5f, 0x56, 0x2c, 0x59, 0x29, 0x94, 0xd9, 0x69, 0x36, 0x02, 0x87, 0x56, 0x14, 0x48, 0x32, 0x56, 0x50, 0x56, 0x00, 0xbb, 0xc2, 0x81, 0xae, 0x38, 0x1f, 0x54, 0xd6, 0xbc, 0xe2, 0xea, 0x91, 0x15, 0x74, 0x93, 0x2f, 0x52, 0xa4, 0xe6, 0xca, 0xdd, 0x78, 0x76, 0x93, 0x75, 0xec, 0x3f, 0xfd, 0x1b, 0x80, 0x1a, 0x0d, 0x9b, 0x3f, 0x40, 0x30, 0xcd, 0x43, 0x39, 0x64, 0xb6, 0x45, 0x7e, 0xa3, 0x94, 0x76, 0x51, 0x12, 0x14, 0xf9, 0x74, 0x69, 0xb5, 0x7d, 0xd3, 0x2d, 0xbc, 0x56, 0x0a, 0x9a, 0x94, 0xd0, 0x0b, 0xff, 0x07, 0x62, 0x04, 0x64, 0xa3, 0xad, 0x20, 0x3d, 0xf7, 0xdc, 0x7c, 0xe3, 0x60, 0xc3, 0xcd, 0x36, 0x96, 0xd9, 0xd9, 0xfa, 0xb9, 0x0f, 0x00, + }; +static const u8 ed448ph_1_test_vectors_message[] = { + 0x61, 0x62, 0x63, + }; +static const ec_test_case ed448ph_1_test_case = { + .name = "EDDSA448PH-SHAKE256/wei448 1", + .ec_str_p = &wei448_str_params, + .priv_key = ed448ph_1_test_vectors_priv_key, + .priv_key_len = sizeof(ed448ph_1_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448ph_1_test_vectors_message, + .msglen = sizeof(ed448ph_1_test_vectors_message), + .sig_type = EDDSA448PH, + .exp_sig = ed448ph_1_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448ph_1_test_vectors_expected_sig), + .adata = NULL, + .adata_len = 0, +}; + +/************************************************/ +static const u8 ed448ph_2_test_vectors_priv_key[] = { + 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b, 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, 0xef, 0x78, 0x22, 0xe0, 0xd5, 0x10, 0x41, 0x27, 0xdc, 0x05, 0xd6, 0xdb, 0xef, 0xde, 0x69, 0xe3, 0xab, 0x2c, 0xec, 0x7c, 0x86, 0x7c, 0x6e, 0x2c, 0x49, + }; +static const u8 ed448ph_2_test_vectors_expected_sig[] = { + 0xc3, 0x22, 0x99, 0xd4, 0x6e, 0xc8, 0xff, 0x02, 0xb5, 0x45, 0x40, 0x98, 0x28, 0x14, 0xdc, 0xe9, 0xa0, 0x58, 0x12, 0xf8, 0x19, 0x62, 0xb6, 0x49, 0xd5, 0x28, 0x09, 0x59, 0x16, 0xa2, 0xaa, 0x48, 0x10, 0x65, 0xb1, 0x58, 0x04, 0x23, 0xef, 0x92, 0x7e, 0xcf, 0x0a, 0xf5, 0x88, 0x8f, 0x90, 0xda, 0x0f, 0x6a, 0x9a, 0x85, 0xad, 0x5d, 0xc3, 0xf2, 0x80, 0xd9, 0x12, 0x24, 0xba, 0x99, 0x11, 0xa3, 0x65, 0x3d, 0x00, 0xe4, 0x84, 0xe2, 0xce, 0x23, 0x25, 0x21, 0x48, 0x1c, 0x86, 0x58, 0xdf, 0x30, 0x4b, 0xb7, 0x74, 0x5a, 0x73, 0x51, 0x4c, 0xdb, 0x9b, 0xf3, 0xe1, 0x57, 0x84, 0xab, 0x71, 0x28, 0x4f, 0x8d, 0x07, 0x04, 0xa6, 0x08, 0xc5, 0x4a, 0x6b, 0x62, 0xd9, 0x7b, 0xeb, 0x51, 0x1d, 0x13, 0x21, 0x00, + }; +static const u8 ed448ph_2_test_vectors_message[] = { + 0x61, 0x62, 0x63, + }; +static const u8 ed448ph_2_test_vectors_adata[] = { + 0x66, 0x6f, 0x6f, + }; +static const ec_test_case ed448ph_2_test_case = { + .name = "EDDSA448PH-SHAKE256/wei448 2", + .ec_str_p = &wei448_str_params, + .priv_key = ed448ph_2_test_vectors_priv_key, + .priv_key_len = sizeof(ed448ph_2_test_vectors_priv_key), + .nn_random = NULL, + .hash_type = SHAKE256, + .msg = (const char *)ed448ph_2_test_vectors_message, + .msglen = sizeof(ed448ph_2_test_vectors_message), + .sig_type = EDDSA448PH, + .exp_sig = ed448ph_2_test_vectors_expected_sig, + .exp_siglen = sizeof(ed448ph_2_test_vectors_expected_sig), + .adata = ed448ph_2_test_vectors_adata, + .adata_len = sizeof(ed448ph_2_test_vectors_adata), +}; + +/************************************************/ +#define EDDSA448PH_SHAKE256_WEI448_ALL_TESTS() \ + &ed448ph_1_test_case,\ + &ed448ph_2_test_case, + +#endif /* __ED448PH_TEST_VECTORS_H__ */ diff --git a/crypto/libecc/src/tests/meson.build b/crypto/libecc/src/tests/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/meson.build @@ -0,0 +1,55 @@ +hostcc = meson.get_compiler('c', native: true) + +# ec_self_test tests suite +ec_self_test_src = files( + 'ec_self_tests_core.c', + 'ec_self_tests.c', +) + +# the executable is built with the same architecture +# as the library itself, meaning that in case of cross-compilation +# the test binary have the same architecture. +# +# Yet, it can still be executed on the build machine architecture if +# the cross file used has declared an 'exe_wrapper' entry, such as, +# for e.g. in a arm32 cross-file: +# +# [binaries] +# exe_wrapper = 'qemu-arm-static' + +ec_self_test = executable( + 'ec_self_test', + sources: [ + ec_self_test_src, + external_deps_src, + ], + dependencies: libsign_dep, + include_directories: ecc_inc, + c_args: build_args, + install: false, +) + +test( + 'vectors', + ec_self_test, + args: 'vectors', + timeout: 120, +) + +# ec_tuils tests suite is kept native as it is a build machine tooling +ec_utils_src = files( + 'ec_utils.c', +) + +ec_utils = executable( + 'ec_utils', + sources: [ + ec_utils_src, + external_deps_src, + ], + dependencies: native_libsign_dep, + include_directories: ecc_inc, + c_args: build_args, + native: true, + install: false, +) diff --git a/crypto/libecc/src/tests/x25519_test_vectors.h b/crypto/libecc/src/tests/x25519_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/x25519_test_vectors.h @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#ifdef WITH_CURVE_WEI25519 + +/***** Test vectors from RFC7748 ****/ +static const u8 x25519_WEI25519_0_our_priv_key[] = { + 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a, +}; + +static const u8 x25519_WEI25519_0_peer_pub_key[] = { + 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f, +}; + +static const u8 x25519_WEI25519_0_our_pub_key[] = { + 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a, +}; + +static const u8 x25519_WEI25519_0_shared_secret[] = { + 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42, +}; + +static const ecdh_test_case x25519_WEI25519_0_test_case = { + .name = "X25519/WEI25519 0", + .ecdh_type = X25519, + .ec_str_p = &wei25519_str_params, + .our_priv_key = x25519_WEI25519_0_our_priv_key, + .our_priv_key_len = sizeof(x25519_WEI25519_0_our_priv_key), + .peer_pub_key = x25519_WEI25519_0_peer_pub_key, + .peer_pub_key_len = sizeof(x25519_WEI25519_0_peer_pub_key), + .exp_our_pub_key = x25519_WEI25519_0_our_pub_key, + .exp_our_pub_key_len = sizeof(x25519_WEI25519_0_our_pub_key), + .exp_shared_secret = x25519_WEI25519_0_shared_secret, + .exp_shared_secret_len = sizeof(x25519_WEI25519_0_shared_secret), +}; +/******************/ + +static const u8 x25519_WEI25519_1_our_priv_key[] = { + 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b, 0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6, 0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd, 0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb, +}; + +static const u8 x25519_WEI25519_1_peer_pub_key[] = { + 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a, +}; + +static const u8 x25519_WEI25519_1_our_pub_key[] = { + 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f, +}; + +static const u8 x25519_WEI25519_1_shared_secret[] = { + 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42, +}; + +static const ecdh_test_case x25519_WEI25519_1_test_case = { + .name = "X25519/WEI25519 1", + .ecdh_type = X25519, + .ec_str_p = &wei25519_str_params, + .our_priv_key = x25519_WEI25519_1_our_priv_key, + .our_priv_key_len = sizeof(x25519_WEI25519_1_our_priv_key), + .peer_pub_key = x25519_WEI25519_1_peer_pub_key, + .peer_pub_key_len = sizeof(x25519_WEI25519_1_peer_pub_key), + .exp_our_pub_key = x25519_WEI25519_1_our_pub_key, + .exp_our_pub_key_len = sizeof(x25519_WEI25519_1_our_pub_key), + .exp_shared_secret = x25519_WEI25519_1_shared_secret, + .exp_shared_secret_len = sizeof(x25519_WEI25519_1_shared_secret), +}; + + +/***** Test vectors from https://tools.ietf.org/id/draft-ietf-ipsecme-safecurves-03.xml ****/ +/******************/ + +static const u8 x25519_WEI25519_2_our_priv_key[] = { + 0x75, 0x1f, 0xb4, 0x30, 0x86, 0x55, 0xb4, 0x76, 0xb6, 0x78, 0x9b, 0x73, 0x25, 0xf9, 0xea, 0x8c, 0xdd, 0xd1, 0x6a, 0x58, 0x53, 0x3f, 0xf6, 0xd9, 0xe6, 0x00, 0x09, 0x46, 0x4a, 0x5f, 0x9d, 0x94, +}; + +static const u8 x25519_WEI25519_2_peer_pub_key[] = { + 0x0b, 0xe7, 0xc1, 0xf5, 0xaa, 0xd8, 0x7d, 0x7e, 0x44, 0x86, 0x62, 0x67, 0x32, 0x98, 0xa4, 0x43, 0x47, 0x8b, 0x85, 0x97, 0x45, 0x17, 0x9e, 0xaf, 0x56, 0x4c, 0x79, 0xc0, 0xef, 0x6e, 0xee, 0x25, +}; + +static const u8 x25519_WEI25519_2_our_pub_key[] = { + 0x48, 0xd5, 0xdd, 0xd4, 0x06, 0x12, 0x57, 0xba, 0x16, 0x6f, 0xa3, 0xf9, 0xbb, 0xdb, 0x74, 0xf1, 0xa4, 0xe8, 0x1c, 0x08, 0x93, 0x84, 0xfa, 0x77, 0xf7, 0x90, 0x70, 0x9f, 0x0d, 0xfb, 0xc7, 0x66, +}; + +static const u8 x25519_WEI25519_2_shared_secret[] = { + 0xc7, 0x49, 0x50, 0x60, 0x7a, 0x12, 0x32, 0x7f, 0x32, 0x04, 0xd9, 0x4b, 0x68, 0x25, 0xbf, 0xb0, 0x68, 0xb7, 0xf8, 0x31, 0x9a, 0x9e, 0x37, 0x08, 0xed, 0x3d, 0x43, 0xce, 0x81, 0x30, 0xc9, 0x50, +}; + +static const ecdh_test_case x25519_WEI25519_2_test_case = { + .name = "X25519/WEI25519 2", + .ecdh_type = X25519, + .ec_str_p = &wei25519_str_params, + .our_priv_key = x25519_WEI25519_2_our_priv_key, + .our_priv_key_len = sizeof(x25519_WEI25519_2_our_priv_key), + .peer_pub_key = x25519_WEI25519_2_peer_pub_key, + .peer_pub_key_len = sizeof(x25519_WEI25519_2_peer_pub_key), + .exp_our_pub_key = x25519_WEI25519_2_our_pub_key, + .exp_our_pub_key_len = sizeof(x25519_WEI25519_2_our_pub_key), + .exp_shared_secret = x25519_WEI25519_2_shared_secret, + .exp_shared_secret_len = sizeof(x25519_WEI25519_2_shared_secret), +}; + +/******************/ + +static const u8 x25519_WEI25519_3_our_priv_key[] = { + 0x0a, 0x54, 0x64, 0x52, 0x53, 0x29, 0x0d, 0x60, 0xdd, 0xad, 0xd0, 0xe0, 0x30, 0xba, 0xcd, 0x9e, 0x55, 0x01, 0xef, 0xdc, 0x22, 0x07, 0x55, 0xa1, 0xe9, 0x78, 0xf1, 0xb8, 0x39, 0xa0, 0x56, 0x88, +}; + +static const u8 x25519_WEI25519_3_peer_pub_key[] = { + 0x48, 0xd5, 0xdd, 0xd4, 0x06, 0x12, 0x57, 0xba, 0x16, 0x6f, 0xa3, 0xf9, 0xbb, 0xdb, 0x74, 0xf1, 0xa4, 0xe8, 0x1c, 0x08, 0x93, 0x84, 0xfa, 0x77, 0xf7, 0x90, 0x70, 0x9f, 0x0d, 0xfb, 0xc7, 0x66, +}; + +static const u8 x25519_WEI25519_3_our_pub_key[] = { + 0x0b, 0xe7, 0xc1, 0xf5, 0xaa, 0xd8, 0x7d, 0x7e, 0x44, 0x86, 0x62, 0x67, 0x32, 0x98, 0xa4, 0x43, 0x47, 0x8b, 0x85, 0x97, 0x45, 0x17, 0x9e, 0xaf, 0x56, 0x4c, 0x79, 0xc0, 0xef, 0x6e, 0xee, 0x25, +}; + +static const u8 x25519_WEI25519_3_shared_secret[] = { + 0xc7, 0x49, 0x50, 0x60, 0x7a, 0x12, 0x32, 0x7f, 0x32, 0x04, 0xd9, 0x4b, 0x68, 0x25, 0xbf, 0xb0, 0x68, 0xb7, 0xf8, 0x31, 0x9a, 0x9e, 0x37, 0x08, 0xed, 0x3d, 0x43, 0xce, 0x81, 0x30, 0xc9, 0x50, +}; + +static const ecdh_test_case x25519_WEI25519_3_test_case = { + .name = "X25519/WEI25519 3", + .ecdh_type = X25519, + .ec_str_p = &wei25519_str_params, + .our_priv_key = x25519_WEI25519_3_our_priv_key, + .our_priv_key_len = sizeof(x25519_WEI25519_3_our_priv_key), + .peer_pub_key = x25519_WEI25519_3_peer_pub_key, + .peer_pub_key_len = sizeof(x25519_WEI25519_3_peer_pub_key), + .exp_our_pub_key = x25519_WEI25519_3_our_pub_key, + .exp_our_pub_key_len = sizeof(x25519_WEI25519_3_our_pub_key), + .exp_shared_secret = x25519_WEI25519_3_shared_secret, + .exp_shared_secret_len = sizeof(x25519_WEI25519_3_shared_secret), +}; + +#endif diff --git a/crypto/libecc/src/tests/x448_test_vectors.h b/crypto/libecc/src/tests/x448_test_vectors.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/tests/x448_test_vectors.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +#ifdef WITH_CURVE_WEI448 + +static const u8 x448_WEI448_0_our_priv_key[] = { + 0x9a, 0x8f, 0x49, 0x25, 0xd1, 0x51, 0x9f, 0x57, 0x75, 0xcf, 0x46, 0xb0, 0x4b, 0x58, 0x00, 0xd4, 0xee, 0x9e, 0xe8, 0xba, 0xe8, 0xbc, 0x55, 0x65, 0xd4, 0x98, 0xc2, 0x8d, 0xd9, 0xc9, 0xba, 0xf5, 0x74, 0xa9, 0x41, 0x97, 0x44, 0x89, 0x73, 0x91, 0x00, 0x63, 0x82, 0xa6, 0xf1, 0x27, 0xab, 0x1d, 0x9a, 0xc2, 0xd8, 0xc0, 0xa5, 0x98, 0x72, 0x6b, +}; + +static const u8 x448_WEI448_0_peer_pub_key[] = { + 0x3e, 0xb7, 0xa8, 0x29, 0xb0, 0xcd, 0x20, 0xf5, 0xbc, 0xfc, 0x0b, 0x59, 0x9b, 0x6f, 0xec, 0xcf, 0x6d, 0xa4, 0x62, 0x71, 0x07, 0xbd, 0xb0, 0xd4, 0xf3, 0x45, 0xb4, 0x30, 0x27, 0xd8, 0xb9, 0x72, 0xfc, 0x3e, 0x34, 0xfb, 0x42, 0x32, 0xa1, 0x3c, 0xa7, 0x06, 0xdc, 0xb5, 0x7a, 0xec, 0x3d, 0xae, 0x07, 0xbd, 0xc1, 0xc6, 0x7b, 0xf3, 0x36, 0x09, +}; + +static const u8 x448_WEI448_0_our_pub_key[] = { + 0x9b, 0x08, 0xf7, 0xcc, 0x31, 0xb7, 0xe3, 0xe6, 0x7d, 0x22, 0xd5, 0xae, 0xa1, 0x21, 0x07, 0x4a, 0x27, 0x3b, 0xd2, 0xb8, 0x3d, 0xe0, 0x9c, 0x63, 0xfa, 0xa7, 0x3d, 0x2c, 0x22, 0xc5, 0xd9, 0xbb, 0xc8, 0x36, 0x64, 0x72, 0x41, 0xd9, 0x53, 0xd4, 0x0c, 0x5b, 0x12, 0xda, 0x88, 0x12, 0x0d, 0x53, 0x17, 0x7f, 0x80, 0xe5, 0x32, 0xc4, 0x1f, 0xa0, +}; + +static const u8 x448_WEI448_0_shared_secret[] = { + 0x07, 0xff, 0xf4, 0x18, 0x1a, 0xc6, 0xcc, 0x95, 0xec, 0x1c, 0x16, 0xa9, 0x4a, 0x0f, 0x74, 0xd1, 0x2d, 0xa2, 0x32, 0xce, 0x40, 0xa7, 0x75, 0x52, 0x28, 0x1d, 0x28, 0x2b, 0xb6, 0x0c, 0x0b, 0x56, 0xfd, 0x24, 0x64, 0xc3, 0x35, 0x54, 0x39, 0x36, 0x52, 0x1c, 0x24, 0x40, 0x30, 0x85, 0xd5, 0x9a, 0x44, 0x9a, 0x50, 0x37, 0x51, 0x4a, 0x87, 0x9d, +}; + +static const ecdh_test_case x448_WEI448_0_test_case = { + .name = "X448/WEI448 0", + .ecdh_type = X448, + .ec_str_p = &wei25519_str_params, + .our_priv_key = x448_WEI448_0_our_priv_key, + .our_priv_key_len = sizeof(x448_WEI448_0_our_priv_key), + .peer_pub_key = x448_WEI448_0_peer_pub_key, + .peer_pub_key_len = sizeof(x448_WEI448_0_peer_pub_key), + .exp_our_pub_key = x448_WEI448_0_our_pub_key, + .exp_our_pub_key_len = sizeof(x448_WEI448_0_our_pub_key), + .exp_shared_secret = x448_WEI448_0_shared_secret, + .exp_shared_secret_len = sizeof(x448_WEI448_0_shared_secret), +}; +/******************/ + +static const u8 x448_WEI448_1_our_priv_key[] = { + 0x1c, 0x30, 0x6a, 0x7a, 0xc2, 0xa0, 0xe2, 0xe0, 0x99, 0x0b, 0x29, 0x44, 0x70, 0xcb, 0xa3, 0x39, 0xe6, 0x45, 0x37, 0x72, 0xb0, 0x75, 0x81, 0x1d, 0x8f, 0xad, 0x0d, 0x1d, 0x69, 0x27, 0xc1, 0x20, 0xbb, 0x5e, 0xe8, 0x97, 0x2b, 0x0d, 0x3e, 0x21, 0x37, 0x4c, 0x9c, 0x92, 0x1b, 0x09, 0xd1, 0xb0, 0x36, 0x6f, 0x10, 0xb6, 0x51, 0x73, 0x99, 0x2d, +}; + +static const u8 x448_WEI448_1_peer_pub_key[] = { + 0x9b, 0x08, 0xf7, 0xcc, 0x31, 0xb7, 0xe3, 0xe6, 0x7d, 0x22, 0xd5, 0xae, 0xa1, 0x21, 0x07, 0x4a, 0x27, 0x3b, 0xd2, 0xb8, 0x3d, 0xe0, 0x9c, 0x63, 0xfa, 0xa7, 0x3d, 0x2c, 0x22, 0xc5, 0xd9, 0xbb, 0xc8, 0x36, 0x64, 0x72, 0x41, 0xd9, 0x53, 0xd4, 0x0c, 0x5b, 0x12, 0xda, 0x88, 0x12, 0x0d, 0x53, 0x17, 0x7f, 0x80, 0xe5, 0x32, 0xc4, 0x1f, 0xa0, +}; + +static const u8 x448_WEI448_1_our_pub_key[] = { + 0x3e, 0xb7, 0xa8, 0x29, 0xb0, 0xcd, 0x20, 0xf5, 0xbc, 0xfc, 0x0b, 0x59, 0x9b, 0x6f, 0xec, 0xcf, 0x6d, 0xa4, 0x62, 0x71, 0x07, 0xbd, 0xb0, 0xd4, 0xf3, 0x45, 0xb4, 0x30, 0x27, 0xd8, 0xb9, 0x72, 0xfc, 0x3e, 0x34, 0xfb, 0x42, 0x32, 0xa1, 0x3c, 0xa7, 0x06, 0xdc, 0xb5, 0x7a, 0xec, 0x3d, 0xae, 0x07, 0xbd, 0xc1, 0xc6, 0x7b, 0xf3, 0x36, 0x09, +}; + +static const u8 x448_WEI448_1_shared_secret[] = { + 0x07, 0xff, 0xf4, 0x18, 0x1a, 0xc6, 0xcc, 0x95, 0xec, 0x1c, 0x16, 0xa9, 0x4a, 0x0f, 0x74, 0xd1, 0x2d, 0xa2, 0x32, 0xce, 0x40, 0xa7, 0x75, 0x52, 0x28, 0x1d, 0x28, 0x2b, 0xb6, 0x0c, 0x0b, 0x56, 0xfd, 0x24, 0x64, 0xc3, 0x35, 0x54, 0x39, 0x36, 0x52, 0x1c, 0x24, 0x40, 0x30, 0x85, 0xd5, 0x9a, 0x44, 0x9a, 0x50, 0x37, 0x51, 0x4a, 0x87, 0x9d, +}; + +static const ecdh_test_case x448_WEI448_1_test_case = { + .name = "X448/WEI448 1", + .ecdh_type = X448, + .ec_str_p = &wei25519_str_params, + .our_priv_key = x448_WEI448_1_our_priv_key, + .our_priv_key_len = sizeof(x448_WEI448_1_our_priv_key), + .peer_pub_key = x448_WEI448_1_peer_pub_key, + .peer_pub_key_len = sizeof(x448_WEI448_1_peer_pub_key), + .exp_our_pub_key = x448_WEI448_1_our_pub_key, + .exp_our_pub_key_len = sizeof(x448_WEI448_1_our_pub_key), + .exp_shared_secret = x448_WEI448_1_shared_secret, + .exp_shared_secret_len = sizeof(x448_WEI448_1_shared_secret), +}; + +#endif diff --git a/crypto/libecc/src/utils/meson.build b/crypto/libecc/src/utils/meson.build new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/meson.build @@ -0,0 +1,15 @@ +utils_arith_src = files( + 'utils.c', + 'utils_rand.c', + 'print_buf.c', + 'print_fp.c', + 'print_nn.c', + ) + +utils_ec_src = files( + 'print_curves.c', + ) + +utils_sign_src = files( + 'print_keys.c', + ) diff --git a/crypto/libecc/src/utils/print_buf.c b/crypto/libecc/src/utils/print_buf.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/print_buf.c @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include +#include + +/* Print the buffer of a given size */ +void buf_print(const char *msg, const u8 *buf, u16 buflen) +{ + u32 i; + + if ((buf == NULL) || (msg == NULL)) { + goto err; + } + + ext_printf("%s: ", msg); + for (i = 0; i < (u32)buflen; i++) { + ext_printf("%02x", buf[i]); + } + ext_printf("\n"); + +err: + return; +} diff --git a/crypto/libecc/src/utils/print_curves.c b/crypto/libecc/src/utils/print_curves.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/print_curves.c @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* + * Locally convert given projective point to affine representation and + * print x and y coordinates. + */ +void ec_point_print(const char *msg, prj_pt_src_t pt) +{ + aff_pt y_aff; + int ret, iszero; + y_aff.magic = WORD(0); + + MUST_HAVE(msg != NULL, ret, err); + ret = prj_pt_iszero(pt, &iszero); EG(ret, err); + if (iszero) { + ext_printf("%s: infinity\n", msg); + goto err; + } + + ret = prj_pt_to_aff(&y_aff, pt); EG(ret, err); + ext_printf("%s", msg); + nn_print("x", &(y_aff.x.fp_val)); + ext_printf("%s", msg); + nn_print("y", &(y_aff.y.fp_val)); + +err: + aff_pt_uninit(&y_aff); + return; +} + +void ec_montgomery_point_print(const char *msg, aff_pt_montgomery_src_t pt) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = aff_pt_montgomery_check_initialized(pt); EG(ret, err); + + ext_printf("%s", msg); + nn_print("u", &(pt->u.fp_val)); + ext_printf("%s", msg); + nn_print("v", &(pt->v.fp_val)); + +err: + return; +} + +void ec_edwards_point_print(const char *msg, aff_pt_edwards_src_t pt) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = aff_pt_edwards_check_initialized(pt); EG(ret, err); + + ext_printf("%s", msg); + nn_print("x", &(pt->x.fp_val)); + ext_printf("%s", msg); + nn_print("y", &(pt->y.fp_val)); + +err: + return; +} diff --git a/crypto/libecc/src/utils/print_fp.c b/crypto/libecc/src/utils/print_fp.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/print_fp.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* Print the context of a prime field Fp */ +void fp_ctx_print(const char *msg, fp_ctx_src_t ctx) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = fp_ctx_check_initialized(ctx); EG(ret, err); + + ext_printf("%s:\n", msg); + nn_print("\t fp_ctx->p", &(ctx->p)); + ext_printf("\t fp_ctx->mpinv 0x%016lx\n", + (long unsigned int)ctx->mpinv); + nn_print("\t fp_ctx->r", &(ctx->r)); + nn_print("\t fp_ctx->r_square", &(ctx->r_square)); + +err: + return; +} + +/* Print the value of an Fp element */ +void fp_print(const char *msg, fp_src_t a) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = fp_check_initialized(a); EG(ret, err); + + nn_print(msg, &(a->fp_val)); + +err: + return; +} + +/* Print the value and Fp context of an Fp element */ +void fp_print_all(const char *msg, fp_src_t a) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = fp_check_initialized(a); EG(ret, err); + + ext_printf("%s:\n", msg); + nn_print("\t fp_val", &(a->fp_val)); + fp_ctx_print("", a->ctx); + +err: + return; +} diff --git a/crypto/libecc/src/utils/print_keys.c b/crypto/libecc/src/utils/print_keys.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/print_keys.c @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +void priv_key_print(const char *msg, const ec_priv_key *priv) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = priv_key_check_initialized(priv); EG(ret, err); + + nn_print(msg, &(priv->x)); + +err: + return; +} + +void pub_key_print(const char *msg, const ec_pub_key *pub) +{ + int ret; + + MUST_HAVE(msg != NULL, ret, err); + ret = pub_key_check_initialized(pub); EG(ret, err); + + ec_point_print(msg, &(pub->y)); + +err: + return; +} diff --git a/crypto/libecc/src/utils/print_nn.c b/crypto/libecc/src/utils/print_nn.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/print_nn.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* Print out given nn, prepending msg to the output */ +void nn_print(const char *msg, nn_src_t a) +{ + int ret, w; + + ret = nn_check_initialized(a); EG(ret, err); + MUST_HAVE(msg != NULL, ret, err); + + ext_printf("%s (%d words, i.e. %d bits): 0x", msg, a->wlen, + a->wlen * WORD_BYTES * 8); + + for (w = a->wlen - 1; w >= 0; w--) { + ext_printf(PRINTF_WORD_HEX_FMT, a->val[w]); + } + + ext_printf("\n"); + +err: + return; +} diff --git a/crypto/libecc/src/utils/utils.c b/crypto/libecc/src/utils/utils.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/utils.c @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2017 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * Jean-Pierre FLORI + * + * Contributors: + * Nicolas VIVET + * Karim KHALFALLAH + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* + * Return 1 in 'check' if first 'len' bytes of both buffers a and b are equal, 0 otherwise. + * It returns 0 if success, -1 on error. 'check' is only relevant on success. + * + * The test is done in constant time. + */ +int are_equal(const void *a, const void *b, u32 len, int *check) +{ + const u8 *la = (const u8*)a, *lb = (const u8*)b; + int ret; + u32 i; + + MUST_HAVE((a != NULL) && (b != NULL) && (check != NULL), ret, err); + + *check = 1; + for (i = 0; i < len; i++) { + (*check) &= (*la == *lb); + la++; + lb++; + } + + ret = 0; + +err: + return ret; +} + +/* + * This function is a simple (non-optimized) reimplementation of memcpy() + * Returns 0 on success, -1 on error. + */ +int local_memcpy(void *dst, const void *src, u32 n) +{ + const u8 *lsrc = (const u8*)src; + u8 *ldst = (u8*)dst; + u32 i; + int ret; + + MUST_HAVE((dst != NULL) && (src != NULL), ret, err); + + for (i = 0; i < n; i++) { + *ldst = *lsrc; + ldst++; + lsrc++; + } + + ret = 0; + +err: + return ret; +} + +/* + * This function is a simple (non-optimized) reimplementation of memset() + * Returns 0 on success, -1 on error. + */ +int local_memset(void *v, u8 c, u32 n) +{ + volatile u8 *p = (volatile u8*)v; + u32 i; + int ret; + + MUST_HAVE((v != NULL), ret, err); + + for (i = 0; i < n; i++) { + *p = c; + p++; + } + + ret = 0; + +err: + return ret; +} + +/* + * Return 1 in 'check' if strings are equal, 0 otherwise. + * It returns 0 if success, -1 on error. 'check' is only relevant on success. + * + */ +int are_str_equal(const char *s1, const char *s2, int *check) +{ + const char *ls1 = s1, *ls2 = s2; + int ret; + + MUST_HAVE((s1 != NULL) && (s2 != NULL) && (check != NULL), ret, err); + + while (*ls1 && (*ls1 == *ls2)) { + ls1++; + ls2++; + } + + (*check) = (*ls1 == *ls2); + + ret = 0; + +err: + return ret; +} + +/* + * Return 1 in 'check' if strings are equal up to maxlen, 0 otherwise. + * It returns 0 if success, -1 on error. 'check' is only relevant on success. + * + */ +int are_str_equal_nlen(const char *s1, const char *s2, u32 maxlen, int *check) +{ + const char *ls1 = s1, *ls2 = s2; + u32 i = 0; + int ret; + + MUST_HAVE((s1 != NULL) && (s2 != NULL) && (check != NULL), ret, err); + + while (*ls1 && (*ls1 == *ls2) && (i < maxlen)) { + ls1++; + ls2++; + i++; + } + + (*check) = (*ls1 == *ls2); + ret = 0; + +err: + return ret; +} + + + +/* + * This function is a simple (non-optimized) reimplementation of strlen() + * Returns the lenth in 'len'. + * It returns 0 if success, -1 on error. 'len' is only relevant on success. + */ +int local_strlen(const char *s, u32 *len) +{ + u32 i = 0; + int ret; + + MUST_HAVE((s != NULL) && (len != NULL), ret, err); + + while (s[i]) { + i++; + } + (*len) = i; + + ret = 0; + +err: + return ret; +} + +/* + * This function is a simple (non-optimized) reimplementation of strnlen() + * Returns the lenth in 'len'. + * It returns 0 if success, -1 on error. 'len' is only relevant on success. + */ +int local_strnlen(const char *s, u32 maxlen, u32 *len) +{ + u32 i = 0; + int ret; + + MUST_HAVE((s != NULL) && (len != NULL), ret, err); + + while ((i < maxlen) && s[i]) { + i++; + } + (*len) = i; + + ret = 0; + +err: + return ret; +} + +/* + * This functin is a simple (non-optimized) reimplementation of strncpy() + */ +int local_strncpy(char *dst, const char *src, u32 n) +{ + u32 i; + int ret; + + MUST_HAVE((dst != NULL) && (src != NULL), ret, err); + + for (i = 0; (i < n) && src[i]; i++) { + dst[i] = src[i]; + } + for (; i < n; i++) { + dst[i] = 0; + } + + ret = 0; +err: + return ret; +} + +/* + * This functin is a simple (non-optimized) reimplementation of strncat() + */ +int local_strncat(char *dst, const char *src, u32 n) +{ + u32 dst_len, i; + int ret; + + MUST_HAVE((dst != NULL) && (src != NULL), ret, err); + + ret = local_strlen(dst, &dst_len); EG(ret, err); + for (i = 0; (i < n) && src[i]; i++) { + dst[dst_len + i] = src[i]; + } + dst[dst_len + i] = 0; + + ret = 0; +err: + return ret; +} diff --git a/crypto/libecc/src/utils/utils_rand.h b/crypto/libecc/src/utils/utils_rand.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/utils_rand.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2023 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#ifndef __UTILS_RAND_H__ +#define __UTILS_RAND_H__ + +#include +#include "../external_deps/rand.h" + +/* WARNING: use with care, this is useful when "fast" but somehow unsafe + * random must be provided. + */ +ATTRIBUTE_WARN_UNUSED_RET int get_unsafe_random(unsigned char *buf, u16 len); + +#endif /* __UTILS_RAND_H__ */ diff --git a/crypto/libecc/src/utils/utils_rand.c b/crypto/libecc/src/utils/utils_rand.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/utils/utils_rand.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2023 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ +#include + +/* Unsafe random source: + * Initial seeding is performed using good entropy, then + * a congruential linear system is used. + */ +static u64 seed = 0; +int get_unsafe_random(unsigned char *buf, u16 len) +{ + int ret; + u64 a, b; + u16 i, j; + a = (u64)2862933555777941757; + b = (u64)3037000493; + + if(seed == 0){ + ret = get_random((u8*)&seed, sizeof(seed)); + if(ret){ + ret = -1; + goto err; + } + } + + i = 0; + while(i < len){ + /* Use a congruential linear generator */ + seed = ((a * seed) + b); + + for(j = 0; j < sizeof(seed); j++){ + if((i + j) < len){ + buf[i + j] = (u8)((seed >> (j * 8)) & 0xff); + } + } + i = (u16)(i + sizeof(seed)); + } + + ret = 0; + +err: + return ret; +} diff --git a/crypto/libecc/src/wycheproof_tests/Makefile b/crypto/libecc/src/wycheproof_tests/Makefile new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/wycheproof_tests/Makefile @@ -0,0 +1,17 @@ +ROOT_DIR=../../ +ROOT_DIR=../.. +BUILD_DIR=$(ROOT_DIR)/build +include $(ROOT_DIR)/common.mk + +ifeq ($(VERBOSE_ACCEPTABLE), 1) +CFLAGS += -DVERBOSE_ACCEPTABLE +endif + +CFLAGS += -I$(ROOT_DIR)/include/ + +all: + $(CC) $(BIN_CFLAGS) libecc_wycheproof.c $(ROOT_DIR)/src/external_deps/print.c $(ROOT_DIR)/src/external_deps/rand.c $(LIBSIGN) $(BIN_LDFLAGS) -o libecc_wycheproof + +clean: + @rm -f libecc_wycheproof + diff --git a/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.h b/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.h new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.h @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +/* + * Source code for handling tests imported from the wycheproof project: + * https://github.com/google/wycheproof + * + * As this project primarily targets java cryptographic libraries, the + * json test files have been parsed to generate libecc friendly test cases. + * + * NOTE: we skip here all the tests related to ASN.1 format errors as libecc + * does not handle ASN.1 parsing at all. This explains the "skipped" tests from + * the wycheproof project. + * + */ + +#include + +typedef struct { + /* Test case name */ + const char *name; + + ec_alg_type sig_alg; + + hash_alg_type hash; + + /* Curve params */ + const ec_str_params *curve; + + const unsigned char *pubkey; + unsigned int pubkeylen; + + const unsigned char *msg; + unsigned int msglen; + + const unsigned char *sig; + unsigned int siglen; + + int result; + + const char *comment; +} wycheproof_ecdsa_test; + +typedef struct { + /* Test case name */ + const char *name; + + ec_alg_type sig_alg; + + hash_alg_type hash; + + /* Curve params */ + const ec_str_params *curve; + + const unsigned char *pubkey; + unsigned int pubkeylen; + + const unsigned char *privkey; + unsigned int privkeylen; + + const unsigned char *msg; + unsigned int msglen; + + const unsigned char *sig; + unsigned int siglen; + + int result; + + const char *comment; +} wycheproof_eddsa_test; + +typedef struct { + /* Test case name */ + const char *name; + + ec_alg_type xdh_alg; + + /* Curve params */ + const ec_str_params *curve; + + const unsigned char *peerpubkey; + unsigned int peerpubkeylen; + + const unsigned char *ourpubkey; + unsigned int ourpubkeylen; + + const unsigned char *privkey; + unsigned int privkeylen; + + const unsigned char *sharedsecret; + unsigned int sharedsecretlen; + + int result; + + const char *comment; +} wycheproof_xdh_test; + +typedef struct { + /* Test case name */ + const char *name; + + ec_alg_type ecdh_alg; + + /* Curve params */ + const ec_str_params *curve; + + const unsigned char *peerpubkey; + unsigned int peerpubkeylen; + int compressed; + + const unsigned char *ourpubkey; + unsigned int ourpubkeylen; + + const unsigned char *privkey; + unsigned int privkeylen; + + const unsigned char *sharedsecret; + unsigned int sharedsecretlen; + + int result; + + const char *comment; +} wycheproof_ecdh_test; + +typedef struct { + /* Test case name */ + const char *name; + + hash_alg_type hash; + + const unsigned char *key; + unsigned int keylen; + + const unsigned char *msg; + unsigned int msglen; + + const unsigned char *tag; + unsigned int taglen; + + int result; + + const char *comment; +} wycheproof_hmac_test; diff --git a/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.c b/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.c new file mode 100644 --- /dev/null +++ b/crypto/libecc/src/wycheproof_tests/libecc_wycheproof.c @@ -0,0 +1,838 @@ +/* + * Copyright (C) 2021 - This file is part of libecc project + * + * Authors: + * Ryad BENADJILA + * Arnaud EBALARD + * + * This software is licensed under a dual BSD and GPL v2 license. + * See LICENSE file at the root folder of the project. + */ + +/* + * Source code for handling tests imported from the wycheproof project: + * https://github.com/google/wycheproof + * + * As this project primarily targets java cryptographic libraries, the + * json test files have been parsed to generate libecc friendly test cases. + * + * NOTE: we skip here all the tests related to ASN.1 format errors as libecc + * does not handle ASN.1 parsing at all. This explains the "skipped" tests from + * the wycheproof project. + * + */ +#include "libecc_wycheproof.h" + +/* Parallelize self tests? */ +#ifdef WITH_OPENMP_SELF_TESTS +/* No openmp without stdlib ... */ +#ifndef WITH_STDLIB +#error "Sorry: no possible self tests parallelization (OpenMP) without stdlib! Please use WITH_STDLIB" +#endif +#include +#include +static omp_lock_t global_lock; +static volatile u8 global_lock_initialized = 0; +#define OPENMP_LOCK() do { \ + if(!global_lock_initialized){ \ + omp_init_lock(&global_lock); \ + global_lock_initialized = 1; \ + } \ + omp_set_lock(&global_lock); \ +} while(0) +#define OPENMP_EG(ret, err) do { \ + if(ret){ \ + ext_printf("OpenMP abort following error ... %s:%d\n", __FILE__, __LINE__); \ + exit(-1); \ + } \ +} while(0) +#define OPENMP_MUST_HAVE(cnd, ret, err) do { \ + ret = !!(cnd); \ + ret = -((~ret) & 1); \ + OPENMP_EG(ret, err); \ +} while(0) +#define OPENMP_UNLOCK() do { \ + omp_unset_lock(&global_lock); \ +} while(0) +#else +#define OPENMP_LOCK() +#define OPENMP_UNLOCK() +#define OPENMP_EG(ret, err) do { \ + EG(ret, err); \ +} while(0) +#define OPENMP_MUST_HAVE(cnd, ret, err) do { \ + MUST_HAVE(cnd, ret, err); \ +} while(0) +#endif + +#include "libecc_wycheproof_tests.h" + +/* Check all ECDSA test vectors */ +static unsigned int ecdsa_acceptable_invalid = 0; +static unsigned int ecdsa_acceptable_valid = 0; +static unsigned int ecdsa_all_performed = 0; +static int check_wycheproof_ecdsa(void) +{ +#if defined(WITH_SIG_ECDSA) + int ret; + unsigned int i; + +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for(i = 0; i < NUM_WYCHEPROOF_ECDSA_TESTS; i++){ + const wycheproof_ecdsa_test *t = wycheproof_ecdsa_all_tests[i]; + ec_pub_key pub_key; + ec_params params; + + if (t == NULL){ + continue; + } + + ecdsa_all_performed++; + ret = local_memset(&pub_key, 0, sizeof(pub_key)); OPENMP_EG(ret, err); + ret = local_memset(¶ms, 0, sizeof(params)); OPENMP_EG(ret, err); + + /* Import EC params from test case */ + ret = import_params(¶ms, t->curve); + if (ret) { + ext_printf("Error: ECDSA tests error importing params\n"); + ret = -1; + OPENMP_EG(ret, err); + } + + /* Import the public key */ + ret = ec_pub_key_import_from_aff_buf(&pub_key, ¶ms, t->pubkey, (u8)(t->pubkeylen), t->sig_alg); + if (ret) { + ext_printf("Error: ECDSA tests error importing public key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + + + ret = ec_verify(t->sig, (u8)(t->siglen), &pub_key, t->msg, t->msglen, t->sig_alg, t->hash, NULL, 0); + /* Valid result */ + if ((t->result == 1) && ret) { + ext_printf("[-] Error when verifying ECDSA test %d / %s (verification NOK while must be valid)\n", i, t->name); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Invalid result */ + if ((t->result == -1) && !ret) { + ext_printf("[-] Error when verifying ECDSA test %d / %s (verification OK while must be invalid)\n", i, t->name); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Acceptable result: only trigger an informational warning */ + if (t->result == 0) { + if(ret){ + ecdsa_acceptable_valid++; + } + else{ + ecdsa_acceptable_invalid++; + } +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] ECDSA test %d / %s (verification %d while acceptable)\n", i, t->name, ret); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + } + } + + ret = 0; +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +#else + return 0; +#endif +} + +/* Check all EDDSA test vectors */ +static unsigned int eddsa_acceptable_invalid = 0; +static unsigned int eddsa_acceptable_valid = 0; +static unsigned int eddsa_all_performed = 0; +static int check_wycheproof_eddsa(void) +{ +#if defined(WITH_SIG_EDDSA25519) || defined(WITH_SIG_EDDSA448) + int ret; + unsigned int i; + +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for(i = 0; i < NUM_WYCHEPROOF_EDDSA_TESTS; i++){ + const wycheproof_eddsa_test *t = wycheproof_eddsa_all_tests[i]; + ec_pub_key pub_key; + ec_pub_key pub_key_check; + ec_priv_key priv_key; + ec_params params; + int check; + u8 exported_pub_key[EDDSA_MAX_PUB_KEY_ENCODED_LEN]; + + if (t == NULL){ + continue; + } + + OPENMP_LOCK(); + eddsa_all_performed++; + OPENMP_UNLOCK(); + ret = local_memset(&pub_key, 0, sizeof(pub_key)); OPENMP_EG(ret, err); + ret = local_memset(&priv_key, 0, sizeof(priv_key)); OPENMP_EG(ret, err); + ret = local_memset(¶ms, 0, sizeof(params)); OPENMP_EG(ret, err); + + /* Import EC params from test case */ + ret = import_params(¶ms, t->curve); + if (ret) { + ext_printf("Error: EDDSA tests error importing params\n"); + ret = -1; + OPENMP_EG(ret, err); + } + + /* Import the public key */ + ret = eddsa_import_pub_key(&pub_key, t->pubkey, (u8)(t->pubkeylen), ¶ms, t->sig_alg); + if (ret) { + ext_printf("Error: EDDSA tests error importing public key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + /* Import the private key */ + ret = eddsa_import_priv_key(&priv_key, t->privkey, (u8)(t->privkeylen), ¶ms, t->sig_alg); + if (ret) { + ext_printf("Error: EDDSA tests error importing private key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + /* Derive private to public */ + ret = eddsa_init_pub_key(&pub_key_check, &priv_key); + if (ret) { + ext_printf("Error: EDDSA tests error deriving private to public key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + /* Check */ + ret = eddsa_export_pub_key(&pub_key, exported_pub_key, (u8)(t->pubkeylen)); + if(ret){ + ext_printf("Error: EDDSA tests error when exporting public key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + /* */ + ret = are_equal(t->pubkey, &exported_pub_key, (u8)(t->pubkeylen), &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("Error: EDDSA tests error when checking public key from private\n"); + ret = -1; + OPENMP_EG(ret, err); + } + + ret = ec_verify(t->sig, (u8)(t->siglen), &pub_key, t->msg, t->msglen, t->sig_alg, t->hash, NULL, 0); + /* Valid result */ + if ((t->result == 1) && ret) { + ext_printf("[-] Error when verifying EDDSA test %d / %s (verification NOK while must be valid)\n", i, t->name); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Invalid result */ + if ((t->result == -1) && !ret) { + ext_printf("[-] Error when verifying EDDSA test %d / %s (verification OK while must be invalid)\n", i, t->name); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Acceptable result: only trigger an informational warning */ + if (t->result == 0) { + OPENMP_LOCK(); + if(ret){ + eddsa_acceptable_valid++; + } + else{ + eddsa_acceptable_invalid++; + } +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] EDDSA test %d / %s (verification %d while acceptable)\n", i, t->name, ret); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + OPENMP_UNLOCK(); + } + } + + ret = 0; +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +#else + return 0; +#endif +} + +/* Check all XDH test vectors */ +static unsigned int xdh_acceptable_invalid = 0; +static unsigned int xdh_acceptable_valid = 0; +static unsigned int xdh_all_performed = 0; +static int check_wycheproof_xdh(void) +{ +#if defined(WITH_X25519) || defined(WITH_X448) + int ret; + unsigned int i; + +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for(i = 0; i < NUM_WYCHEPROOF_XDH_TESTS; i++){ + int check; + const wycheproof_xdh_test *t = wycheproof_xdh_all_tests[i]; + unsigned int alglen = 0; + /* Max size buffer */ + u8 pubkey_check[X448_SIZE]; + u8 sharedsecret_check[X448_SIZE]; + + if (t == NULL){ + continue; + } + + OPENMP_LOCK(); + xdh_all_performed++; + OPENMP_UNLOCK(); + +#if defined(WITH_X25519) + if(t->xdh_alg == X25519){ + OPENMP_MUST_HAVE(((t->curve) == &wei25519_str_params), ret, err); + alglen = X25519_SIZE; + } +#endif +#if defined(WITH_X448) + if(t->xdh_alg == X448){ + OPENMP_MUST_HAVE(((t->curve) == &wei448_str_params), ret, err); + alglen = X448_SIZE; + } +#endif + if(alglen == 0){ + ext_printf("Error: XDH tests error, unkown algorithm\n"); + ret = -1; + OPENMP_EG(ret, err); + } + /* Reject bad lengths */ + if(t->privkeylen != alglen){ + if(t->result != -1){ + ext_printf("[-] Error: XDH tests error, unkown private key length %d with valid result\n", t->privkeylen); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + else{ + continue; + } + } + if(t->peerpubkeylen != alglen){ + if(t->result != -1){ + ext_printf("[-] Error: XDH tests error, unkown peer public key length %d with valid result\n", t->peerpubkeylen); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + else{ + continue; + } + } + if(t->sharedsecretlen != alglen){ + if(t->result != -1){ + ext_printf("[-] Error: XDH tests error, unkown shared secret length %d with valid result\n", t->sharedsecretlen); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + else{ + continue; + } + } + if((t->ourpubkeylen != 0) && (t->ourpubkeylen != alglen)){ + if(t->result != -1){ + ext_printf("[-] Error: XDH tests error, unkown our public key length %d with valid result\n", t->ourpubkeylen); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + else{ + continue; + } + } +#if defined(WITH_X25519) + if(t->xdh_alg == X25519){ + /* Derive our public key */ + ret = x25519_init_pub_key(t->privkey, pubkey_check); + if(ret){ + ext_printf("[-] Error: XDH tests error when deriving private key to public\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + if(t->ourpubkeylen != 0){ + /* Check public key against the test one */ + ret = are_equal(t->ourpubkey, pubkey_check, alglen, &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("[-] Error: XDH tests error when checking our public key\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + } + /* Derive the shared secret */ + ret = x25519_derive_secret(t->privkey, t->peerpubkey, sharedsecret_check); + if(ret){ + /* Handle "acceptable" results here (e.g. public key on twist) */ + if(t->result == 0){ + OPENMP_LOCK(); + xdh_acceptable_invalid++; +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] XDH test %d / %s (shared secret derivation NOK while acceptable)\n", i, t->name); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + OPENMP_UNLOCK(); + continue; + } + ext_printf("[-] Error: XDH tests error when deriving shared secret\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + if(t->result == -1){ + ext_printf("[-] Error: XDH tests is OK while invalid\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Check the shared secret */ + ret = are_equal(t->sharedsecret, sharedsecret_check, alglen, &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("[-] Error: XDH tests error when checking shared secret\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + } +#endif +#if defined(WITH_X448) + if(t->xdh_alg == X448){ + /* Derive our public key */ + ret = x448_init_pub_key(t->privkey, pubkey_check); + if(ret){ + ext_printf("[-] Error: XDH tests error when deriving private key to public\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + if(t->ourpubkeylen != 0){ + /* Check public key against the test one */ + ret = are_equal(t->ourpubkey, pubkey_check, alglen, &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("[-] Error: XDH tests error when checking our public key\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + } + /* Derive the shared secret */ + ret = x448_derive_secret(t->privkey, t->peerpubkey, sharedsecret_check); + if(ret){ + /* Handle "acceptable" results here (e.g. public key on twist) */ + if(t->result == 0){ + OPENMP_LOCK(); + xdh_acceptable_invalid++; +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] XDH test %d / %s (shared secret derivation NOK while acceptable)\n", i, t->name); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + OPENMP_UNLOCK(); + continue; + } + ext_printf("[-] Error: XDH tests error when deriving shared secret\n"); + ext_printf(" (comment = %s)\n", t->comment); + OPENMP_EG(ret, err); + } + if(t->result == -1){ + ext_printf("[-] Error: XDH tests is OK while invalid\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Check the shared secret */ + ret = are_equal(t->sharedsecret, sharedsecret_check, alglen, &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("[-] Error: XDH tests error when checking shared secret\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + + } +#endif + /* Log the acceptable results */ + if (t->result == 0) { + OPENMP_LOCK(); + xdh_acceptable_valid++; +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] XDH test %d / %s (shared secret OK while acceptable)\n", i, t->name); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + OPENMP_UNLOCK(); + } + } + ret = 0; +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +#else + return 0; +#endif +} + +/* Point decompression routine */ +static int uncompress_ecc_point(const ec_params *params, const u8 *peerpubkey, u8 peerpubkeylen, u8 *serialized_pub_key, u8 serialized_pub_key_size, int compression) +{ + int ret, sign, check; + fp x, tmp; + fp_t y; + x.magic = tmp.magic = 0; + + MUST_HAVE((params != NULL) && (peerpubkey != NULL) && (serialized_pub_key != NULL), ret, err); + + /* Uncompressed point size should be twice the x coordinate */ + MUST_HAVE((serialized_pub_key_size == (2 * peerpubkeylen)), ret, err); + + /* Compression is either 02 or 03 */ + MUST_HAVE(((compression == 0x02) || (compression == 0x03)), ret, err); + + /* Import our x coordinate */ + ret = fp_init_from_buf(&x, &(params->ec_fp), peerpubkey, peerpubkeylen); EG(ret, err); + ret = fp_init(&tmp, &(params->ec_fp)); EG(ret, err); + /* Compute the Weierstrass equation y^2 = x^3 + ax + b solutions */ + ret = aff_pt_y_from_x(&tmp, &x, &x, &(params->ec_curve)); EG(ret, err); + + /* Choose the square root depending on the compression information */ + sign = (compression - 2); + + ret = fp_cmp(&x, &tmp, &check); EG(ret, err); + + y = ((check > 0) == sign) ? &x : &tmp; + + /* Export the point to our buffer */ + ret = local_memcpy(&serialized_pub_key[0], &peerpubkey[0], (serialized_pub_key_size / 2)); EG(ret, err); + ret = fp_export_to_buf(&serialized_pub_key[(serialized_pub_key_size / 2)], (serialized_pub_key_size / 2), y); + +err: + fp_uninit(&x); + fp_uninit(&tmp); + PTR_NULLIFY(y); + + return ret; +} + +/* Check all ECDH test vectors */ +static unsigned int ecdh_acceptable_invalid = 0; +static unsigned int ecdh_acceptable_valid = 0; +static unsigned int ecdh_all_performed = 0; +static int check_wycheproof_ecdh(void) +{ +#if defined(WITH_ECCCDH) + int ret; + unsigned int i; + +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for(i = 0; i < NUM_WYCHEPROOF_ECDH_TESTS; i++){ + int check; + const wycheproof_ecdh_test *t = wycheproof_ecdh_all_tests[i]; + ec_pub_key peerpub_key; + ec_pub_key ourpub_key; + ec_pub_key ourpub_key_check; + ec_priv_key priv_key; + ec_params params; + u8 sharedsecret_check[EC_PRIV_KEY_MAX_SIZE]; + u8 sharedsecretsize; + u8 serialized_pub_key[EC_PUB_KEY_MAX_SIZE]; + u8 serialized_pub_key_check[EC_PUB_KEY_MAX_SIZE]; + u8 serialized_pub_key_size; + + if (t == NULL){ + continue; + } + + OPENMP_LOCK(); + ecdh_all_performed++; + OPENMP_UNLOCK(); + + ret = local_memset(&peerpub_key, 0, sizeof(peerpub_key)); OPENMP_EG(ret, err); + ret = local_memset(&ourpub_key, 0, sizeof(ourpub_key)); OPENMP_EG(ret, err); + ret = local_memset(&ourpub_key_check, 0, sizeof(ourpub_key_check)); OPENMP_EG(ret, err); + ret = local_memset(&priv_key, 0, sizeof(priv_key)); OPENMP_EG(ret, err); + ret = local_memset(¶ms, 0, sizeof(params)); OPENMP_EG(ret, err); + ret = local_memset(sharedsecret_check, 0, sizeof(sharedsecret_check)); OPENMP_EG(ret, err); + ret = local_memset(serialized_pub_key, 0, sizeof(serialized_pub_key)); OPENMP_EG(ret, err); + + /* Import EC params from test case */ + ret = import_params(¶ms, t->curve); + if (ret) { + ext_printf("Error: ECDH tests error importing params\n"); + ret = -1; + OPENMP_EG(ret, err); + } + + /* Get the sizes */ + ret = ecccdh_shared_secret_size(¶ms, &sharedsecretsize); + if (ret) { + ext_printf("Error: ECDH tests error getting shared secret size\n"); + ret = -1; + OPENMP_EG(ret, err); + } + OPENMP_MUST_HAVE((sharedsecretsize <= sizeof(sharedsecret_check)), ret, err); + ret = ecccdh_serialized_pub_key_size(¶ms, &serialized_pub_key_size); + if (ret) { + ext_printf("Error: ECDH tests error getting serialized public key size\n"); + ret = -1; + OPENMP_EG(ret, err); + } + OPENMP_MUST_HAVE((serialized_pub_key_size <= sizeof(serialized_pub_key)), ret, err); + OPENMP_MUST_HAVE((serialized_pub_key_size <= sizeof(serialized_pub_key_check)), ret, err); + + /* Import the private key */ + ret = ec_priv_key_import_from_buf(&priv_key, ¶ms, t->privkey, (u8)(t->privkeylen), t->ecdh_alg); + if (ret) { + ext_printf("Error: ECDH tests error importing private key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + + if(t->ourpubkeylen != 0){ + /* Import our public key if it exists */ + ret = ec_pub_key_import_from_aff_buf(&ourpub_key, ¶ms, t->ourpubkey, (u8)(t->ourpubkeylen), t->ecdh_alg); + if (ret && (t->result >= 0)) { + ext_printf("[-] Error: ECDH tests error when importing our public key\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Derive our private key to public */ + ret = ecccdh_init_pub_key(&ourpub_key_check, &priv_key); + if (ret) { + ext_printf("Error: ECDH tests error deriving our private key to public\n"); + ret = -1; + OPENMP_EG(ret, err); + } + /* Check if we get the same public key by serializing them */ + ret = ecccdh_serialize_pub_key(&ourpub_key, serialized_pub_key, serialized_pub_key_size); + if (ret){ + ext_printf("Error: ECDH tests error serializing public key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + ret = ecccdh_serialize_pub_key(&ourpub_key_check, serialized_pub_key_check, serialized_pub_key_size); + if (ret){ + ext_printf("Error: ECDH tests error serializing public key\n"); + ret = -1; + OPENMP_EG(ret, err); + } + ret = are_equal(serialized_pub_key, serialized_pub_key_check, serialized_pub_key_size, &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("[-] Error: ECDH tests error when checking our public key\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + } + + /* Do we have to uncompress our point? */ + if(t->compressed > 0){ + /* Uncompress the point */ + ret = uncompress_ecc_point(¶ms, t->peerpubkey, (u8)(t->peerpubkeylen), serialized_pub_key, serialized_pub_key_size, t->compressed); + if ((ret) && (t->result >= 0)) { + ext_printf("[-] Error: ECDH tests error when uncompressing public key\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + } + else{ + /* No point compression is used, copy our raw buffer as public key */ + if((t->peerpubkeylen != serialized_pub_key_size) && (t->result >= 0)){ + ext_printf("[-] Error: ECDH tests error when checking our public key size, got %d instead of %d\n", t->peerpubkeylen, serialized_pub_key_size); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + ret = local_memcpy(serialized_pub_key, t->peerpubkey, serialized_pub_key_size); OPENMP_EG(ret, err); + } + /* Now derive the shared secret */ + ret = ecccdh_derive_secret(&priv_key, serialized_pub_key, serialized_pub_key_size, sharedsecret_check, sharedsecretsize); + if ((ret) && (t->result >= 0)) { + ext_printf("[-] Error: ECDH tests error when deriving secret while acceptable or valid\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + if((!ret) && (t->result == -1)){ + ext_printf("Error: ECDH tests error, secret derived OK while invalid\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + if(t->result == -1){ + continue; + } + if(sharedsecretsize != t->sharedsecretlen){ + ext_printf("Error: ECDH tests error, bad shared secret size %d instead of %d\n", sharedsecretsize, t->sharedsecretlen); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Compare */ + ret = are_equal(sharedsecret_check, t->sharedsecret, sharedsecretsize, &check); OPENMP_EG(ret, err); + if(!check){ + ext_printf("[-] Error: ECDH tests error when checking the computed shared secret, they differ\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Log the acceptable results */ + if (t->result == 0) { + OPENMP_LOCK(); + ecdh_acceptable_valid++; +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] ECDH test %d / %s (shared secret OK while acceptable)\n", i, t->name); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + OPENMP_UNLOCK(); + } + + } + ret = 0; +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +#else + return 0; +#endif +} + +/* Check all HMAC test vectors */ +static unsigned int hmac_acceptable_invalid = 0; +static unsigned int hmac_acceptable_valid = 0; +static unsigned int hmac_all_performed = 0; +static int check_wycheproof_hmac(void) +{ +#if defined(WITH_HMAC) + int ret; + unsigned int i; + +#ifdef WITH_OPENMP_SELF_TESTS + #pragma omp parallel + #pragma omp for schedule(static, 1) nowait +#endif + for(i = 0; i < NUM_WYCHEPROOF_HMAC_TESTS; i++){ + int check; + const wycheproof_hmac_test *t = wycheproof_hmac_all_tests[i]; + u8 hmac_res[MAX_DIGEST_SIZE]; + u8 hlen; + + if (t == NULL){ + continue; + } + + OPENMP_LOCK(); + hmac_all_performed++; + OPENMP_UNLOCK(); + + ret = local_memset(&hmac_res, 0, sizeof(hmac_res)); OPENMP_EG(ret, err); + + hlen = sizeof(hmac_res); + ret = hmac(t->key, t->keylen, t->hash, t->msg, t->msglen, hmac_res, &hlen); + if (ret) { + ext_printf("[-] Error: HMAC tests error when performin HMAC\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + if((hlen < t->taglen) && (t->result >= 0)){ + ext_printf("[-] Error: HMAC tests error: size error %d < %d\n", hlen, t->taglen); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Compare */ + ret = are_equal(hmac_res, t->tag, t->taglen, &check); OPENMP_EG(ret, err); + if((!check) && (t->result >= 0)){ + ext_printf("[-] Error: HMAC tests error when checking the computed tag, they differ\n"); + ext_printf(" (comment = %s)\n", t->comment); + ret = -1; + OPENMP_EG(ret, err); + } + /* Log the acceptable results */ + if (t->result == 0) { + OPENMP_LOCK(); + hmac_acceptable_valid++; +#ifdef VERBOSE_ACCEPTABLE + ext_printf("\t[~] HMAC test %d / %s (shared secret OK while acceptable)\n", i, t->name); + ext_printf("\t (comment = %s)\n", t->comment); +#endif + OPENMP_UNLOCK(); + } + } + ret = 0; +#ifndef WITH_OPENMP_SELF_TESTS +err: +#endif + return ret; +#else + return 0; +#endif +} + +int main(int argc, char *argv[]) +{ + FORCE_USED_VAR(argc); + FORCE_USED_VAR(argv); + + /**********************/ + ext_printf("==== Checking ECDH =========== Imported = %d, Skipped = %d (valid = %d, invalid = %d, acceptable = %d)\n", NUM_WYCHEPROOF_ECDH_TESTS_IMPORTED, NUM_WYCHEPROOF_ECDH_TESTS_SKIPPED, NUM_WYCHEPROOF_ECDH_TESTS_VALID, NUM_WYCHEPROOF_ECDH_TESTS_INVALID, NUM_WYCHEPROOF_ECDH_TESTS_ACCEPTABLE); + if(check_wycheproof_ecdh()){ + goto err; + } + ext_printf("[+][%d] All ECDH tests went OK! (%d acceptable/valid, %d acceptable/invalid)\n", ecdh_all_performed, ecdh_acceptable_valid, ecdh_acceptable_invalid); + /**********************/ + ext_printf("==== Checking XDH =========== Imported = %d, Skipped = %d (valid = %d, invalid = %d, acceptable = %d)\n", NUM_WYCHEPROOF_XDH_TESTS_IMPORTED, NUM_WYCHEPROOF_XDH_TESTS_SKIPPED, NUM_WYCHEPROOF_XDH_TESTS_VALID, NUM_WYCHEPROOF_XDH_TESTS_INVALID, NUM_WYCHEPROOF_XDH_TESTS_ACCEPTABLE); + if(check_wycheproof_xdh()){ + goto err; + } + ext_printf("[+][%d] All XDH tests went OK! (%d acceptable/valid, %d acceptable/invalid)\n", xdh_all_performed, xdh_acceptable_valid, xdh_acceptable_invalid); + /**********************/ + ext_printf("==== Checking ECDSA =========== Imported = %d, Skipped = %d (valid = %d, invalid = %d, acceptable = %d)\n", NUM_WYCHEPROOF_ECDSA_TESTS_IMPORTED, NUM_WYCHEPROOF_ECDSA_TESTS_SKIPPED, NUM_WYCHEPROOF_ECDSA_TESTS_VALID, NUM_WYCHEPROOF_ECDSA_TESTS_INVALID, NUM_WYCHEPROOF_ECDSA_TESTS_ACCEPTABLE); + if(check_wycheproof_ecdsa()){ + goto err; + } + ext_printf("[+][%d] All ECDSA tests went OK! (%d acceptable/valid, %d acceptable/invalid)\n", ecdsa_all_performed, ecdsa_acceptable_valid, ecdsa_acceptable_invalid); + /**********************/ + ext_printf("==== Checking EDDSA =========== Imported = %d, Skipped = %d (valid = %d, invalid = %d, acceptable = %d)\n", NUM_WYCHEPROOF_EDDSA_TESTS_IMPORTED, NUM_WYCHEPROOF_EDDSA_TESTS_SKIPPED, NUM_WYCHEPROOF_EDDSA_TESTS_VALID, NUM_WYCHEPROOF_EDDSA_TESTS_INVALID, NUM_WYCHEPROOF_EDDSA_TESTS_ACCEPTABLE); + if(check_wycheproof_eddsa()){ + goto err; + } + ext_printf("[+][%d] All EDDSA tests went OK! (%d acceptable/valid, %d acceptable/invalid)\n", eddsa_all_performed, eddsa_acceptable_valid, eddsa_acceptable_invalid); + /**********************/ + ext_printf("==== Checking HMAC =========== Imported = %d, Skipped = %d (valid = %d, invalid = %d, acceptable = %d)\n", NUM_WYCHEPROOF_HMAC_TESTS_IMPORTED, NUM_WYCHEPROOF_HMAC_TESTS_SKIPPED, NUM_WYCHEPROOF_HMAC_TESTS_VALID, NUM_WYCHEPROOF_HMAC_TESTS_INVALID, NUM_WYCHEPROOF_HMAC_TESTS_ACCEPTABLE); + if(check_wycheproof_hmac()){ + goto err; + } + ext_printf("[+][%d] All HMAC tests went OK! (%d acceptable/valid, %d acceptable/invalid)\n", hmac_all_performed, hmac_acceptable_valid, hmac_acceptable_invalid); + +err: + return 0; +} diff --git a/crypto/libecc/src/wycheproof_tests/libecc_wycheproof_tests.h b/crypto/libecc/src/wycheproof_tests/libecc_wycheproof_tests.h new file mode 100644 index 0000000000000000000000000000000000000000..657a3016f27f59e5279510f97e8e649746031b64 GIT binary patch literal 49378520 zc%1D0dynKumZt~*t@#wOEnw$@zBn(&%StPtwL98ryt_S%=~*oVLDQhS)2l+0m6?i+ z?C#Qw_q)IDd``qU;bc{WxiM%YlR&`{<>}6wnV+AX+hf1^ySsmGzdU}qyZ_#pMLnw zcb`6e_o4mGpPxVVw|{kaKH&H5-RaYZ51;;g|M9!KKb?>B>EX-W_syT$yM5b!ylemR z_|P1l&-Hlz`2YRo)5p8h{fG8^As_$Uebvp-+#hvv_BpC0a-@6J!{c=!0}a?O8!xPLqk(=YG7d^$b;xp`>sj`v?4AMW>G zAMNupPx0=2@Afn2ht_<&`^9hnaQC}E{NnC^{p}xq_lIBJ{rBJf^FRFKfBWaV|Nh&5 z`lsLi{-1yM_kXzi$A7x}5C8c4|Mlb{`lql=KRMWKPOp{{qZs#f8EXN z%aQ-b`_tXAJ>7q7kAHJ{Hh=uX@BY&tyTkwO-M{^}FaPO3{I`Gl-~axP|LZ^f_IJPk zumAXu|M_z8e@glv`-k8D;e42X`0e?h|MsuGT<+{}o>L#s7ytF+m;3L|pSwGJ-#lDj z>*p8Oy8Gkjuls*(fBZlHue*PL_y7H?|6%tRSN`&D_m{N2yf*vGYngSg#pU(5yS%!z z`}=fxJ>-|yUEO`F`{c3vR_ZRVS#FNjedf^p>*;WLZM%QnSKTqY*QEPo(w!x5y4UWL zRd=qeyS78E|5|pR+;!hNbZ0zvpWk(VH{J28q&rJ@&HL^yYObw&XV-nc=#HOs$2@X( z$L_n`=hN=mitg^RgWhB5^uChrTY2}+q5Hcy|NU40zyB#yIPP*e4j4&hF9j)lTb>uVMYu#O8*ic<@uxM5&dKH;k)yvF=XerzHh#KfBt{W#^sH}*M~n{j(7KOdxv^__~Ym1 zq50v<<#U*c^9SE#PV^fe&Vv8%?_6#xG$eq0Y&GU!kv-YHCIr;kG z@%+C@ce|f{_@VuH`QKk$ej3f=*R$gN(0usNHv9Vz_m4k@TKn^ZKM(f**nT{oE&f?e z-qGk^bmd8}k|DiH*QZy>rdPAot7J;ON?z&}Hn{0dlh($rqcA+}Xd!7k8$(-$;42qo$4blzTmH22^5=py~ zQ0+=?)~=+lUDXTi`qi~~{g+Q?eK~tacMlg=>C4%L`t^6e?%ciO@#6nn-u$}n{OrsB zUOb&o4;P^^bsYUmK%=O`@}d2XQ!jTl$vz=vx{|-_lThOK;Y< z^flk?z4h%jb%>;I*^s{F>(jSv)3@2`TQ;S>WkbH)QX-JwnlG36Xk8Xb>#|U-%Wl@X zEVeIqn^Hv5x_n6M-1@XG-?VPFT9;3$b@@xJJ;9RZ#? zk;$gju_b3kCJH4aKZbtpx_>2ahDO!ILiaic>+W0W@!Qh3+(+N?NcxtC>RW!ZzU8rf zx!cqslD@eieJj?dZ*J4K+3K5{Qs3N_FSpaNT7WOt{VjS+jYy)8hLK6oWX5x^y631k z;k7$*!yIRhpvgpTOPwjq3trnsk6(75DHEOD_O%(Qro{PZor|P(E>!E>&06PT`*OD_ zMI@~&hP19+pVk$d*3DMyiYc|OSiaVMJAPf^qjg0jtt&#cuDDt2ir89rn^Hv5x^hVC zs`Y7IxoO>OwXU2}>&j*J2cR~L2D(H9H8H9sbC%^zLlZ+R^F^{W$d`+ZR!w7->M;ftJkM*)uwN= z)wgO&eXE9ix$SkF*D>_1^3k^{lD<`;`c~bnZo9A*%-)xp(VRvU*dp*(zB*rIOW~lD*SwGLDkfK1xJ7mk`+=(k_}5TUolH2<&q@3Wy;x+Ig#k|pcy+YR;q#}~Ui%gQlLX#xH zY?9=5I7#vSNs?Ryku0(3J#pqI==ngCG9v0{&2G?FA1jwA`@ktDYRNs<8~$$M$qqSzzJAbccQ zA$=s-@FO$Uv`P6RNxo^?=$e*1UFRs8=0zY$Vj)P9U83 z$skxHSs_^@+0Y_0*0f34BFP|JWY(`s(X^4u_!BRpND>Pvk_0nFlG~vo$pBU4y)Ppk_2-^lG{Ndi9bo?W=&fZ zGb9;=h9oPbh9ny{WX75{DK{ip9ynwvnl@G~zZW?qiG>bHg4rR-?eLIfI(o>BdJs#~ z2KgcB3i%<)1`wICrcFu^NtTBYS%{{MR?F|j5J_S|M3P{NNOC(yB$i|Jv42`wfw0UM=ZXA&rYucn7k@SiqGXI#K=*%3{_0`u=G|h`6lE&hQq`@4K^mdL&Ivq#kMm>n7 zX@eY*bcGy|bmNH3Skoruh@{!3Y47Jxj-qK^9Fa5@Mmzh@=}wWX75{DMuvDm#JyXxXw{D&5I+F#^Q*i!5oqFc8*9o9Y^FwJ&2`ggB+1` zg&dJ|=l5QN48Ee|49Ferz zG;QX!{9YW9G!{oB4d#fXw{t|&={O=c>Om|`8{~*&E98iz8%Jcunl>p%B&`>xY3-9@ z%>Q*1P4nW2q_H?6X)s45y`3YHPR9|sQ4b<%S~kcL$yUe_$u^G2d^Ihblp~VuHcgv% zEq~_45y@h4M6zIxNOn6%B%6*Sa-$x^(zHR2NVYl`Vc zmU(eRvRE9EESMvb-OdrorsIg*s0Xn$ZIC09t&k&!_JCde( zaYV9M9FZ)TBa+?D5y__Gh}@_Lu{3RvBa*Fv8GMR5y_Uv5qS?yn{h3F=EV`o zVsS*WV2((3J4Ym&jw5oT9>mhLL5@haLXJqbaYSaUX_In9vgL6^=C5g^*79dw9FZ&* zMmhLL5@haLXJqbaYSaUX_In9vc+*k(6sqq=V-P3UL27u7Dprt z=7?msb40S~I3hRdK`c!hBa&|%kr`{+q#Tj_eK{iUSMDq9Lh`gJo%|AvuRxN+-#SzJ4aYXW9 zj!1qxMjj!3?7L}sjMlX67z_vMIu%bGS)Er0IC5y@k5MDk#c zNPasSMBMvwM80KB8>yDxd2vKsERKi^=7_l4IU;U4 zj>wIA5KGerIU;U_91*v1L}sjMlX67d`*K9yP1ELIBQjPkzw_dVxL6z!7t9fHw{t|? zbR3Zz^&pm}4RS=>3OOQfdY1$x1#I2Ac;x>-Rj5Tdij)+?lM`Tf&HdZaa^WuoOSR4@-%n@<7b41*99FZIK zAeN>Lazxw;IU;W3h|E~iCgq5@C2>UFPt#^x%kR86A}$t3#07Ii-0d6@HyuahMm>n7 zX@eXQw?dAH+c+XK*0f1EB5p|>k)>$bsI~mgizDJghG`JTKIYrzy6%(Px*I`lNQ<`5n)?ds2r|pL^Pk zO4~i7BhRSSXSXl)wdwBQ)Ez(Rj!f*XsPr1z?zK*JwiVsqmD3}*Oh@!osjAf7Gu!jb zj;eCZ*QC3`UH7fl%#5OYpXZJGCEeAwi5d0o{eAb&DL2od(JLQK&AbRAE*3$=1rtPE zpCIDis%EbeM6Si`?~mWLNY};M|Ka=Qhx>=SAI_h>|NPdZXdtT69aYJ27HJoqYJ=v#WyJ8ZkZ@mQE2Jfl-#o@w_EzD?eZ zQ(miT?Fv0w+TBf_sQP8C>PC%vbnjPtRVv1;-m8wuOigr-qFu~gbeI{#oU6L?wzd9U zF<(=iJt-Np?#OswyY79r*YA=~W8R~#r|vk%Oy?ZeFaGsmBz^OuiMUua5f@AoaebP| z*;2ew;9kXvTnpR__w4d)f~6pqoDBj)iWLGw+y)Gpv78M9Ln8_9h5YC%5 zDu43Z;5g6W&Qavd3nb!Vfka#|NW}F)B5#+oS4kosa(1H>M3S>&kQGv_kQGvFtdRN2 zSuxBCaYm{t^J*omd=fG|wZN-*8GS^^x~G#MOo=|hoyp}9FXVYue7?Iz>i$aOM)L7yNqW^be+?f%~3RdvVAyKy3!MsTm{&b#l%qd^dJJr3bPzRSq9ghLa3 zhXkE?YNWin;}dL@&?qz5{5E*HMR)cFAtTLLsbKMWMvNJmaLvroY$Q4J!iN;G@F7Jo zKBVa5L*6cDuku5DCX(BGA2fWVi{nlI+fk$SBggW?~U(8LVCSp}iF(mYKhFGa8t zojv$#j-cg9p9hk}Y$jkRGXNiuYe0rdy-tLQf)HjBxk8FeDDYs$Ftd3Ah*ys69`%`s zP$nv2NM!mPTpdNuyr3aPENDm(3=Jvz(2%#w*{jqLA30kT7o-^Ef)p#{f)pDUWX5tf z%msNa@OTz7n>%~1W_*^m&|u>=FC@{YT$&6Ta=`PVKE0+wpE3+We>)umYWWc|2{uwD zLD2{j#@LXbI_S9&JEWvE-kF5;x+|fOgK!@sn&kR~+S14n^OXQ;sn^LI;>gJH!OTmk z;iR7}HS>n@53Xdd|H|xS8BkH~GE{SVi=27!LW)?tkRq5DQuKKtZ zF^B{yR)_>CHYCW5~`=kzk&{!88R(pEuN}74` zL5f&>kRq55QuO&CZ+FYQ0U6!FbV{X8*0>3cQ_G!lTwG^sY32bs=q;Xg80h*p}pNKFd$`}|sn zN*0a2PqeifN@w08XI?mvA{Gv$2*!aF0XUFiOdQCKQV>bb%0V1Rxk4OBx#2+OD`(|3 z4#b8Qb0catoM%5Xgq!d?{{V)VI|Q&nS23fqGyTvcsSpLnXYk96m&E*#5<+KYSgubN z|BC`Z;X;v~>W)v%J~APjjZu@rc<=RJxsrpa7U3);%>-3))Y*n0BAq+aR96`Ost^LOVFAzu>3j|UIgFwnY2;{9vvvN!h$c-8hOUDK|Ams`< zAmzpZnX!&tb3l?Ob=tioGg{}&>ezD;f8bTTEY0tpIB_zZp~_SoO1XncCE;@6Y^A2X zS)zAnTKBEiJaHnFV5Ab1lhj=I4yaOB*%oSh=XX9ikisExKphm zLgLI(p-8N8XH-#YAI;1IwuK{zPKtiwL>|oDjiqK@9FQ^=2c!(iL8Rp|FV|Rsi0uSnIBROk?V8WQ)Os` ziDyJi4%rfd;YsHc&J9nQ_$8ktS_w&n^OAZZ*2rw2o|0z(iysODfZV77v2<(@08*|H08(xMkQwXPH2}o+N|#2>Z05{<=DA`&@G4#g8M`|td?u** zqs|Ggg?jbWxF%=_JBi_%;KtGWjH5#ZB+t&y20odQW7``oGNDGog@tj>$Zt_x!szm^ z&h~U?W_~0(+oas2(y@nyg&Qi2W%IANab((PWTO?1s{YFKaZ}DBod`qgj9b*q3jk8a z0)Ujk0FW{O08)+#0J%{LV#(Pc0HjJMhdeBuvUL zx>p*t8e^`>W7Q^$CmWNU^vNPF$S-3_7HVghz!Hh1P=lv$o-E%LFyl@|4cCY9rmxvL zg2X#*2|n|cYoIlZYa{!$GczxFcA=i~WVWmX5l7U-2{TzeILX4%A|v=bn@5o_FX%@Z z3;Iz8LqEzs^rL#Kf{n@ixY7E@Qm{ehN4Y}gN4YUSW~^Yt%n#dQW=k1uyP0i38!D3X zyNZ|0kM2oPx4`^pO-4$}8VSrD&8Sn|K_-bTlxYN`xmmJSM}4wv;E57au`ioscF%zP z8Q@{gNXCm}?u~v*29D|xbeLIQ=vkz{zyt?nE784PEdf(TS8{j+RS6&x66K7B5J?C% zF&aw^|8cB5nHTe;jK%yYgP9*?0P~|9llgI@6vUFVLFPxfLgq)gF+XN3XV=UR%fh!& zM(e0OXVC)B{F0H+b3rVOcpZ&X!nhKXlZG!K!MT1$gsD;Ee>C|s3M@Ddqeay^tz<|K zP7>~*ytZaMsGm1cOiC`0B%Tv9gU^e5NBJdkY(|m!&CCNcZ1*~oy#k1IHu}EQ-ZN{v zS40*$ZiYtY776pBeU!0iA7wD@qwLc@-t3T#N&C3b`o~hRLE1;TLfS{U(LQFZV8gTz zt5?qz9naY^TlJAWJ+r{8c%f#w!48tUlCCneg(qV8!nhy;pg*XNVd)|HQc8~&kv%$^ zoEZ+2Ff)wX*_vWVK129Vm>gun2z@d;6TODLp$1D4BW3uu&cu{5GWJrW?^Lg(gwpBt zpvKa*Msq-}nnsR|dFjRqFM82F%2>3IGMM&J2GBmrF=-z+ND@dE2Mpt8|`Dp zayCr+uo*HdYPQ3y(5DrgExV$9)aJPpLF9=`!!h#YbmTDdh!;*$W@s4*7DXgHS^1k1 z$6CivzRR3Q_32ASjjR<%FtShaB>Z2l^Jw;WY0RAC`4Jx#SL|7Io)MEsxyeXU$if*Z z3fY^p)CTK?t6G|JmW!h~ikx}TKFV0Mk209{Q3lXH$}wplH%dV)IUA&XR4b%?lpF11 z#&UK|`$&vP)kf6Pm*Vv-XYT2ffmiX8#pv`&kz4})BuOx87Q1Ih#4a;QC#j-m4DfgG zeW-~nb#CEFQSFB~;@u#oV5M5)qmh7;NM3hFid0DJN#O{BQmG7C5010bjK-`&ps7TJ zCQjQkl6zzcw>Zit>3U)p<;i5WkXpVMOul z@S$in;C-Z-s>G(d3p`LNQ1}*2Z6bEaH?@-O(>!>tYeepwr`a=xoK;@Tk17`PqY7qz zRDI^ho8_z;6Z&zZ6vUFVLFh-dLg+`eK|f|JXV=gV8&u4UU|kjB?_O?f78q=-uAm=O zWJu2yxibq4E_AN&cWZnfXZ#(y!rk?_z$Xb6 z63k?tk*7n#DA{)=<0eIph56eQ`a3gk$c1r__?65#_QDY!KhjAL8`uy&V@fjfkt#td zFX%@V3;Iz7LqDnj=tngs^y5Y;h$Ux((2r_`(2r_^e#}_TuAv`Rylmjn7KEhc_1RMk zyo#6J*-@{8uBz7b1Ds5`BB3_?6xr?zU#wO0E*K3XQkG0lk5+*%c2a4uqfTu;V_X`V z7x^_Qu|&cW{T6>y#V=dOP_jY^2RfG+Q_)Us;bN^Y0L=V{n51`o+I;kr^mmP zuZ$vRUg(c17W$(KMt@X&^vB!fY)tmYjZzRx&IZ{Z)e6}k)yDpqv7BAAKl%X1ew*|& z0VMFuFC&6zbA-&~p=it^tVdo<;D?9>VM9tgkg!YzNOEws&H&Cx(6Y4K!W_(T z@XMTzA{jbzVN_i*BdKF#HVDZcnd{yWvR12C%gkoRbA^D4g%8plbB8~8(3ywiA+Ibq z=u6-;Jb`MYYR1Zo_ff^-eN@4`kE+l6cx!EbH74%kM(ZC-!3J?3)e3PRRUh}!n0+ot zP6%wg`)x~)OsiIa&Lj66%X&(Ouy~d4Qmaigs#KNWTvF_1`gBSg@oCj&38>t36^Yfr zhO=bv-UsABG6SWeybRsLqM@IHWH22}vZDt!h`I!`=tl#28Z7j&Q&=dh@aef1DM&}I zaUY4^jl>tZ@8^EAz_Y!iR2hKoSg*{O)~JMZqwQ6NaKcVTi-`XnO?|!4pH4ci>^&_7 ziDoQO8*n1B8X>i1ia}Xxu^M58CYy~_s&CYZ?2S$qCXHsDOX*Iam@#{rg`=pJ7viIe zh4`p~5g%0_@lm{0wY(7@|N3|T=^|El&E1FQ;k)+kFTXl``t)$T|JXdX!Nxz9fDO_< zsuj{csy^*w6R_C`*f8zmy#(xv>M^n~BsvB>HDOMXgfi(fnIA;qc$ypsH=DTMPG`n9 zBw$`tk17_`qY9>aRDG()n+5DusK>9a73|^e@zW>NE7;h_60AXXN3=%PeL1VKUIFp5%P-5vR4(k#wI5ixioqr{4g#Gs+_8=NTx zt9VzzdJiF3ieMc_5-cx58 zh!(+25GRViN$%tJ;M&o}Q|WQ&FtV6E?t+|IYO)@>kMffOadxzvJ&HN9>_yDcP+3a8 zaR-Ky@_vIerD9!iI)pSe`&V+05V0r?pf zbVV1*@bTS3e<7^wDCL)??&j$TqbQaar=yC+>8OG^9aW#x@n*&H#&kT~H6M?6U;gD+ z$=&zO`7u1j3jd+`;fMQ=-`)MWz5nj}$6y(VC1r!`j%tPMj;hb@I2dAqBpOUv0%Z@F za9j`B6_DDoM8CT?eKsWdiSh7006SbZB!Z3^95h@rB!XyUW}HD1B`kOabaYTtC50tM z(1ZiQ0vw4mQYpI;^FGpm8uqwWV?@6uUQgM z#DMUZOfOSv;y!XNB1e4pXs*+AH&NAym{W6hGTR>SOcJjOtvwv(cD$FA)$d=qG4g9N zgKK!>b&eusUVM%!7N4UE=5thiKF6D-%pcG3L-XOood{a6wU4A&^&py~ULl&J?xQ(2 z#hQy^)x&6xcT%kS3c(?IFp{;cz3>rrEPO;AjE|`M_=vY!+qzGWNM9J+-IcMu|9JTH z@X#I}@4npszwOo(5_KOV0b-lz&cXcMm>x(Bq(sGt zOBn-3G=aDYCX;$MXr#oSFwDdYFmlvLNyny%Yk(n;SQjxluI-?PpGe2vbW}>M90r?c z8Er|eN{2+|S~bH5gB5_nL+W~Gs`f}S5d*`(bIp}gao}Gs!Tca&c#V;GU(=gx&cZvr zj?`aUd*LGLSh$Ef7#C6ZaS?BpFMnFZPdE#UB1P1Lq=ptir5ruHi~skig;he zN(Y^Vv8=5Z&7h7&GpK`U26dli@MdeJ?HA>OR!~lP0E=8eYsT z^}+_HLWP#2wkcDiOG=#XJu#3NKmL`-O`?W5H5FGxR@i-KXX>bkd|>t@9+Rsf;+VBb zhLR2R$I+$co_elnCmM?#j!B02~i=r6RgA{{$g%pFjPchgOYc`5C zDaD|^rWhonT3fFU{5n<#ejVI_U*Fz=U-vuk$8Z)F)qh_P_TSel?7y%3{r8*cosH?8 zwEw<--~RjVopIX)n>jcFQ#uP?{r7dO{`)$(|GvJx|GvJZ|Nd;;yDHj;yT|XFk9Qw~ zZGJ4>8f?R_SJ;MM_uKHX{PCqYAhuu5C>`PO+BTefd z4^y>rWGm1WX;p00f>9uY-ZNsmNWd^zCsjomQisvgCMYp`#@atG@_;qj_ zetmlze*J12eowc){G4trsu{l?Y{suw*oImiPHqW}2aC_D3U81-cf=f|LK=n>;-j8ey)b=9BavcJHHz zvTcoRn??({5`)NT41)_zML}uu<~YviAGG`|u!FIlv>CrH7o=OyIeXwNPwX>#XQ{Jb z9`hOgl~Qg%3^3}X1Uu6?%A5upfre2J!i+o_&l)Xct(2I4+``Owt|S|&gR%B%#;;>F z`1S40__cR4{)^|h51!+ZC`4|L(bvPdY zI1OV=+MfAo({Ev1wAw6=F&8xJ(=Q@GP0Taq#i^J9cI4XR$f4a!d-tt>-u)NtV?Xx{3-;aRdhF}L9{Xgs!Y2E=-(=6v70*S; zFRhA|tWU}0V5(a+1i5KV1PUb;#;kTtWDrw=xgmas_~d4F3?z+)Lx~BJp~66<*Cve2 zl9(Y@&+#*I*hoW&dkKmp&S)KRw4WgQR5ACi{A_ zCVLuHxdX{Xc25n`3NcsNpwz^7iOV8Bfb)puu}d5csnWXY^f?_3qOLFvwJgH~=hyv> z55F@pY_5t7DRYs{U-8VTNhf~H`$WoR2fOZ!w zLUL(uLNo;X*p-F9PsTuT99GuC$28uPB+U{P2~t(a8>?Uuutp6I-WI_}42Z102@Y~h zK3S{b5|4=$H+U>kbB!7_F<-Xhp9UJFw^fmYLXFHHhWgb#M`uC>yPR%DzSr9WhIry6 zq9`I_d;S;{+nb>rt+;(!^>m7Xxg=oEs9=nx!ge=TOq&Te6Rg7 z!=2HY&IaJ%;C7L!-kZo7zjYx_(+r7&<5a0E>=HO;%FYCPwI8x0f=P|-jMnij(%-mp z;<9mtG>)dKS7;qcbDSn(do0pn#Gsal0LydPX4)jb*klUL8WI*x*QaUsqhkEUS3WC)r4H!4`4 z4e@pY^<@{J!-r2_+PlY3w)*f^35X_SgK&ssw?aC^`Cj`NPmD9p7Qs03PCJzqaz|t% zaN1Zz?@TQo4iG|+p48M>IS{AEB-}YZri@$@Vo{k~7IK4GlWQxD0m10ydVJg?vM(4k ziZ(E(QZiEMbyBoZns^(j!j6+;TbG2@$V%l?bCKa+PK*TZxB6@K1jRDYc zgv^T&asGHTAq!?i$n3vS$owf0cmMwKX0W}Frdor5h-9}yLd5xAH`SW4YE8|duhRpsORjW_ic)jiG-(Mgc!3IB?Yz@LSlHCgF8s~fMM-7Sc z6Jv8~vdA$YOvHYW74}J>xQkpDhMm?antIb`yZRJy+?jfeo!wTB{0G8BZmCd#*qf|I zVX`Jta>g#@TpN)pat~y-h=G~h7!@f}2uG_9B1LWdQBAAtB5oSSkX?*0`7k6*?*&K`BOGNf4V>a(LA25{MpRjKmK@k{Q7X& zvF=ap!~N;Ua3zSQXM@m*Zt=?ua$N+k$34x4*W>xstDeqEY;89BJaQEhQ! zTC1_+Sj>~Lw$kNAeL<3Px>b^@vQ<{qtwL^Rhm7pFmGttM^Cb*a!0myQ_y_)b)~*T#U34O7u;`{ z$V`gtxSVd0=`#HP%=rH#shB6!HRdKgOBE)wm-~{@ClXNAL!*82{CvjIG%sk!`Qy}Q&iDEg zybfuAGJqw_GL9DnIF_i?TwqxCW)X@(ARI~14Sw#?q_Zg6uFb#F$iuf%Lr_F0Y4wt3 zF2alEGtMOUkdo9GJxrxQh)Ok>7Dj~$BE-p^Vp@?Z**DRA7k3QEf8J59S9+Lt) zE~i_hY~kFqYhz{7m^7)g^pf2laqC$iabJYCDfH*@Iz1Q1IhgCG6$A&41Tym^H4Zvq zaS2GU+{(t1EiYup`Qy=KD;U}#v;Rif^2T-`TOaR!^+LLCH2SfmD;XwrBx@vfBz;oH z!BkeTSqTDAnvPBB7Q!6R>vL2?lN-MU{|D1RR1oPx-o%qJoj_uq3Y9m3vL<>=qL&y% zA~vmwWJ>&p%v+&`hO5Fb5tF2ojLHoW=0vYVHm${nJn1zM;l%KvB^XWC^q4KoZXR0c zkxWbKNOsGVu4P>3DAJYqkvfuSq>dz<)R6>`IudVE$Jg}Q(UhWS0rfftSms2%yTpJ!>W7H%K zmaS>Q97(cF*{bMtU^ZqtD+Ct9NZ}osz2^$ka?N=uSd}D~DSRcIy*G?bVi1%gwRR5! zW;JmE=J0d5&^WT?2j)nkfjN?JFh>#q=19E39LQGB<60JxBN--gBx@vcBz+=>U{cB3 z;5F^k926!5f@!1rL9#u$8Z6m9Y_D>K@YF_lD#IDX3_;?-<2spUt-|nr@SSRNRb1;1-6Bh$tfJgrJbC$_NRL^U{W^N zLEeZXun-)|cHSgiengHW8j&LjCvqeKM2^Ip$nmmn<7*Ob`J?IAFo+{rBZwpEgE&}N z+l{$oi$+wVP`g1Lg!GINzoQz0x;@h?h3d%?miA`L3#PWu)F7S=>rRM_C)K#zREWq{ zlBlO~*jQvc^s&`DqApGJh0o+F2bRky#6GIoa6eK#4%SaNR427^=s1ngmnD9fpiB$m zNU~+>7metwUK-moR_VB~p`6`#oB9jeABbx$8{e6(4Yt;n1Z=9GLET7x9<9?z!j>Qf z#~%q#f3Zzo`V|etk%WUdk^m4#;tk^XIsIA|k|P;LawKa+awL5u2fs%GF15+!NC?J; zkf~DCo^^Y%w*XuuYLMmjH6$E zNRA{Lk|PO6awGvrj^tG&hmU?Oi_MV?vpJGAvN@7Io5Pv@7NT%cbxx5T$pieULKRIY z8+bQ-w^0>vrhG56`m zB%IBW1h6@hSJ@ms`n4<;M>5RfNY=>WNct=eR*aCw6H{`*id5i$tXECPmGo>8-@{ha zs(P$!DS9}Xszl;`vdSedMqvc;8B?|_yJwIHZ`I~hCbeIgG6Hg5vNa{gH+xG9FWvNz z5t*!w7SjqqIX^nc+0j-alhiVnrmUV47Ib_!WVJj;XHxwt7OG!73be@?MKhik>@en) z^m3&-D;R6)O*sxL8RjG%dr}2k>U`jsvO9D4E!jcH`1@$zB_}(Me)+LDl4vZBB%H;O z1h6=gKo-YK{aO}xBN^syBx~euBz^9NWVQ}i?{W7bI_Ic%S6+Jf99jtkX1Ji$x zN8gx^i^gO&DPd&vC2K~t#@?LkXl5F#GNR4h=hM;hUw+(;BpP=k3FmGk0o;uwkh}3x zzm~<=NQN03$r>3ONuRMH{9IEzLB&O7qH~lx%NiA>JE$t*m!V&>lQ9Z~cXm(>I#_Ff z{UNH;eTyicME~$^ur?f%tP@&;cAV6Ppn7N=H6D0>a2=1PteNZvdPkXf@w{e!T9fA{ zFGjr?ibnmUv;pwG(_TJT>a)$&VimHC||g=4ub-EGVpOj$(8Qze%!t{Hx*UkvC!E7Q45j-B*#=W?}e= zLgYtQLK#uXw6Kk&UZ#E#CuCj33}Ict=qE;xXz(LrOK&;!OzH+{Aw%PG(;*^}0W;63 zD#T~sna@abn$u(QI-dXK2ir)Z!8Vd`*hUfn+eo}&8$Y98H(LH!`jrk7H_|l{H_|?F zLn<_|@SS}ii(esRPU%UoDQ@J4JDQ+SwE9;+nb6GUWJg4$A=aVHLQA$ z&XoFVqQg7nM&*|5)&>QJ6dLvyUdL!+lH}I+ibZ-NlZ-_StL~HWNMy?91^{xj)FSL zlc`Hg&APfY>*1rx(;)#|m3W9;kBLB{(WTK@m{Z(cV$PKrBm}Z@9Euuwj?Sd|l`K=g zhzZl3!HP@vY^%*o>&AshBNZB%sV|bzB(Iw3jFN5(X5H~=OrHh<1x#338Sjr5DL>c+E! zdw9|_CMMS=mGjj98+&*(_45)h;w(7!`EfX7#2CYL&|q~8#~2~Qj~WPOFN%>(B%1_?~O!q)uAzCOv*OdChP{P-JbH2y{! z&fiD__#5e%{EZtee>D9X=5M5H*HJosGHdZD(hs-f(y$=hkhwM{nVyZ`zWuvo|8Wp?CR2>{YoR+_lE|kAfnqGU>Et%mvNjB3&v&n+d zyGMLjI@zf>qJy5*3z6!*&NuW+{O(-mnCMzJb1K{QoIDNIIQr$s-$X}IN&reDMSjdYFtjkM3-s7${Mc^^C%>N=lU<( zHIj)ZQzgqNmnM42+DUd_W|fubyvm1m;J!(}{P-JbH2y{!&fiD__#0^`e8ZmpN4%SI#lRgG$#Iua#6L2>eZ$) zpGYZp$KS*%%b~2j=jcqTUkl}L@DT90YeUS)OdOm32xg0PaF}YGgV|YtI#t#r(!bvw zpH-af?$(VjF+*Yqtcb{{p3JID_B$AhzmfX!H_~YQjWnFUkp}QL(op_J8gBWc>DMrS zBV8kZBkl7yWRqb-bt4)h1n*XV(bQZuW;FobtvoMIXaW-*FyOlXax0s;zOl6-?HZp;+HixXqNC^h#68Jo9S%d8^#MW zpHH#|Bm2qxDGh^#Ss^4e;sc}AANuh((rEmRG@QSY2Jko1Q2s_5Zuz6>*D!x0T_b-Z z?ejN?kWjg2`=MChq99Zn%QlvHE}7bVi4)@Q7{(O2C&`{C`pLazeUKe%)Sl3-lRTT~ z=PeRh_nKX|Sn4;~`tB0jk@`kR>j(F(Kk3zdy1 zeioennwGzjE|kB)N=fQ}O7lJshZ$SxgJK;bJBTxOcx`)CD`6N`s(P%NSiJ~|n)%P% zLrJ?&(n}(9iFMa#^&5WtjWim6BMs+oqyhYmG?c%QhFkt<`Zdho$kxc;Nc;Q^){RtO zP#-ASC2~E6RfwWF<8AS;RCnOxNbe_Iz1Vi+$8iMli88ew;uD!_c9f3JENcJILH?Br zkj6xlSXZO4(sPPGWx8_EV)Po_BrZgDUaI$VeV@-u%|>pNj&BibD)d`})K<^YnN+_P z%HJqWWuVjoF=H8vN@ucc-A$|;pPlR#JnBl{Nlf2|kbyauQ7G0_tcA!6+g-+-t#lpg zq_|1H{P-JbH2y{!&fiD__#0^`ea8|H6hYvgZaef|c&U+h0*Lc5a)tS2Hi zco{ph;@w#uh3P4#W8xEN4%S>$so;7g;Q^P|YEM1Di_+@4i2WWKOk~KzEtFh`gGC%%C z7LC7=h4VME0RBc6%HK%CEq^rq8s=|gYvgZaef~z-tD_L6_g*db-jGY#b0jm>5sAr( zQ}vM=Dj@qiQ)_|E$FJe|^dlckFOPH(o5q7s9Gyw^YoYuN@t#anurz(j*D!x0TO)rX>+?6H6Pd{2L2U)xT6`ILmUH8+@U7bP%doOVJFxsjVd2DHWG6WMXj9ip z98y>urv6qs1ox^|#43fFnCUOY=7le7s&VwokH3*c<8Nf){EaMtzmbLVH_~v+A5Fi8 z`5W09`5RfEzaboTey7wqkm1_vuaaLVCR7-_m{YR~#XCFM-Au4B5H`qsbvA+M4Rz^4 z(m*NjYw+5-Pok>$N1Rdi!8ChAb4*>&qnFUj0mf$yK*ubvhSFog$P9o z1tf!ypV;WRh(=y=A7O$rEq^0hD1SqC5I}2)VB@n>GfyM|kC>GV{yr5xb|0KVb&aa~ zgW*o|4k|{hn=BZ=7uG_=#-(%L^hA$VzmfUzH?nB_jVzqMkp=KKvN8D^H(LH^`Zdho z$kxc;$ol*Za$bAGsb~yIgStd02Pd-^7#4$`WqcNVE4sR5=Vi0chWvk3Q_NIG`&2n>0On~%RyyDYW1@x z8yhAl)ABd6YyL)~BQE`btTz}JB6ak(r#gbzZQhY17y>-rH){zpL_+aG7rIwG*`w)q z5Ly?0P^wQJuV2Q<)Ty4#t_PeKZVY~z&@)UXOGePB9=`&jg4J_0_$dOwb&}f^whZ@f zc7kJ#w|~C(arDcNzmY}bZ)D;8jVyq_k$LksK7YDD|8e~K`NRF;JVfO0HE)Uf2@xFu?GaS{b&m#GoP;DFGllo5j?I95t7 zO~E9k{>Yp(#}RBKu!*syIMWmZ;40#l?t)cjS|~?$4dvKGZFZvO2j$43K{>K;C`T3m z<;Y%za{TIA)vTWFzkU~P`J?IAFq9)(Ba|Z>fO4QX=oG00(o$xVBO0J+0h1yPW5L9o z!8yuR*Cch0Ql$DDr-2&#fPy3jWQRRLr${lJOiPY4ZP!wQNKgoS(*0{`5^C5P3fM~1 zTqaviCu;Fh6Hvv{O6UpwGFptYhU%fVG`F^)O<~!zP>$>h%8{E^ZrLcO)e%3Kra#6= zn)T2ZoYqp+irGT(47YGH#pkqR$TMUWlw7blp_m=a%2He zj_g$^M^C@bf1dC1{$jHKeE<0U9bQ`Vc((dyvwQ#e<6XEIM3b~(PDi#zPDj?~bg&pD zUxk2CyC9SemdluO(-o7L+AsQ(Wsl^Y$`4iS9RFZyIOq*VJc#`{Q*9JzH6EYDVUzkicytTSZk(X&A~9r9JAu3f7SYpU&)pI>s|Blcz4O4b?LJ& z;aU()(T2$#*&4|mS)bfNZw$5R)NctzH&Htyb$e7IqEIKb=h%EyZ*RJYWmgq4RjH~K zK}iBqQuS^s#yAU=7PwMkmvEM-KEcLfPXGZ4w$UcR@(H(6jIkPCNaFRO%CA zrh-;@G>P6R75p5T*+_O)X1fWYvZl&LbJG0C9a%JTM;1=*$O6b6nLoMXClu|=zntB< zU=@g_Wy2JYe2o;3tWWWfZf6o6BpWhg{~NX5cs=Nj?C5;Zcj&soqhamJ`c{sKPlV+^ zswE*%crxo-;rqa9ER9v9PLZIeN#qDapX3&QSbz~5Pq2_JDq{Ddx}Zm37ymURwU07lK?)N?l0R> zhN8*-1l_gaizSA%*qXgIIiu_?G@6$AQ9QC}6pt*N;*kYVJTiZZ$J?~*Miq#qW%)4C zBVQxYBkvPEs0Ad!K)Q=xD0TopMM&S3{`QHk6sC`qG+1i<7h#AK@xu=ywT8!Z)OYZ< z5>taHb@qEbV`((#Wa_PDpEGLr`6SUNTkl9J4v!3lB7TTPMWb`IgxD_h5igQh7Rfn^ z3^*@^4kZ85p*n2O(V0@q^4&7EZ2rl!bZBU9(X!l+=#fVwdgS3mk34|rk^2)p-l%2E zqI=}SbdP+EbdS7G_u!X)G_)Pz_!O!gl_?`*{mIIfvOnQE8NLQ;NWmXFZpsdVSjbWp zjob%XNj8d{8j(Y+<;mnYY=u1*k|?4x+RAPmrKRZ^jozEWk<@sR6t!fgTM5PoR!ibY zrcj2+6{RHD$wRP~O-uL4lVxfd|4OkVacn6|r8f-EokB)p-I>uHw2bpI?quQ&4^(oj zL>ie7#FojBrh3=H)Nb`RqCF(zXqg|~BacS+$iwL#c>vub_osWjQOlM^`pAb#ANd+d zA9yV{&h=mMq{yscG04J0?vR)drPba0^xw9oD6lcbj<&eJdiHLf zJRqWx)MJQ;NG~*MYlw<`1|=1u>t6qre24gq-DggQEGagVBV(fw5i}ZqGu6*yhlws? z-w>VPom%o~NgsK-Of8fC=S;PXxZlCH5Kx;$RZpw4f_O4|geOJR5x<@oICDn2-<_Ec zWR~&DYrU_`a2|z^GZtwv_alAe(MTV8IO!t~AbsTiq>sLqg&Y595;hF`$kzz_$osGl zQaq%G#Qnh_7;J~Yq396X8`FWS!ot<5@sTEElY%EjPO6=v5yCt49odaHNWRN9QAaf| zQgmTz?xi)FGm=25)TrVpNm`%sl~fI~NL6O;3o*hVleWWrm8u%Jcst`lN>^L@^mmx1 zObh$SuV5eGFj$1hHgc419`xQxeM*T7fnvgOnMwnrP@3fdn_1SzK}LY+9u(Ys_pgOn zx{%&NCJ-8q`3)5@=6#CW3?L{qe3{71e<{72r$f5=9a z1W(WriWv;hur%Qp7UxH^I45XBDG2sKU{ctYR&_y^>jV-{s!bF?md0gcq0TX73o$G$ zMjqRn>D8ixXzR%o;jh8!PU{PAwSkQ@Uxxo~`M`u0sny@@erO zdA>|V`-X}bb3gn?9u5DIhvPr;0Q^VpjsJLSfN@#Wk9?T=k*|^Zk@u+|&^oZj(ud4% z)~FS0U_6(~Y@BRScWuA0pWi!LX^P${^x~CNg)=F5)Tbb<=k)A&Pxx__@yKd}h9u>I zVv@*co^8uhq78k-_rwCrc2kL757)rIVxvlvGQ&H7?{F}E)R%h<6PIbJAGuqmmVHA- zjJY56BacS?$it~0c>whzf0g=itClT`0Fnx0-u>{dVAit6XNmUm({@z4#P)Rv*XHRNle^4u|(9SfbN$jXm-J!Gt zTZ#=#O``!|*`0}t60IWUDVt%_Xh7mD)uYJkUW3@lD|p-xmC-Sh5pEg(I5F5(I0sq{eebgrm&EB3vn2-SCZg9sI8NxGyFKL zfq~BFW)qIWcyrhX&Vr{#w&G~YF!&p<5X*z@Dol!>$Rvt`S7q5)vSDzg3Wc?#f$n4r z-b@o5z8h_8SVA^;k&SKks)m`d(t^%!pDcEmxJ--w$jfDF*|${0=!gEuqoF_YaP&tW zfd0rwLw{Ur*|MM?`7rb&UnBG*??XQ_`>Rj&_fGK`zi}FkDIk>6eW$;7DNQ6|Lt&T! zVo=;D8)_D6A#1a73$}t+S>JN@omw+m!%#^I$=GUIG9VPsb0vvdD%#4hgj_kcNQ(b+ zy~5o1o_5O+*)BR&{}{g^n-rn(V!oBIP@bAfPUm- zKtIBbe>4djW_`FdvOe-Y>tk7lt1(sCvOAjnB*iKaIdZ)cLPl~W)OeeO3!j8fm76dW zB1@SiX*fybVLXlFhO}Ld8Kx=IvOe-F)`z$@lxXH^t||DzytAkvWOpwDpf0gyo zg9~4t{$+=k-qtVS8W2m#+%W0Gt&#NM`lOFd$!4QuZd%fZyCQv%s>C8!#^qo>P^d?0 zihwd{P6<5|%;jk(`aCIBZ%mPmY_@0PRGRz9A)Zexwf~QIUh?=GJ33G01LO+6yQ^6Z%gLIT44bxv^VWU z*kVb(nF2=WStQ5sHqg8mVW(7|0KN+W*NfzYNz1gH50`8{+1!=PkMrT8aXwr)=feeX zKHRIEkK2@NS(FbqO!;tYqNrA%;I;hRcOnG{302#E3 zp_dfLQ-0B!l1JL7u^=#yBvnt@v@J2A6**UHwKokypf{jBI#blxm=a0Ulp<^?#RhkR zA8^v|Vv$Sp-O3a}O2JB|_AVJhJa~@I3u&PzL3+Qrj7lG7V%(#`I8qpE35W8)yH^M- z1Xt-HXUAr4vo;;V^czd3pE21CWohbM#gQ`05xNwRlge~5NVSBiPfbnd9%rnKz%-_t zqN-J>5I7n^}{Pe@!rma zfXd9sGSkEv&Q%=<8KNVMix5?II(z9Vq{`FQt%}2M0*5$$(gE^Z?f3L~**m(s7aU{R zoVEKT9U9^`yRmf2kE!9JF*RH`Q^WO{8rhpQ%bTh3x@Iklrs0NZ8g7j=4cDh>Y??J6 z&6<{`;jU;Jgs!;jq}5aJOxLb>H)uqqy2EGinD9iT>l+oTRln$_V{20UGV#Tz6tDC+ zXbQ7J{*`NUdSrr+vH`$B$EY#)f)9xH@k%(DE(LlBg};g4l!pCUhU z7O%1|ib3`g+#wVNJoR82i>Y5Av4QMK4nJ4pNa`Xpz&R?^TjMJ9U#ZlP9Xl~kNLr?! zp$dS63QKB`6K?CUhus#;I%| zJj^lK)?lx5W@mSH#qBh$_B1QAfMdqWUO*;MC%c<+7BiZe30!ig0zW(IOheN6mYk8J zb)O_W%EB%ktD)KX!8u$sIEM>|bGSa7qkOZLdBZvW@~gwAPY=iYvxc>IpH6p=-?w+? z>;7;auFL(NpV!?F&Bq__9?xg|aH;Fq{q>h{jfkdn!_W@5MreoYLpwI5n~%~}F_f+v za@%myBv5EH?@tZ7&BIO zFK0$E`UgD%TFC>H9qPD}gN``iOWDSudnFhln+|b>=q9tJ&?i%wq854u`HUbQIZHN{ z()pn~Tr_lt3rBajKDy)WO6QI42vxdeu|3={+oM<`+r#zQ9-Gq5N9pPqN_R#0AlOIX z58sDpi>^`Th$<1z2IYm)$u>S*WTP5KI;}9BbPe$fJ- zBSwT~nIbcR3iJ0tEfw(`3^n>lyhyf?GI|Hfks>y_Yim=oM!5qPxHh;)O46l!tWpaj zRut>UwH@{PrLPDTcB*cuAx9v=DVw@b-c2&H(5LhcS+QalLFtMs0th{1sE?$?a@Dw_ z9Vw$$k{+V~@t|WzSM||6ZAwxk;aBU?P!`#U)o3WmTIqO0f6aG!6hsS|U9!cT)7i^v zN>a;-{ww|6%r~@5I_)ewW~VcuF)JmZy_gxr+E4aEXJs{3w^`vw04bsoK#FhzNYN*N zyjkgrR|z23O7~-+(k+V(QVg>}iZ!x9iar};Q@Z&mT@pj-t_UHF8k!}(JR?P~@Lu1? zCn5qMz49go$c&;uiq9WRIh2$-8SkmIn+p{>Ln!pbXQc6rZ^<@drYMAw{2!_bMS|Y^7TkJERz9hZJjMhZKEw$fk7jQMxpS(p?cmgyF$!cWMe8Q$tme+7f&j zqRM+6BT5*t_7o|i0(fC)6LG>~rz*+zam+&^pZIQ>txl;_cQ~4Gw1_7gU6#%F%$8*b zdp(VwMK*b`3TQUsD@{(YF@?F3kvy6i(&*=T8oSYaIzNI)5se^HgcC%HK0)N|O7|*3 zWNf8d7F(nkW{VVSWQ!Diw#ZNA#f0g1QhgD+6-vk2yZd#sX$-L@;RqYsC56|fouD?6 zE;NOfB-a1f3eLi}PG-ZIlUaw$W~3Z})qbItN4UmZm05M8s$3Nr7A$0Da!j?U%1cen zp=^;|>OI=k{>A$U6P+xE(p>>fcrx%CS;>h1#cGF~8meJh;K*r`3AKc1DfhQc+RQ7^ zB#dUEpJy~#^RUujy+qWswlfpoGc)6ecbVvwu(gY=tD#|l<`d>NGsJSd@GenyJV!>^ zZgWJ0mfDpUtvE-00_D(rxJl{!fF?yWph@u-pvhZ)12-z2H{9fvJl$CbzWmU9_z*4& z(Zp?-c2ca7c2e|dC!4sT)1zrUFT9qC;qwFw zaol;HmFeX~Ok|%qQ$R#ekWOuGpT17nwT>VnVa1)w4sw^7GJkqJEpu*zFhw};^s#|DWXwOif{@_(WjuiUEI7WC^v}Pval${ zFczg)BNnCTV^KD7n~%7;7~*yXN1-N?Cy!r5rG@m2)hbpmifaBZ**=*wK2kY z)W4~%lugWAGaN_#q;yvB9Ng0}#}PL_I7$%>j#7lfQHnksJu~}+R^q3jaAIZs>rS9*>q&cKfh;R@Iti2jJirG>lj2JTn6MPkhkb?Zi z_zawdV3f2|{e%c}T(b3L!}U@nl3oo!&L8bIQo~ zMtLqNm@u6wVu;%n--J7r;(yCEPF2tl`Pz6jwlRbeIT$&TE@836QEo{P$*_ zAj`554|Di9mbm%xO^RrIlOmjNQuO&IZx=UjyvZvGxFK;{7Vo4O=A9I4M`Uo;r=@Z6V!*481 zg$NzzA~MW`RG&YyjzA?{jFssu7nCKEOFv(s(ns(!H#^A5HU!M))003w#SWM=_=n^P z=>(;Z5Dzo8oqxqx;^xOYDWdUCig4aZ5x_esym==#h}*IdC&e)0q*x>3r063~HgTJe zxWz!66jz9o!$}2=hHd;4p0gwWMhS??sv$2zE$#ls!;uy>lZ&Ic1lSfHj?kUE(aDXs zCT;o1pz)xDlx!O0D4%8ADdvy>@=mYN84(uhvw5U^2C-t!=O&2FJ6x3nHjnxn;hHIA zk?=cb%*PTpKg3B94RKP0BTk9{#7W_eIJrUGmPIuwhN&jy8mT5lpK7ucaYKTrh|5fc zn-~}qIAUer7?>|YM5P~P3giP>h2t$CbgaT^Mh=3}6aJgQCY#n5Bu=tZaCAue=X+pN7 zU}b1%ZW1>?s!0)zYEpz#O^N`jN#RX3d0pH-G!Ngk;j$1*+{$5)Nx4RlN!bUPY~nT> zaVukhOv)>e35YdXu?6zM-4Xgb>JyW#sg1V-P=wM70c9O^UQxy&Ad_5Y6wgouv(+Qm zy+jKmS+v|qQyPAnX)gfiMP?5Mg<3BFWEUl#7-qevTFD|jTsB(53{aPIii+THlTxC zN$sM^t?^xsh7b{~-kTsHewS>2YKmGAUgj+USVkF!GGT4xnp#Z?S)|IBJRZSq6RNcZ zF{hz0^-bdD$1W+Ou}jKuc1an)E-A-mmkf#9vT!BkFs`IrBd(L{yX! z(&0y67!(5q`>f^*1LKtnx`WCEKX>+l!{D(3mO8gYB}H;Oe3$ZSI+w_*o%Fj$)AhtB zPX@_LR)_8*%o{ltxl>cby*K6jVx;jgOr8flIhle3jzH@G4ZK|Q#o&eMOblE}d5tR} zutv)Tr>j*)C<>t`t*}|FlM$#^pDmd*p0ISyaeN~q2#f5uZI)5I;w!QUvKVBRIfz(o zJV4}^2ZiS;D4s-T3yULW3$qJNeNyj^PD+DQHr#5^T1C!i!w7eB-iLvAdjYXfnN|cq^D=v%Q)ia zM=&X)5lqT(f=L-bFe$wWChs7A%OaeV!-SJ^jf9i3PdM4cZ$9D|gK$z_5l#@BlgV)5 zGa)|&E_qgDvV>Bo zz?%#c#g?dJO31TGIXSl5wAs?9L>7)?;tdED12bBxIhJ-~XdD_=9GwW_cSS&4vc%Mqe(#ROT6wi<`O-;^?*#hg^a-NH4Ie7|2LYUl}@FQ}FILQt;ypLQ_A$ii7 zBcx51LyfihO{EjX;&vC@hkAPA}BcPPw1e7v>fKt8} z0p%6FTNV_h9EPHlYlNbdeJIMNck|J^7*Le*3W_2PZHz4a0z?^c;qoU-{#?hjGg`)z zIjI)#%!P8i(>cI=qj!LqsIb$zQJ_YKW7;Gdvj_(dEhF|R6gsEZBl~@4=JU1c7d0{v zzff(oZ)cK{FLul2%5g8dD=7^SlhVw@M0_O-F;?Gr=?6tAqd`&1a41R{07WUip(x|% z-Lg0-~m5!y_=8T#o(lrSDX~tyRFjEN5x7L=B7XeUr$=g0V@@*P zWZvT2ma1ZuzBDGxS{N@?8a8-J`=@6zj^6okQp#wYlro%?QU-8RN^efeIC{4%bV@ml zPAS)jPAU876s$yM%Hc@t9gQu5-%LUdi${I8;1ErX0FfW^`L#*m$gU+cQ?c?lyM3Xp zSUDn2R6t180M?0X;4Fn&Ip7v}9I`JANRL)6kMuQDF+qVM>Sin|SB{+&UNyB9sh))d zB=@p2?POTOOYcRP^u$1?lvn7K$|R-G6qHNQl&Pu!qlsz|1!abi7?WMdkNT8Q2i|90 z#4G}KA{=GYA%Qk=J+(>tqQZ=tcyk<+dFb@>jZM~`^fUA{km{p-j-C}>NgN8BoJY-F zC;E#Z;)>^6o8I%Ddl^iQ(n=#Wzkg1VVX*{Mw&|5 zr>SguHy^!=K~pKOXewmEP#L^zN_M!6+A#j{wuEicJ%`rxtKl`%R)EssO`~pw$@Jl^ z>foY2U8-`m>uF|uMFa!Tr(bGsb@bJO>B+2F~^wIvVX4G@jxN~rOt$- znNjHA$rNeHZh90s4Gqmrdgn(|DWlO;%5a)W89-Ah-+`v`2EDscDPrkeH4Ip()(BXs z`hb;9?`ETSRSdvNwHwmA!jvttg&V*W+3%<}<3*t=o)kr#rZ87@5XB+xSE}m403Z@5 z_>%7P#6^jdGp~p+7bb&-N|ITV20dckL{N!pqNIsl59gJ#PNTDwmNMtjP_%MyHlh3gZ#*8DSw(<405t9c)$U zcs}V+Czj{vM9{k{=87mC)*dgf(Z9)KG9psV!t*ydO}ravFQH!Xq!%web0#-%av>mEMkQ%2cSvNj%eR z$;yVXY(|7X)ta3VB(qkjmQlOQt02)#lvTEAI_Nc{r*tdGk-OuN-J{Y54K2+vxg%;p z>E_GE>PM*j$SYMe@=6s>Ua11eE7jQKl{f0$vS2IKFl?n-BW$JW!&cA{z!T2)0+?EE zo715WOUTp2kqkD492pQraxu>EsN^%1+8pc*bqfOHNL7`j7l6-mRh?Cl%JY+I91^gz z9TTj>sW2ofcT&5Gc4J+!iYMcnkXI7ONUfqH*3alQkufkFmkNzA>4^bbsjgrv!;b4oWT4Ivy*sk}+q3SmJ;0cqK(VB{uUmza_fTtqhPkhagGo~tqqlaTG0OO$m| zKq+I&wNa3i>5(lnn(fM^owB=MX(`<6zn)A{OKaK^#NlTy880j!HzYa>yt ziz$I{24g4)i%KPjwLdbJnt&U|r83DrQcI;F9rLezSBl2b0Jn@yZ;-3v5iAJVDEYDSBa+65eDHL)wm(mezp6B)H1` z<~rh1s7cuNq<1aPgz{9gB_Q*YBQtw1^KBgQ^TV)I(J(AkIEJMPz_3(fV_0rrOy4LQ z(Zp|<$x^M6$x`*1ESvbvNBm+iS*j~03-Z8dvdx}QFL`dI-ZjrwGJIx+2we_&s8ym6 zCoW#-V@MJGmOS%PMHE_!WbdHBbR&`*xhhSMgjB9nI-`(kW`$+m6^6^n%*S^Wwu{sG zBUPKG-jwh!Gm0Z4ip)BmRr6dsHIDfCF63^)&~h2QVc?2CW40_ zX^KZIhEvK?OmPZf@WKSTX@%dL{jg4jUJs)~z?_og+RQq_>0E;dHUaHi&%(&ICPzq! zUIdb-!4iS%G_oxK&e0n9`~WRgG(bxg4rr+Y04Q2nr6k*icOdLY*5SpI96j%OdQihA^3L6vJ`J{XqY@F5FDxpj_eGILZbEp$ z`cq#~T4=i9vQcaS)9jvJLr?dTH@#Q$kAbgE7VcpBJrEg|8_WtJdQ)D)a)7P?{JT^~ zfzc7RCIM5^>q0MFVfH+buxaS%nHI-Ji^_xUWvTjj3y=CfRWCe7p5 zhxYD*VQHKFS=1hXyxs0cQ>{Vf${YLWm!evI*2<<@^HHs2TGdLHsanzv%3M0=l@RX~ zj^)WHjMHmC+1N{n)Sm3$k?CDXCm?PfsX9iV!cVgYABCAzL}jK1D;dj4tNkb|bu`LK z9Zp%P`;?WptJbTOmEDzU{pa?(=J4ac`|Tfof7gCId^%qIu(PlBaQDOgmoM#?yR(pW z@9l1vf@nfE2vd1ugZxs2tPfGygls-SmQE{V=_X`z7cxJ5N*xWKQitPH>OMZ@?Lzh{ zKIM%<_T^`U%vTDc3E3be<&B;1OA)d@9c2@;`3PAyt&nA#kj-7l{J1D}G%iXV&PA#F zT$Hy9nKu{ZPtAw>kkKcDrUHkuhJ^xD^pfm3(Gto47kg)Q`M)^&HFLSle zZP_$d<%FT?bBKKx)T)mvoN zDZqo2m*R~*8=C@OW@;ZEvnlX=6u6jHfs0Ln=dQqh*qAyRHl_~8#?*am%-a?CRcwr} z7kvNmvHh-n2+^5!itr$9rhH@X$R@&<$=Zk5Y$7}#5iX|{;c^qTrxs-N)#>U4&o7==^jnTIBX;L(%>svrYvbMDLXTjhx@G0{4kNn*z^Af$M1%xZV_a z?h5S3@~NY-eClwPPu*wvyj_7`W%&duu(!ypQGwIlApfUcRpZY2CO3_otwvr(XF`p< zoNkdC$(Am>emi=3F;E_QdH#4Ly;LJ}vtG(C;U>M5Y5h_!s~39ttLrYF=JV%^-pFPi zXHDt_ioJCpnv4wsfolKOo>|M-Mg*F(j7>@ex}0v2GPVrqvT{3)jCs+4&L58^W5IMF z`6b*aV*_-ca2fN}foL)|hy$v(?idfdxY35@ERvJbhAyYuL~`c-ofmEB{PAeQ7)%?I z*?*%jdeeqJKeVq3$?hP$sD9%HmYeKersu{+nzQUq%0{}JZj;@a%dQt2>HP6% zvK!1slG%Tw?7qrIxJBVYd{X0=-EsPs6Y0knpDKY7Cxy$pL!On}fC=zkc{|ch)PUsjrp3au7|;2Ej(j&cCN~)^fJNhvqD2 zlfs8Cr(2|)EknYr?2aR6ULd0L$D_$vFo;Ng2{+2w0ElQTIrGK0aoWExDZY>oW9g91ZhA`J6u%v!xR2F{$-Yf=Wz<#dbm#^#`)ufL9?US15G^T(s9S1})UW}BO!@N~_QR*M&ir^b@DJxv*#G$WQ!=)gl-MBNB}rG7659wYbC$75 z2`rb>Ez=20zcm^2;;@`Q9!kTpwKzXSh7J< zW-MdLw2+i!agY@Et@&Yz9~dQx21ZH3!6-=p7$q41qr4JJ6ao9t{Jeho+W%qrlq4K8y)4H^s63Czx;?ONi-r#5>7-(0*ENd01;&z{qnW{(e!JO zijt(+y7X%Um&{qerUjQI=};x&{8eoJ`Zb>an>+#|1 z$3ydY{;3S8mao;1rdoqgktAIgS~=OcA9Gf%X}KTCLb)HysG=W7wfwjrNi^<963+cd z0=OT^tK1Ji)mjQjIT>VfB&mPb*SE{UN;c%joHcP;6Ug!DJ&VfUTWB?>ttj^5(3N*q=)3=l~-`m=|%-S8xHmfmUcB*{YY zB+GC|$CO?_Fi8>(Op=6yNs<6CNiqN?36$Oq0NqLNFzX~;SHE4du}t?EhxYS_=5SHQr@dnTeE<0U-T&J@d5?>({irljNFr(w(ls6RC~*pg25d{EqIm?w(lFJ;_ryQgpyE3OjTy)iL537K}*u zgz2 zJlvhF|Ce9hwZH!E*LV9L@0w#5wYfN z*G5;mrS$Hl!|ar7UA=qh#!i{B(xua~Q_?GT3J0%^k4BV|_+iH1-E(NWzsv6Zbf=@h zlgD>!S{>j0Q8kX}Wm!EvvGa(ao(EN{8gFs0^RVu|l^(w_rAz(TDQPrzN*c~iNdwp^ zsXseqbfsHLzh62`S;^Mb@0V_rl{qWjw3LH{&$C9mUXSj6ZvCLWNrsc7uS3H(e_f#GCTj=QQTb&i;%d+mZ=q}7LBBn-#sOD*> zPnCIsHc^XGm?&k^y@MaextKr98OIau{*_!|)qZPw=SO8pqfuGXa4Jh0KxIh>s4P=w z>z1;YTslm0$=0=(T)L55=B#(ql3dbks5)gSHJ0C!-udxd(r7%FG@R#>2Jl?c0iMg$ zdbgC_=h9&YOjfQ-?>0)yob_&6N=uq=IlH+logbeijmBq5!}%;}0G}lt;Im8}$@Eo< zXi7JXT*<0+DcuG|nX}SO3q?tn3PtJu7R~LBc}n!LFfIwY%xLaa`&@TMG`HxE+%UtL zA?Pv@)KcdOvx3*Q(c@FCS|&QT?dzo@V;sHngQBF-peSiL6eSISqNJ}vQQlwgeDxxl z-VJk3vUPDz(v5R6XT6)2bCMRz)VubepXWG?4)cMY2<8m4OXg>HE^>e3Z!#OZk3>@w6Pc8G%kdl4Am+^8L_4Vh#ha5lQarxy z3aQ3n&eLN^MF}rIN*XgCx+|goz2$1V?;dlV$>i_25+ad<6={W{uiL#ZD-C5^^TNyFJGX#hJVjn7W;){AI*H_T4S*Tqgr zH+IUL^=?{rN?I>d@1$z<8>&(9BdDa&2r6kfK_v|!sH6h~m8tb^DFl^ln4prci=dKi z1eF=Y%k6#~Jb}#tyxjo!B zAMOs#m-g;Y&4;h;mrf8K?wXIsixA!}3DG2N7?qN*3zd>>sFXQN+O(*YEZrpSonFUE z%VmC$lq?z~B@2h7WC4(rYygt-Zj!bX8cH@yL&?`gL&-K8%A6%_S{h1rO+%T37_8#; zG*-7<=Ep(FqH$2Na1Kfqz(L6dI4JKXX-ff~WW&Idd|kkkYy+OmS<K;^K8n;u^xXq(ut}>d;aNsIzipS=6N%vh+Z#l`wZiXCNeV?uRC|MyT zS9kB!qe+?{@Fa@{Jjud=Cs_dSB=ZNJ+%9QLA)92wWRrYdWRq+oo6K3#rX`zXZj-ck zlC*X#N%LcxWYL%=Svb=q3t*aL15A^5leDG4OR`~jNxm+4Nw&dD<}7K`!b`GZleG7d zv}R~%Zjv-Vcu5uwUXq2wOR@lXN#+kPxn0thLMh3HDJ5=Ql#*&}vIAA9`XwN&i)5sO@=phS{w9#^DxgR|wk46v4!|5S;06iq1 zkRIYK3DG2Nm>%NR)t8oU^pH7A+O+hLe0lT`llPi)#p7swX}KRgB#%Z9$;0U(c>p~m zpO7BnEeX*iZI~Y7*43AmZ}gBkOWL&bkbHUckfli4Sbb@^A3Y?GMi0ru=^=RlJtUuy z9^x$t(Ijn{9^%&3mzHnzkU2}*wDgdCdGwHlNZM$9X}KRgB#%Z9$;0U(c>p~mpO7Bn zEeX*iZI~WXtgA0A-{>K8mb7WyEB zt1r!M^pF`#nwyp$;uc2_LDJ@5@iJL zS6`aj=pl2Kv}x%fZgKRG#Yoy%eQC~*9^#_WLtHpL#0Ahp+=TQHZ%K$IX~Xo8VqJY{ zZlj0HS<JPS6`aj=pl2K zv}x%fZgKRG1xVVseQC~*9^#_WLtHpL#0Ahp+=TQHZ%K$IX~Xo8a$S9CZlj0HS<NV@P11(xA?3>Y(l&a?oF#2qdWfqxNt=6LnjbyH zMWctfaC(Rfpoh2#=^@^d5KGdEVR}fpuD-Nlqle5`(u!&6A;oT!w3+v%6@K)PA{srU z2&ab>0rZe!LVAd|Bt(<6VR}fluD-Nlqle5{(x#<{6v-xOGw(|){OBP?GNV@P11(xA=SG2(u$29GG|GfmL5`Mi<7kWNigRBI*z3I(L;)8^pGN)9#RC*Ly8IM zA>NV@P11(xA=SG2(u$29GG|GfmL5{%o21RWFRk#ShZNE1Aw@VnqzIsg6cf@zyd@!; zqz%(Us&)0H6&pQd&XP7QJ)~G3J!B!0HeN2xj~-G)qlXmX^pGNe9#Tw55Al|SXp%Ne z52@DGmsV`_kU2}*wDgc-dGwI(GYh!R(Im}}9#TZ3hZN!TkRpH{QcOq>@s@;Wk~T~a zsn*q(R&4Z;IZN8K^pIkC^pK@UT054c`O!m)X!MXGoE}mH&_jv|=^@^d5KYpC=^@q1 z`qDOf$ebl@T6##aJbK7NByGIDG(UPs5se;FgwsQc0D4FJRSzp>l z51F&1O-m0cmPZeH4@sMKUz#61q=-fjDZ=R?MF2gdn2;XgEeWwCtsJI@)a&X?D>r(` zj3up{mL5_rj~+6ANgKB>t@NXZl+oxRWjH;g44{XU6VgMxB_W!m4bwyFb@io{8$D#s zk~S?pq+A?5q?tiAyEEt1qqG=pl2K zv}x%f<>Kfei;=Xk`qD~2dPo_K9#V$WL&^YpNI4-r#9I=gN!lJRS6^DW(L?4eY17g} z%Ei$`khJ+<=V*Otr5`<{j7ASB!|5Sq06nCfkRIYK3DG2Nm>yEEt1qqG=pl2Kv}x%f z<>Kfei;=W;EJ^dDhm_IiA!Rr{qzs^kloQfJyd@!;qz%(U>UH&{l^Z=|&XP7QJ)~S5 zJ!C18HdMKqtQdkaC%4?Ko2P=q=$G*LNrMmq=%%tb@io{8$D#sk~S?pq+A?5 z)|a-?L*^`L)6zrA#nD3+ zAZa7_rTNiA%4qbEGMpY#2GB#w>F6Q;k`PVO2I(Q`Ze@LG8$D#sk~S?pqgs%hyV)%(&z zzGX=pt1qqcqlZ+{=pj`&J){bthg8$iL;NKnnxqZVL(<*4`qHY69x`W1o0c9@y)QlF z8R{7CGs%Z3(Dx4lt1<*sP>F6Q;k`PVO2I(Q`Ze4w8)kY7Qv!qQ+52@al z9`Y?qT054c`O!nFX!MXOoE}mI&_k-}=pp`+5KYns=^^QEU43cQMh}^@q)kf?sos|! z@(oMcXnkpwA3dasMh~gN=^<4BJ*1kB9^x+v(Ijn<9+D>O>PxFOddQq5ZCZLr^}h6w zrAXSG`_d{udPo(G9#VzVL#hCJNHrZj#9tDkN!lPiBu&=UmsV}`kU2}*wDgebed!_J zrlgJAmsa`FL#k->kSd%WQU%aMs_Ez<{*n+)(uV0F$-4T|s*N5pXGxou9#Xw8J>;FF zVkxiVNSYr#q>4rlslw?YRRBGtnvfpiEeX*iZI~XCtgJ6>qle5{(x#<{RPRd<`IaSZ zw7xVydPo(G9#VzVL#hCJNHrln#9I=gN!lLt-bjHJ!K;&HUT zwAzmzQb(hQ)Zz4yI)ENhPe>2(mV{`MHcSsm*439*Z}gBkOWL&bka|hyR z(L?HJ^pHB79#RL;L+T0XA>NV@P11(xA<4S>(&~*KGG|GfmL5_si5{{jNgJ&%t@fjb z)Y0f6bvQkw4xoqB6VgMxB_W!m4bwx?b@ipy8$D#sk~S?pq+Sv|HvC3Js~~BTN0v4+AuvNTbY-((L?4eY1j0S?nIe0l2$#vhMwq!nDIQtG&lP6 z(o&z*uDbxo)9#+tq0}dzcH`1^PwB{0YW3;uOMPv+TR3&cPr4%$xGO5XhPHdHQ=M-` z_jl#=2rknxJyj|yb@$NrJhY>V95XiQu5j0Vt2J|@=-%gnBYsJDwQXX?y?cM(y>rUV zb7=I+#}hL@Zb%)C8&ZdJL+U;^#JyR}Ugd^dYuVo)ziUyhi^2cH_stLY4|hMDKYRcA z!~NkrY@a@c2tYIe8)k)MEAz=VR>+(M?3xvl>Sbr<@n(g2zf#L9f9K(s@j~9xlip+7 z{f)oE4B;uA3iDLEckpcTZlv;BMQc~+(bDdA@ikK`mUTzQ_u6&uyS;vwTpBYUaXod%Ic7TRxPEc3 z4`a!jA48;$#t^B)86tI`A#%1CZ`HR~AtKlM_QE;4Jf09Wh^A)4n2;=8mzr&ukU6W_ zFeaoj+Eto&?B9hknZc3AD}2a-XkDtKhK0r@L4SCvJZBUPhX@s-Y645YXEeK~ed?Y+ zZq%N!V0Lw{I99GPPq2qAM;vtdGrGfGvNSF2##m2mI1K9kJ+f(Tf0M`ib!wmZ8cL|TlcW`5+5IvP2o4kw4y zeR7D0n!Sn+@lrEiHHfBW!*GynT?of|gM-Xj&931fsnM%crQk(9h^-2Fj!cGL#!KI9 zXGQ@Fy;Dsf`o}CH$s~y=n?U0E5IH>PGi1)}jWVR&-#dJ&?wENuQY6xd>{Z=)_uYsz z=wYtMAvVZ&8M~HPXrk|soD)BdbXRwLB8?IkWe%HP2amVt&fcJ7q!=sJD?ZPVF((tQ znOT~RrDlH6kUAPPqz;FM)O~1(hnl@g4e?U5h0q(b-7ps(bQ}q;Kpn>j0DM6 z1#Udw<)&scR)GOL0qmh&lAN<(W^w~58j$1VtLXBf+8`Wi5AKnzystOP@z(<6J4Sf zgtTx|V|-S&z)0ieGG6wdCHkC8 zlRZNXcw!W$*OcZ{fkE7Fr=vg-KRPCnMk*wz7eT=o9dc6#Jr`Psl9a|blbBw2CDd>b z>tjrlTpv+e8Wm#35*;n|I+;Zr88tqbnJLwq^s%L8=1}>;mF)FjnV+lzDk@!u%1v)l zGcQWW`Qy>lESM4^zlvMc>{U#NmzpgE*O={wK_Jc9 zh+Ge2O{Wa+8{Q0Yc6nkEUk9fDrjr+^S};5<aV9|NDM>A4nnefD9g);z;ZT^w zM*k9{Ep&yM4l!mXvy^ImYT>0%jOxd|zKYV~D-u!czC{l~YuGWIGJ#7o8<Ai&!`zR2 zRosvBU2ZZqV;Q^Vepu-$%-<$*ChzZF3R~!9ybv?6x-^&VOmGpWh62O9P{GK0uYjU( znj~CDxkdNfNSiV49RFkzW0Z@$ppJB-Pr{7(DMcL=U7B-|t~(mnj5E>zO+o+87VCHS zvNv&DW(c#C(hi#AnEzU$_!Q2>Wvd _Bf}nsl^;nHLr0{PAdF7EA?^U&XCXnKu^X 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

    m_8OQIXNcn2ZRz-%@4n>c#7Z0tdKk~-IS`%&TC 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


    dPItZ&RF);F#f>l^RI`XX>YTCMMo zaQ|~@^Nm4mzG08rd}Gn(E4UwHEg{?|sC>ut4_STwS1SUmasPuhAE*tETa&t2%SA}^ zWRgJ^vh<)c53e?9Lb3;c5hJ8CJJPad^mdR@NbbbZ)U}6qp`!N|f2n=fva)EHLll>F z!5b0(((Yyw0+U~%ku(b)2$lx&n!*lV3OWC)zlA+Bb`Ey8eiytTBk}cadsOEK$?$Vc zsw(&-H0ARhRz3HkfYWx)+!F~x%#*9H=W{>i~w~FJgb9$LMGugf06|Er#PLyDVt8;v|gugy4UIZaonF$ z3iUk*nb~kZDAYIZQK)Y!LVX4IW31)dn!KW6bMrfhFAwQ5KWiW6wwX_&Z&lbQa);Ay z?Q7(&8%G%`0%Ym&7OZU@q{b#^A5YrNd9_I@=B5HXxUCXp8*>lK!5@HWF#DR~C)s#< z4K6~Mw3GLkP2%Oj*P!(moPEX7G;bb@b`2~~J4mO1u_EF7wf-H}IIGproTnmd!5SQV zC7PE-ybqt@=ugOs=K3@UQtvR|fXst5fG|qa{C2f8=pQH7H)WISo7T(qO#!*S`iId! zrCi^Gz?lvGgK~Z29_9L`BG*^YKgL=@hwcGVo%}9EdPDYDHV ztaYCqWHyP-!B*yRc}N<~4U4aCjmATRy@qW_G!5Uc6J*DJDv`&-GoewQc;6}rFby=H zaPhe#&wy>~X}8u1DBcc;X;MRE+Ob2)HsA@Ew6MG>Q>Na9^%3xdli!7Dh3x>x056N@ zH})e|TKOB{N8vT;nzD??qJOk_PwVg>npe)V=cG1uk8I!ehxmNH{Y4oKR}>=e-Qk#<6_^V#rH1q%I$~Qgd0Fa zkEM+w8i!R7cbm)%vm^oLUFV;oBJm_f>!tfJ> zD|nTfJ2pc_z|O{#3WBi#@euG#4nBIue^`EAC0EbiTK2w?yR+(Nw>NwtssLJRKpuDy zt_5?%eAVh9bpGV8_ez8KaYB7lHle<0y-?qDFVy$LvOQBuoxTULG8^Crb^69V>hw)T zr>_8hjJ1T?_Z#^+`c&Q!`T6}lZ@u<00_X7n8dxvw?<&AUk(t00@Uf#~uRiiX7IZ&m zmbv4938QI=gNhDWkLy!3=wyBgsR?jLq1a#4KO)(G^n1}NN5TM_d@Y52lh5IO1va^w zi3;${ov%J?>{~v8?2ns6IUV92D;i~g3$g{+c}EHbOfgUo^?);hpcvF5R4@q1k+o^9 z2J8t(|4Etz+dfO%Uz3W~H^r&-P1)4?ruAxl)4f_>M4+EiuJ1v}%!d0xxxR6aa(z>g z>npe)V=do4hmYSitk+`xI}u>*1Kc7$VRz*-Vzj&7tq5Ycoyv3dQKAryA}whELUwGD zlyfh(JxThRvwWCwJ0XvP0N1?u>S(3xe-O2O<_=07m<|dP%A?pzgB=97S&A4SsfiC! z*zf##On3O=cc*}G75ZT#WCxI%wZ=QLijf2`q-NcbGHE`3VkZ~U`am&c8Eq&J%#n!) zNO|8BikTzU5m$R}piG1KaYB7lHle<0y-?qDFVy$rfqqJzz6Y@~8{h|Z`o=x#^i4&l zuK<3GwS+SJoloBln;%C2Y+T#3H+|6NtE7UCEfIR6Kt~4}U2vmxr|ZEtBm+ni0NU6R zb7u$n0n4qw6kt_L&j5ik@OT5`j5$w8xDN=+bCTD__NdL91_A3rdfm-?;;*nqtW>yk zT%Q_)r5s2|&>JAX<1$dIsI((d*o4N*C&_Vgo3tQac!8{aY7DGRQ~*#tV2V3}ztbL3d*f%QvayvU4XBlCOP8kjI%No@aI+@PflzMQJH&3dk`|S;eJq>Z``9a-&Cae3hu{P%PsC} zzFq@;9_hVuugQS54{(F{2SF$(@fRVaStA>D{n^LgWa#)lwe6$-4(*)mKd-|qQwu-x zSIY~6$dxqg8$oXHF+U3r04W};wby<%f?)8meLs5U-3}qt&2D4-Za6#m6}Xx;6!3(S zJ*VjapM(s%i4jR<9UFt|0QJ%80VDusw^9=~X8mFS!d<|Id$DKM7h{45Pb;CnwG!}6 z-YAs_{}d<6H)Rv$o7Ri+P4}XFKc3T1smb>sR%QeIpeEnAM@_z|Xz~@nkFl0ekN*3K zI@PT%uhRCkpud{D_d$~n3q1Ee*H{IQ!D!o&t^}|2gbBCZiqTkt&Lgu-@V$J377i?a zvh7#N{#!Sjqzx!`+jSt|E#D^<0a*?pweCI2{TG?p>l*;Rtv;#|5D7X7_9C#9J+bRmACCKJWa)tf_$P%Us+6!3esWAj z;hW<$`Q~hzeDiuuzIlx%-<(pD??K4ShWkNHzG;t|d~?y{E4UwHEg{mr#`pkD=Z|#b z6|61k&mVO78ex?&FN{B9MWNf8!Y2RUPVxgpyZkT6dlqk@ks`Cv+QG-OzbxZC32suv zh5|53(VIj#aj{+V>~_f9F|({e3Ig~5lnAh#v&<(T3Lzg3?%Zo8a8jbgJf5DDtsR76Ve0(exiQ9bMRI6x^JXG{5T!H zIhzjOyk3WIzSrUV;ROGjQiktAtjq@ZK^eYjk1~97k>M+VA7d?{ivHx&cN5&J9FKPA zukF>FKgjUeAu&RFry9+e5PBYjpNGJ1CFyEo*9qOw(%y8)T^-h_*&B^t7=F;&8F_-~ zPQbrcRv+Mb_G@CjfFxxHKF0xp0brf_!VJK!Ojej=gIK279x%@T*8WCVJ6r+M30R0V zAYA=A6b*QzNi+r^^J4%sFW8a2z1uS@6!wGl?#mI#Shy(%Ece2BnS_t{YEEfjKTd{k z&L+b*ub1JQ*U0eADP{N`gv@NXAC%#n_9(+Q7a6{S`!UuM!hOwo^Sg5RG~8c}_#b5W zK<9&$$02eK;v*+@4(mOzFY=%yJB2f+k@0M+H$ zXow?k&g}Oh0%)fK;iL@yRJHK=sIMy&A0!uV0Xi#%I)S`95;?3FRx7Iy(I1)tjkLeq zi!=jj0gNrdJ>TR>s1vZVus2BlxI8!)tVhfEV~4W(2Fd=DDzLF-+*msy^2bB4A1A{% zXOrQZ*URwDYh?K5lrnq|LS{DH56bXOdz9guiws}E{TOQrG58hhHRvbV-^=gs$~|iz z;|BMwdLWn%23dfH9nsFyb4YkXC2NxV=mQqJKL`HpFAP$ z?ZylkeeOuT6ZkUMv;msXp86XkD&XP4&%279lYqbav*AV5az=nD;gfWimPVc#u|M)R zloagjo0F_Qb^v@Bks#=VJupcj1)c#34?a0bT_4$jMmUamO6_~8Bn|GziSf(dU<G)Nw7Wf$KV&j)VDH)bRIIc#sZYg#_RC_X>dPInQzXf%r~!B z=9}-8`66&Xr8M7zkeLnlgVKD{9;Nx_BF$HDKgL=@g?#~$o0Ij}_BF%5n!*1;l#jWX zrHBm*lhxM~->?KbSx=%}aM^_8TSqY-8{D*WY0p09FwU(%pFRP|Yge~Ju#zIYbq|7c z(E6}05SiFqEF21GVT|!P;WghBtvhBJ-aM8AzaL8;C7n;g02@Xh_bPS*0OA4wn3aUTSO_Qh zFkiG5>S;l!;+d@f#n+l?*B$&`CrSU)=5I#@RQ?m&#);rAJRvRy;7@=~lAd=Vd4JJW zygUgd3&xg&$1G(8C<)lPH3l*Zqyah~Rfq{l?HeV5E`r+ET@$j{hhRTWnQzXf%r~!B z=9}-8`62@Sl+t_;LS{DH4@&b*dz9vzi!@)s{TOTcc7h-DzxM<*+5cYZU;7xhr|exE zv(8e+AD7>)N&G74CUQMs4QOS$`&i@2ANwSM_*v+3cE;}VeJFLL|BnZMS*Qe95!eTd zeGr?0&}T_{@crsmL;@Zwy-InUwL^Nt&aRd807#0TLrFc-O zYw--gOI8xi2z2`$r3kL)+SsW;e3SPg%fKCbUyC3vMGXq;C=HNPz@MOdo+mj8y3?M3 z_dv;@lTl(l@xRs_frrGdF!*S5%~nYJJnbm7K%)X4-kvrE>Mt951nj?lKNIfDe*7@- zzb(>-68&%MD-rTPh?)72Kd8<(?@*oZ^<4|{7vzsImr!+|)c!q_uanPZ^k4mj)z5J& z$j>-Uj(bF=Mqrod)lRw}1kJ!D5W90MVh*9vk*lA?hdByzf~Y1_FC;$Dn{0#GFTX=n zAKhxm-XAq@kKb`|OSwq<9Vgupr}K7rJ-j>qn6(QmPl9*QORmFO^zbb39k5o`E|xXA z1z8&(egT?0LW|HRtYm#)v$NC%>}Z48EtK)M!agmDXCL7?QMP~C*5mL$mr$SV%4_id zUaIehBmcJrmdXM6RAPNEFCSFvn|G+z_xi5I0VobYjJbrW{gwRGc0MKl3B!ABJKypg zHx7UuqDue`&Y zVyW`pSC91*@K^lr=ueJ?VlSj9uBsReT=M+N1U$PvvI1sd)!`b^yFm8e zvo1Sdg~kVfEeT}fT99WT-fw&~sCW?dvuBWV=%m{N=jtje8-@Ut3Rd$?`@FUTKbE}_t0iG5n?Z{(9yW&b{O9`8}e z;}n+3!IOc8kY^p^2S*zt?-O3PZog3C7&FEa#Df&Tb;#LcHH5r&SODGu2zhlI2TK_j z?ryrhjoT6U->Ij-8mfJsA^ef*=mbkGn6BJ%3Fu9wmzD(x5zAj4g`zhoq43}%V_HIx zAWnW4ln3n`LeUenLj<_X#b@2@moX=S!MdE>PPwL@6ZrZriI6`^#_#p}`H+9Lkl))P zeH8gqD)~K#nfZ`EDCIZrP|EN1T?_ITb_R_*f(p(bsXa}98C6D!irGRpkkRm}m)1@EW z_NkQ9Tmbfh_SC=4YdHDJz-u6PV6BN*A|3&m0*TVW{2LEKaCj8IiM#`ii_9gX2PKgh zo@YKtDZ-8-ytpk}K1FK$rpXV*@FZ&#wuHzKkTK!Puj?-n{zu9Ay?#F*{;wAFdt0gx zC;d}O`aKAp`5b_trr*3nO~2Q7Ee=3&0AkD~WDz|fAZ`uNKMS$(DC@u?)`QQ6(c@~Lf8ei{o&+-Y@Dc!M zI|8@$&+QOe*c8-(9rGosFzx>c>)4SfQf_+xs=*JKVrl+NGl_wzXbtCjxVmg>U} zKuWE@2ca{c0}vGZn|CPo_xi5I0VobYjJbq5|JlMDe-8V+^Lf3=1Jntg`G@POt;0FM5ARu2UW z)7`_au}z!@O6b@%E)5L( zy@3@>IRkqH;#p59Br*>Cev!@!)~+=TPW~1U2U*{gX}XZjKIQ;K3I4r)Kc54zTJrC0 zsXpugq!j&o5IVCt0CiCG?`2T-=mFG4^{;pUQReb(`kyG>-FODt7udgjvido0kMf0X z$NjKbd=2IniXf&jkpo|Gj*^OBbNX{}mS?%3MNK03`qb!`l1z&i&^*tDoQo{H@`< z_ECpNXWBir|0EA@VJ~(8^G%A{WXQ2QM$x2hNB>*8+U#ul+2`jhWCH_afj&L4_bSiH zY9m;_>0^}d*ug)z43&R}wS}8Np`ZGN3GGRVpTq)Lce?CMwhsm)p*pDv?k=xqj!{b(}}Y~rG^I` zfI6k_-=m<-fWp{}t?yGM8KI=iZag-wobtSAZ4()`$Nel>Z2dTRHRI z`t?sfhtLE`F=KsJgTK0sgOL;r7+peaj>=(%Nu!%Kz}de;Fl(6IIu>HHlceL1gUlg8 zH;4{q%e-+Hf@QGQPUq!sul^m<<=CBdEY5DH+{@&OXSXc%EkJt4$LM!LQlzYcj|DFQ z0;P30a5dI6cjR72AKQb_D0w40@Nn=|VmbjAAB`qi4?rEM{8#5w{;Lxx|JAFM|LT;= ze~)5kJ{KS;{a07J)c&iB_Fr)UqRb`a0;t4~CIklgBvtPJgX*7whQLuJG(__21ju%# z3}GywdUUu0aDXyMeUJkY4*>MAXd2?|6yDBl{~(Qi1mmWfCmDV0*JkNG!~F)!uiz3GZy(a2kPOY0AZb9404p;s3XTHwKFtx5;}k*a@nKGnZEf$CpZy=JM^-|9!}>%)eH?*(7+5+v>k0@xkm?PVa#OK%kBIALG}Z z9T910KMB@i7ZeP5PnrjeZ+CXPI|-4U^+Dp>f_kxZRu!KUXv4$P?^9v7WWvF1%|dn3 z0>Y((X<=vNcD};Qrg&3u8sA8g?_e<80ISr)3OM*&TJt~8fNv!24R8mk)YDYZ$oJJw z@rtl+*p`$Zl%D{9@g(V*SD!4A2M{U#SLYM|s}qR-)%W6mG2wqo^}k24GoK3(l>e)% zUF!eUMgOn308!==A^^(B-Vpt2`CZ;N0SDlN3ZRk63CU-lCFT(5wralQ(Xk_FaR3y( zevOPhFvT@V6j0g65g^dUO<+C&XHx;jI!2#83#{pUR+#UzYHJZJ9L0@lg^2ao@20>TT{4fq$d~V4Y6_uudQWSl>$kMpOV&DgZtTn)$FlC;?bkyVL-ziw0o9 z{wQ;~#eU7}E5%Q9|C$Qu-oCT?Ic^DnXSaoeRHzBAEfvr^u3&dm2ChPIs|59HrSxN= zLbAIGna;@V^uR&CCorehFV=+2FD(ODD^Exzom&4SNeoE!T+=G%1l=beP2&u-{)AW% z#C|)Kuyd;c(Q9c;;CJ(BDqnvz1u&x*VL{O2h+k!d%FfpWDF_Y_fG}vigOUu@EI|+NqtRIEA2ceI($RWbGAtt(W@bAOyr>x$HlhO(; zk*WnwK`(;LcD~{0cT`tpZhTCvQ*idHnOrd`0_% z1#zH`=^TMbExLN?Qh0(?;Mn{wN9D=$(mcA0H6n(4&FbdXq*|De`cFH z1L}B3u{G|3;Rl@tXQhMu8Vh05ZVA{dOFzAlH+O+;+Jj0W}9Rvtij@FO} zqzk8!5rY6>jf8xY&*kk{owOg?@ryVYR4@kri34KC5syA@c9~F$4fb}kQ0Gpx%Sg=3JTtYNJt^0TW zG&iW%XrVMDK9H5*SBY|xFUJau-_PgF@L8^}m4L$n7+;}3`h5?=H{jWrBkKOFC%Q0sFS-@2Pk>H?@1W%%_C#%m!I=o`5QW9iAsJOB=kMK2NzFhXNQ}u4W;sFx{C4Y7W*L z(79!ivnMx?6h12hk{x0M+y(nGvclDE7A-#utNA7=4lEjw6uli({6@*0UxmkyOxS`Jo`D8EU>V8+tDh(2I#}o=)eLGEyrUhm*!pvFFP{G*Zo*aEr9K%A zu!+9LsO;R1e2SGC*_J?%<>s{&qHbn=pV1JakghYS{>PZDq45;Pz zR(`Hd{Wl*K0MGue*ev)*-y7+2{+EjOMXUe}MxKZ9GXnhbJHa?2JzzPBZ`2r?j+h3zv3SgW<=Ut~SC{=alIVha!q zNyHnyADr&|f05(2|79l-0wZ>Plp@bn>iDK5Jh?@)H?X_lCz24L&;m)*sEhU63P^TQaqW=#vfKcLLzmb5Zv`$vQMpv2>us&vh&#`*)1b7V05@S#7tB3U25kRB=gcnFT z9mX4Fd`bmK?_lXzAIAZa_-0KIZG*3TpBXl(o|DfiO##>@_QK3}GXG>jj0Y*BPyEd| zn6mHkoObpB&&;~vt(SX|;UEjriU&gjAu9>|p2Xs4k-+=m;2`??@fh$ei1p!6!V$bm z1Lrjv^RJ1N0c`Tg05%C^0GoRmz?js3QXRktu`{0w5Y_>#cc}x|6dl0g0z{ch$OZUT z5}=b$^yg|3pyq=PARx(+KBl~jEpSASgw?=141rn714nTafM4d>&e$VK4KxvA4?Z(? zmy6GNrG*4a0+nCkBIS`vM1#=L1G-6_Gp1$>l6Ggd0dQ*y;0n@)K#_nn1#o(iA_Vph z=MNQOJN>wK`!Y3Rc!c~d#Q<5^wG<2pHs!H2e7yRQReb(7hv%5y`coEL{Ny( z9s2~g)W6!_mD)5Jdg=gn){oT6ZM=K8AUnQRV0jjjnh63ktIPk=u~!QL9xEeGt|Z>J z1Mh2}NjtqyviK&A!#BBp=eCTU8u$b3JQbPsqmMP~fJ(Z7KP!V3!1!Rx%XO^U&b#Bn zaQ&-WBJ~77o2wyxWUdp=!pX13vl%CW>pw_YVUBxxb@S@Zlj~k4N!xXbZ#^cng#MzxZDvX=tqw2Y&{V zA%pla^VLU>7Cw>&T$y{Be{k|==!6Ssrw_J1ZuUmJDQj-@71Il+kR${90e}0tvJ-g# zkurcyJ{iC!fec`CF9R48{wLJ|d=NYHxd34uzEG|Hlx!k${_W?dnqu{UY z0Ppm`)z5LO06<3n>`+FxAJBRfkTiLHtyV}^A5VFZaz67w*vrpW^6pq4nR`0oPa+zG zrDHo*4j0?8q=W?HfFw=<0E_#8vR)%;2UZ5^0d}epKq^m5uO7CKn}g#+W*v*8Za{T{ zv9g{#>}c>erK&KCr8APIA<+7|tVK(a>^?*Xo(((g<#>RT5H@jMDoJ!qA;QRGE(mz{)?ypB$fVq5H#~)e^~mj-lg6b2_D7k^w<`b=O#5knA1HzEgs|1maU1?i zm7x-?0gkn$Z_k2ma`4MfP~0p6E2GX1M#9vue2k%|@d;yWI7&tw5+Zg%sLtqc<%3%X zp|pL6{QBTlqaG7sGT4u`;=5S5-T8M|d8|nC`rMIJ2CD~t0xSaSKI97U2ZVtDuK=$F zf5^y{($Q&ke0joJ2!{9pi~uzg0(`5PG;j9!w))LOV&{;qj5%EeAW{IZ$tM8VBoF{> z?gap2!vCZSfDdA4HW#1`D*!gTQ~+#?0$_0gqRb@}{?85!H*J9G0%&C*l+}%Wj$0Cd zkjofLLTuUqXW^h@l{SZ1D1o!+`eBt6_3h-plfxPceLx>|1G4*P?E37_02SaYaswxo z*RTBw7M^R;fFwri&yP*vs?aB33cG+gX$@8+kd8&*{;)cE7fSn`Kgm%_{?@%vxs9{t zZ~-7Oum{jtVbVd%9Z5|ff=}1K4le#?k(xt&%5iW!=0I4$`;)ZKMKVn@<6- zO`rhSu2KMOlPUl{h@JUdfUp8!vr7fQwkQA=7a+=9zO4YL+`q}k+J0&-piA%^w`TxR zCI<`;eplk;No4M^P_o^2SRZV(i(4_ucLxD>Q>Phy_UuSpVEpJ;AV=Ox$sBecGWvsn zGw_aeaK}cD7Bokoc1uLQ7{0#g0ukHu3_^FX&IIZMjjtQrF!J{n`Jen9AsL*+En@WO z%Rh?HG42vM5!@EIg8Y@8`*ZYFVn+{;ZUJ`K0BePu1=r_l%oIC8vQB_DQU|cjrvum~ z&;e}kbpT^rfTTiz4`OFN7a%MI*z8gWuq{G>#RZ5mmyipf(m(Pv<__?`jQ)E=!0P9? zaRF}R`f9h4N?@OqI6!J8?d2(fS<2N2>f#hofaeO>BSm!V8c7`!@Z+zL&0DT)LO(>> zwcBzn%>)$7Iq?T=06SM$yYp!RnEmCu7MpPDDDPU z1N8AEDDS~9fby?mI+hDK_?%<=_t47C>^+?aUS^PTw6Q3rgAG_tsEro1>A5q$Wxr; zYS_^r^GR*rV3``bJdd#+F0wjDUuS%i)nKZC49<9I=0wAM&Q~uXf!1@Zn2R%UUag`20 zFx5Klq%co_Z2Y?Andph9bWJ5;lvDsJy&yM*a62go{5!h6!!{fw-*3D`)(wSi5)OpJ z1iymrs$mGG9;Aj~1#($ooiOfr7o+pbPXd4I>%+HT1PHOQJ3JMoIPh$EQN4e{`o`yA z1)JJ(>y|r8MFp?O-m7*S=L*KU4q2mBLpTBQP0%>!=dLG~hJwRywz%1eREMadWMd*{H zCrBMIy4V+#cBuV;KjAhdZGvJxVU?VPUq{ew_Q?0KquMP9c(i^w2mx>fM_)GpGU*F4 z?#BJY1vvP+;YnC?I4_*Z!@FFC5PoUf6)fhrGI-(%FdSA-2pa z=|~;){tT=uwA7G*e2Bjd=NYH zxd353z-E_vfNjwOEG|HlxrAJRMtfsDIZ9N(vU(D|&;JxIo36k`{fF?O^twtQgz} zqIx?SnY98PflLQ^nS)>1ngfnL8e=j|pf*w!u+66m*d|Z~Z0}V8V_blwvVad_XFeAo zEDPA|QWmf+vVg?}h%%RuEFj>aQ2$=?|3DNN-XLf7bKJN9gG9nuC}0a*TVz|i-I?4T z$@XQOdLgPG1VU*epgEwI^t;LKVkyMfXP1!^CRDsey}NP z1>pLVTPx#ONm0WDdXK(tSQAA4bQShefHy${Cx6$i>X>jRlEZfJj-uHlHkDn?M$@T_p?HCY1$z5IeKE z09{xXu-&CBU{_=Tiwh8CF5f;C;GX!ec>!$^SbaKh_dym=Q{qJL7EiW5hoqf}IpO|c z*CgRl{XxZ-0>N44li4N$w*z;8Xo<0pnh`kr3@f*dnZe#+9FW*IAp*XSiy_WMC6?GJ zzY$Apd_^8alz`P^>2%x*o`Gkh@PR`_)D73M_VrgwA%hc#iQX%9I^YU&m)b4P*6Z?p zfStEv&GEkcWSucej2lR} z(lrMQ0GsOH$Ly`z4^(n}Qs~&xRml6?g*YDoB=L@e0PT+q0y%<8YUz*&O+=MWVcB^CoyQH#!4`OFN7a%MP*zQsm zuq(2F#RZ5mmyipfw7(BfUxl=SS91Zn53+!~E3gc2|0toynC>GSd zCXDBQa4S*rqV-~Eo+X_N5Gf1T<&y>M637B}t7HMYq_ThyVrM=VAS?^m?ot-8E3$ya z1&A`25Er0x0JF$n#@ZZ#_vml+6Wo>n4sI#Lz!2JiEadk1U&{+nsg~L`QLBNH6f-VT zrKi!JmC=g@0l(8baqVq3pzaZkBQ?Mbn@s-T&k0oGbc{kV1U4xFkmDe~K%c@S0s?k) zv9#yobQtaL5r%_75ZLVhQ|3*U!303pu~B_u6B_&UHzK^#C8iC8zLEqwBkr(6Q> z0L!%_7h1P#93ocjDU>UE4E!Sn0lR#HfL#JX!0uiU@W%xKx}<{Y!w!72= z?1~;>!Tu<731L6ME67W*uRg&nKi3ETACv%L-x;s$;!bgSnRaNSM&5}ULAXQdhFMd z?9#GFybjjV`_73yG{o_Sq}RbP?ENT+2or!bH+coT0qh+s#*WZ1ASr*5!T?quVw1ZlwrT z6?b7rnfw#e1;$ID_>rs!po^3P?DEM0b_wJFyL&mnnACq#J-`RCGoK3()&p#JsR!5< zJ;34uM43yd2S7Oho&2sp`6eK`z6aog9v}oa;2j%L3nlc%t_eTwG~U)Bu@O5p0GAX7 zR!pF+&2dKen|wA*jqvF9i=7f^Pm(&PKi&lJSz)7F9M8`;ab5_nd5cPd@rxun_&#>c z|2AUd6%2b)A6%KVyHxyfXLu^EW(OQD*KZ`bL(8PCUHB5bsiY%t1kRGyAnCzdV7a|; z80_rhqucB`T@OH{9$=SG53oz12iUFB1MHIO0X~SG`CNdo9$>pmJ;1K$0Tve^%3MMO zK+XCq)b|b#_Q~+}`ReDmaRI1PGop584r6?EaO0dAqHgl*M^T^SCl*1ZO^-fNu0_Jk zkGK!S^LC&ea4NX~BL*&i1ue0X+B#7^vubj`o!baD&eH;tMxEmmoDSf0^mTws0#^Yc zA=nOfFroC~1NBJpvr>UyaslKH=sKW2(1;7uNKS+|BD=vetM%FH$9>=#SVO)4Zb}TT zjP})^?@p0gX`nn18_E4i{ui zVCl?_tXCWsH2SbjJ3bJIh9*ft1lOsSH6eUF=&{!TZrXe#j(QPDFHx2 zq}cIVnn~mWMCt){`Sbw01bTqoDm}n1sUF~i*qP4-2?W*3nyfh@8ERUdcua@-G@Zr zAE^Y`Le5-0(7_ey{fJiw$vfDeLZHtg@iLV(>ag#h~^1X!>?%3N--Us-?mf&U<% zyi){LKf$dEu-KHz&J#$U-Ez+|hu9GogruKw^ua2So8mWxYCSw}@NqS}JNQph0cK^O zSL+r8jvi%hxmPXT#&q@TFvH+?BbW-xVlQO(De9X}F&2k^fM?VCdLpMz$E0x=v0`ck zT$vSyy|Wg3e`Z7qNr~9oLBBZoI^)@R7swgCtd&W+6xb~qVL!rYbHt9I!0r8Iofsc0Eb-Z`=klAFbaVuL3Uw>_>$F z3M9S)->1C6NZL_7(&0eagSW6_iW#3lp84c=)V@h_4CG+2Xd^8)Z}ywW1Bg@r?DHuA z_6ZaK`&9~neNqL$2eC7s3lLTS>~^UD*cS!B;sQjO%dHEb_5DhI$}`;@7o3Oy*ndy} zB-Eu^eU^0jC`s)`o~#lZ)aEstlSZKI>h^9Lc~b8tIbe-=B-6Rq?AN!$en*EjoP|~j z46{HeVKpH(!8NmOR6gE|)rO5vz5-5??k9~-Nq|H@cFI_>GO(-@X^=|Z5n!*~-f=o8 zNTB_%YKfJsb=DRnzNz&$qTc|{KqIPIH0PJ?D0N57=z~TZ#nM+6sKwSW>3H0()GX<-)fcg(QfOcFBvrQa( z6`;GTt)HdckC+w*0r12&jo;76)jqdenT$Jt$y?E2NVHG?01(Ow=%fxnbX{rlAT{yH zXS);0+=Hyei>xqQ0H}!8;@7){wo;Mjj=eY(tO*V-;;+acK$fJ(0G0y%1A6d}+1>f$ z(-P00g^j>^t;7|w699O&%55LJK8PMs_uf94$OVYh0qpbX0QL!V0Q-9#z!(=GsSx0U z*qP4-2nzvryA%TKix6OO0iw($L;zI4AAK&3^f$@x+t*p>c-H22^`AC=e4q5VaPc9;(QF7w(1?c==B4G$;(rq0XSaGI=pEeFDCF~; zKsU1ofa7#f8eolHgx<(oTZ181MtWbK(;!!8Yx(3X`3qwEgSc(1a@zE83Lp=X6G5wh z`%)AzDJ60i7r#D*51t3E|4A|hmYq5Ky6i%>@|X({DF@i+lLPD%$N~2Ea)2=|KvF%x z2eC7s3lP==>~^UK*cUy(;sQjOOGpWzaj3XS`&S9>cbo7Z{r&8{m-~&vJM5$!fE9NV z;agEa@)P6;EOEVDnLYsk97Z2}cdGG6X)v@3HgWRuS63-Fn5wVv4$RUegMhtIvA5Io zVqwUgd-_ez#O=@Yjz-+aqvj5<20(@eBK+QMSsN6LSSkBKqn3E_m4y3n zk=zO{2J6on7jWo%AD?u6|9zzTU!PC?uTP-<*WauEMK}V{;(!0g|Mtw;Gapv!wp*0F%xaJBd}Q!9+J~LFeUaop6?E;(`Yauv?4N#s7+wq$Mo*oek~a z+bKy+OYvXiuO{E<_?;33ZPox7%xJD}>S+89Ad@=fEjqtGZ$W{?gj{QXDz0z9PAdB9 z+i+ z4fvY}NszFfu+4L*#p5xQkCg7~^GWyh38ee_d+ELil#iC~`}*bZ_w$!u|I5GBU;cV{ z8H~3){{Q{(x4*p>@c-N8r@#F5xAnN04gQC)o?pL9J-^{z&(Gw?0bN}C+P95^fUbcS zTMhy9(IJY>gKf#0oq@dtq)o4^_05C7Lh+L=&Axy2=OHXNRo2k~63{t|W}30>U~{oW zu?6CY2#B)1HPWg~5YA5mnuBn_06QEMstlINKlvudHfhi+?#NLXQ?L%{Lu0dNOQs57 zn>`hc&hKc+g~8v;I>&$r;Q!#;^F>k^-Rds7;iI14pA7#)_1y4}eqJTb`ezA@Df(l- zSngG-2A!O$R0|jroTK2=OI3}80tr3VJr-BL2jOpgK=_6v_YRU!f-g&o!4g>~|6c+M z7?GsfNC2{KUK=XX!2b}b-Z$h^?;8@R_YL>zeLoKWL$rEdH2gn^oB7~BEa}(pQqpg@ zm-HiF-U&cflD}uO;iL^VV>11)kbt^DN!8@wCEpBWKrg2e8Ha<7icRGtnMUdZL=(U; zIrU05Eus}N2Ue;l>LH@J`nG3x6xXDYek)@7Q6eL9n3kJA`ttzE6v%B%$ZZfYi5tY2 zKx;r;)mqPSo+K7yd*&`=G8o}rX2g_S$d^hrgN>H<3N~73-!xh9^Ys~4!tqB*zdsxP z>+I~kTtDl7f@j$HeG|cdq;%hqPr7eNAl*0IOZP>%;6b_5}iM~oJV0@p;zC&tt>=wb8GlF#GdKQ>1;ee!}vAP~9$Tv)d9t8D0S22Bxg@=uH;1GJnSa^Nkp ztph(~@~i#&h-!-Oe?Dgd-5hbMi)PlIS>?aI=6P<4I#D0AQn9`9=>R zgX0~6E3Rhk#%I5KCC@-}DQxUkV97++Mt>fd$H!1dMXb4O3lDt>0-xk(n+)UXKuHQcLp6_hV1{|Dx>Ey{mX>#7qYLZq_O zkWblZNTBRAtWkCv?vpEqUK;SO_ z6ye!t3j!l`orZk6PD27+r(un*)9{F{(+e6d9Ux!7{Px$w-@p8QJxJ!m`mnrHze{#=uZ zk*8sPLadjvE}k;2KPK#ijt58zYBSGQw^P;xmTrw)c*?9Qyv5~{tK^)pECigeTrytd zlgvVw-(lm~3d8Pbd&0+nx7XY~znnq_vyGN1BvYG^0NG<$A1U%QQWHz85!*Wi;F6ErYdpRe-l%7NYi!hV$nGki7!v^eZR+c&;`SLje zLq=Ss=W+Ba)6Y0cH~}OPywj&?M=r7{NU?w;BG`b8U<)yp;GHd!#P#wW!WcW`Q4;$` zLngEka73M&Af5NJq$+R;K$EWLZ>5MpuO)w_XZY|&2I9@z*7gp{vQd&`urqLZM`lEd zDdzl;j#%!3^c7<=NV>q>65O`cz&ma%=QLJ(1bQpTU?XQAH4`*z+{WpXK8n?|@&+Nt zu-bZ#A=3l&;=r11UVUCoRExsh@_hpNPN?uC-i(yb zcd+H#T#<_eulwW2BtZm`~1WOd#hpu90&Zqvf0yp#SM*T!L8tAV}uJ`mlD> zuuJWx@m{;h0(p?@=$P2c(Z&>)t<-+-Jqv{g5Shjof(MR_wF39mcQH}~Rs`=I#RwZn zL7%1c3}#VA2i-WI0Zar93AA};uFT$wTCAP4(E3gXUQ<{nh(=tJ@Ek9Ndy)3%sn{P$ z8dxIY}`U5s)^5T7&%0UJqJQt=QK@K~(<2oH)hKI1t$HjvCk z>~dV4z#li(ZW=$Gb`wopjD;0aF1`Znm?cSKlhy{8k5XbngwZs|r4U4@PDV^YQ^Et)!gKwBefp@l6 zXa_*9otB8>(EF2HHi0-vL^H^ku<>4nipLmQah;k61V`eb&bLkKABf)LhEO%3kV~%g zEcsxoh43!#aIg}9Hx}j^Kc6rc4qq>J1V|F|V{2q=B!(xC)XL}P$QHnl2mDB3t}&l5 z*O)+a6E=NiN6T*EHaxyE~SE(+hotE8hlVb>F-^S?(?fg(x= zQUEUFinBQo&5{6TW4ZX}q$xX1>9bkAr=Z_9I^Z2@0g3vnr1zl;Sk|EO|Ha*?)ivPf z$v4J>Y_r71q|kZJQMw5@g{BekH;$sDQJ2(R5tN?JzL6-00 zO&OW1kB>Usc6d2YC>&4DUgF&i#wo$GGRS2e+#c;XbH2~q^G3pKW%SIU7w6kfgnB2! zB!c=##kDb?;@X%%acx|qxHjG^uKoBqOs{7ypML)3*UOjRe!1b~KM0li5I-!qHtbSx zZM+v;BRny>k9424!oIaGZ}6S(uun;ej_X(rfZcQUZ-Pf)9DCMLN_`+8LF!d^G{W4$ zcX0NmK>}Iptplkg@Tp|Sw-Tuw;B4nj%8tywX?rLrB9#m)%7Xz%A0KwcPQn}#7*>wO z3p)6dlPWM0f*fTFN|C6b^v^pI&_mAxZ}AN}Dbq7bv*3p*n4VW7@Wz5`;|IYt8&|Lo zuZL=p&>2q3NMFVbiY4=DDJN(by^q-_$8R&+%&m1af>XWQH5kfVVLSYO5r#Z#h$@eH z2vo0ls*_tN>wr`gV@ks4pCVncSq&o*;ztUujrj!E#sq?E;~K%WFMh)GnF9&R-K$d0yLf#fuJZMU{;I&6^CEji|eZVe26FKGAzM?d}cZ(q*8fBot2fBEuXFJFJU{@Z%Q%m@5o z-MnF!x_RThZXV0m_~J0dmnBQZ5!#oX%LGsfN8Flk*>YytgpR&dbXwFmMdKl^srN%NBF4zXeL?yv|d|J>eG8l?H*fr|Zr(@SznuSa`Eok^dRaj7T@(MyD>?si zIR5nWiz~1mHS>XgSV(W!rI6luFQf+?nTWe&hKZU@!1e5K1ThWBg3xCIv4G*#|Cab2 zNCcd1L#usTL%zr%2O@DH z%@GCR_*jKPwlyHv4gqa_E8{xk>IdOX6Tidzr&s5ch>^u`22dgB@)y)jxyFBbeinYi8* z7S|hhDXur&i|Y-VFs8AN(($sTSQ8v9aQg3oUtksvIz@F7{}NpT>})R-0Jz$#>vN;I;tBMBq3S z0>X?H&dw~wc3PfHxt{lu7Cd_HiSyAsVC%-IIZ0a-bcs<^R86F>_qSkUXDg;l!P*8X zakOi}c-mN8Z>pZVq)*QPJtCKh+}pESPN$?C1&kO`}(?Mh1fom5rPyWIH#tLN-w% zKtO=#uJsj8SV< zz54i=14;gAberPInNijRGE|hWi2BJAOalD2D`2hMW$-mxi^{gGxe(vvF@TR$)SL1t z>P-n0^`kU(#~4)`97S#*>^I=f!1X(o+f?MC?~g$Hz3^wHZp<+JT0M| zWmO>+;KwYZN3ag&n1WI7duJ~`&1H24f7)0?Z)%L~lwUqBpG( z(VL=0^nP#dV)##{nKy+s^Tu6j=1upSdBlMhc@itsjyo2&OJqnIo~rX8bz=4=JN|X_ zeSzd5k|Gevz-3|rqwonK5YK@f0cj6X-6jQcaf}-!LZ%0R6gbz^s-Thm#3$(_1$vS! zhIuJO(MP|RRqn;}u{x(jFvKX6jMyZ#cE;x<3z zVtL~(#qy?mu{=GQhTV&NFflOEpdK#E_lX|K5DvmDW6y`TLpB|RW`8odH|@Ev{O(8j zM9cT=WOnqd^a$deklQBiwLUhA)Zjzy_ciXD^w`13V^3lav$7?ncBx3l0dD9xPyeV2N@0Nx4 zd%YeZ^8tNWBX8WLM&5L~Ix~!jI#O-BIM1#2^~fmb{X6|4I``1oV*_c~d@(yeWZ3-n2#| zZ;IB)`y-(LWNLX+SS@edrCQ!}ua*b66D(cNs%Zbl`J8SnUJd;+4{Yt#YTB$LZh{VyKpA4L>t&kJ?7|=(ml8dD9xT zyy?4Yc`-o$$z=1Uux#GAOWC~XUN#R3+EsuaI$b4YY>T6bh|j(O4H8RU-y37!($s7* zq^7MSZ*)jHN|a6f0La?W-vD3Z-#^J#1woMSLv#Z)E78QEWuG1)$OIG!C?#0AL1=cA z7NGzFTvk@#jVd3Lv*ZNWG;uSyvUT${elh~I19+#5NNj`rtTNY0k=LUL;KNR~JYqM4yZE>-!S%uQg$yX$hjVoPC$Lb(u zv{oW(BcoQnIuAk-!J($0z+4a(a9^Tza)H*dD$cb@OHjgM?GC;!k0I*FV?ZA%n>Xc? z&6^U)=1ps4^QQ00=EVU0CzHvW!ZLZ|E@kqjdzn0C!{dM3`I(n?4C$S1__ z93uls>>?2^U4F23=xK~M;&q^-Y|CNx|Wq8FaQD&WAM z#26MYk+iSgHl26bd!p~NY@NjZxBM+viKdBU>4OKQ(eM+mRter3CGjUWtPkUSp}T> zS3XW6ppTTqoAOEGO$j9NrZtjy(@IIaTcH1B@^^Ds{%+c({M~#ne+MWKpZ1d4g8;@t zWt*@*C*le~Q~TtP4m1YJ5-9@LU&ktllS3QHN|?vQ%fMwT6d#_v*G~2N zZ9{oaGScCM6C$U;k^DbP>`$J7VuYno4?ZT=El=Fd77XD@u4DE3*8j@7?%5E9Ily*l z-3mlpWJM%r!d7lP>Bcv4BQ#!p#7>e!c-^?y0q?xA{M}qVH_%(LOB~EbvRqh}oqdPv z3TgD>tIDeC(#=Z#j1_6FB7dt+qNeDHyNSws|D8OObr_0DF7Z2#JROXS{%%ene>bm@zni}+e-{Dt4B za1dSw?x9Iqo&0lFj5&kYBXcuS0m-v)`|TuQXop;fv4SimltnwcX89dgis!*mS+93HZ>)tkH_r|9z^m~!SZ9*a zA#ViN-QsbvZqsyLzG=BAoIzY*td%S9zpQUz-8a$&&zfT`(sN@{_VV)}Cr%lcfaf{* zIzUl_TpF3V)4M~O2AXM-#AeH!16LOHUdz5rPY3Y~AVR{>U&*rx;_+5+S^An)PiP(y(d@W|>-k^vZ{tW*iLlN{bfxGh*EYvmxl^LC^n z87T=DGzZ4+LSdpy#=4&)Me*i*qIh!xQM`GLDBc_`iuXrA|H+i`=CCr}v`b~Y`Cb{% z)Mg<74ZhUvAT|L+tE#hcuw}qtXQQE>PK}T{AH3UTL$T%`Qjk&++@_GhFb+3a8uut}-XE-^Jx6KPYNBEX$d zBGNbAe4Zbt=;+U1Ntdz-2MG(p`k&z#NXoU7JOhyu4gi}z8|y1DtOVYTmGR~$SH?5# zMk0FLKRCdDGU^&STXD(ZOAqs1Num1yg8pT-kd-gZ(gH}H>Xs_dk`V>0ex5*Z`!3Y z-h8i&XF7GY!xoesw(~&&loUN)zVLU6I!NZTm;oT-QwTjY0@=Y;jeMW@Lqrlsf;(@ zE8`j5Xlqs3Tp5oD z-M|{Vpsr1E1g6t2U~-~!cQDzEZQ1F#e%S3Y#is;%6D)8gtBU_ zr6;#Xu4c4c;iptWU&VQtL$>)C&_^oc&H0q^<^;-k^BQHmIi)h*g9w=q=)=l*(=L_q z=6hv4;$IT@Y%6x;lr;0$0km}X0zd+Ami{BUB!LL^r}hmC5GS?AMgz2wf~Gv!qQe`sQirTws*M0U%Ci#K=ytP1~VilDan~d>oRKZ~B9Xp7iU1eq&|4`N@^> z4np>{-j~X4gczJ$5m_`l>)_(+k2Pod^Ej{~YfU{JCztBEvGiFDST1e`Wh)A6K)>V` zYWdxm_9Xlvz_OP}9&Qq*fgSpsuDvc&8E?*~j5jAx#+%nD%Dj5wVp`*5dS&Z?g70LNhX{9C3AY zt7Y7jCrz$EPX!~ECz>*%m2jq^GTK>w%opibG7LBmwT~Fze2w2$0`JDkc=MAh_l@)zV;*6VU*J&_rEH=e-NZPr!* zj>P0^@hnGIQD`!$95RJ82EM!4iGV&*8E?*~j5jAx#+%nDE z*9X?Q3(ZArg$94Z4KQ7At-P~!0`%|!$T^U>ysK-H%(pf}WN#q~@>H|mi!20{bmD6} zf`_sc7hhWdeWy(LQT~c+QYNCPg&QF17bbMWYHt0haDj~qiVZ^c z#45=)k@@S~8pthZL4oT3DCE7@J0=49NM*b^pEBN@KpAgdql`DNRmN-9BV;b1udA>! z-n>U;yqA}~1A1k!Li3iKpe%fS=t!MmKbRehYHt4+7*wI%r(|McjO9;z~${NRsrv;xoipa zulIXupjQcMW2)osHEts~)K(2AA=+0gabc{)5>}^r}gMIOI6)08V9!Z zwZaM*#aXVTC`X4#-qu$lpnnh{ z^8tNW8E@XBGTzI}-k(P=ap*zFG>#ATk+Lw@C{^QL~me z0BiOQf^;-nmA1%Tq`u$2H|M-1C`n&(&8yJoNT*XoFp3(L>s~g&v%e7z2Ef%x#gWhT zkPkZ!gxHDbi;RIlvz^l?B*TNGUx93BRcy7UdPhVLKVca$nh;5q4#G^h3hC-3t`~U{ zI_~ z`nAe<&3c5)2lQcOym^nxcrPz|U!xb<89)RGCJrTC51?EmGPPqbwJm3GIJ3iRsBR09 zZxrz2zAF4d<4`Xh#YEyKiET`6UXEln2@lBz^pb?vhC5S`yZ9zW;ed1`TjU^ai8Tr0 z7(hRoeDfkRFiR$(mWTz0Loa-LTqE2VQwp2?IZd{RcPE!Z)HL{;9;MF8OySH>k|5(j z*1}S&*VVwgtuo&0{hk}>C;tS;*_ap1FyB1*=pV$i~|h{Yf}l(s0=th+E;bvvHV=$l&*a8b{6gDE;a13L1$(s6>*o>_k;>lEMM4 zL5v2^Z<3>u)3{1?)A9o+-Znt$ee#c0&G^YtDW(JL?PhmIHrr zPRLQ}5uI{6MHJ5FH{>hc`PQvW4*jXy<6l9FsB1wL;ch(lxCz&B&-RzXa z`*IyXoCLn*fzED^#)z5y`lf8p_u=5MdU{`Nc3vJX@Fah$w*Q{@N(A(A%6Ko|&jJ)!^(K`9+mN4UiQ9^UV3-!ylQD=19nG|d9eyLThdWL4XV(| zfeA=8rZ1aQ=E-a1bF~`1A3{a1Ma36An}YT{>gJ*<#67kI$by(!n9{z7*8@A zXJI2ifP}Estq0z1mGNHh_tZd7VW$>`yq%LUxP4JHBjP3#W|GO`jAJjg=;=Y*vqFFn zHq9|V`7@9=xQKqFDd54l8QdyWtQxrYX#MT(ST|V$GEdbzfiw}&$0_5zd_N!1uUE#i zCHW}OuT{ot)+1y-pbsnK&3jbFdwJP=WjvO#0Io?@(#NY^xIm=nxdAbd&`i8T;Or{R zZdO4CC?M2HL}A5(-hr$VLK@qd3HXSsFbQYC^t*8XIptYrvz)F~^!LL>PHMi_^Ik!&TwdKK+H+?%r~4r55zxme?o@~I!i8)`-|TR3ATy7j$l>f8 z5EQshH~^%bd+E7VJvyTeEuR}9t@kaA=bVHPh#_IKKvWys2{@y=lb3Dko;5Y{6T;cEt-EZjvH~c$34a6^p6-60lXZU)z7Mtj`n{1f5zxmed;*UHA^l{2~FW=7x^y`)JY)L)} z^eL6`9z@7|Kp$4doA;=U_wus$tb3)OvE2~k3u_&3o=C%vec`W&vX}oIHQJT90JvGoFnaOi~G??j88sk7Lh7eAr*OY1=cuAflG2`uWyW!80>L*vmn}u)E2`LrV`zTbmqtHN${2jC_@z zchb?Yhm8*)6>U=GKsjkd()C35lf>8D*OJwZZ*8M=&};2`mWsA@!Q-g(zJWFZSx2eM z+xAC{JovWA^U%Xg5`LBr1sn!DfQC<+?gBXx5l>_HACrj}Jjv557`dOC`5l$}lq z+4JBwPHqpYXMJG56!d^^T=iN?1~6-k|1X8OlN|H}QIJv_F8u4$CIb3MWxP6{GG3iP z8LwWWj8`XA#(NYY^8tNO8Lz2!sf<_OE92Q2*rb<9J4>S8YHVyMM7w}5mAuxWigfx_ zwiP?5S;dXt%k;kG?d;GFsdwU3z-^eMhEB9Yo`i4mrsOoNgJAHD(sazZ*Wg<% zwOErQ#s%Vyi1$~s?(2<}@#+uCc+3Xw3@#Y}LpZ@-r zFaP!O^{1=uc>w^msj7*|b4@se1XtGUclAA&68S|q zdldQ!{Hbn`hqaSM*dHm%61I`C7sXwIH}>3F8VW`kjib~}xGy0Vi3QUWma}x{_iXG+ zG~QS)uWk$a7xa%r|46yKI-gu#oj@+HUL%)Re^)N=Up~UW0{`*%zpO{dd_W(R%WJA# z%H`Gfa(Q;#+rhUs6U3W*du0=`jSrHpbc6xZ2g%t1yQb(t#va&ZbA+!WEdW;LZu|z>JU|j#Myb8fz}w z0{sWMJYa(K3D9i9al&K+99tdH&S3~%8F^`vE5>=G9tB`wJ6DIKi%`lHMycU2+x!l6 zV%Io*5LgTfPd+EKN7$i`RB}iHv7T`Hlt>T5P5L`0abUH-)A*ji`s_B&44DHX=iTtM ztP*pX=#*85fp@(6_~TB(9<>Tm?duZmAD_Uewe{Nj73@S^f{A1T_;sXQUY$=auTCJB zSFe%FtG_FkcL($@zrMWaPp{DS-+ub-uV0A!55K*j;|o0f^xMCESr3}|us^7v*HpVy z(5vqi^bBj|ym@QDyEsO&AJ}=+B11#CTT3OIeF&=DAT%OV+GbyrUDmk365L$WCy<~4 zEqH6>oBY1)NrW2wuTc!;UZ9no_jUAZ&LWs=fgmAt@9#(_|13K$$pvs@AVgRe08 zF39sBzEcU!&V+v0JI{Vi$X29O2o?$Tq39h1G5BAqwIGZUyF@juUyuD8E9li96!fey z3@dB=%|QJ@{43Hm@HY+;h*lz2jIT&TD0YXPR)S1+K(qFbP~0K0b9Af0QhIrwUP?Kg zbf(zJ5m+&GdMf4OH)7Gx%)MpLhj*VOw4^#A%_{-s`zmia(GsIS*lyVTdK@AdWUP#kIQ zffr03pXM9lO*p)Oph@8fgV>^ut8b1ci4Z6Z()43Zacm8fZ^5R#KRJvT=!?V;&v23` z+Z6FS2RpWyPPRGA!b@5BqTdHjpz-nUS`RqOa{}%M-vo(daEGi(@8Fv+zmru3mh3cg zAx6vs;wH7Td}763aYZh|^|x|&?@!3c<3ccxZ78OSHJ5Ece|&DxFS-5)KtEDnug<5h zS0~WdtJmo3)$#gzKM4AtOlz+WYV9@EF17aRd#ybrXzggti*Gl?_(bByJHPlQsG>G( z7BB+o@UMh>#b5D#wj{QdSt0@3q=-zkF%OVogCl83GF%)9pqUuSHhN(ST8ID9w;>pc zyb*V#7(aPk@ z^Bm5UqS6TvqZ+o zt^EpT$r4yUKSeF!++tbKW32rThoSMeu;Ae0pV-08;tpHB?c(e5^*f0`KT>P2&Zo6k zC(zof*J$n4@mhO72>PE)cdriW?lsjeb@%Ff-8~{=JoR3y?WFt;zGbkzLK7#EXR@Gd zf&#>v05@JB3m#w+0&@BxM)rgnm&nCJ)Vbmq{)Fz zR{Ok}wX*`=`t<(Bx_kBf+@KHC8dHO;4|y!OD#C6hLbq!|i>F}qUf6ld&z+=@H3(~z zES(8E3m2DS5zZsordmr$>;V^FPv-pgZod{Z2-AmEXb1mLpi2k(k-B?zKHa@Kf$me@u^q^zxXj`$ZyJ^JQi=h(@%OJ)G*w}WPJ35a}`E0}bSY~q6`39@C60TW<)-V7;O6W~EA$$T1S}lHZP~pmyB#7BZ`CIC&CS-DujacfY^hR1Nhr_@u z48Dz?gd4yocF@lIHP?Y~v#|zWQ$086V>P^mDK;>^ME56Oi$>nWRV3}ty2LS{-?sHN zWKvWVudXt4Qujw7i?^_TLdHRL0A&n`*=av9ZU6n7cSxJ{%6Uz1OR zuSuZ6*R0XtYvMKd?m>S&Nan-(unb?lOBufAUWU)Q-`N+~eJ0=gOzKVoTRu1HFhxEJ zjqITyF98WBehj|;*^w*xUjkl2)Qj%6?_t2(Zhn!BC%OGrLJk6U&2{3XkmaPH4|cbL z0kv?R^q6_0GB>^(9z}z|u(fv-;YkR(P3HbR#J-gXWb}*)i6vIla+(QVd_JOC>j#}~p+P-&8x0ZH*> zEjukq9nvRO7gD9=LF_`5D=altx$T%IAjiUyvVw3?iO*|HSn*p6b^igZkCfqS^2zWu z31s-1H8OlnybNCqb^k%k%m@8pVZM5o!hFrWFduF@3-u%fa`N__uzal7jIc@y&;UKu zVIbHt)%-1vK7sS-Kyj4hzi5IVhcnBE*4Tmn)e+UID*YclroY{t!! zHi4t)EOa9Ow_a+$*;tsbX`UPU3w8ei=#LcUYw`*6H3@|Inl-|FO|&rI59anCM9X}j zAJ*fmcd5tM-0Sg~3K#6V$`>bF5BWZt&Gnna9>ffA+W<{|#|3QS`^dup3u>Ol zn#;DJ-#$0!7wY~4pdYEn*W}aVYZB=3HEZYxC8+)aGmMwfO)$ zDDK4gosioNc7?EOKrfpPkYw_oP<4q$D&JzP!;X#h;&<#MUS>mQo3qn-E8jqSNpago zSvkOw-e-HIB+15vt3cAz8t2I~2&;*1xJdw@5_Te6XD19KHbm1As{Hd-$oZATIXvfC zBm#gjI}-2WTO2BCIYyqSW zfir;K67pmQ;F!rqW6A&8w=FvcUTWNc)IlKoD9L>5>;oug*|=MWIi3?3<=MD034b=7 zQ8o z$wc`+g8nCy<7>ileDyBn_?mk;K2v_DM#vT;74TkY@WhXuq|FWNAn`~Ak=UQ8z;t>^ zUsCxSe8cJ`!LG5eUWaYPN&pa%+3fDf@N7fY0?!rLl5hzse;%rsfJ!6o1RF8mw|GfF z&O>!4@ z<}pvTp1QxW9A7g$H|Q7Y{sW*NDaY63ljCa=$niC6_>tSEA%gE%j@UJU> zqr%^d!um)Rz9ydvUz0$EuUVtQ*L+un@9xB%*C}{CNcZl9-St?R5AwqreDy9h_?mkS zz5@9L^8dhGwuSr;8hj)x4CKgD(~So2QD&IB47u#9bd)h#Krfa>_{#Ya*r}alEWMKe zww-PuH7o*DJ4u?{`tqHt0O2T#i^hHBE`!fZErb>-N0u5YkRK2Eks5qWJ`KJmfd*f* zMuV^Ut_I&@kpIaP_?oZ+U%g8Oz9yi+_hgXIW^Y^C;9Hl)kCkt_kQyjZG8)FAJIFWy zAW~=Gec}4SSUd`=itUgs84(!X2vUQcB}gUVETaLa*A4=FauR+Yxm?;8sHLnwV5iww zfv=fMlwTk}67nMz_?mnQd`$uczGjUAU-MlBzQ-W{lj-lZVg0>km->6{z5ZT-`~vxZ zU@n_Nep{6&zd(K*zf%*j-C!1HluNnCTX~Oi1#5_U>khx z0KyZRbeTkR#@LgMnW6yWaFUV%lxH}LQ2YUPp64oM1zeL_X#LIV#D4oh7H<{;xw%M# zk15^FY)8f# zHX3ehC00mJ92PLk6I$#|L8$UMIEo95D`yQBbj*!@9o*GXX3-#c`Gf`z-W1^qMD18< zz&Z|iB_o4tjKgR)4Qmx19p8j(e|8&%u8&pmzb={W$7IE8+d)*URtcU%npxe*WceUtS;L@Z0ZSFYBQyAL549@0wkz z-?jJZcLi|^;{JiT+yvS5SHtIjegD;0zm>F?5ZS`VcS^t;>h@xrW{+3_!G7nqX04CC zk0tg6y4s0EAQ-a*CNI~V1zk;4sPgNBgjl`Zclo3f#5NJ<+Gh{6H+2bE=d3o~1&ReV zg5K?PP|Ly+B^^U*!5ZL>Zj~4LTcdDDA_k9O5*((QKw5{DWXCH~7m%ct`6kPEEXZEo z;vyqS+bZcQlkz<#!}Cb3yEdQJU7JAbuD#c~YkwTvqqXk75AL5#<*p5@+%>yYxohuL z?h3dUaQ_2y**1gzLFJBaZ0^c95q#5x3B+`gOE#8c<3Phx5*dbA-xYR! zRHUxHRw&RLfAZj~3fn}Pg6A>0CF!bfMPUKw$K+}x>rb%G69Vx(zbRevjtjZ00a7B? zK^SfRBBAi?vkm%9LUdzvO%}3ti$2QyGph%+qk~(G<;w@RVlbaz8ow5;q*kl%+@*3$ zvE%4?1_Ju4&pe)s9cF>w+`ZYt8xH_)o&Xn?5;e4b_UYk!QuT3D6*RGMtYolfI-jV&w-wr?jd^sF{`uV5d{_Sym%m?pb zVZ5Ee`@JAuf%gLMe_$@#!u#;t@XqxKiFsP)c9Pj%&L}tlEoPC_Me%y#GHhe>t4~?SJ}T{`Eh9x%~a~%lVa7|I78u*Drtj>DON`zkYc^ z{N=OiamdVv_(6HRAFOPA8pOYs#Vd$k5dRO%Wn07_3*r~Vk3{@PS-du%EMA*H7O!0+ zi`RZv7Vl#~|6dP3|8#yF4)dXTQ2Fi$YYc+s|L=eI@BZEY>wo#*|MUOjKmV`))0f}= z`f`oMCSOeD%klCufd4rB_F}W=FW0ZX{O!xX|LO0`c>Vh?zy0#%-ycq=%RhcQ9Dlz2 z`!DC;FR!2deE9EQ{%`;3e}DO_ufJZt{(t_-eT92Hz2YkrU*QkTWm{iiD!xMT6(W6w zNIktapPpWuKu@n-qo>z?S5NO_cHrk#DbC6tn9H`#%3Pe4;;ckEE0IcoZ9XNyHh~gg zyG9AH{jL(=owIW1mb}i@Z!gymmNBBic%Pn17nB+teo!O1xGJx<+TAM{7FVUXDt}-u zo4P7pRa}+gs>Hb}U8I6xmrud4OQ2xbtx+)SzN=sun^*bi@4sFCa{0Ojk9X>=1XU7; zACz}4-pXRG_u`AiTPfbkADGLw-b!7(mEx^LdMlA)k6k{o$L>eO9)D;_KI*M}SNUkU6p$o&f=;RSLF}PWm{LJEv`y& zRU%!LNEyy9pA2W0K!&qhBg5H!SB7(?s}c>yJ9SlpTA%aI`g*&2k2uFg4S zbarb*I=g^K=X$)4#mjtn9~A1GOY>~Zc3pHpi#HKvF57w&MF;fD^LP`9Jcvjg&@P`2 zXqP|-v|FPC+C}St{^RTAyB|0K#>w)IbnYU!8apG5j6 zk*cL#KGo7Lfof^DMzys2u4?Hc{z)_f@65RiXQ*m9z@YHEgnRaxoqn}Jh_%> zC3af8i3hxiNL|w|pRQ?_K-aWeqifm)bWMM_Uh?$ah0tWM9}An= zV80LQcfO3yzHq-U5}O70qs(Pf-0wd~Y-)SJGyHrm+)sn`eWb)@pHE`5Pav_`uaVg7 zzbmnMhxO;Lzx?ALuTT%lhjgmqQ8FLQ2Zb+RKHnM47j4P{^HJuqEzCc;HswEqtFhhB zL@*zzP1)zurtA}FQ}%1LDf{ngQ$7asu_&1j=7Wlnb-lCVeP2W!3(QBE%eFB8LDaEY z?(}S6Ut;Z@;_%^1rnCmh|Av=q>n=SNM*!6pE6>fKpC-Lqm0;pR~hkP zr2jm1`k-oI-NYXT@z0I)MYgaYeU!Oui}X(`TX-ok{i8@9DOK3#lPc^JNEP;Lqze0h zRN;>y{m+L#1o~*4%m?&Axx%`MKT6@B8|aH(VFCImbJ-T?i(cWE=K%UK9neQ=6!!Tv z3i|{ah5Z_h!akr;m;w$hT zWiH#o`;#m2Jy&~OB6yEf;_LG%@%0Im`1&$#hj_)oua|%Pd^o+j5av95`ENh{_SY}}=jH1!Yj83j(1$e#+np&B3`KLW0DY9X zYzy?wb0-S^8JvyJCM`TfstpeL)CPwHYJ6;kgyoxk=j-Nh@pUsVPt}~omLB+w=t)@TzB@!EvRU4l=e zelUbp4BMTl9}Gpsu($+K=CZ9z@Il28sKUy+<$i}{Jm$`=>3DVP7;qkVN^ENO5oPAj z%ilH^pKT)aVQ{cJ9(=s91>TvN1o!|rqW)248*rrD&|r6z0I(xKymPBR;#2_i#U+S$ z2_jVthkPoALjo1UVU3F65U*mG+$H!liU~tl@37sOV!}}L4vR|=WiH#g1RwMcJI3SW z<4QK*B)?<7WDL6HX%0l+%#~E|o7z9esTc$V8Brh`r=nU$`m+3_0KvF28_X>h&2?(r z3Fd0~=7E)gtFT;ie;g%P10SPm*lM1_!Koa*N~1PMrYa#jOw8 z-bow=t`CIqO(Xk_4t u8*yeH(*TwwKys`C(9@E#lOS5KsY=vf7?++Sgr{vu{Z_~ zI0lhQi9)yNzG>-0y!Rk-4!Febd?@)L&y8>Do?Pp-_$V0L+T ziW;4KpB@m(D7XQ%TVnONIut}Iu~2K$l(FLNF5GuWgm?h{e@>jzL&~u-%yg;aC(1i(?RFF55Z=^>aH0&=j%6S(pjk^8AP8E@Tz>9NVF- z5~qSjPM(%=K(PUq1++;x57_TfIT%1Wc6V@lJV~~MnYMMwo1zi1dXC7F|1YC?M$n1ELw%dC5SSYZC!#V z*DAzPAR=O?9i0of2S;B$!1_rF9E=q)I4c+u=4JU`6LG5iuZZ8VCjPb)-3Hb=_Qms4 zl7LRhD6t9=cRDCx^5ClzNhk=S2f1Svvdza_f=I2xF`ri9m_Vy=T%%Pu#%mR(b_t>p zHJ?imRyFK)rfN7ARm0*EM48LBEAj({}bqu=ab_`73xeyNH z9fL@1!!e(>;g~?%a9pEpI0m#0w{{FZjke(!);8>RrfoPDZNuUiM48LBjzRz2jzK9R zJm3;UY8#IEv<=4u+J@sAZNo9YwqZ1)=5q`y=HG$9(dI zV*>fYagBW87?3ag)3E>3=oF4&ox*NsI)!7=DJ<9@WiH!d|3{s|e+HB)KmUZEuXM#k z*dM7-IObC*91|!Mj%ySO$ACiNpN9RPMv8C@OA&TElOi086k);sD0A5s`{(Dze(cUf z4k7l7)j)(mYJe4RVLo663j21H>Cm z96(!ouw1!L7xza>5svw!2*(6cgyR}1!ZBWo@Nw+_G@64` zSaY!3ndabBGzSazN14l}*gsVT`=12+L$>k|_D_*&gHt}W!6|{-;Iu|%i=3O3_D4ztPWdDPrvws#(;A7uDIgK}r(yr6(E^;pT7dn| z`unG%1z4~@%3QX^{_bh9zy2q9hK+wF!v07Vz$u>!;FLfGa9X1RI0aMy|1|9XH2wWk zSnjXiS%3djYtQ+~1T>?r%yU_cyJP`-S{XpRT`uiq!R+^6C0b33UCYHM)M&hPr;y(3ubW z!@7R`&iebOqU%?%KgwLT#s25j^{d_Po`UC}F7A)i^_%kP`b`OR{iZd#e$$4!e$mjG z5BtNqe*ND1`-`q$!Tu<7*%tesSJ&^^us>ugk70kLuHTeT*KbOo>o={@^_w=-^^1ni zeApk>_3QW6-(Ph73id~t%eL76yt;nRhW+XK`y+MzrhK}7QvzMTX^pPmw4ttFG<0Ue z{yD7cH|(sxe=fRy1^c7SWmD{*pI6r}7xw4s@k`dl zXz0v`{b60dVQ2mQbJ6uH*dJvs+hYIo>iRt!_9yG_pCfhs=6t$-a{^tzd5x~$yrHgN zG<4>}{;;m!u(SUDx#;>8?2j^+ZL$Apb^Wf_{LirU&qUZCsp~iA)AgGZ==#lTbp7TH zb^W5DGavScb^V5&_4m(3*RNoIl(}q+{ZFgw_jK5wjORZ`>iW(3bp7T8x_+hc`W5VtGM8*v;O|M==v4xk205SvHxjx{hki{L$>l5_DAaa&G~fw<^;Na^BP^h zc|%>lXz0v`{b60dVQ2mQbJ6uH*dJvs+hYII>iRt$_9yG_pCfhs=6t$-a{^tzd5x~$ zyrHgNG<4>}{;;m!xVQfPqU%?%KgwLT#r~(&^~;9+%auQMe}AN|-<(g^Z%&}=H?Pt4 zn>W<;i-yj8*dNyQ8~4`VUv&Kn_D7k^w%Gr)x_(cG{ptGqBX#}ee7b&f0$sm(jjrFk zp{`#vbmqeTrV8u&jr;2Fe|gP<{RR7D%wZ64_cv8o*KgccfB(yC7VIzBA7d`tVt-w*|4DwP;`zVs z+;P~SP1nzN-!<63Lf6mM*GAa?S^E2%Dy-`_?yJB5|*q=?;&v)N7*uO&8&(_yQ*#BAj`o@MJzyIYm3-%Z6k1>~RvA=z8?0>HJ zO@#e%x_&R;&xif%b^UBfK8pPt>iR`PXFlu?>-vrR>hFJf&4T>}`(w;yTkP)&_CLw{ zrmOeI>H58VKOgq5*Y&d{`6%{psOuLEo%ygotm`-KtH1x{H4F9^?2j>*ZLz;E*#9K& z+a$yOI9D7 z{ZE4Zsrvh0ckVds&!+3=yYCw8U!m(~>uV$I|2+NuVO_szZ~gs6*RNoIl(}q+{nOK8 z|33lu{*(6i$LadLd_N!duh;dnCHW}!Z>Z}R4W0S0KdkFF?XADR==v4xk205Sv41Yu z|0F-t@%-a-{a(JG5Bt~a`q`3v6#F;S^^1niY}j9ib^WHD_4n6B*RNoIl(}q*{q^(e z`u#KD@rFOs_4n72x_)&&UB5bku3x=I*RS4C*Do46^I?Bj*KgWce}7$c{R;L+naj4= z|Gc_>mD}A@yl=9&zmC-PtMlpl)d_U{>NUE4^@h5B(a@O>`@_0^)6V+)>!Rydus_ON zw#EME)%ANe><`(>W7r?5>sRN~^{W%;`qgW6{pt;M{i2~WANGfJ{idDu_t!<&uV8
    K-aHcqw801sOuLEo%ygotm`-LtiQi5x_$-w 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≪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%0AXvlE^FrT8<&VrOCAb%ou;u*`%lxkrUpR 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�IUDFuZci$ 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

    8}YGwgdss!wqF6_Q_c@Qnr^r2(Q=Xj|fp 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Μ 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%0AP{TdJmiu9@Y%2Q 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

    r*2RG`Jgt+FITDBaCR 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
    =xA`K{p?n0VIf0~FD z@`w#E4cv=$@kRhYWr8-!(aFWxl2C*HRj1*4DWKV}(_RojMyb-1QL0EXO0|@XQmsiw z3DS$l2;DpxrOtqiQr(kL6#iuyBs`zSCB<+^2-M)Opk+J=43f2w#&9d<=v=;Rj?1ut z$4Ipsp-zH(8}c*q)>;+Ac4ndLs#XpW=qB5ZMH5fWaqT6k31VSkYw|$41D^| z?3^;4MheCaOxF28b(VH}gq;=j@at?{F}ww-BU2YuAV2O)ESUb>U%PZHBd`vC@tZn>cNUpAxT33b)gLBwvZ*i?|l!pR4cV`?78(b zLwZsIBkHd0uF3^F*8x1m|VmQ|(0is99s2a6^Hj| zi>_90XB97WbpRQqPESUuBgrWBQZh=tCK)A2FCHUw^JJ7d12Rf|PewsH3MrO9iM-&G z7)$-=f-}gL)~rn>Av0int;Pl6Bse6*rI*q*KniC`-3qtJ;+i`awD~vH6p9-x>6c04BCAt0Iz}#(I%8 zEPpR8>U_7ApZHz)L(M8H(A5EClsY{brH&+{)Jw@I*!fyQ_w;0xdY+6@XFx`&@5v|@ zv^={IQCwmyM}jA#58));4^mxeHHX3-VfZhl@s_d-UAlabL4u|Mt7MZwrI7pvVyjD% z;j=Xo#zdej(^9*9*)pxnzk5G(ttr*kczT}@Ol{XKrDxBIcnCnr{Cu%S zPESUuBgrWBQZh;%OGc@d>cwM(Zk~)%XFx`&@5v~ZNo##*M1q)E5_mLfU+pjPC^JrD zKTxhgU=v^NC|feSMPzD`GG2PJe+&kr|4vGtB5uTUFBO<3k^~YNS_oP)=jN;^{@{oV z8#G2-hK-85*`vZZwi{(fOW$fHarbeWM+ z4pI(+J@dR;DFLBU*LXjbTPeXwgAx$Y;4Q$O3%A~#^rl*1|17qLy~+DR+`%Bw66D0w zv%K+K6d+va0>~(JdNN8KNk*xcl2PhdGD@{nFCHUw^JJ7d12Rf|PevhkMAnOZ9YyzK zh?GCM!tym@yKUNC=`2{}>so#lc9A$6#oR+oYstJE}e!YV=$Hql7NO8x7*QS(`RFw6nkZkS7Y6r`mk?(kT5_WXto=t3>$Tor1QzzG4LP-_<;!KbaZPT=jxCw{97tEkzZtd z`rBS+@P-T<{6268MhWv4mrP@X_#`Bw)R~b{n5qz`U;<^GnOI}xwn5%C^m>_a9RyQ= zt=jsB2e(zGVEAkZEOp2lH?enW_hy+Z2weafrA|*qsUyiK^-?lQ9ZN>3mg>c0gl?XU zQfEL$sqe`sM&YB^tA87S--L@Go(;@+N(}amzk(#-2bl-&CBJ7&Nb-qiC}k*x$RHja zUK87QQqzc>(q%-=C!Iw*A(t>Grss`P6#`8LZ0h`MDZxR4_$!JGOvc$BPwec!;Okli zDS}DSH_hXe?C|?#Y1K=?!E}a%TbZf1bAwjMqf94snUPU!GKJ;nb0j~EuhlODxFJ{07qow1HS?|eZijr!)EW_oVd`nxG8E=XJDOG9` zoH6=OzJ-kS-tcBMdSzV>toN;5l5k746;T75GeBo z&wlOXbF8tw_Q8@f$HOEzhX2sS6{931qtuy^Q7mkT;D~RJPh|y6%l6NthRicrIDT*4 za%{<}gImQY>lrA7f&M!Fmzc|Wonn*#GD@AEj8aFEQR<~+lscA-QZ3bs#|Yg#8KusE zj8fl|QH-=shKh0u!fy1!k+vrrMwWnFlXz2X19_4;F%@XYnpGqcG9ole&~K2xWk_ya zl+MzDW|=WWgMA`Lge64)$!yr#3HFakV1ZY5t*mf{!)?$vxaWw%Dm9js_lFma#^*kS!Zho>|8VmS`zTA z#lNCG+y*UzqU1*8lTsCA+%hLrMb7~%5k-no*MAGtsJC_ctM#Fc) zPa}lb_$T=^WmHg}V%3j@4@=gAM~&$ zdNN8ANk(awl2NepwS?~J$tcY{8Kud9jMChbQLMpP79zEb)-+6>BnVkbSke|KCFeke zp)}qiZknT@>Z}o#$soOLl>`{^spz9Kr0(7Y1bM{Uq?Oy4C6erCCXF;9LOpcropk**(!gHEd2|WMC{1Q$6#RT6 z>oCPz^%twQJ^DLR3d{>Q16e_OQ*9-BiE+@0XR9eCk-8>nk$$*T~+>=qX2+RD#lALr2}B%?H$kx|CaivXMJy$lz+05VFGo{Z8& zl2MwaWRzx2GD?tMJVxl|$tX<*WR&KfjABcfO5rnuGy#)QYAFd+w$c`TWbo*GdtT_B zyyz6E5TYTF$O~=jaY+XnM?q$5nJZfl9s;uS?I};egW^0vbRC3BV)*CIhadG|nPFRr z$;t14t$aXebd;mxc_NhrsrEj6T0oLurgZn&P)8#$p;`vKxx#{wN10COG9#lPEW01} zSxdmYku}Qsg=*nJa=fEdDbrFwc%SkqLYhP?W}^V%LKi?rY0{HXnn*HAvy_a|tVu=* z(u>Ck-8>nk$$*T~%#cxd$;gJCeNf*C0*v}GEA~ITe6`Yjgn*EjsI@j{6{*{$$Oh>WVExsbvj|>BNP0V*&8Ptz{o*bPZC!)l)&%u$ZbMtMfd=6+N_-NMQJT!iDEl9`e|&YUPS6CF zufvuGw@Jd1_TEwRER#WMfQg|{)!D2Qx(pzrH0jAGO(YqmSxQD})+D0@>BVD&Zk~+N zWI#q~?#Ut{6DP>(O#0OuFkS2xIyxg|>Hv5#q>RLQBJSY}J#SbL( z$AE2sFkX7H97qiXEBK17Z;!{w8RA>olBf)98jMAF2}05}$KZrWBG*!UV}lKUd+?#i z5ZAQ~V4Q93`{aK)XEKwcv?d&)+6$V5WRxZ|G75ImN*Copd@bS;jW(U^+`^f>kYVc- z(M3>tvOP+;h-lb~h}0oZ{|f_?^C2d}^vys7vId5cV|h~u^{*4U3?QR4>B%TfBpIby zN=9kcB%=iB#bbnSo{Z9DKt^fq$tYGiNs@kg?W`b!G86`Kd@VeaqsxvJ+E0H4o*C~B z(XehMDkKlSA8^r@ZJWe|VrudgN6E`E{Lr&!Yd0TVxbOqF0yjYO4#dXQ`-U8GSII~3T*A^xX@)nGD>qpMlnPh z&$0Atq*%U?du}*6ZS3g$JI~#M=Xk>8Zx1d72ch*4*0wbys1UCGh?Wzc_GaPqLImyL zlEw6j>4_B&Ax&bd0K#km-Dyi&3Um?#5P)mvxYTo!XKTbhjgCVE0c#=3K$u;Ms}xR$ zO`c1?KlM677eGd7(vwk|NHR*Zl#J2@lTrTh%h#7L$KU?()7Qhx6L}f?7q}cK(6z8*aYTJ6Q{LX+%Jd+`iMmrh6ILclM-fW?B zhF&@Y_P0kj{H8R;fg&X4S;c<5J&CJRp^sy4H08pdKJnzUv@%lqc#!Dy5BaRzZmmI% zb(*lrvs)waaL(MQ&qsN85be=zufN34R}i`YTuPH3m(oPyQktc>l;&Mr%AL@?e0{mN zudhS?zkU7ww=ej8yYDYr@iKUS{r=A{OC{tX+Skq#RN4#(D(yW%1#LpJ>>b3-V*1HM zoA;5oZ}bs{ZE%>-%2FI48mf7VJE`(KN?wCXP;15}fJoh^j9}Ipz*xt*P5)~S9GZn| zb##5$U(sB$f!wkErL5rXD26?ot`u#u z)f>nhMHQ{I2?;9g4MBw~!j0ouGp}gmDd4h`9pfCRHN?5;q$&|T!m-nZaB;bq1=)In z2UiesYP6YvGav_7C`g(8NOtV><5WADcE@X98$eKL(-TzMNP*v*ETd$>81iKtiMm z#|UvCa&(pyJri5QDIZ-r8fl|t=)&o-YBrMp9Bc3Uv30>2K9MHm_v`{f0|K3PM$e?B zLXKiUrox9A1|%dDi6aNcV9fBmm&rRU;pcigSb#T9wU15e3do>zDhg8SHW)~xpt`!dy_$8 zfB1FAkwB~%ka`z1URJ6+N&MMr;v{Gox)>xFGR1qut2A20bUvk=4@KP!5=a)l++NZp z7FT7Mm%2|Pu(tMj;hlG(9R+o8ZF6FDV;e3@3ir&++R@!;iN}B;|rM+jZSPBe}Y&|$$XqkUojUzp9y$>W>1HwM3k3e2%YN%yJIcxOg ze+j5c0E&blp-w6h7=}A(prG@QiV0G6%7+;wDQU^gonJMfsD<2fSr{}J;^W2p-1MW(D&t2gq!|y`SDrpCxfWMItC<3_C3Kt6aq`lU% zf}Ia?g|3Gnd_eP>2ul(s0y##G4(XWoW(3UXOz0y-=xjYZt&zd|qV@#uZtx?Xr1;MQ zn+%G0p#++!YC#^SZ73n7yw&`@#`i$$J5z>EN)nM%24nI$mbYo%?o5ObCFHKOOLgK^MAfD9)kM1==+hDv6y!iuAfT{Yi*nX>Tzsqd(+G?1gloBET z)0b`rU|8Dp7?w5?!_qFru(aVAmY~wjrw6mN^I(=X129W_4`w+_Wj*msVt{9HS}d+e zr3lmdOQY;%r5tH6uBBKJ!Ne&t6ei+R``_B?sZ7V|AUuiqkiL_Y8bb@|yQ2`Wkv`lB zhDpSnJ_C+;QulB0zd{&k8^&Q{{|0O!0Vt`zN@AOok1BE6+L)2wqwkq6KwFUE93@8y z!7Oc`m-PMVOE&|+ENyx)OB)GhX_tao+F&rtM`N2$&tqxlc`R)PJeKyJ$5P8MY(BffVFS6Ns0@#*^TFO$tzv?R{WoP_f1Ah@NRYmbj(JJ4K!hzy{x>S+VpX)}p(d1H&6fWB^0(@feYy z_HE#g5Tb-UmUhTX^#1gvn*ltQHa(A}jpVVkOL;8qyF8YqqWAP{mUf=a(q+JAY46!A z4ED$rUXXQji$7-K!w|*bbn<~8d7+Y{7r`MVND%cb(r2hjsXj4ZQ9L4KjdC^Mm85Po z*~lDer8B%7sO%4TWbWwR_4y&&y)i0F0mP?jzO zC`)$_WnnlWzi#*t3KWr`vkzwYFf8m%;o>MuE?5V8<5G4IkB)E++mOLS3dkr@V+kZ1#5@539PRFhb5MC}q}>%n$@ZpJq}yOdeK0<{qg$pT&LC38pslTa{s z1An*>5_PM64@@fvPu=*m%Y~>*2xaMtyhQKMUb@)@Kv}x2WOGJdUNy0LRkZ<5(=XCmr0@R7Pnf-c;|BLTLzdQ;H`IDU1L%KEN~N9EH_Y%B+_> z#vmOG=G_r0#8aYN4f$$(Akj5o$)9urL^;S}ow(+RnxVW;E>#LD=ZRQ?6$h(u%fV^GCi&mJLFM^h6j>vh^b-?gTbpgYjt-4MU@$APsNt~>ot3wER zl<6d|*}S~0Brkx#(xoS`bddy>ZYhDKdzZknO!A(dztYX~SGo-NE8RVRWs|&5DtQU{ zD_y&Jd09zb0Dq-R&tK^x`77O0{z~^Qe`T5EJw1k{o5!$p8DLntdkl;9hm&bP`4EKg zF_e*|?`3dfPENrh!wA3gViH2MzoJi}^F7!Ab#kfVWe3M)Eqx4blvGkey7K{$_5N%L z_p=WR2N`&+wnd8P&f1j6d3yG z{y+$3hp&)Fc_l*@p2gpRBf$M<>LODDlXdCWpxOfHH&YAxDcH|J3R{m-VZ=VIB)9PU zLoEhqF~ZAM4OIFQ^8O@+Ot##tMn2;bt zNax^B*&0k+w?kXP3JWjYN&)ZCw=%5KAKnF^QM&YKlctVhX2!l{~!P3mHHGP zQ=ecW%0GTR{dWB2+wSM%FMt2?dIG!ezkNF`9l#%>Jo6NkE&~cmcTYjtl;@Kw&kY5I zF&nMu;@r4f=E-#CRP5OpeD>?L?m+JR=-=t2G=>a{)c8F?sYrP4#A&X@tuN#$U~dOe zNE+-xqgrzc4vjnuBASKJywP49?n3xE6y)Prn@TtS)LLm{F;-9E=ZrH)Hza3XN%R!^ zM}cW_0ltalSaP-SJA>ZhG9FjygzEyBCtZ5xNf*gH>F${)^~c05n0fNPxII1Xq?@Om zbQ#c2x_jEmCT^cp+!E4Gx*OUFU517_JNmU7;Tf_Acb*y=q^WQzxQY=&a+atczvKMy z9H{}~uHy26B(T^e3AwXd*G`VhbH~E5Ph)NmzKs!7vCN&z6pb*2G{4ZykG&zVv;!E) zhpS+UvGebAd|Go#?f0z^rx*F9_#gMRl*R<&mE}5e7eG7d($h}5NZLualy=eu(@x%( zyQk-zbn~2(J_F84ch5Q5(tAx&2M!$bF7|+ZV$bx56PLt=W$uTq!nh-YX&Q%v*vS2qY$FO)N~9Q9 z*uXvLCf9GTfDgEUBv*jpWoT)WF7uVhNr975|Inm@mctNjee{mtudKMUE2x##+!$RM1qM`zbN|v%DiHG#*|r ziBkO0UMgfPfyxu%ZNmPE?9$*u#p}UsyOj7VnhoQOGkNtUS5UzK&Pt!2v(iU$R{DF+ z$_G{OUCzo1D){u!m3|(&(q{l&>F=Q{pIrrKJ|$O3CdjbVj5~}kQjyNtGAc3qW=no2 zkHe_cOJzG-qOZi+Dy@u^93pul?&?8GMP7575t>vdSHTmS6qUdK)eLH8oz{YK|l%9Q%LG?PmU;uihPmf;d zBhf4UJ$mJXD)=sXC0qr6+I{=$X{nezMg`|NEPVzXmj0f@vZ>%FRlz2?3f|CIs9B+P zpW;j^mhiXGwqD9Cu^FBbl^;|lQU6qEzXd9SP4=#2s1)8gnrGE8(>3C6wGt^M4@XY% zD8-_K)O&Fbg~Ve`tI$iWxWdb9+;Z?}@p@5BTP#xcK&+MQCg(t>qUA~pw^*K$?Sa|A z=ueQ}(c0tOa|~C(02)i5p2pHg(pdU?8p{V&@Ld|q3M%;YXqJ8+&C+LpX6f(IESm~` zQWb2ItKbcw1%CxgDCDl%0#DM$FbGhGXT)9NZrB zTjGl2Vl$0D7czVYiCtT}1$$usM|oaSzjKuQBG$!f3f9$#6`_UXHF*|;U;Cg{(#!)S z%34ZnpZP>1F1i$fJgueA zfY#FA(^`Hnug1HIhOro)t+GP?U$Qk+2T&nzRf3FID^ccGCGi(^YhOy6SM)VFzg%iIhkYOpHVf+>cFTn_CuEeSvqQ1EI&u(3*U*UO1$(S zPZkePX8=4|GI`9CI;kC{H=ZafZx&C-)=*}aKyDSi6!oY;ja9r+K>@7aiUEcd9Y>(tT$@SXmN-E&`&d^bmI9O=7(knZT!)cq#QY zw%{;(#u`Vra9fE|&c|3XqPY0P_{Um5#StwApq}DUY)@*1_F_5Kbl>_J(u-TqE#ncc zf&oOCK0Q&Uk0i?U_e7Zws$eitW`PPmJz}PxN6hpYAZGe|#LT9GpHu~hRUjWyxQ-FI0 zE`4{Y&b{^v`Gu(LNwReKyZkM+uV`&2`9EUpc$~%q;7ytKX};#*cZn+kWsL`Ew1Cp@ z0DdZY1nzSqJsz()g%wmV05sF52hH@6pqc(2H1k0f3IG?WNm+F^=lNv*awP$|FZb6$1<$>izI?2B`xi$HRHr{GG}} z@|t@&irm9GPLsyuDtN<+K{J>EKw>d?n9MflQXtDkB`3CI)iEd;Q9+c684oiRW(=}e z26~B?hE7nSL%t0?Bh!YLd5~Hg>SeG%DtD}daPR+Xy^I>|lpYUePDURRizQCWU%}J1 zg&k4E#_tldu0g6v$zO65e6vtmA|g2AYm zcU17@7Jd2q?&p7g`TlM9^{3Yb9?F0Db*ZvEL=uO2kj#()NM^VP$!wDNIVEvO4w4ye zKr*;L?3wReFH%4Q`BBaav1&y|NSakrnuXxt5|Sd@Nuh|Lxp|JAix@?jNa$XYlP0;8 zY#!VKz4_qH1}Z5Mvyv)#g1wZ()^cwNR&eJn_<)d}{apYJfE$ZM^S4|t%Tqu~#oCz~ zVB1LdAO&d@zgBZ0g0zfiDdXUTz36dF>f@FqZkW8#3K0Q@tn5W7N8Bk@0d#cPP ziJw#wlT&40j(EKW1(HZ*2_9YVaz~~NuZid;F~zfp*jYR4u%)w0mgUH(R^bWqedpFf zyxi8Bz_Th{f{Zgu?dsm;g~(_xQFERnv0J3_B*agv^^wjCi{E3nQgJ-WniaOdj$Qe}pvR2l3%r6fK*VrG~} z%nTVIW`=vj3`q{k@R*$&6iUKD3^^3hStv|O02qW0GMH)FpJBjShNZa9P?I|!DDqxBO_D4N<7t* zgjEUWk|?#*=HPFcO&Cl6-&(xTQQ9lP&YN5ljHOYeT165A5Hmx1#LN(hm>HHLW`?y9 zGw({`)AMGAdEU&B0dHow=gn-A_(>%(Id5jT;mr`r#JF!)%=Cajyr(aG|>4dEDzn0BA zxImrdO~F&Ojt8=r#5nl9^Ji^!KKO*wFSc5RbVQm^3onkdr5l5ue8RBDbtEx>H#4N? z%?y#enPDk!W>}jy^R6U5J$z=EhtCWdz-NYg_{=7WpHvc)!)JyY_zZ1w1jZ>S(YAH` z9KzJ*(d}FuDk&!Aukht4YGGwVyfp&&o%n&ao?z$C3z0F)q+C=ah4LCC#ZcZSKND<* zU^u~lO9T-7 zD@1H3r3?%|N6B?CtF~1O*t5*J8<__)VAx6mWNbSBWiNrO-&=8yp^;3KE%!>DIs#bx zz()N#J=)qcU^zw!)^%E!k8GBHb-E7GL00x*@U~U?Iv+AE?^OF=nZGgDNgeViQ%m9v zi3X33;HRxDDIGY*&hA}~YMHQ<;vX`x;yKzfznx2*ExjueYSS(%Ij3XU6b6dA935$5 z8pYJcctcnhR)NRZyA5+bwmuZT>)vgkme4CfR3n`8%OEcVHX(&A*Sc>56)T3qy$CE65;OEKOB1z=;4sHpQJrPc%90#9pCv~Bn zv|k{PESbR`unLp1(w{6=J;?G)wp0?IJjcrSNiiAzq%}WcC%vC1%^#L66d)mcuB1hu z=>vP-OTkSkg=4Q* zGirtm7&XH^qh^!DPb!JY88yQVqXuq)`Dr|TDliE`;_Yxhp~n!cKKVW8la6!hE#b7# zenGa-{4qlDgWo+Pp5jSL4XUl6h2YRt$TkGDk8U&8T7kG#Zgu#L*exjl3!Y<9C%5EE ztc6tw?H!Son$!~}5X!{C!os896OMxQ@>X&`@qzI+&lgs~3X&MWs2S2TYKBNg&9IbF zGpx<1c~=sj9#}KX0&Cvs9cjxdjUc`pC|nR<&+hfY?gVi!7!@*HjSOo@66FRY_6<2K zb$&+)b#(%;BKN_tNqC51$3T|kp3eTVvj;LtR_1{4kyVuJ528%D{#kL5QopD;NI+N& zx!tAJ`MTADSwER6d=8|Uf!Dgz3O_enWRI(p{Lx{`E8JSl7)Lh%Zl&J3~gebm;+FW3`wRiC{&@%Fe}tyfDE{o|i3~i-)vx z**Z%A^sJd;Ddb@qLv9y&;+_zQ)alb%d`gZBa)$3%g_Z3fb9j5bTcZVD32sWbvl3af zs@&;34Ka6e+crR|WFcw6z_a9RZ9!qgG%{fN_B=l#g>Tz_L<(QFT|)|QMyX&a)K}w5 z3cGitQ0+WK3SVEK-S^+VoxZ&CXimHRi{O3#=Q7PmAa$?OaU*rJRGN2sLOzAm-7{%6 zsr#f-Hzt(2F)yh@a-hOs^V*TvO3_sC)$yP4QEh#VNU!hhc?L+`hiEkGO5I`_jlLR7r0!iBO>rZ2|DV%ecZYxe zPyfq*`OjZYKOcTMzB+a<&fkl#_x0CbPrrV7QNQW8VwsFQME%Bj0L|xDzwsVFv#H|L6bmfBfhF_kaH1|EDkC|Mv3tlfAvhclW24oA!_0_ZNFSemQ^p4 zyl2#Gy7@_UvrMR)<))ii>E?&%G;iCc*UiOr8htgE=w=z}HU9L=i%a;TM1Q|>8ejhO zuiyVRxsRv+=eL*tIW5$vA1YCg5$;*q%{#p&n{bc!B%MvTKdEq635C1bggYzY{t!dw zZQJz1y_lh+uf`JLewU$hC){@u{rXJ4@4o|n=bs0>wm7Rb}RQ|YwH_IOYG*<|~Z z%66Slw(Cu{vy$x(aem&mO)uMvIY0VpERpSZIX|KP_Sc`kpZylzY5qCvD38NtL@zsNC(Q+*v92hp0(!+oo6U#ndEyHI^v%yVRuL50#rn|6!y& zOrSE9?O6m``Vck^EseKy|DjV%f2!t9l144an zy;JR8LHh#WP-A*H)EEhe8kfSM#u+$Ny!M4?$YZo`77#UV4N30}ksE(18)Z$%pBgv* z)R*T`))mw=fIl^+=TD81{Hbv%e`*ZoPyOTD>0LGbb9W*2#VpQhd}mdjKfPAJ+_z1u z^U&(oN0~~iUyrqEbv|1CI(&Xqt6#QFt<^qCEz@dyHNv&p?0jvl4pOBIwR#rNHHLKz zKc|{*46SU`G#x|h^;lV{DQoy_`Ba{5fU+j%Y59n?R9P4Dw9Mug#*}~l?Wdo9`N2apZ zWQhdMkf~Oazz`{Uj0DbdqssF0mlnNT+NOcIXka?D)9bOWH1PKp!u>3tpIZZ0(7lhN zonE$0uX}N5Cwn!P=-#_%r#sy{e*5Jg|9F)>6mO0R5vClEk-S;pQdx#o6g{WpZA_$W zBrhEk>GfDyxqZ(dyURaUki3sGkzTe}-J z+h9W3NM1Ua(Ce|TC2zX(pI7q!^j_Y_VL~t4rkA`pn2^01OC;}In9!Z%{r#60Y5M1j zEPQ*p<@iS~7y$2UFC0M$#5$njBX zsp>66+w`Ir$HuW&V~Oa^uyNKAy%6nqjOfksamuR7K=d|*O*W#J4q@|pteFbV&ntbO zSM*l$^gfQTdD%9-=*1yy?A2Hzdha4^?nLkVx8Hs~?7qLeL^Dzsq8Ja6x^fmTQ&yj! z0seAno780@b!9>VOj*oH-DecJ&+gx?BXwl}0j5k(fGHyhFy&GLO!+PWCQRy{o%r3C zvviiS%AhZ=-0&>fNL@la%geE{3T1xo?z|PGE&$0=rbn`rkw}(uDUt;{Ur*|uz8|lg zrLdIMM)-bjMBE@R*$8Pu$V<6FUcNkogs$c@27q14^kA1V66{hg1-q0pV3+q6WMtLF z^J^w>PD}sfc<*u^7E^6}@Arn>4MmfUQYS>wlyzQ8{kdJ<)$}?5NK>W<(v*=vnsOZpx*kn=+hq z^X>GHpLT~=IW-~u@^4?i|Lx2F@AU1LrP}cr(VJ)8)ERU>mK*CP8_`S1x+!m2H(9um zpY?ME(Fjob(4+gB}CnnH>jJU zbou%r(#Mw5RqUqcQul5TyJ?$x`rGl~)@a*I+v95?nC02e^Mv0uZTYA7_X1EiWqQ<2 z8Hu_nm!fXUaMaEJ_qG4=>&u(;?aPaD{Q5t9IsK1+{U5*V|M_KioPw&aKmNA={%v>o z{`$}Fe>=VWbbL|BU(VA%{`&2g-~O>wYaSz#^GuvNgHFkEW8!2Zk_nkOWjZF#w9jU` z=gr=?Z)*P?+2kpY)AxPv&+)+D7H%`xVYhS1`qRr}028N7&%`MsnK2J+?8ON!$3D{ORQ}fSyyPr{|QB^qg`jJ*Nz( z=d3P|&)<fr?qTEGV~70CbJ_?-*(fLo=&n&=g$;@Iu(ANW#tm|XBWvTfY4K=C-hX2 zgq~_Cp{JT5^rX%}KK(k3)jZXw4r`!%PLbTGKG}$5LaNWpvC@|5Y)FC>A{oH;snWB3 zsz|m^wUq6HwLexQL$u~GB00|ks{0H?awGO+Ba#V;Jyo^kA+wUl0Af#-p4d}G5__tp z#GdM1V$YA4#}Jiyj6BXmcp zjP;vMt{{&AFoH_3cRz&Ey7hA$+u=B3;w_`-E zc~ho+R@3=+b2bw$j{%IFDm^2oie%(eOBp#;I3s6mc??pS$H?P6O{d9#rc-S+oowVW zAx)?1@{&htaetsl9_2f4&~%<>FbIR6C+`mLLd$ol%f<4|FC}No-B>5Y8bH&j($jRR zNSaQyl%`WXo~9F|HIEU=d74g>0ZpgcXgb-5WI~!wm5!#9M;`KX6zc>qb*l7Cohp*4 zQ!QocR5MJS)FS!xOr2_;sncY@)TuV6PBtQ$kf~D*d5PqoKF}J#)Tz=lb*f0FPPLS& zQ$3!k6QnYak;i$aPLlysr`ni0*~nu;rcO2HwLsP9{#-#G1DHBhdZtbl$<(QqGIgqO zrp|wPd4qP}fBSY~jgDXcaXNh6{q*Iq`}OqYUw1$KcKUS^lW$*kKObM!bD5kxLEP2NaO!yk zPLlxwr``}a+2~+G1WsM$rGwb{5BWU#)8A1gGra}YHp%-nxK)rcg^Yfjo?Scr)ga}m z_4KziJvQt3g8>MfIz0lXjzr+pOA$DAI09$64n95Wrk-crG#RjN>Wy`ijSePc-PHA_ zgHNJ^bI&nc2LmWKb$ZH89Z9*Vmr`!(8OqHM)4`|5+0^qmnedNfTPiKeNSqG{?GG|dmw!KY`?)bk9QHiQ1bdSlRJqk{<< zGB;7a|20X&&HJx`{N{gx^JJPxo=mfpC(|V4$pp#CV{~wyC(~unKiF(MnQU}0Ay1~sh9`rC zKf{?U|6D-_19&n`dY()Z$&+c8@?@HXJeeRld5jLu^JKaV`UjhhCzFj1CgjO9+3;jO zy$-HZFB-s;Y0~p#nn<2Zvy>;(B;?5i$;o4MaGodAWzav^Y&@B4bTA=LrpbmU^VxN9 zo&LclfG5+W=gBmYJeg)GPo_!8lL?ZO$LQcZPo~SEe{kc;WTS%#c`{8lJef3ky{GRV z4B*K$>3K3uBu}PU%9Cjl@??VK0LY_>M4NvCN>)_mT4A;Q` zo=lUTC(}goWSXTsnI<7mCP+>mqJ!-`Po~SDf3V$nGP&qrn~*2dX2X;D^g6go|6m)y zlWEiQWZFocOuLjP(*ls+TY;-UoPv+%Vn+`rj-^4oogKYp$ zrcKY2X(M?u?NXi$cAiEDgXH8fIyldh=`-jbY&V`vHaeJ)C(~xblX(h_i_pP!`Ul$p zo=lsbC(}mqWZI=XnKmI$CP+>mql5E2nLdO5!FJ=xWTS%#c{1${Pv#TH6{pWCgjNk$;o4MaGodAXV5>`ZakT6bTA=LrtR|5!OwmEE9hVVPo_=J zlW8M)GVM~HOq-A=6C@{((ZPA1OrJsjV7u{TveChWJejuNbnr>ef1Uhb08ge(&y#5* zc{1%%o=lsNCle$mkI}(-o=l%Z|KP@x$wmhg@?_d!)4?Y>|8@EY19&oRdY()h$&+c9 z@?_eCJeeRld5jLu^JIn``Uf|jOg1{0kSEiQn+_)a{IUIm0X&&DJx`{MP32Htc-#^#|@MOC5Jee+%C(|wE$zbP+ zbnxl>2fKNm%#cCCzFj1CgjO<`S4_(LCYdOU+>ZiIvBu{>C*FLx=5Z(x0EN-CFIEj z$;o4MaGobKWY9m@Z9JK5bTA=Lrpt#XQ~av;mLe<9bBbV3HSWySu%E`TS~rRT|Xkvy4hDNm+L$dd_@ zlgH@bJWpoKp?`4W$z-F033)PIK0KLEu7fM}4+ijLy7WAmE|MqHE#=8{33)O>a`G4* zoaf1mIrI;1Jeh2CFdEP4%5BBps znK6U@!G7b(WTS%#c`|)IJelf;oq3w`U&kK|;K}sqc`|(@Po`hWlj#%kWP;@6F*-QU zlNmGUAM7`tOg1{0kSEjU!;|^!I=D)Hun*wL^yzsreI!q&U&@o|6Y^w&q;!u-|wx+2~+Go=l&PCzHURdUVa_>ro+r~s@?`p@JefWnPbN%G9;1V^ zJejJKm2^XmKAg`fG5+Z=gIVuJehtePo_`DlL?cPhv?ui z%af^!4EhI$jVF_f4h{)LkCyM4-Nr5nISz-W{Bj;3`==3*m)uyeER;u zVU{OT6&dso4jWG<8y!r@lNr+SWHud4&_6f?@MMPcJeeVqCo?SN$qeauGGTJ^7#*DD z$y8+q{e#2ClgUO06Y^w+bUc~Qu7e5Ae+3;3;K>Z>c``#JPi9!klNr+SWWwa+F*-QQ zlc~xK`Ui)NCzFj1CgjNs>3A}m4*uc!uhTy`1n^{r^gNj%k|#4P<;e``crsyf@)#YQ z=gE{A^bZajPbM23OvsZN((z;x=*XjMJ|EvdI0W!yhV(p{A(AIEEak}z33)O>a`G4* zoaf1u8T1bh8&4)19ZblR8Pf4&HXZ!q&voiW19&n+dY;S>$&(qD@??gDJeeRld5jLu z^JK~l`Ui)NCzFj1CgjNs+3;jOyAHly%L+Oez>^u$^JIodp3Jb6Co?4E$pp#CV{~wy zCsXFoKe+K^veChWJeeUIo=jb&IPTN;4+ijLhV(p{A(AIEEak}z33)O>a`G4*oaf1u zIrI;1Jeh2CFd2+|O{9pi2W=PMI86tTy!&08ikdP-6BqtBi!Ev4^Q)bXV zIBqm z@no{m!Gt`SF&m!DXV<}X`Ul4Vp3In@Co@L!WX7dDnK2mql5E2nK}o5aO25j zql33RndwT2p_vX2k^8^WzT}>X zXY|X@OJ(CRdN!Q<ql3m^K=ev?=~=yYeR#k|7D%}aqy?#OrJ+N^A-!7_5+s&Wi;KK?m$z!-EyTZiZ-43 zX}UAr!L6?AeE-Mktg7iK)#yh=>&NMT+jZii0X&&8Jx^wgPxH z6t5h>*E_OQNggAC^T?RG%0L1)WK1>^c#DkT4&&04E)^z$>JY9Wem4-Aec=*PRsLM6 z>A2?hOwVgX7!E$TQ!IiLh;)t9Rdk4ixP`bt2q(7Di|}yIaR{-l^57zYgUYp+VgtCE zMdjzf^TG~m9I)y4!}L4O8`gEkvF!c(NrII)$=GCBxxE#KDj3i_ZgKWB)W6W zGOG|v!;#~;6!N!+={s&xFM5jENge^pvY3 z?#sJSN`}zRf$QC`B7p(qm@z#$W{f1qjQ8Z2k4oUX=$If0e0o^uI1h)ZGk}GT8yqGZ z3A}~F+($r5f3jB+*vpn(X+&5yG2V{Wr#3$n^5HTIy zKHJ8xt}6Yx<9jud0LAYl9m)QYH>L(gpL~*CL0Ny=fbGS^*&Hu{nFfR8RrY$P-CcQvvDK?Mv z(w$DaZNGOLHn9{>`Xnh!Y?5luQ|}galp0p*Z@2@5b35@4xntNWS3!W3Hxysf-UXRt z3>S}c1tAQe#*FEyF=He(X1u4yl;y{S@Lg<7kPtpQD0C?1!7%mb2Zg>|+9rf~2;u9a zoD)KZ^3k8E{i6TNXZQ9!>Kv{l@F2rF_m;4p`9LDcgiNss*{H zxO((!L@Ib{rIe#~*xR%pL=-!uIfGmvB1gazx#H>YH1WN_y5JXL|9EEP6shT6W@seMU8!dsaBi~0Q@MYW766mAX zG6}R-W`QqghQ68vK070HDCU_k_2*}VzFgWSfw@TFEfYpFf_$oXSjcxR3ytX$d_9LN z38d`Ngb<&vc1xh+?}XQKDam;o=;=XV8}eQhr(hvk(n6jO&j}mAx_0t(PCV1X1&Lp{ z|AaRwML~3tI(iVy`=oGHN;R=qa)d%h{eYvzv z0&|hTTO14$SjeaLL<}xDSD$kMw2*VSZk6YWSAK61#hp}pQtE-B=FhEphGcFf@wZK3FhU}HVMo{0&ht$(kgHzgh=Cki{S9~J?b2;bAfW7IpRUe zKnPtTljP4VU`Xh1@3uq{4WUcy&_a>Z?}Kn+uz|glw9qU!NZ|=K$(E%Qp?B1qHr2xLi@ zA)(H~pEYuYFGc8b99@vGL+s7E;d?(KPYRE%m2wsC57x_3uy%5F_?OrfSeQ26p~TsXnEg$Ea;&?;4jblTUuflS6b7yxPy1Gogt>L&0YMybC8k7Cn@By;PId z(w@Pa$lcqmBY_`B#Jp^qUIOC~G4{$VlE76NF+oc57zvzb#5A9u5%Y3sn*`<}fwzp9 zOSj*R=hw;i+K=v4qfzH@oeP}q6~5GP^!seY6FCR!C;4AQ#Vl>Qd&nfd8biEw+I22D zd~XGYT}jT&TFdu-M5-(hzwHIES2{7V!b_@3wixnjBZPQC&93#eFnMD$~DkCOH zNggAC^Ng70^D|;zE^U**TqN+85u??fwLeq)u0hdSzE^L*M4ibsE|gGbI;+J!jQQam`M?+XUk1Zy)6| z<2tPoA1B4UY@1#P<47^~;wp%#lm%(#1l-)$Ng2ommgzD+BEL`X5z zOj^jXcAK$smENC-J$GrtSO1k@Cil=5a_D>;dJU~>kh7}X4yjE=wh?&hP6x4yqQ2cf zwrW+NG;DN!T`aJH_z_%1ZaEe{;;U`1Ab}qz#k_2rUIODtG4{$V@V#RMtIV9`$B404W|0K0%7_V4l7~oOInRh`GGN4%8zUwc2`q0JFhUa8~Fk_Gt_69#&Dn060vU z9u8AR!ePqAa2O1IH3@urI7~SYhiNi^!;~8wCL0O7g~MpPQ|n!beU|dQm;a5Ez#BLW zi7Eh`lvrAvukbrYq>w?}DnfW_B3CSci`anDv;`qZy%jDk*13Qsa79Ezi9{kNty?cu zCMGTVzr=2j^7L^Rskz};(4ZKH|4cca^Gs<74y05xk?{v6J|JJZtkWN&KB$Fc4Ip z2;1Dx2qoY^zBijYf*D9KHtwkC(8?-S`I+NwMN?l#s%M79wr zr85GnqcVnG53JXI!5Zbs(n!g1ZSjm%IwQ&eL`<0;5mQDYV#*mr%*P5s%T*CEL3;8S zA)H6Vv>6~`$_){djS$`4-Z`wBaF@e*bN8 z2t1zYoB?p+7vlX`*8_G%VzG1EW6%6@6pN)p{VZZxi3esSrN|rpS?6{_fhz5P*cg;I z`a5(@B!k=3E>!9%B5c&t6e4vNq(#`MWtq-oCk3P&i?;^Lyu!W;#U6=tYNMHaW zrc95BDI*avUNz(h)|JHL@9-penIU&}#khWCXDfx$${0=90wwo2~V-xqsRu#>Y} z3v2+Yf?CZZa-NjX?pKk(07Oig9uZSUB4WzLh?sI!L`;y9JVpZN5ixBBh?sIi#AG9Z zw}=?Y5?w7L-}(7p1xqj6M4iJmD|_@ONU;fJp4KbhxQ$uvZSebv6wz^RD-Q7l>4`w7 zq{N1DOKah4{V8)@u&L?7uu{s(_s^5X4z)z|EWY4L@{ywyW15eMU&wQ>+|rD;M(OLc z2VIxfihV}k-U?x`OngVewtVmX6A#jso#&bE{64(e+X@mGfQTv6BVx)(L`=CD5mT;; zhzU}X$4KBjBBsp%5mRo6m~15Q77>Gory_Tg^SgWstt^g}UEaW9Y$0@>(crehJ?H53 zl!H1UbH=?Qd`jIWdmxyJEa5MbjiaIxStXDN{?qy_q%Y$*h@J3s2xiuA_y0|pjX2%7 z1p+!{&j>K@MJEAL@CBjGUR3>@Zz61XZHCP+yhBZ2d9m^K4AOu4~fvXQ_)g2UYBkV-$U ze?}esO8g3G!?Tbb_gQk2gd#_Ig4k6fZG=a$7J{fo3Y+#r;{nf$zeVJZ(*18?RVkUF zkOX@e)zj*Hp9if|J-WRSZZ(?QbPpS`ZMJM$7cHh8G=~@s`{V*fc+=_DZ#HZg87xXF zPRV5gmZ3bSmqyCs@(!*begRmRGCdZijKso}_gI(@wgs+Ag$a_7$7tU?6{gLA3R7-W zm~6D~mI|YBO+HZsEdo_1@X{F(bq-ewh+EQ$Lq&_YrL<^}JNO-dbYhx9T=Oh;NSsm} zGm>t^BOB2y6b-90p!MEukEkctyO%xeE{@Z6k>*|;%R-WmIDz~xXN%5SRSgzPl1{2y zaMDmQN;oT7NQwQE3N#EhGX$coyo2lw`^0{D%W$@d^&VGIzyK;tnVt$$Mp9wQ#Z;Jb zRVqx7k~~BLt9dF+n*kN3+NdzONMLnKg<+uQbM$k*s);G&mrFHF)Hz(&!5mzKdWn7F z(jWjlQ##tIiLqLc+U1IVdZdwRe`_N=xg<~#VoTzlT(oE%q%n^w8Dg1OtU{@=B4k+O zizETDPsDGOPWno0hE(QRB-xe&F5On?n@7kwACAtmu;p&44Wj=Z7rJsQwLSChU^z!W zH)6W`xsu*s39JIxFjaasOclw7sqWb@AC$mqRX9wLk~~HN=ixAI25^{agTrJafwyoN z6*=XEYG-^epUvC%sB^fIK#of+kmf++SJrYrJGX~Xo-ADnL`iEca-8;H6)i`%J+q?T zpW`6X&gy*FHc!@gof3s*r3tKeFI6n93Kd-yC$~oA4KI!3;!|1~?BMSU_Gar1Hf|w! zZ&a~x{`CD*e9GNB%lWWQJYD`Q0mYdcM-`uYE}k7OfdO!sDm@&giiE>di{UUB`f3vR z^l+GJ9uCuH0EekII7~JYcngQoG+*sPawUG+AKyhD{kj{z_2HhtAPF_Zrjt95v>{oXXOCZb(34j#>Ie#RXRB0uZJxEKv}wphv&| zs0{H!5>=xl#fUg^hb`tu9PupHa`d}R{EtW~Q9!hV5)|wZt;AXyX&N^r#g*#(m!kmU zI78yHG~r`!M`_fcY~~=fq@*}atx#dkq49IJMJjlw3bBy8PDaiR3&8@%QSQ>-?;Dsk z97y^lXKg850Rwn2ReByw70H9CW_U0kbpKZ6!2~JEV`h}h8(Knf3siYGGNVd9Qu>mtEG-^+8s2B>SX>P(ReQh1~n ziEj47p27BZlDxA7;^#ske)n7 z2$TR8wu`=c696h zt6U7M{PW;fK|v)lhWL&0G7EUBB?OdVk%6vDitP3NggAC^Hi8F11e0lQDL%?z*{N|Qg`q9X%bLNK`)Dymkg-RnZHyLLyG0>^jXW28P{V9bM}ggm z4{9M$>SM5HN#Rj(LfDgEC>KSvN~tKa9*v`KL!m3-N?SAH?2^Vcaurm-P#=SolHA0$ zd7B89mYv%nsZUD?5|W+s=EEg0fC^Kkr@~Z`RG4Zp6{cF13KOIxkCDK6DomFF6{gy# zFxg1pEfq$a{j@ny`y(`D8hi9>|BnH>a0{VogyGvtK52x*mug&!z@r%)OaivHS|E3C z+8f;m1{^D0ek{vK=SAmsf;UO96zR3^SP_Mv2bU8>*Vfu4go|yQ-el(O{B31jj)h!R zZfRyS)a6Xy@fSG?_RqQTx4QT{nM)=s*rZkM;GvFwy@=>>oe*dM52i}bgQ+5UFx5Q| z=7ZHRtKwjSB;+yLH;;qqGQh!98xAHL?YqUnlzyI9%K=JV$d!wDsf>v_hbslNs3*^h zh+XaXmgmB$CCuOV0 zvuEt*;HpHgAKF@I%?-VQ{4U2;&KdSV+dOt__)v6h+P;)TBz6u#+t4#?KlpoLwM2uw zo0Y$DuXebC0tP@~s`OBpDiR7)-9uqM>i(@tg$YuU$4KBj6{gF83R7)Vm~13)o(iMA zep(88Qv|9h!l-k&=3-OE$kic2gFi2x4gy1Bi*n1|>@R&J6spHa#<+v$II(xO4@J8@8=l?WKph1*F} z2-P;cBTQU+iT>KMg?m3D^+TL34zM|~xTCxybCK+D2@IgZROzWORU{RrT1WvDMiv-rUR2U+in)uU{U+KrSZK8NE^$ib(I3m>>CVqH7qsx+! zsqwT(6e1+_L^L8-JGY;mRJ5EV5^3HK#h%Cv@;3Ohum~k*f|yNDmV!;IP{B6v;TpFn zB92DiKDdo_Qp-X;3LYe)i+p0Myf4@=o-TjOFZjx~tl;!q3@%D?vvnKhO|gX_O1CJh zgIT2lrVil2)aiLJbtDg_zURSwECO1uih~J~kjH4>JPxMI00&cVIGAj-?-mE6r7zMy ze)U<)HcjNwuW_K#YG5ntjeZAs7FZNnvXk`ISxk|?I=Mo1qK2ppaYt-Mp9R;2TgW;S z>MruXu*YiYJ*0_&3?%AlAe+I@lWI73XBH*p z>Qsv_bCS1;Qp=#?OwuXIJ0(R;{VLhNIsgPyrw75*ksz4*9t872?JHN+zNhEF)bkve zE&~osy>Vc&(Y{*_OzY=)#evbhUwQXE_8hJh@E~<1rR38n-DDjj>tsK=BJ@)3NM*-C z>pln?VimN<(W}6o_kLGP=^`NDh&5up=uRc!OY52+-Bx#(Oxl}AiRNN;`~nJ%qjN>* zDea7Q2c|s`xa3-}7Ouip4JPnPc=zb{jVH(giG)_|dgs4_uK}zx%37p5l^cmn_>J0~zjRel)U>HV`KnBXvpKmSB(p6tX zR3l)01BF2h%r;Ig8wYWmct$(v4Y+E;>*W_@X>ePzHbLQN))HDhNUp3A5kkyr3CkK{ ztnz1S$ZPD1*2C!++6@Vh(y)jN$0`>DJ+VgiN%qo?jzkfJ?fo4&O90o7%Nv9o;w~bD zyopD*bAqG4;Lz3}y_P?#V+d5jRwLt*+1pfL3Y zg~>(;Z=o=w5A;`6p|$*?xj}xJi=u^`!<7V*zaj=XN(I05n8?T8}h-(RwnD@b4f4yI0zgQ+8NF!c-$ z=7YZAsyLV+C3%bl&f{SE3~(^@hJ(pQ0_SlsgUifS`cK;gwJ$!Z612X-!619oP1-`{ z(>WLjhTd&S)mfWD=hg!Bgil*+UW!;sDU#Vq;1TpRX)=64y31+BAi;;ePnN|u^j#6Sor@RGMwWwz2*Fw^86#w`vXHMlPJ~7AQDAq*M`n8inwKWYX z+M(9ATtxx{a4>ax984XFgQ*weVCq$IFhNT47zv!m!Sos6VCoGAlZ^!4;$ZH>q1p^F z$S=k9Hc{try*{ASO;R<2ug0@xpr>b$>KQ6d;Hcph6}k<6;nC%aCtjc3R;dd)O#1;b z!~G}sMlOvkon;ECyqxw%<){*|5h|-m1bdMDA8!+_B!*huzr9l{NMHaCrcRH8sUvYP^t@c;dve0wrQl$_4u$-0-JzoXh$~!wGiC~$=(sL zJ&2rJ){yr|ti@I*6niFv2+R}z*a&K+yam!BSW7zv!B_&egoyh&KR#Ui0&p;OdK^q0 ziG!(^;$Z4kaWFv=@)+%#$HDX&;9%+v2a}EV-Qr->wJZFbz3uO^4d1)B|BX6_D+O%D zRYSQ*|DB~Bu$Fc`a~IF9P}Hmx5@qDB+DfwG@ZdTUgKS0bh?}A;09HC_EKpE3I2fu` zcrHi5cT*+9Cuu}moRGvEDlg@(JBei$vP_fJ1MU5d*lA7A(cdFmIk%EC;Yx)PU};TB zX!5?SvpirOfP<;i<6!DY98A3!2UD+#g9%cS$4KBj4yMll2UBl2m~15Q76+pucX9A; zYF|V)+!c&EhwF~`!Jij`R7(-%QEFEBh3XR=Ji7C^V@Q`_Qx5*WfS{qBu?8+yL~;$= zvrc(xR!(kvR^Uk|dm&Hi;X@X zXejr}YCgEPgKysp^qVJQOCcTIVzJeo_-B+=649gTX+F-Jcq&%iN|nqYDa%pbyJ3~a_$B}f)1-&O zG?7r4<{k?3K?!VDrNRU$$zvpNo(j`vK!s^GDoi#KcuR$mFyjpWn&a{m*s^=OuBdak zUKwKV5@pP5JRXrEo)m(Fw};n-U6DS+Cg~BNcfdOANyAO|oDKz^$Z29EY zWhZupX9>FnIV2=&JT`nygqd_Cme%=sj?%bzl&Tc^)R99xMFOy-Be7@N4zXcdDr)DF zhUkv+9C;t{u#riEz-Os>dfmec5*WaSY0|S{nn*TGbI*qPs05a)O5oGOVVZe3OrHT9 zrrF>y*+}3m97Y#JQXtHIL1-o4qtKwu4IIYcpOQ->+(+n=`(KD(Me`e8BY{f1ANnI~ zVIt&h=UY+}gIMk^aIm+l#;&kZq>fsXN+fwNi#4&mtqd>uHmY_8X;UnuyTPoBLeA2q zi(*o;cc5boTPl@6eCL04`P-vR4vdA(K9BwcZNYbG%@4 z-h4Hr$W}Sz4wIQ{eS0X|>uY#(-r%!_c=;xF>ltRWCzllO>1S45f~jcNa_l#3oO z-sB2G7yyT9(!*hzNH|Qh7!K2{3Wo{Olg9|*JRD}o01ne^aF}d_@D>hJ`FURP(OUUL z{5pT)aiGxV1`abwJu3bm*)Qt?=jhY@#3Que?y2j0DcZ zVTKIgFwF*s$wmTi;V>HZ)bGerBi}Vx8hZ}cMKOCH$`Kg6J#ue&b+ibQr88)#SPK@# zU$Ok&UK$3BmEHO;_>p_D0jvUl5q}FCu#bLc$OUo^1WS?mT7(??wEQBuQi7}f+grJU1O~uin)Gm( zCK3+QEQZ50tHNP|l;klII1h&zGJwN08yqGZ37m(+$bG(oz(`xdRn=%*UFZ!QhI>^= z4X1@M=?EvYb@nGhAQ7R$4o}hrjyUnWEC+@Vl0~CT=ID1-mnNc_!SZc;e+r17^(>xT zqF5B3J%FYmD2gRehk4Y@U+*$zSwr^2nN)7iM+r?MU4~HY{3uKp4E(uw%iqZ)hBG6T<|1hq z!7F|6z48bzfzYUggVtt(jiFBYnm>P^}w*#A+( zztfpmYlnDsw)!q|$d*U9*hbnvUj5n?#4i92)1-&PG?8$aW+@z|SrrZwBq5K{zIiyz zkO3T~+2AnQXx}XyrW9S%%9vh0)j7O04Mv^A^=g58f7Uz&+Tn;h?xa43r+-pt*x8@H zVzAi;m4*JBAoA(A&~JC;!f~vi0}04z+C9t+b%VquzlEX)Vpzg4L)K@##1?Q7?$Fhd4Zn0BMW#Zt zR7%koDm%4LkWU;fTe@BT*OVG-#FlD5b1a8Xm@$PYCaz;8VO-YuB}-`w3Zml&w=pYR z;VQ80)@_WsRqh^+B1JW|paE=+r^??=n4z!M9A})QdCGJ?(mBYPP`zp$f>>kaM>oV7QCQBf^*0DXt)(G@_mm#Vb@142 z02QW9PlahCsW9zgDh!6cngl*Q6{el1!VDQuVcLxflZ^!4QeiHgeK!%%PJYqa(5MJ# zd&7evcF6wm*m#=wSeWWV6nFu9+rE6YL?Me@z$un0s?bASQ^zm{2 zXMcmZMy4{nHLZB}IJ$sIdr8`IH%RkYmq_L3 z*-Pw`{gXOmD$rl<+X@mG0D@`LgJ9Z75KOxm1k?hm~K8Cj_I;VWts~s2-6&Z4|I20}-dAiw*TF^sO5?toOTTkQb@o7+w$OF#dk2)V7b zE5XvE1V~9KQnuMk+718>TQ<`6fk(*w$BXU7k}a87_;HQjhA>k(#Ibl=v9VR!Ald)~ zOq(77(?%j-+Is}d2a|xS5@3QP6!2lXeo1O;KM$%x~dm79K*Mw+S#lZyW$zz0Y9tSgKfP-l_ z985Msc#DJ4?!SwhcM(Fl|5qu(I9Kon2h&OtjUs(ZvC#%06*)VJ+8P3SI&*3(!KLvu zdHP5ZSI6JlCn9?Aqu}^aHG+gR(!{`%LPQM^Go2Of5uCZD5vdK``CC9YI?+v{t*}4o zeCP8lUGSDn6d5Dtirre`k9we!zau!JL|$#rh$!8HypKdu&vK>vRU|L~2h*m(gmx)5996`9GgU8>sEmb*iuW}f1X9PtKp37t>6l0R4BX!6V zCsJ$t(Vbfhc4ggy#5XT`|`ZZ=TucciU2R#oJZC6>?HKY9*Q2%;@(So59{Ffow(m zc%~4=w4>01q69qgu?80{?mv|}JbgOs2vHtIT1>q6zWrHzK|@>f%g(LK!n3692m*`G zjkVay5Lnmrzl2o@ARnha*lHFOkXC+AjAwI_w+8QXm9D@pfC|&4r^0lRRG4lt6{cI2 z3KOIxkCDK6D$JMx6{g#$Fxg1pEfq!!KQ%k3o}d06RSNoY^y`-R>5h?mJ4-%{o&u^j z@ajycB#VZGT={lqzi$TNq$;I#sbKX$TbmsZsd9@VyJo>gk&RxqM}%nFha6)tG`uwA zxpjNynGRBsLrEspKeWVSbu6Y!HIMm=F#+jAFGDJ&R5gEr^mr`^Ej9>0~}1Z;b5}SzFQoO!~(Bs zK-K+IC-CyWQRi@74@#`@>`#qxo>ARWdqfSXcSM!Yh}N|Xx5}F5(e%=v@>y-Ka$Vp` zQ3~1%h?rVaI#0Rub1<7cxDA{o9?AB$Dg$nqG&fLvV#rgj4ySi7+SK@UVWlJ=TWJ&F zy~A!fADZg1F76(U6jX@XdP|+ZFNUXCr6s-#fWma?p)g$}6sEg}!hF>ITa^kEq$H1# zz*#CxU1UIo={71%HWGMCg(+Psu4GS3MBBUnts>9ix)hXSO?QtZpcOVsH4H;G4&IqK z<#f&_kY^Vdo)-y0Yd&aQz;>lSM?SGJEQ-38R`ze*g`GbgqNJ5P!B%QgVLOU(@y&VD+~JrCxC5zsYpFkuq%810+I!PG?tIGAq3!DOR- zw>X%}_dK&U?%-E(<^IKGIg)o8Z<)YuZWC1QGzh~_~mN7+AZ4Tj*J?8FvC5~t4Ara$|A z;Jc~h-tB?+WiR)QvtnHhqpWpqU91RPs_V!$t8@Z(0XUd0Jr1Ue#KClnaWLJQIG8Xc zd5i?k;$Z3`0~}1Z;b5|nz*`)QVqaQ+rdJWr`$S<}1oQ?9)9|Eff3kat8roB4h?jDa z?m~8cD}X`#25B1LuG(t3xMZd8A7|3mPT=VfkL=xgkugJV66xIeb1Ws6$==Kf>|AD! zBJDU}oy2-OnSz*DQt-osgXr(UkFM+gVxO9t#EHeuaUBgJfSr&2c39=;oHHLTfdNpM zEMtxk^w348M&EON;PHfj=@}9vkie6AB`lC?l7{EEb67zF19&i9dLB#{$%E-;crYK7z%_X=VM_8C37qA@)I|n7 zm~P|2WFvvMJQxO06+8u?-Gk9Cq0y*wxRO94vWO4F9pD@o^tqp{g!{Owgf!36sb^QQ zcOkL1@afa|+LCa@-Uz)Sv84aF^CTJRo5M%MZm~~fn|+=o>`9Lv3>eM<`Dx^7BK-Jp zbTaZ@*t+qhUzd5q)XE@=C;wX}2fSr?e)z<^Yu3Qg`g>7}{TJ(afdM?2EwxA9=Ik-%FXjQW3?|5Mp(MOxy-@0J9E;NfWz#+052 zhHosV(n^ua1;Fxca?i0bwzL(6rvIgklx_vsGsu!M_lG+}P!vy;r^zH> z+UI$lI+y?wOqZSn(?ybCx_c7L2kT(g1i^$!$V0TRp9R6xMFt?4egnbeqJ8}>2&VG$ zyo!eM{X#yw(Z?tdOn(D{;r^q8MC^LK^Hi%)ZOI5f{V%=V)UR0llI^E$aNDpV?kcfT z?UlnGP%h(27rswykNaO}HK+9Jp}e)UO%PSxpWT+M&7zjSr3!~=tJIrfSG825TK~RO z*iiRlh}5I&nyqrknd7pe+C0It>|yUVHm>6S^#LH5K0OGgj|9Q=i$O5`njn}kC3%bl z&Vpd-A_EXizky(~k-%FJj5>RbKhv28h)V=C>gd-MFgR&KGQ;g5(MH7y@_>bKXLzzW zKR9?)jhOpKhaJQH;If2evOF!xHSW2^KCy)9yK%IU%+CLpwgzm#)+n65(@uf?aJE#g z^wO7yonUV?I`BIYUvu_aw?Kr7GbzMoC`z?uD0;tdBo=X)xf=-KNeFXRT6_FmD+(9C z01!-{9t6`zf?)ckAQv!JPuHE^W&?#@h!O^Xeze267z^3snEyP**_B^khC=|W+gU~&D zX+E%06I?8Uq&Swf+awO2tsBw0MUjoPj(*e-J>9uIfGWePEjWAj?~Pcjg=o1hDm%G$ zvYH3KI&7Q!Ocm*{j{6q?g6Y$PVERZ9OurZe)2|7F2~(2CNZ>pOrpy2Y({CV{Y$Wg& z1S4#%tBTL=?)UobilUBwy%Z7^iU=52dh}Yb^O16zR$Sj!BGa~Ku3fq~t%I`hJK3(%1K0;3VEXh3m_8B#)88XtKIs0fN`MKH zkjH4>JOQT6fB@5P1ek2J@0I|AqN%f|ZGT$)sf~bf0ni%`4EEFA-78!>v<3%hC!tu- zW~K<#fb2!Hq@%!y)TkZ~A@)OG1g@s!+^D{>r5Q^9D+{5LHyd4d3N6Uw3<;YOxRfWm zzwoEuKH29{AZ6Gj8P1)MK5dbU!7Yc9PP7aKFQoRzRudlld?3~6G83=owt@l%aA5lM z9GE_m1JmDgU_R>ptqOt(Qj*6=;5-PX%m4(_Zy=a#B=8ml!;pR7^Pt(kdpV4gz#9;Z zb)6$xJXzZ2TECOD@$IE0u9U1D;zvo0t%St$ZT%PUF*NpBfu$6AVyl#c@~myqzshY1 z;bb)?!>CRB#NA?hB9Ua_DAxh6P2`o9R1OOyTyUD={eA22o^Ldaf4; zHd7FL3rJ96&)D0+k4RN0-lz3%U~j}$xuWTls4%s#+!Mr@bK`to@4yNY7yyFl(}Q68 zNDxfF7zER=3W5nzlE+BkJP4-D00h%-Aed|<@D>Eq`0#z@5o-ERKUV<3^!;2akT9JE z47uCL40l-ixbcLjbhJhR0-m%2)c*9XE<^}twhR$hO$f1;Berg(*d(3otPf!e@p0V2 z&zbNeRXgn2WVQD*LC6uaowRXKqe%jkfNdugtGq!-DRO=gp|v&$s$?Y1$3$T-sZw}s z!^QJ^yG!SFyubhuOrIVE(?^0}`o$oaepL`mkdiz`0_Q<6WdeH4LL=Qg4Ee}rUKLUST+8oAvE!&5UrCxYqD;XmK;QA*%INz+r!>C z^Rx6?;ss(+geZ|l!l85s^7QeE$wV4E8~GgE-YOw|V?PwXkUK2J-{rbiYK9NM!Sv~I zFnuHrreBJK=~uTIr2-Uv7&d>i!A1|GQQRi@_ zfQ9s-GxF0_hXP_(mZ~GMb?~z~bZ!r}>>g1=Vx^)@^y_iANs5t@!!0z%=fUl>l+HWO zhx!sjwoQ8gZH9{BdMVSCxNIYH36uy0#D1`RU0@!C;{LP$qdXCVok^>NSqm0^_TRx} z8(N$hg;YCPx#%jXz##w!Go;7C43RjPVKEM7SQQ5oq$H1#z6F zMvFahgzozRXJIi>=Wy)=;_4tC+`ZB72?dWPX@lFqPRm89Zo$#wj!_Xpy$G>P;;dZP zNuG7*+n*&mXf-7#7bmMqk%*=_mOR11?Z203sFh*XELRG2aYD$KA^VX~3HTPlopJxFu)6&(A%L^MtUZ>TU>2)>RXK&c&Ja6kHeBSvT- z&BnK+lLCpNNssnCOQqHR$@!Bg#P2i)+u#y{$We1cq?0B+_KELk7LNV*a)yPA8C@7i zcr7V8&V>I(kn9dre!WaVIEpP8CDBuojJ62<$=@leYS<_5mn~^8X;$LL=FzUQEYc7_ zg&ERQVTMR5%&?dWGptI52~v{BNZ>pbrpkZ{Gi+3tY$WiO3ZuTA46?om?j;hcnkOSvT`3jmer2n8+HEl>3Xmv9riYTl1kg( zg+R@ltlwngExm~EH3*y&FY_$lcT%%L0243Jmb0aE;p|VDUU~CPMSutCr@$sH04r%w zn>k|<_lET#%897B<Gp_RuILBy@zcC9C_H7bW6H5b`XcUE~U@D@4vqd0rHpB3e9sIvq~p|Jm{jSOsM! zNXYcJl$uhi!x<7#rC{?cg*J3;jFP{!mO}i$v!5;N2@WEkc!%UE_fn)ou=H?tVS|W@ zW%AZww~EjUOV)94@V}yr z#R^GAzt7xrfS^20_MjaH^uc3Aw(1b_L;b20=}_20zdKfem>r~H&)$*Nud$M17R_$b z7I>1n(4F*p5cs9^rjY$pRa;1>2356{@aD$3sZ6*81|VXF^oW=t5)m^jM#K!OB4UD+ z@&*3@{N}&fFvC72>A*4^8Jee*> zWSErFt%B!HkdQk}?I@lu&jr48C6;4r)Hig=m*e95_H$F2 za0v`R#0=>XF+(IGW>}1f8CFHa1S!d5Byb)PQ)PgN88$>rHWGM?h*96J^CA1{`*{65 z>gZSEX9X$LDB>+0T?Vi*yC+A#+YH~(zOV|Dlbt_nf{KRl?0o+gZtdi6<@uVoSNT~X zIo7B^zrJ8wXvx5eOoR|HY-8GnK(0Y)xUNF}7P%_@iSs)X0@!NUQYV-i#L{@$;t>++ z)P<(F#$IG^cX?A*5WfH{%#a=nGelxxhI=f`$2#MORjDvR67m@Bo2SB58Bk${jS7>E z_T5rpTG6#aKJTkxYQLh$o`@SZ3^-@>i@RqkznbYXvOWc7;xoV!Yaj1i1=1_(*j$AmwU)3Q;pLa z5;z9HVaD`um@yI#GcJb1jH|+7f|TSj5;zZssWO1Wj2j##8wtFH!>Dg3DYGk7w*D_- z*}a`l)R|l(Vvr3=9ZBa+_n{GAhu;xM_+JPT{*xAOQcXhHW~D8BBnQPNO`=Gajczj> zOGT6vn{_LYfMcIhXo=L(1jv~qcq9;MYorjBqE~DT5hWc-M}xKhO}|s-Ng|JK3%pOR z{Uj(Gs#|#DD1$AeJD>Lpo97&8DeQ+;gfIXRGp0wxjFE_#aRw3dv7QJFeKjF`dPK}P zkBF%v-` zMj~Ry#fX@3RYXjXk~~HN=Mgb=28ft(L&Rhwfwzblt%FhVlT27$-u)8i1>PWH2rBZ_ z2C48zRLK9a7GF8~eV`j2a0*Y8-T~ynfTNtVghPADK3Z1=lDYT4?Zq~bMly4Q1Uw0K zj*?HMWYtPd`77zvH=mVlWSu|)nC6@IZppS*JwD%AY~bY9*ofC?9slx-2$NDw%JtHw z$h*LOKCRLgI0hhM#`K7oF%l6oE=I(Rt0H28l;klIIFE>_GeE?Q8zLqf3A{zbXgE}{ zpqeABWSdLYFzOtBy1^|hjs2ScgbL!SkBSylV23EIY{}B zEl}J0|JpfV!<42IiRWo@Cn*;K$jTMHGQC%jzyLVRm>v!@M#5pn892-bC2&#3E>SQhI_IXs+TPwQHz}rgjD}# z@3uj(6cM#T73@=b!4WOWNi4icIZWY4q)L>7nR$R|A)ScUb_ zW7T-HM}JcgFs=fM8L~HupGS^R7sI90g-oFZgsEbchRL&dqV$IBCEsa3(sNAhrml*TahBL;X{+zo?h9^9^MogzwU@Z0bvTbCtUR-yJQg*b)<5BLex2&j07T4~9uYG}B4WnHh?sFzL`;y9JVpZN5ixZJ zh?sFh#AG9Zw}=?^?F#wc`}to1MB{RSH*gs461lOH1P1pKqQrC3=T4pv+aUATAT6Uy z6#1}9<*oMnNj)e2BG8ypd?sXx{&*~t;uM}N{v!WtYadN}V{%|CAoczh3?i0zb@-IX z*jdVOjPf?^4I&%XYt0yVdsqd{6%_bz=GY8J$0x?B3$dl0U(sRiIfjd0032pa4~H2e z;V|Pp9Oh&F@#Cs&m>>yxjP}j5Vd@OnFyqFC$wvEb*)ZH;t%GS?gJ#x`k3IT~_Q7j0 z1w8s4qjQ~p@m|{bsQ;j>axa>qs)yyEBS(p_(j(AHhXv)FTpc>XGesY<4KUTD>afg{ zxNX)wk6zP~hn{N6Z*V)Ic$0W7@lLLS_X1ZIUBmWJM(mdFxQMo*Aa{dQCbowrR&J$6 zK5hK2zBFAtj>rIFrzRZ(Hu{t3&H z3&nD%D5a_uE)MStR^3PwKGxe_Lc=R4U;rCtOwWcHBiS(HVm8dUDjOz9Ngg4AV=>Q$ zsXsp(=H=2h3Cu$RUmxYQ1R{QNpS|6om}{87gh!*!;TjN1vA>js7==ahU8R(rP#jXr zou^fT&bwOf6{ReN{4H5E?1$VSxkQ{Ob0Z0K9$cst-AR)?Qb%|ZYcWtK!rA(>YelXa z>9{2OM{bkArB%2NZlAV*BEnDD6#L{o;{HrWv_^XF201{=U?lHnorCO?;-58|Aznwm zk4oUnwy7o1N3UfPXs^ry2{c1rO#+{t4Ko(=Y?%7ozusn)qgXB>7K_;-1SYRR5lf($w(wgMkxBGd4 zo1I-qj1wdIMkR(5LnT{CA<97*p!lgA1u3<~0`YDKe@AxGpJ>@XnTS|jtYkZ}K&;E^ zQ|SaGt4Z6(==-$wl6ZDvrJdCEu0qOw9sfQqgvr@3K87t7!li5&GxXJj@Y&fgV=>Q$ zsXsp(=H=2hAY z!mwC{_3??H%HN*Fm$f6xU)AC@T9d?d=EhW|9EiIlO)WIfYvt&E?m31_;K$i8FWaV< zz&JLHy)uh@!ByEXK}zx%37lucG@qXh^KxmM1m+@vw``bEgsqeB>Jhenbk870ox`;k zNYx0rKrG}a7FD`XSxA$t7#wynCUxh3WPBUPGV`cARqQ~cAK%>9$TK> zZt>x)8NPQ*pvuHn?mf9}Bci%+Am`u8gySHd8CJp5N4zaW%yZ`qsg7;j-uT68Qm5_7 zFE$b~HHs)6^V#2{X3mzvCGg{Hn3rwSOJE!u#$K6461XZGCP+yhBZ2d5nCA1dVO}n6 zlfYag@RkjurJ!04Q^+qG8ohX3QRi?afwVguBrM5F4TJ%e7K3e&$s>D*_cIWF9Q?i& z7yQ?y8UF0gQFD0sLwvUoV&&3BFcy)9#nLK=MzVLH$&f23pKwSyH`p);c_Sq}*aIak zSOTJGC9C2iR+2TeWu*wfs)$P1lXvPY6Bo*YMrnzEEiYX`0zb}%dD%9-1jeyp?3Gz0 zfvd7%f|TSj5;)I>X+A$2=H=2h3Cu+TZ`m--wXhY}-G9I57sg584Hbs|IPPI9WiPhc z0>Qx2pQCnC;F(#kT<>=b9|*A|=VwBQf7bZ@XV2IM{d9CyST6%ze)yD}XX&ESOFsgl zg(X|glCbKu2Y9B0aE(lgP;uPRuNwbvFIhlro_wc;d}Ydlr)an{IwlIYYSugijJ*>- zm@9pKk5-Vtk5ge@woNaAaa0(4Wfn=`s#KUDC3%bl&QoEU&rgMUxwK6JbCJM#Dop45 zzbcSX@35B7Hu4;<1EEw`5}X`e*tqAmK<#u6ggR;SLy{TdD+xSeOFR*-h+H5(Su1s+ z>=Vxkk>KjEQhZa|@UTNNdF7?0{4MWD5OOcA3p`T-q->7|hSi;ozM$;K!*jFWaVnDKe%-f`tYhxk+8^cOEZ_!Vm+qkU8u8 znI5HH6#q{Nq2_x@$DT>rQJxx}E8)=A_i63$V(n%>1bzpXD+Az=E0s!JYEZF8YjW86 zxlvCGCJuqbBP0iD;ZyF_Tysmf1b!S5^RjJv35-L;*ekP00#{|k1S!d5BygS)(|mqL z%*&;15}1nw-ZEm4H)-59kyB~B^aw^B_d5UAxP{=_d@OpWtVAHU^135?pmBJtHKqJi+h5SO}gsp`*odbc{cJ4Wb%ihPiFfZGtm%TVH zjJ+mTvNwE8^;X5g1c}E(RIi-J!ZaCRVag2)lZ)z=w^*3gpX1e%@tO+k-+qre?#x<9 z)U4Q&=n`wh-Qp?Zv=q{Grvy)X7Ba%ydO*`%CH_YlDGrj=yHL5p)$Qfk@vPAZ$}^>v z&f>4AQteL)$B%R&%0e5SEkk(p{ouHwO?x>j`V=Zr+d^W}oE457_!{mN6+*a|hMFNU zx|2J$cN=CAjKeCKv|#*o66{srxK_cC-$5fWc0SspTm(Z8qGgQmc!hXa zl*(XTwp?!K&z<|sU+ttA#%vPZp{%9wGoj%ex(xd02D8ovWa?I`3f)qXyBj)an_EA8j%cf%DhfB{pcXTX$^4486;0rRnN zCx*V71U@|jrkrQMG#M~p%8db&jRf8@U>K&A0m`Q~Jyf#IrBy!a9IjUbY^0(ZLUK~F{mS=Haub^tvFSvzPG9&wwc-88GEy228ms113mG9wUMC445_p228mzV6u_Gc?OKOI3S8z1FBiU zxnlW{qhE=iVXZ3{0}4VA9;2QR)syGKux|cM>6XU-T9Z7I!*E}@J>X^9!n8;rPx0{e!gD(}0Fqcdk z94+EY*6!@*Z0&<++0pmUeu(UnIpmyA;t=w`IHg2tu`!F|Vpps5Jd^?Omoh#4rHq8X zl#Agn<*M+PASHQ>1kS@>+6>??o#n60VXl1-h$WF=&Wdh_ zPKrpYReIjb0PIVd9{W;8VqeO8?8^t;zg4L(K@##9?VG2*v>8xe%8mMxjrQGAUvAnN zF2PV$J+woMLgTW3H`EvFnqxda_&tZ~$y30|L4A1o7TV)J<1$IcjHY&6O0sQq09wd$ zIu_wbD^1}kqolN$AKx_MO)F2*D~O)*1RJ?O1R3chZ$Tzj)r|+;a?U6HpQUagkgojiN#WD!gDm3w)khgRBG-8KxQE8(x0q( zd%PW38j^PKYpFF@Dix~-sR|+iN)Q$Dbo{R%18oCc~5}( zs06NxfC*BPhe%*GkAP`2K)_TR0wxy;tZor7r4O%Hve(OZ?Fy8dlDKeabqj?l#EQrc z)-Fz#pX+?kucWG@k7`te*WH zw5p@V-!fYyc+R4Ng|G^M!c^&@FjXWJrn-m1l;wwnuv(Q06Qn1P5yE*YOq&4}rrM}5 z*$Cl06$Vd8J;ICs5p}Fz@7I1e4kf*Q1my_aAqKTScQS3QWXSYcQ>a3JpA|*oEfGGg zU7`qb5(J&q!c?pP^LT)nhL0+k0TY_Zk)DAFlhoG5s~R(bA6=_@e`TIFYm zyB{$% z?k~4e_g`M#pxyW1zMa1O_4M=U+wS|z>-2A5zyIx*-@bqO{_VG)4=>N@=f8gW{&&OlEPhIBmxA9HG3xs17a<%1DJ6;*!>c?>Ry zL@fg%zc8%WQZodpgo;6h9$XCuL_$~$cK8-n58wNi0JZP~kSH5`CB!ty0LpzRBqziy zo9%50QvT}b*T|k3$`M)w81UmkhG1)KqcRYGXcr|;^K6(OBZM~$7zX7Z@+p2H@_=t= zD@jOygo4y;38U$`P+-E{u4J0U)C6f^!uLZyPkt=RJ09Fhv7bgtgzz8@5?;yMbZ~3I zYiD`jdX*BGDu4k~rDwoYkqnsXo&obgAq+;q{I~z~zrPCHm))12cHjPb`tt98IsEd= zx8v6raXc;6j>m}JJPoGHfCf|D(_l8y`=p|GON055qIbi7`GKObs`y;}A~lqMdeIAD zzf|ejFI6P_rMhRod{Fe>Wxw2cf8V}*|K%4HZ>d&1M&#zPFI@)Mm+Bt-!t56rvz5|D zkqX2Ec_U;)zfvv3{lTSzl5LoX2J$5Ugk(x^6O`2;m3b%0=MXG2+!Zh>>iIY~q^0$3 zMhStD1!DMM!5wN12SIWi1vo`LAE91?Vzwq6AyLZe`A$fbp^9RRvtKn`$*qL6N?GIW zAX9|)a@+{vxy8QxNRexjiQJDCi6r9s^dc94cd63jU8+dDOLdQT`Jl)J(_Oy(4=-Nb zx6{4KJw4f_nkTz-8IWD7d$J3a*yg6SJ~lU!n--l9Z~IT9c2nhJ(pSFpb|v^{rho3Q4|D#77#4^bob*mTF<2=u+>;ZKarw zR3O*FnUHp&NRaO2y`(SC;z$DNI-2Gn& z|JUyCe}7Hj{oCp5U;p-fsfs*C{^sE>T?TNM>K^W*g>ek*XAujejZFPPir%cnsq!Hm z^b`?G`fvGPWR!t|!GS(x8w%(LrdEA)q0#*xgldQgvInA$){V?yg@Z^vKz9r)0Lqo(<|+f3p%MhwS?YoqW@jhtA&)Yh{B?QB zAH5MI2C;u?OQbW6W z(Z)o}m-q8t;-<`*rBIV1PtMBxR${aWE_3gr4{p@lBYA@~sMXSyjAv(H4oMwSa7bjA z89UxI;>a~}T;p}cNzyIYV)09>l{0GBEf;8NWKTs|m& z;ry1r?|%B}i;3V;v3QKi&9hs&4A?EzJ-fx4V~HtFxT%%|ZzdZRbe``>myfBAW-WIRUe<{>Lx29TBd9=lru`7rJW4BGA?jhpJLDeGRgOq^ghW$EX)B~uK^2(0@tU!W z(4T~mm6u~><5QZJk}CgBxQ|r5 zkmEYb_Er!%?G3-ku)~}oN2KRLuuasvP#$O94x)1ST81Fr`SxVz%xjh6QAVbtprFp8 zY-B0Xd|R26E0Ph5GQ06|4iWm3kfTzk#l`ABUKo0=V$d>DodM4w5hHlAxN3zz| znM3B8O!&$7c9i1FgUlj#(ji0j((zL0xq{XOa8&B_9F;nfqf#&BsMNt6m8I>U(xdBMm-?25w#iRPX9nX<~JWHc<2h2*5 zBMOy(76<^q)_<7x!}Lu{e<`fBrzz8=P8#c2pU+Bag`abjE(Xey2#-VHBp8n64}xtV z$j=0d#!@RSUZt(P4q&I$>DeiDBs-;E%1)`@Wv9#v-Pf1-^FQ4~)>LDIR5+j6Ku; zs;hR8K&xU98IxFVl)p7HG-0dCk3uUzCuh|Q(~JExZlR@nxf{J;Uutm}P++c?J7xi4 z6q2)*D?LXwm)8jqDs}T{t+Rq#=`*99r4}kP^AS?4l-gQKmarimaunY(Gdll(@630w zF`T;2-zIB+VYWq^J0-!)yrk!k5JoF$VSZnyyRHsEsMP5ZDs?16rCy3qse=(JWl{WP z|MmNu)J-nlt>8U9O{Jcvsq`7pRO)-03X(&Pp%-ZXAP7Oa>Q0i!vSka1^Ns$BT8~@r zqH>nLJYuCxo_XzUp)jaj)VFlL2U`%Dj2(OuTEcM>iR&Q4#3RWa%3|9`iG~)kSU3}D zTP=qD)N-W~ow6kom|E|Az@?t2krsI5-!PuiNk_gDcYyAT9d|5Fgc8zJ>h{rsw{8?u z?HqeM30S~tsEBG4){xE_#Fcs{o-FP^wnuox+&T$s@Rkt@;3!xW?-6-xri|8$BAEoH zr0pe?v4Y?Q&{XR5G?hA%rcy7Zsno$V6^&xPh~Jl2@w*kgr{|~C^Zb-P1Aa<9!%sQ8 zyy0mbRnnwRhf!+)xffq}5QI zQq)7zlNE6o)JXOLqN?JenF;wRb@y<=W0KLjsNgY^%mN0-J;x^Twvn+~ezzFqpIz_* z_$hUIeo7t5PpOykQ|e%T%8iG2BXv*DN~z~rDSZa4lzN7hviFytK%6aWATO{bLryMT zN`gkl&g%b>yppO;l79GqjRgHzG;A;3=$6(%TBy&YFB`cXec(U>NtiIWaCE|q^rRC4 zW&2VpDhWD`0)Mj5)83ClI&RdkClV_acYE=1M@bbTFr@OhMuuYsKC6}4MafS>R!ZGx z(0RaQh@@`&!#)XROE8np6`~Z>Hd`&1)@E_-oFQq$lmBAmA*xvBo@2Pw1+Y@;^sJOR zl9f^~Wu?@?tQ0|oy<(vcKmGFS>C5+Du4*!agyS)aH_uJ!GvKDw_uLc`Q#J;-K0>2` zomB3_1t}ysR!ia^2hB=MaM^l)Ye_`dVnUMaAEhe)D0TX{SFC+tiv|g0>?9L);+VL5 zjFiw^tWyq$i<(R+J|Kl?D^ybjN1CzlkqHH3G(AZ_1T~^e?2TT1@^eN5sp8Xh*4XDs z^tqYqn+kc9=@jpVoAQYjgMh;`L{}HbWLHqU0B%a1o|{rfa#QN1+>|<;oATv&Qu+)~Da{Njg>n$GY@O?dEj&lCXY{d?%$h-s2`LHNU6qPGusy*i z3QEXFpksvk&;i=kC@!HKWG~|x1uLUyCRw?&^bb%APL(+!NxC3qd84NR7z8%UE9F(P;bwX zmNc6s5mqn!X_8GQzsB4OOSWcD8r%pWOIG(&>hmi4)&!tZn)IlYCK8p>EJdX>;i!~< z{POkX%kKM&HoOehU%&tJ%kj5wud5pT>*?Fq^FNpB$76(Vo}1EVz)flHxhb}s&oodl zcv4?TGn*Bn(Dt@>sUp9JGsjRvI-XB5U?<6zP>9`1kp|hn8nL5Dg8>SWA|HrjM1|_C-Tv!OFH*QvLmnf3^B|Qz1CUB{4^pAD!+QfVSVD$P=mN)rrH2^GJmhpRO6aFrngxJq*m zSLp?8veyE9ycWDS#6XCdRL)T)$$B~FnH~J4wMAMHyo2nYy2g|5jS_yUGmZJo-dY(@ zDjy&SG}@x5(xyvmcP)q&Y9dFGH%h+^Z_>;DM?YIwVrRJnx-{oOR_@W2*=-LZ_IRb- zJ$yvMz18oBuRN$Ks?W(a;GPVAX4;jn4O(JWu`u- z%I%HshBG4kU%G|RTgn8h6(9mOd6-KBhl^hTT%}15S7{>QD$P>3N)rrM`K`PySqYMf z$LQNUP-VyfsM6d6RhV!ZR^{Mh25wO&j+Mn9agL@DeJ}k2#2F2tG{|^>!r)9X2KTN- zyz#Y^yX>S&oY5NhiuO5MS57b*RGV9;0PRe~JsFc2+bB3W__;BuCLMT|*k~bL60IaV zxfUX!wukBb_tIH@(zK|cs+gQp*kkaj--ly_Jj!(X*5svc#OSSOp>zwkQl*1GeU8H1 z4Oo!bDtjQ}uW^6up%9xPKtcZt?^NgKY47Ru zBv7SU3RG!=fhy?R&tLv>t#MD!P-*5FDnkYgmFAwI!l=&ZZGpAIM|)a>u5>8t2-B zLmp*1jcfDLxX*q5D`;E*L#0X2P-!9=D$P=cN)yab`K`M1;hr9u(##`Mh76D?%{?-O z`6=qes7w^^DC$AA37xojZ>1yI&Nj#M3C)aCxEB#nB zJv8#2{&M0?)urhnLUR%#Q<^R>ecSDR*e9?Q;)$bQ%Q*VE@kETNM_UgGI^q+g@0c-B z#U%02VGg7ku5SUzlqNkgrHMqQG)s{wO)xSAeY^AFo}QJ`%(GI43|J}6Ju8JQ0-g%v ziJ||gPQ+6wT@kESQ((!cQY-XH_QPn8D)EMbTA~2N2o@(F83sXt6;en-G?a)=D^PgK zJx-F_qtu^xr+IG_|5rYSP!3?*pIx~u3PnDTU&JG%^oCdzeyX((?EF5^o=Aj}d4d6+ zOBn+zADM@!*19GkE2Zhv7NPvWPx8SBfBKe}?ZtlfZY_;OHLy(ldltYTV@FhgIUcPg zg=FvePV1+wD9n?>N|`|wZh=Rs4JL*wDc40P zzm-e%;xR%uk4PCZK%_MHh!k7Ubo#8MMi8+g?T#abD>h0^BwcY3-a$0)q|e+IZDkL< z#8OpeRh5PBhu8gp10)3@tt=YO_MH^EAcL)PE5(i5OBn#I0F|J@?EG;h8IWYq!pS>I zoh9dk^J)brNIFL+!6RMwOcSgUbULmrP{tmbDDg>%NNI+=gpMa=Z6b)31e6J;(@%*L zPl=HQ)=6Ds&oWtK!idl@Wn+RvSqq6+D4y6J>10dyl1|1l&;Gt}R)j{ZEUH~a=mHQa zO?pI16NyM^mLgJ`U_{Cv3Ek7fQkr>K%8&sprMZWtFsEeg)t$s5i6YtX%q){y5$QK$ zZc1EoFZChJK3mDZGXPv6kC7S%1DXg1KL;aNGKZ$>lYF22RVSp%;q2#(&t_ROk(W+# ze0J5;udyZPjE{$?_P&kLFPUdg=TEf>F;fOh{6^;AG#b#dF-pCS4XFFKfipsU62elN zF)yLR28cBySxkR+64y2yQ0+3s3cd#WW;%9uS)+Z%dQGupt%+jVcyimQrQ?*WH#ul* zd(hfsnaaJ^hOHoU0kD)NJuIb(grzh~VJXeKu#^y?dwOb0J5Nm+GN7ik_tX^DXRD-? z61Iu)-to`~*O1^K*}+iSxs)BnPeW=t;kqBhm$PNKVUKBnN#!Dg2c`S(B@IW=iE_@p zN=@$rk`?`*d>ac5oqV`L3idK|QD{jxl;PYKo1VT~b2=$Yk#}21bNWQyt#BM)m!MYX z`>!qo*mCh{6H-&!#MG2D9vydyCwP|0oe|w8J1Ho43M|QFp&%w}9E&ur1x_a$u=OoYZAUdF{^fSG>wnIkJ;M-P&InHU<|o!kFxn-#H3CA$w!bJE`Mm zkYM;3WR~2>;;GbOb6w=(Y|&Y27N}y_xs(xrB0xmV3n8Xa8p|01Z2=hqR@8v9gZ)aWisd=gSpUXGQO(BV-t`5L4WiV2Zbe~2hmQvZUz@f^tpAEXJK zuqR=Bs%#CofK_0VVjCU?s1n6x2afW;u;0e^wEOwB9kFC%~z_9Us^0$;_ zAQX*+_$)m?`uQLZl$BV(5DA(F^|SbR3{eE2EDML%RJ)W7Qnq3~7&CPON6gFd0BawR z2w;+J8-(}5xlxor7^;=VUu%q#ke4k{OK`P)yC)IilaPqgCMKf%XraT~Cl_5v{?;<6 zg-aQ61SVg#*oif45~w61z{HLC$jNP$7E5x@*l;1BJ`3{z*ua@FvsG*~wA3 z&;<}t+Vn(}Hj;?aE+wM0kwlbhp?iAzNjpzJ88e`twDi^I~R`^j4;x$p=LZF81A0!A1}W6Oq#xMgicqnBN$bR z=pmt_&glssAw<)6#ITcUH_ky9kY!LrihC)SIm`AZ={qN2h4)DQhrCdGsrri$pM><2 zw$4lF)(TPnUe`ETZd-J9=T>Cz7oDB#lj`N2pM&Lo5jQ4fmD_)@O6Ob~KtE~I(@)w+ z`boQ#e$ochPyRsYg7o4sLN|{=88g73wD%Yk17{&43;<-+B&cFYk)sa`%rfx+%|}9- z2LH5IQ@kl8r4#nwQ3T4`p$ID>8ham3YCSh;P}6mQ2tySzTv0a8dG4hhox+hy1{hlp zT!NW|9}f}~wN`_|2R}ou;K#N;yd9ZIhSK8GPg{Plu<5 zr_FRp5I;1OFnu#{K<{_hO0|$IA_z>)T7PS(0X8e;SV-vfohcjkX6EM*{>723}B(O=~*akBnzco%0g*_Stx%bbWaaOY3HFRV+K%^_8y8t z#;KG++EygsRU@1tK2<9|*jX0MVFrAZrD_;@d2uPfAVkT$nXnA6ua#^gjP$?NE=2Ug z0qDYyLd2MtBYF%fG#r>foqg!Cddtd(5V9^-a6l`%)Ph>x@9YB=;arBLQ6)w06&;4i zvaOU?_@3>a$ne>nqr@j66s7I*5<2|tQDlneev+P20~$=9HpRmOq>Tpo;unfn2DfKo z8LdnMu|xK0I3URrjsgweNm!n@pq2*qVU<3*HUNs!riY@mkx-O&DHNp*hNAqD&^ zeE4N2Z2`m)jHy$}(=X*Hyb(l3B#>_QOc0(Z$=QFm>@>M?YB=jvgf4)L(xxY)w2@?# zb}1R9U6YIwq!*77x_L6nm;o83y(gpaQc^9+%S0C9EaGqyZ_P^SrKOrz-zv~59{?CU zNVnUJnbvGXavD6Sb3-)PKb4T9v{xg%R!b>TX|3f9QHaUT2L{f^pj{Gvq#Q)~E@z>< zFbItzQSR_lZQn|CfLdanAi;J@{+Y_rR1V{WW(AuZ5j;nxct*r5COa`4C!Qg7n0RgnKdvoZ zjNPu|(FKrE+Vo_UHj<3eE+wP1Ym!ld^x`o>H%~?xGa#e1_hc02uMF+H)`)}7U+E*l zyE{nzBm+h#~>n%3xze6Ir0npuE#(kEc4gWN{|sDs6#jKCqU3xM~7fD9xmXcArHOVMJdhr;cngsgPbHYY(sed#mLa$%%sWw;S(N2 zYHV#*=Fo^RHF8Lzc%B>`r1TYlx%M+bln_J85qc?0tqjc%XC|x8OrCUly!Oqtb zx~C_jbn|4CF#|G6cTYw+N4C>?QU*~S_I$et0L6j|Vf zu4Vpe9Ylo>A@mWIQVWM))JY%+Z;-w_1wz}32n-Su#?+Q!d_RLapIs;jSCY3pNubgi z5vbUt5dld#`H)E-1`#%|pz*tOmP*t%igno~B%^ehkx^^`#2@k5_?tpGi%oDE|HXRh z@F6GLqn}gra)qp@!Ia8+J68!^b^&CRE+(xQ)EC! z>F&uWwG7^^GzVBIJ;6y{vc@IIYAkz~8vGm!^-wrM29NDKA7D!HA^DvdErLK9id8ex zt43MO-j6~?kvyA$nZbKe^j-Szwgz40(nKpR`I%NiQZ_{OA{RUV&b8Zm>I_tc4^E9_ zBPl~Mq}1TDLp`3AjSp|<6Cpkc$tYcBWE5*Ukyry$uvUC;gNqY_#?zw_LDoUFs@>5o z`6>=V1C4lz6u8*iM8gdkLiTp>V>MEMWo0YpHw#=r=mN+nU3xM~7fD9xmXcArSTahr zR4*PQbhBiXrpSPd(%q9$2rc3rS^H|`;y|LEIzxOF#HW%r^Fmh_IQgqdxTX*=ErZQb zDkSmi3aw{T&ybQ7#I5tA*Ald3{|xiCrW~{q3Surn!nfSoS!zTH7VTuPDfla9;Zh9F zz(dgKC{l)y5~SklxC51xEEt+svX0#)&lw>;3CSp3W@HrWe#DCCXA@t`mbypckQ!`* z0Osg6X%&){TM@C3TACP`=wa=|9k4FWXD`z|Lf^K|ArT6uMMr-J%T*9yT>u%SOHW4W zBFQM-QZh;xOGc@d>cwM(ZkCMF6d90Fx*0MGVZEaZ#a;?8Y?biFUrk$oSz61Sv%v$PjpGRgMs!gk+R1GcpQc zd7jQ$T3(p2;Q5m!BNrWdy$2!doFp$tCeYf?$>Z_H5%!c89PGr_&nSJ%SHErrp$j0R zbm_?`T_hQ$TS`XhV#z4gQoVSL(9M!jnj!--N_S62p)emoBcO+e#%p?zaGw@f5IkfS zOMu0i%4JJyo5dHJ_D@;HNftEaRYrm+$0iR}O3$7xuXFYxoW=#Kb0g4nc7ZD87qVnl zB6D^r>!q-UJ77XhMh>aR4@5RQ-=}3Y35}AaqyT05UxK}RVS(~_1;%Fhj1#(qWRxy5 zGKwwFB!x{_4gzRs@P7GGh)wXUvAVMe8j~*;?lD~5!QUWCuME0(_W#{q);w52=mN+n zU3xM~7fD9xmXcArSTahrR4*PQbhBiXrpSPd(%q9$3h8{?3AbaA;G5AecfO^fnhma8 z_~3Dn`71()SmDu8O2X?4V~~9stz_py(aSmk)=oZcW5P(VsPKWxdhpse8F?$OImp7U zwpQ4*AG|xmF!w&}5m2?2pr`+}HRXUhOV$ogl6z>3d-kyN?G3WVwIh9(g7gUSNk~TN zG9#l{*bu=XsEB_hwZ7f5{WHyxEUw)vy0!Rx2|7#)rb&62}$S7TU zGD;UoM(LK4QMy<%O0`rk9wT(KWR#}JfQ-`JlTmEhQHF3{GJ<&1ONLiwYk7+ggXdF8 z?yC{jKjkLo=^+BlN)Z8ufoX5H8bRrDWa|VlNOvw`oC)DgTMbWqq=V!Y*@k9z%4?8l zm?)*>{j7k7{Y!w691HnC3nKMCT(v^5AXiyQh6k^}aySzBA~ecT5YIAB=n|4qy3EKZ zYlSF(@001GYbndOaOa>tg)@?52ExX=ZVQM&YGlrEBt(k&&U zbg^WVYN=j4M(AeAC{2+88Kt`?qaZBEf-xSXx5t*|K?=k_;rl^gUe=n;jFx;S6!B{f1}vDKxe$cA&~xR$}A%!Qz96D2+g$tYcJWE9#~3b*-UtzRf!!M3H6 zQ!9r_6BuCb&_kh74M}jfG#z9 zjTIreR?uVA4x{(my%KXSTahrR4*PQ zbhBiXrpSPd(%+L&OrTEwvX(;a+e!5xm5_7|QJ9Y`AdVq1=U)3JSrHxZq6 zsv_})2rXJJg=}8s`zHisU}nt|GM{E|gf6Aaj{R`{WY4%83`m5JXoIjyPFZan?~!eq zOBLmtgmwb%HS9FvEX@aFocJUpqx6}PQJB1pQovNL`U_Jzrh9m0wss47X-QRNBh3)Zye%+Q`rleboaX2{AC?&Q z2x%ULjX}1MP%0VGF^YBBCnTfvnUPV(b+KRiNizzedt{Jzq48g$5MXoR?r@9bSTZJEjCqwXLbots#?yHnQA1QM} zc7z%6zK+7HWVVV2)kq1pHB(FI(m0a{FWX39r@ZkWu;>GD_jE6uBlC41_Uh0>C>$?#Q_j(4+K(8b!jDcrReHENsZ$ zMwcmDE17WO!3Sdm(DGo?M@MeZXd*k87pf~O>0zUc1|QParbCJ)<&WQpFf#Dif~iO= zzp#DpN3pe}IZv*L@)zVw_=i@LNhr1V0gRRi0>aj2KGzc!@+i{@U1nsI{g2x}lQ^*} zvc#6JJNui$G)iH1wsIX4G3gzp$%ZsRvrgzTfQ-_oC!_R{WR!j>8Kqy7j1r_5j}f|g zGD?{N8Ku7`qtvqgH3PHNA`(v7xs)-yHBwu+m%NstwGJ*O2kF71uZ$vVYBkT&h`|1t zvz|q4ZDoSeUwVRv_bwT@Y|-2+$S7I5*C7kp4FUp~#>$ zgHL;=rp}7ZkwNLpvPD>!*_ZymuR~*m_#`Bw^qG-S2-n-H@zb+7h_AJi0w##2M+u3O zJu{zN5nYvAGIShb3Rw6-PzfhlxsiHiCU>@!Z{d5ux{y95o5ebz%K$P;pPr1;N0L$c zrDT+TO)^T5UOYzV=E*2!24s|ehK#}h%u7t+1*{PQCQ_+L$%xjB;TN^CunwV^N){p| zZ$@ShFNm2gc`YMq5?UlULtqCnL_nr3X{ROpXt-SIWwM|U-V`E6z_aqBke9QS#A+W- z$e++Q!LUSo0Tq>29XIV6Of{lP&aIYq3g+<)TDAzQmdnU;tw>NCCq4QZtI*-V49vAOHdEhZ@~VrY#(irfe*Yi4~S?f_8Ap zq6WB?dR6emG`d~83KYsc8^5yv3KYsdpczGf(1OM^2Z(o1@ z>z98$efxU0-cwM(ZXTCXW`IlS?{O(K8WEEuJB|>MOkmwm zVtv~1W^0|0tlPO{5f@?rV5qaC)=mapNmke*b&^tJZ%C`vh9hy}CRrMgT5Kr+Mf7Zy zR*LQzP$d$JR1(obij8$W`k-it6b7xq&zaxpx3INTh*L=y1;d*~gO9!kwnR>g%K#Q3 zJ_&It{S7YVhZHeNDI;>nl;JEjOr&RdcD5?8P{4_An+2Zy7uwY*eI#0F_vc4^QrD#o za#Fu##B^+__A|HgW+{O-(N@-Y{r0(n&;{U9`t-PzJ`$JGFU6(w@8VMKgzn|*%f)?t z9rFL}>-WEX!SCCBf6fUg|20t!E z0aj>p_B}Itpg7i($5rh7+^oewO9pBmg%s(;)EmdnT;b{N^)hYO04SMF++6N(E2Zh@ zxp6GyQ6|&A;fA0>haz(u@_O8P@?W+f&C%~qErn6craGxgM2`&djZ4kkL!KJ0(x6Tc z0fXM3%T8*1_u|U;k{vt!IMq(3-SOHt1Q1k)^aPb5lAtmyC8!MH1eJgP{_XT~5C3)d z({JSS{@a(`&&MyXIld{y_v=yxd5rYUGgZnAm@30PQ>Bq1pN47%AxcPe9XE=lZ51$y z@-*UdQ803l*cQ#|mX<&IFQn*^*1Z()6B(qYZ4_jeu>z@j?0q=oZ^^z{nZWcNrw|vG z!V_fSBzzcZJ&gk+XJ~v(p}trP15Ftc>*N}(Sp%n;sF}EZRwC5-;77mXY>|1$qf94# zWnR*UmEwMJhO7NTsDP;J*{|I=tw(=4CkcmOpSCD*E%qrP8N_g0rHo|=V5$u1nJPmh zQ)O7nRKd>IkiK94>x+Z9P&*zYdh>jhG6TNKaL-riNN?3XU zlV%%!XUzn}!60YERXZ0hQaPi}xeq?9QhP^alkyp&t5%09UZ0&m(ptX_+4O2n7;HTfxcCipBvdBaMuSZ&t_|9(}MmYRHIV5eQ|l zY+bVO;wq{8WSc@(8RKpcwq-_cEyqV6j4j2<716vvvjcbLLRX9sqJ*rKq0US64DS6S zKBbz;s#;37WZnh*LtEK{t796q^J}bSErmu{oTpV<(1!rl%8;J5GDNaghNY~PA)K}H zG0_Xsj>m}JJa?tafV(o>b5|HPte6r3L_qN0cul1^j}WMF11Wr@B#z)GeiXhOGuPh# zmx4b^MF~p|5*nq3h3XZ&Md^-(!-Ew*>{)l6bR5{SJqQcKA+_raa+MD=49`d(TlNxG<$P>C>DC7@0;F8K z)u^i=<8$^d1sugnSjgK*sZe+64T%tl=$_0Tu?ePQOwjtdka)Q01u$5K^bD3ElEE@8 zWv~q443>M*TPhik(YkpIOO*kJWw^(%kannbX*NmjX;Ost_6}%wvRRLVudh+@|A|@4;Fmh*OPz)wa*m+u26wPeKgKaEoCnfyT!(cUNAhvh(zru|tltAYt%>sjT(b14%Z6j#W z;OFxvF5L{kung%jEJGxQWmt+~8Nx9vA*Gu^3i24~n+LO08Gu=adoW8U?p!Y&05*w7 z5U2%de8A&Hv<1AS`;DSChA3WHTbEV(`KWQR6k_2=LE@~bo18tra1;1 z;Sd*si8wCAK~^m?7FyxM4} zJjKaTLNLqF=OulA`qIq+Fw2l0%rZoRS%#%xmLV9-^3mAl)ALw{c^*rZ0gq+4=dl=} zf^>vL=lG;jgyD^CYvJj*_BU-7}h>?8FG;`$9Kh_Jo}a6 z6*D|j0YmX;WUF369?LM~C3=7Q(#-%K%aESOGDPxNhNV1~;awifQqg;QHp?*2W~nk@ zvkdoa7F!7dLRj+X;zp4h>}BhCpzO2s zArODbXfSjJ5VWM01>t25-T2-ZEG@Z2SdxZ7>3p|&vj`ojKU)X_f3om1N5Dx%8j?z` z#oGBu#gOhhiUe_Iq^5!Mtmc4HA&)Yh=#6=a-k-j7Gl0!9q-V1Xk!+S>DVt?@m(8+N z^qwBdGR{L;stlkk<2{t6k}mI^5GN}U4d$8*=ZK7DC#LV#XgB>8_5QZL< zR5YkOvsY4Ec}5?cSx0CSSTiTahZ_@b3~gI2|Y zun+#p-6%y!$=X@3`ruMSe+F4ZTY7KzHgu8wTP{RnLMY2v3 zP?m8ilx18E%5p1uPmg06=W#4m1~``S9>+qUk8ldbE4DT)0z%-0A{D9AXAWvhn@?L3 z{4^A>l&ev+XVp*QmD2ivPD0xzo@s@qIHIHkqk8kk zgcO$XhQh+0d4g0UF=o?+XvMeOc}eqHU**})jaC(40{nslOt3(s--H!#ocK=kn=k~k zAzN^@b*)g!E73(`vHl3xPJZDIaHW>k+qs1p-A5XFthkpl;G^F$TYiCrFmFe-iq-{C zSjO}emNAmTGA^aCjPFud?ugT`xB7J+tF0fA+_C$M~W$s<)p zF9CkRpnGHB-TTmCYbbDrjSr`I0VnC8XyyFrOt2zTS&onX3aWZ6K`8BnM8!a*ajcWX z$@;j6W2R+1M$U>VaBSjI>K%ea)lGQLY-StfZ;&tDnm`73n>{FU*Zzp_c* zCzZT}{FU*Rzp{CGpIh<*_$y<2{>m81Um2J3SH^ewE6XJB=`k$hJcgyt0K+ogV_4`U zucWWrRvS3ESdgV>OT#$xY7-u;{dZnWX6E)+%&t4%gMqkCE>*njgA{`rT>2nG9Nh|( zJdQrFuz--UKBse_Jd{d-y%f)#h4^Xf$%?oewyN`i%gzufq(Z0np_PCqmE=qSXdJYT zVuV2I6d3yOUu?ncx#271QC`WAu7FWUZ-w2f>534hLW)*xg2A*$x<9xZJV&aBj#3oM z{~C7gV)LJT=sP3VlcHj(;zBi+qQYEzWJ4qeKQL2Y1itV-Gvh;l-_e>{v%1lwP z5Vj;7ja9=kz|L(U_r{+N`=OnbhB+oJJX0g6Vq+J^!3r`IfJPb9qfy3>pi%z285{mj z|NVdbk5}qbd`x|Ui75a0_4M2Emv6hDkH7r=%j*g3zW?^^v~&P}jPlG=Q0fdQDC0c^ zWmBF{sysIo6q*!lq>OXpZkQ*QHbjdGfBK_32Ru7f9=WSH)24(cw*jkpWlJK6-1D7V zf2D(dK&rM9 zWd`m=EvBJ1Nwo6raQARJN53woKp1dz^Pft4; z=V>Q(2DFp$o_4Z{+b0#bgtU|KhIT@fkOFv~3k*|Bk_~PHwxGMXXGj6}(^ga({kb1S z3czLAD!vDQj<(X$(WQ(y9gZ1CETokhF|@_wIiJywZh(Wm3luR*;()f^65VXt9)gtN zs$muKojuT2VBMu0tM@mBCxzW2WrI-D>Byu$2}hJ|UhnD(au+~58Pn5F#z@-9xRiD> z2GdU7m%FFuoQ(6FlR5*=$#~B>+2rn%%H0j;L?egkKBLb6x}%Qgh|eQ}h83BNPuoDM zp{o)M0WyUZ@njJV`qB(7jwBxZ8L@x%16+XTO9cz(faob$&Jv&`XW6oL3&H-6!V5Zy z?3)eO{(fOO{Jxj6UZcTIdtidVdcu3@?6gESHi=JI%Rccur=ydq;~m8NwH`a7wYya$ zG=QBlre~*&k?fT5o}E&CFdiBVPkCQMpB$Ug6~#O@rT+BTl-EnUr$VD&j8R0ss8~Y> zi4ZkDK8%t9;jP?Pt~DqHlX08!SFR>3WI#-cJWD|-3ndxT?@Y<9+@*CrLVX%xE^C+e z)#tQ*AtN5;0aW7IqOOc`xEE(1ZRihXOMYi$vyqS}+vr<%G7b~xq5{xjVbls1e*Vk> zxQf>+U8+ITqnwF{8V;uRPxQL`eTO6Dh}R`3JlW~Gn0K*2Fr^^Izdrfct_x>SbYUnE z(LS`&Fgi!K1S1WMe)kHAPU03@xl8R&(?|o%^sowv*fK-IDYT`Ev98{a$Tbqjyo#|( zg{RqDt%xpkhX>i;%1>doN|jlq2&N;IEc)&Rh%g3El5Yc|$nhkMr>l7j3FOCTnS&qS+%)|sHJ)brSLkt!Dy&a|p@yCnf> zAXe2yREl^f@lh1C_jdthvStEe|3ut*n`D^{^m{MO7Swy9pOUq6LXFerYNL;Iv z{FGJf4Svp6$}#;;qgB@ zTfxrR?*y?dhnwYzh%Z#N_>_2QSPc`hfzv&cjtG2rGBhmgDiaKe@j;g1vu1$ za>wvfIk%H)Wam%Tma*zqQNa(RS6;VGuYytNmA4mUi3+}pUI|yhpLXB=dRi(bk5R#S z4omatIV`W2wy9t)D%d1f!5bQjEi`d-3uy#ZK(_&!H>jVDr?q!`ILR5}KaCQ@?8LWY zr6_z#^9axW94QvXii{sl-B|f{x8J->>TJ*<>xAGtx`mSIK0AMQ@Skg`Vj*TrUkLV( z$KMNn&iW_mljIIiL&ICZ@)}eNoqccI4gQyCD(AUdVI`qyocp*6rlzsTShZ9I?`bR_ zRKa&?EGwwslcQN)?!r8prTO$|me)($R4^A6Y?G_tEue+xGTDZ9exIe9gS$su8vU@Y zcj?Qcmz@e1xso?MB)yU;A?(jC+Dl5!b z$@3G@A{#{20NfAeygT{M9GNkW8SdUkC_{uD{T!I{S`9oS5fQVqk2O|{!AM6mY3Ji| zEj4~tVU8BIJ|5YMF`erfifi~Ru2J$swuqqA>L2Ah^@_G={Pf)rZLMDseHrFw9HTU; zORj=9d>BS>{1v<|l&KSB_dzRShymg|@?;PGWT~dXe(|Y|N%>S%5_2lP66qmUX zbE#IE5gUo$GIPSu=00Gn_8zTM9rIy6%A+NOfJsNgI)=7*}_4N->cGEbKd0b+*uE@BV( zn(!{*gJMhM5$S2f+Ra17_V#Wwc$RcTj1q~ZDwR9gNrd?{XF1_2_+g^V>$d4tFp4Pi z_JS-?!C<1y0u_96#LUZGm`BVspB^#udTE;q=Awc_auporR%tj%#QUU5M&BEEvi4_Z zm5{{VPre7D+1yEtmKn0(iJo9oF=E*b7rzg+6UfP`sR+5?H4YwKe!ACJ>sr;{H zFL=Wtz#LuAs4uYf+sVB#-bp7J8er?OlR<2J46U>Ru=oA{ZWeGSdt-aN6S}(?cNk4H zqa%=fi(E<0vXlrL{a*Mb*1&q9OtTI z&KK|Gt>%RsA#)(EojZS$r$ZltGJnXT+3H1P%g(ZAGSECDu1G2~(G{K-_hAqoi`nG# zN&J&MH&rcIGV>m~8pv*V@jEZ?j1z&E_m%s0R{^ytP-*#Vr zdR^e5{Fh&sD$7G8v786VG#P+o%6pK^CW)U@63gTuneqlCgXK`BGHOv1j?dBm7x5&G zhA@&$qudimkJKE3L*TNzto8IJeI(p?j->v0IyBtbdRznzXlvN{9oWgbQr65*YaTXV zy0sYK`ryx+b4CUYC8#!u4IsbMFQv%xQREk=m@UhLUkmM%c3hcI;0|}1R3!DDx4^HiB81FB4UPnFpu@smnoa;nVB5w9c>ACH_J zo(z5D)LmMB5UG)hV4ec~b%=wJWV!RxUFzit+KRTd+Xit^YDkH34pPg>XC<||qttj3 zt+yVHlkW$z0+Cemk5&^S?}e?rOBN6DukC-`1(E+I! z=FQAXjkwPXO3Fk~kcLu}GI3-4PcJU1HQF$2jnUqRH^O2D6W+-Xa`s^lQL?3Oc0Q4ghgklG4>puCwW-?BAZMqg@6G3am$FPz=85Akg=p_U< zFX<5il^iis-XLZS0aLjkSi+2SY3swefukvGv!jmOu05<=3PmAdfrSq z&zos8;LVixyqQfBKdB@p=gpKiycvR@JYV|Y%(u2NOWT_VXc>8#a zWcKjluu?39zv6fEtR$OfJ^8T9=xI2+UD-MCJon<*oCGv!j=Ou061 z<~>OaQkKU^;yiq&%>X`A-os}$N&KXem>fP+-oj@HGm_&X55}`=Tng~(j+dg^H%kM5 zR;oncTN28~u6R<@FSRr*5b&ftg|-Fck-JSPYbQWiwlvs7>HEie35pt|w)7{CZ+Vi| zd;+U`U#=pF0q~hJ zJ$$B&gwK>q;WOph@R@fd@##r4kN*@X#fEa6^A&q0TKE(11-h!@re*cNAwHjn&xH`&Ebo9ZMP#E7$W(i~w z`s-XqDjC?QB(&9h*bibz_=|f&hER$>ECh#i)c#k<#jDQ{AyCOlH02G61_~%cIDtV3 z)V(|}%( zIhLlp!O|E=MkR&d z5iMonKuDG;0|E=}$JiK+UtO_|ml(jPDbq7*%1A~{xs*{;uFa@0c#&ag+uH zifm|!Af!p8fI=U{>LC8rAcZWP33mx`gkI>{h$J<%*i3TEP43JdqK7RYS=LoZu?V%GQn`AR<_0TOk$fF_MJj&(++tWx;Lm(~GpQJs z3&}HjJIoft^1IZTA1#J+HRTmz80OGqAcoHrnq3SxDTYNdF)R{$iAe&XyO%hwa#MwI z0)u8vVO+?c(OYA_Fcz=&66fm6D}*sfqxnPn_(p{BnMJb;<0gf%OeTzFDld@`sG+rM z|9&YYM^;gZWg%i${{&mO$|ivn${@2?@t<4_C-7%JzL{1G7m{c6c9<`Q-=)s{Xfd3t zDX$R2Acy7;x#JrV!)FT3E{2;F!z!5=KCovDO|W$@aeV&+g^@=FpaJ9e2e}sZ35G7i zRg*8JLYw=8QEen&YC+)f`{fEnGvx#d&Br&>3gbfljNTgag)zXMN$Vxf)t6TYV~|Gk zhxGA{2;(!0W*5dy3S*s280%daGxZoJuxLKMnN}DVQfTznm@kY00!>JBAIgXtcK-qDy}@!s_^HX!CKb=z#=E zV4a+d^BQ6}fkN}~&9q{;kUyih!+bIPE_>!ji{V^Nd4(7TX*7RGAK!==KC@_cG2EmW zw#me>4S9+C>uX-4#c%?D=Hr`b#c&~cMsJ7tV)$L^%##@Yr_V;i|MJssfBp8)e_YQ$ z9e@6IKK}Fi?LQxX{{8yTQ96G8cKrM0+dr3!$17AX2%IVYkTAXx*?Z>A?6S8>+3S+Y zUboBM7kOPHQ#gS!^YP8JvbT^fqqoC++50Y8W;NNHtsbw?y)acK1FTHBV`VbYy<}LK zvd>HR{^btQ@vm2(`J)uH5=pfd$lfi&wpkfJCl*WG7j7GOl`+SQkJo73n~aqy(_&@H zD6CAm3@cN97b~-#?ri`#QwD)EMFzx~awpDYqI=1RGvy<3<_l=opH%lkvp84xCR1k0 zw3L}LiZW9!qs){6%FK__y$$eWsvu9M$N(r)?Le74bgxPVl&KE8?tKy6E8}&qnhcbw z(gJ0wD48Hs)r-vEme@#Qe=Q@sdijTCc2jl*HYz!YuUQ)g=TTC z?oGzERB3T7RTQqJT83+>(&1WWtH&#JFUV^tGvKvUJFg`Z-Al%6sq*2qY+d)(=wq17 zYpK%mTB;~sOSO#GQl;ay%vO(A=w6W5Qf9zwsdipVCc2l5*HY!fYx&W-_k-&>SLtJz z%xkIA@>;4WUQ4x%*HWe9waiwJSLj}l*HUJ{YpHf#OD4LPjMq}-!)w{N?yb_tFqzj< zrRB9$QM{IF8Ly>E$7`9b9xu?nI>>7&GvKwL^}Iy^Pm_ZKu(_4e(m(Ag`s&fY(y*yp~LKFBz|;F7wj8ZJ&R%?oH;k)MSer^ zIvuZNwtBom_kz5ZG6P;qz4KZ!(Y<86mb%?_?`!DZ8hs4)WL`_1me*28@mlI-yp}p0 zuVuD+yh8Vayp}2hUQ506S~AhSWW1KT%SQLULQQ7mYqai7=C#ymc`bDmuccnbYpK)m zT4t-qD|9c&YpF8ewbVPWB@^9C#%rnjUH87o>l*c(lX)$5T3$;X#cQdT@mlJ1yq4MO z@e17w@>;44crEqLYsp0SlJQ#VAurwA@cFNydy{!Bby{9a9mQ*@m+@Nabi9_?>hS{I zYl6I%Dg$0iv-4W=(7h%ZucgU{*RplpTOrQbOy;#TX?ZP86tAUO#%pQP@mgl9$18L% z$ZM%G;I%Y6uO$=ROU7$?`=wp?zQ*~l(8thB=Cw3wc`Z#8uccYWYr(eD=-vi+ElrTu zQf0tvX?9*qCc2l5*V5#}Yx&W-x9T|DeX?2~Lo=Dz(xm0JG*P^kW*M)gNylrMtsbw? zy&$ip%7E9>?7WstbT1jNrOAiavT@y8qmQAP%xh`V@>-fGUQ4r#*V3fpwaiwJSLj}l z*HUG`YiV{~OD4LPjMviS!)w8IzCvZ@;@4>1o6Kuz((+oGC|*mmjMvhn)6WvS3YiaV~wUj^X%+s9z8oD=`*V3frwKP$@mS!2RrAfzYnXMkL(7hn9 zrOtrY((JsJOmr_9ucgU{*RplpTO-annb*>!<+U_Xyq0Deucb-HYniPcuh6|9ucgj_ z*V62~mP~Xn8Ly?uhu5-o-CLuNVKT3!Ny}?#qIfOMGG0rQj@L3rCc2l5*YfsDsdO)azx48&%*fYh-J8s7Y18sr+9+O2yNuU@ZKu(_4e(mpAg`s) zfY;LQyp~LKFBz|;O~-55b?=W~SE%P~C-Yj`w7ix!ir3OE3A(kbni$1?$_>PXeaYp+O)iuHj3BMF5|Vd>3A)()#DYq7v#0n z8Sq-#o!63y?j_^3wCQ*)yYBt)K8AKOucb}PYiXl+E$uR1OPh|@GFv@fp?g7IOPv9) zrQLZgndn|JUQ3&f*Rt#05AS1WC-Yj`w7ix!ir3OE3A($*S!SiAFX?nc`a>PUP~LrYiXD9TH18Hmf7m@3f&9xTAB=aE$z;0 z$wc>(@mkt+yp~<}{_y-)>0_A8YiZN+TG}XHOS_EM(x&6J%vO(A=w6W5(qzDEX?I>r zCc2l5*V3lrwItAum)B%QzDDcbWL`^~medUQ4_4 zS~AhSWW1I(9j|5Ay+3|kqn>jzucb}PYiXl+E$uR1OPh|@GFv@fpnF}A*V1IbYw31g zOCGw{CF8Yp>3A(kbni$1?$_>P=qB@8y0pBOE{fOEE#tLx>3A)()#DYq7v!}x8Sq-V zo!63y?j_^3y#3OydtXEMR)}+UlX)#&T3$;R#cS!7@mjF$G`hC|UP~9`wKN&hTKQ3-Vf;40tWw&TGj; z_mc5ix@>qYKV0{I@cFON$IwmYwRCBDEnO6^rCY{p>C*99W~;|5bT7zjX)@robUUvl z6WvS3Yw5D#wQODY*63sCCi7alw7ixsir3ODDO<6d;9KB|M>Z*^V_`q^7jbE zc!kyl87)l)jFxU^v}B@nkBpW|l&zNc#nb0}(tVsq#2MUc;CRHEk!XB27*XtHs9Yr& zb+fy|HHSv>T`SCg0?dadC7cu`Sai@4MWV8Im_!I9?%nK{8950hy)S$t;;j-Xoa>$y2c_Txv|__=MQvXM`@| z4DKYaX|8RM@pI&osOJgmxcM>b@$*7F#|tt_)Ua^L z;86e~*@+pxxTO!s@xf&Up9`rXR?0748Ns7l&E+IkjBtyMGw%Jx?d2d|ArgN?A`$eH zpC@99XUCrKL}!Vua(7~h?=jS9$(u}U>CzHgx+r2x_e^Y=CVAgQw#<>d4M17CAe5!e z0Ls$sP?k(2FAQbTR36f%^4H1#4)UG2^SBc}gyTGp*-=7{_)U!j5_wMu@ivZ1J$}bL zowJWRVNz0mNAZ7J1-MKMMAzRPTxBYYd6vh+bJOPc|erQfM6c?e%0rn0E;4L+|Xa9Yi&^_^|h zdE5s%8Qt;suH$c$7sLBwK3l2&AaiHIJrN5Q_Le2Rbz38lh*w3v4{xr-n;U#KYRTN; z1NR6Aeq8UifVYL`Nc9Q=dc;P=b~rNOM|@SYtc%+w9xH*(>-g)9WK{`}nm5<_wQ%j^ z2Zv7~`#3}HKfBw`K9aoR5nn^u*_p!EPiD6CX_+m36tks&X0}WczW%$=mN~+=0W3=& z#Im#*U|ISd%aV!kJz`l@<}{;s@ZYoVNcint_#)2WPVx{e#{M|??_oQq@qI%HN8#3l zJP|x3yxEFK9WE|3<#-Jz6lsiWIq&kW zMi4nqLbc3!CuNujI>$%I$UpKqg*xO1u?2#tNI&Dl`SZJ27GuSj5ELccN+BxpeOe*N z*-yr`^l5P|eH5;xf5x>;3UXrHYf0V)h%9}O$kJv&Wa)PzOD2-{NMzB#roLCtP9+b2 z<ydqK943~DuRKA(ri=ZB0N{R-s!kO^dkfFXg_ zM*J!AXq|9SO7WpgN;tAeFxP_jio|dx=hn{<8{r%XMIOc(rg+9enpjrpBfvG5Quf0L z5Xja0<{+La{%?={62k5LS59mAdXsrAeOg{iAH{3wpLs3Qe7)}iTjmJg29PX$5XsVJ zfMn@+Bugg37e=zwey;Y3_&s-x44=Wzh%>m)>v64kC6zDETs=kpofPm}If~@eII}@Q zc?0t~{%Cj_^T!q}czblqwc1hS zjKC&Wf&3wkjoSs{NRdoA{*}p@SaB&es~kbwG|WS!rgXgOb`4)|GODFdi)!hkP%Zs4 zs%4t5_gz-Y9Ld`NjinFLSlSF|Ed5Sn$wczPG#0JT)E0)`ufeM~`KyRCxR<=~>Pw`D zYrXk-P&rwWv7*nLx=jLx<2Ui$kV|9&PmppH^Y0jYe96MC!!mb`iwMVIKFRtaHw09z z6h!P78Rc#uvqnhsAdMBAKh>mEfl`mkcaSRlO2V+5E%HS94Vg#!2L}m8Q_6yXV!v1x zcMsuB8@KVBbi)(WZ94PAaHUkh# zzk^sZk-SF`OY6tIYe?62hUegCjO0B4T5Ogi>!hSF~lL0M#T0l!51!(D? z0WH%cZ#JRjk0fscJeEGlV`($svGhBSB@@YeVyGiO$S&CHb~I2@ZUA-?p=}?1uUzr zTuLZq;rux!VNXJ=7Vzw4Cb4C_HXbtY7O~B%&xGbK$vj#WC?a_D5yJz;f(XeXsn%FQ zcCUBqE>>tx?_l?#Y{=X1f1IDm^g8yFxzhZ5<*jyQfV!O~W8f>f(=9Ip4EgcceW zu+Y*+fD#w;Td{OnGdi~#d|1w$d?MFn1vV@6==GC%EPYxYOCQB!=@;@?`ZakhvxVao zk{9H$bQ$ni`klv;iR3-~d$1yWjbm3RebyKuY zcoXYjNyi3<(yffyur9xgOHv~Z1Yzy_WQs> zrqb+y4~Y0)Wwsl!9rF_#KN>|iTE;_Q7FpzIg9J#q{|I{;Q7#fo{X!l~zb21mws5>c@`5~;E(0D*zw=l!k-SG9ikWr+T^GA}%6_O>Sch9O)u>y)`I1@&r_A|jY z@eMf|e}$cLH{gMCo@%j?j;YgqdKv2Ya+i!VFtx2WX%XOY6h?p&yKl5 z!eEk+0i@@SQDhE*S8I10!o<8GD>s=dd?m}EVObad4mmZN$`LZ=kU%BnF^n?Rp454A zH_%;(ze%={@Z(vEYOsC$RttpQ+=2|yeekj3Zc`WrbynfCWB?RaJ)kDf((`}0|v{mGgvZ_yhjF0<;T6t3G@KqVw$M&=NUU}o_6kSg2Aj+TT*Ebc1D#M=^#^Fhi~@FK0$pBccP!e5id zb_5z(w5{+;w>7NZN^!>VqHV!;XTUoXW+pzD)r%s3j0Qd+SA+y#-QH<8xQXXjNfj$1 z4!MQ7v@SpLn>-S%A$gM-EJIob%Mit285S~FFz&S^ZvzaLA;@6qGGMR_JA)+?$$Mn5 z;JelG+WP`;ubsR`S8NUs^p%5@_j3k>@@zi>?1+V0a$5$G9^aGOVuV_e!mjt(W^S=E zyfAz~!;xM5+Nha?mx5ekttLrF|ISrBDN1EHpHcwPcynOTEVIVdVWC(5U)vj23W< z0Npx?=V>hfA~f`-namL$6mQG6BBEf1u_rr5*pOerLzFqRYE1E!bmP}Tn#!$>0?(`Q zUpYu411%DE_nh7O@MNukXFRJ$7&6vjhxMKOKC`OStDnE-5IMu6+)vmV?eKl52x+e5 zO{T95Y3VCN6n$k_NM9M&q_4~tj#o%tkiODoKwlYl`bs8}_efunipaZ-V*gcMFQQg+ zs6&M-l;0mEfXV096hI+I<dlcxYXIXCLE1d@I_|@q?@~ zlV2Qv9a7~<8qci~l29k(#jIZ3ez_+&f^7hVxZ`yeeq_!K>!5gsGq2Te75|ibu9Yi2 zN#TuU@d~$YN^AJr_xm7P>?U(phP2$3A&R>)JabouDO$HCc4f9=yh7`O*p)5=?8>lX zS2EGMN9;=DigNc}W1NG$|LjqSID`A{gsa<5E3I!hYGxhi6)X2e=KnJp^UM-ncaS)xHM)sKLuI!4zqoZ=C6Y?ak}^+fNl3xr#=!tHirCrh5zFG9AS!v5 z$``JS3K#3Hz&Zy1-1dw;_?241a6CinY~YTp+@`EdmCr+|*tv=~8M`v1#jXrd*p*=+ zc4b%-yE0oiULkow>`Ipbc4gSHE15{%BX&iFOkFyJPaE=NzN6|^93{lvXVIg*9SQEQ4TR2`Jc|q(-p87K=O^q{E-4#>6%WCpB04 zZ{bhbd-aUymLT>ikx^onc!=~pv@)6;`6TUkaLBkbkWP|>z)_InPSSd$G)WS6BDKA6 ztg#^53jXX?X~!f^jL%Cfc7=w#VKR1QNQ+$=qOdE&LhQ=0CU#}EaJ)kDg4mTl1MJGM zV^=bfyhrQ`()L-6a=7nD*Z0NK`>h2?IA$ zinm3HC1?|TT6`q}q&FdlmEvjI-aCkt)bO+-h!>Sq6(B4cU$u8D!_TsAbwZt32PK)k zTS_a{C3Ib2tpqcTTSj`5U%`95xz%IEwr`SHv2Dy=_&EfF)N_SzGJIu73tt(c;44D_ zzA|OIykSlF%53>~h42O8D}4s=m0^dkWFmZz@Rh=6(Oy*w@$6I(i;t^{ID>o1V{Fbo z-h>44SuA%Z75Ze#2!R$NQV8WuN;t6s?1+AMW{mtDt#x=(me=e2OqhY21V0IB5^`it z_zwQ#AZ44_7ffryk6<#nKQ80n(mz4_pb0uMdhly6#b&LQP=vLX&&@(x|6S|p$JfJx z#9FzcdW{~1$?%mSEqrB&g0Bn<;VZ+M@RixZkzVqOLlC~wZy&z$c4fQdCdCnWu_>kj1=|QV=W=@xqhhe<}Pl zUiHx>hCnDYiS6JYA@-DlASiT2AbiyRW3$+l@yz&yFs5W734U_D+yNZTK0ksIC-Xi1HO6y)3---Ud}UE)KQ99EQmU|HIbKm|Mh6e zn+jif`(|3ni-E7$ZL&b}iZvzg>%&)yLlC~wZy&z$c4fQd7r7S@uy z2lxt=nMjP`Fj?xyPi_*%G^x7zoI_S-qdAKC`6g0DjUx4&R?czu`KOwZ8c5sN9AAtP zk$@+GK`f4K+xacRt;{DaeHQQ>|CW}4n}j`$hmAbdZdr&Uekhyc*^aVDKN`$4yj{A| zX$?F{W$8&muXNHQvIJMLYeojUet#b=c~jvlZ{JKSc`@)6yG<5I-kR{0*~0M($qT|) z`t8G4-mYwyygVfD5x$~9%hu2MjyI;VSbUsE#2MU4-bv~(ZNq`qZG`zZvhu~P$u>F= zZ;QV=O9;_|nTQlJN?3CID|*dqX$|NkD2mkDRt%Jj$o!iSf0pum%sKw)O>%rZE+B}I z)r^-``2C?-OMnePSL`-fAbD%TS7r;xDY8>N(l=S22@cy8(eUZ5$;CXRt<*Mk9t0W6X9cC}{VEC4U3zPj8 zIY+GT;(u#ZnuxE2H*JFmX`;t3Lx${n$<{Id(nW|&E*J7zB&mCJQ8QO$N(s;dq7Q1sN>;_8Ba1SGG%D9+LOS zU{T3K;0`{o0r~qBzKAmjNFLx!f{@fSQpbqc5g6ou%cENX-VpC87omF70*Mk}Br}K? z#+6X_NZlqa;dq5t$s`toj{;W1{O}3kP=xYMTxedX{RoBlkG5IF!LO9|0oo0?5AX`1 zo%IqvB@AnA`*OX6b9rDOzX?~2k{fK+0;h~KBM{%6_rBy!mAs@37GJTJN!~IBiy8M? zlK1r)EX5(nVClEdV0pW;UGnmfyhjF0;m5tJ$;3~3uG@^M)qJ3@P@)fPlKG*`gEJ^) zp>Cz}uu|5_IL4jywHacQais)B8rx|bN1iNvirgThv<6_mC;$Fg8rbQKV`~D-l!%&)yLlC|)Y#+Yzc4fQP<)L+9_=;kqd)JIR z#S_;kDx&!SUt!D`=}KzqNm4N?I58AynnDuY?0seo9*Gl!9Z{7(hy`Jrz0YJVj?_`& zf`(}+{bR zt)`=Q0kUYK#1YLQV?-H+t6#0vj8s0WL=df2u9ex41~{Us2Z_95N0o>m&Y8_8V#gVB z{-h=4`xJ*>WRC}=^DK@dmfInJ7auo{Mg$bc6hWtf@4Xi!TJol1SKhvvR`O!7D|VYK zki0dqE3<{;6_OXkt_<79uDo5@E_r!K-XnHJ(|79esT9^v{~LD(_mVgG*drDoA#17l zpf=lep2EZx@dQYmF6_KBxS`<-of#A5(=iOeN;6`Sl5 z0VT>yb|-tz@EgkGvIsk;eMwCP2Xv}^Yc3q=W(ZdxMG9QGdVNjc2pKp z#Rw0@2q{O`pGMMmmauAl<_$V_a;vK|PxJ%CdP0rI&k^Giah1ODb!*^(hVAnnVmSUiK z1?oyMnYvP>rLGiF)RiJYU73KBHsfAP_%=XYDT36MAp`14u~Szv5xz(2ipDjy5xskQ zt>k~3s57{iJgO}RA8#XOUR*?Qym0uAvVb3?a342|!qFIB>X|NG;c8Efz#u z2mdXu9X1X3jin!NK8xHLjQI+?<-IR?Qzb7gb)|@+t`rNYE5(}BmD$4a3dsvnSB4Cz zE5%M-$wcxVsVj{y#&^D6;i3`1kQGs9a9^-V31s8)VH@Wl2NDa!Z({tY0kMT0+mRAW z-Dv=U7{(DrwvB69_>u8?to5DZP4N(WvBy@*SK_Jnr{Vpmv_o zq6`x&V6Mio1dhydZH?A=YKZ1|X2>O86>~!34nK&b8KO{1{R?gI_*M{4prTL_gUq#3 z97_5QzpvEUCR{mwf;VbCetbgs@#eOVEE=@B^>ar037>LL7?nmw2@a_RZwdTf{obmi ziU*6P9|8%cpp`C%OX%@suJBD}uM}z7D@7E0r3kQBCWSZGWUtJYk5>p^ki9Zwz+NeK z_DUwg7iO3iUAAXF=*qx2<^ zNhH+C{XuY&7Ie_toF@U;LTY)~DFI&<>F28PIxQef%?la8Y6Y>IOkF9`Qdf#7>PqoU zU71wFvLw?ggAp_`2u|rof(YiA09zN4+AKKVST@Rmg_ZWf($L`?ARQTsfYB%{l&j>Up zU{mcHRhyI1D@9uLN)d%#DW1_Q)8d+IvR7sc$15Z+$XJeGn}jaRzsqS4prA{|;@l&3|_sN!sWL}^94ND#3W z5hM7=U-cqcv^&@qv^YfA2v&gAP_}>ab0C{X5e-s?%_3+xm39YQeXbb6Qfe)MJmUc3 zFmi-mifG7WTFD7#NDx=hY1^FxQJ1A~n^mYJCCZhKUV3B;2z4lM9+N=JV)r&ZT`{EUj z$c*6~jaO+N3o$~XhMj*0xg)1#Qgan4z=Ft@bw0)>q*u2}B9w-g7V$)y3~P-QFvFco z8CFK~07tW(88|EaIwX<$O9Z@hd&e&9E}^L9?00~5A=du8_Br>Kh#u`0L{+&WYFP0| zduj0C>Ufl>*67Wf3}7kJ0$7SD086nDz*4LUV41HRFA%*lNML#2Lviz>SMCUwJVdX2 zM6hTuQ_Aq~3R;l6=wx2`fM6kXY5US)7t(gk@=uY5wHx3Ojh|ae@8~wAJ29LkX-5~H z!8;E=w_Ft#K@H?VM2}>lmd!Bs9D%uFCp>EbkmM(Qc7_5)l=v$Wd!LZYkD5|i(XA)3 z^lP!SV&N8{GH%i;J$FbtDLpz62NB*{)0`nseWu)%lMyUsS_DfOga5iIj1 z;}vQbWU#z%pSXRs+aWBOsNExkMI)DrVo|408}s5duejH|o1~!FunyESPKuRXP{N2B zon2SZB&>$rS+O`~fH|}nCuyz0SAQ$?piEPeh}IS;ju;SW`qEKT;)ui}(HPs3uJij~ z5J-yI>Dm8^bD;Bq);rE0tEAw?N>`Z=ia{yRy!e>d69acc>7&P$4pQ<1H53OKYkk+k zXw939Un$e#SIQ{-N*TbfOmXor?$tzZ1N@aT$X|KiKymw`w*y!*5xqwM3xXzut-CtT z=k#9t@kzuP+_N@GaS>~zqJt`W#!sS^)KIdhBM7)=*bC0lK^!{!Ce9#fLgJ%*=jwuE zV_&%VoaD%S-34Hl9&bJ0=n9^Q#$zwTtc4uT)CSJUn$eVSIQ{(O8E?5nH1Mt zlf5!uGG3u}LHNr1CW_lvyPdw0iP}BVSIQ3!JKVRQOF@b0oPHkBq)*(iOsnMuQWp+keu3BO`4Tj%pkn>l%|R-8msin(IXSjt|ko|5An zU8`uOV2pZkCuv5&X~piaW#YKhchbCowI0Pim|?6di>gHx~*kSK;gtsIyxE zR!N+XHX+W?}e?xH<@Rfx89F-76(mhRjJFQoq^Py zxwM=iztZ}hWLx*0{I256=~<*pooFuZp%v7eKgKg!^d|FH%C!8IGK#-aKJ!A3|Xn!S87+_i~=ZHS5nthG@~7 zj9@9#B3Q~O1WUOP!BVb?V41HRuMoX3gQduT!BXxFmP|zNk->u8X?TM%#N6U5ku@3VX?{_DYWF_!IFhYBLCa^E43@OGhpj;gHSU9gl+K*DF~(3 z#qLY4m-_&DAJ32)7_9FSdUTm9dXpI}Wm*PH8O2~J7cyANRT(U^mE#qn7iO>&88BGN zoxzfc=!F?9wV$hro_?-5y;5Fdf}9T|7OTxT%MyO_McTHLWwa+}$DRRX6 zN(od_Tf#T34gTg@(Xb<`OIM31g+W@GrwJAHgYZ-9A#r3)8gMKz{%7cjcxdptVY^pGaPfMn;a zbcVW0Y>HqYOiZcLv<#m3ibjSR&&RyYoBz6XL@?WUfa7c%T8tJyDp7fy;9emYN4p=^ zhqpO?hnytc9aseS5Z+)Xjg-`O9;I`g8d0v1npp0nci%Nu^s31`mMSferHbOQRL?w? zNupP+3S^nB9Ip_)Fp#Cl0LW79K$c8I?-9sS`7GYG;}!C`1~&OlM6=%88Qh0A8Fj80 z4~OD?MzQx%VZo*?&azb(w*@55Hb-S#`6iwiLWgxUE)n=bt@wlph)L6Uv{qUQ5U!(? zl?)<5_+89iE#BiG_XH(4H0TlDyok4X6hF`iq;#btiR0%q401*IZ&+ok_Z;Jc%xeB{ zJPw)9eudujYBG?eN(*GEqJS*bLLdvqy_)E40LW5>fh$VvXK-K6BD0F$0!{KPJ`7^0tgTAA(a4W6W;Vuz6DyxvGG^oq&l0q?kR#VA z`7ZV72#R7CcxZed5vIw&N@}or8V;_0UEB>w7Je7=Nwp_DH2Ut&!aar8NhT0)R;il& zB9cqTBcn%C#Z8(OXwkTdMfab_j26AgK$a>kkfn+OvQ!I!EY+$&mf6bj3egJ#S&9sR zEY%KV$wc%Xfh;Oux#I`Qz1tUvAIqicmJrH|-U zQmN(H>j1I2g%@JcgQ1BiARcz<1x}mfd~8UCr69kWGqXS7RypaVOgqY zEXy>}Tb0W)TRC1KdSNb0kpY*b+PN&5h+de>g6}iPt7Nn8+SosXoDpYmCwk`Lls@(p zj#v&&%JZ4GUaBhzU^1eNuI*#cx?C8;n(try+InpcV2^^zrHP(5J~2;{%$|rI!ooSX z5-cSf*-0r3VMZPyuzK4T=;{{42w;82gK46$6n!%RRJ0^=37h%TlG~vQ$xAmTDoFrCOECGFv%bA$nmhOOXMWrP{eH znTXyamql_&cZDp^EeoHm3=zK_=+M(DM*@k+m$h;e@I1SiSTi^kk`mIy>!V18h6a-| zJfFb@%CcmPG(u6jEKsUqEduzKH=k$5%eXAeDkC`l6_gZ?fGymlk%DX+-{%^!T#8gK zQgDM6*nPmYOWi5uJCv|sHOQcaYPlmBlY`ruws8z=1U4rVS*o-|mMV(KQauw{rtqe# zRe>zCCF2!p7Y4GF830+T9mtZ2+C2hURNJ(IMf(<7`TP^z5^)B1nnxOpxwSn_8P}_; z4l{{n^zwZjX*3T#;Bz9H^e6CF=1dK4n`RfS>jw@dDoD?_CC|jh(N1RU`l%ludd#Td zFdA)4uqilertX8^84#tZ*dYd4i#uk{AS^NxoRo{UZl~zCc59IAJG_LWPx6;nWXTTi5-aoO@ORR};#S)1WN~;~QMoX$8xzvqZ{K&0H zDBw(HkKP6ndssS2J6Z+Ht6L(D8^6L>*V0-@;?1t;Dt~)+tG9jndbbp$td)lozRw8Q zg99<+&c_5m40STN$>kdE-ee$4l@`cSMFCl=g+P{SRUpf3{dk4+g@G((20)f-2eM=$ zeUCsEmAKx|_^zl^JcSjCH-}J+vy|DURFf@LNljUwI^~?>`PpCHe6GyvW5!5*;gwxv z-Xx7jjR&X{V|k57Cb>xMhi%iqoN#1p1Wym?E8Y5Rn^q#PsHAZ8FH^V15qN-A>*_VT-UXrMHid4v~#)x5s(eDF506s*s7E;{w`$D~%PsdNPouP77qIqkt^+LLf`MDv)Kia=b$H!a$ZX10YMi16eW=y+B4)s#b#_C2W)g*s~l$A2-RB@C(^UNCoO#DD( zlUKukGKW|PGE1;@d^Otj_)S{;P7+{5;u?`b+q)JI5Si-SvIfcf;lUzM2r2#USS1Cm zz1R`6W!vddheL-0(p~#s;m2NN^o}Bu?{`DA=uHN))M?)ke3F~X4r6H{ zP4UW1#Exz|*a%1Co0fTN{Fp#k=xv~r8`0x`DP*y|dazT%p7>*x+Ya(oW=&v*p~#Kw^DZkYPs=J?VlN#NKPpiX-#umyb7i?fY3sAz?oyWj+N~1VIf~se z_PW;)M`Kojq?mpdEyXq&cgk+K!{~7bK!bN@ zUMSy}dyXI~c}ryQ{8^hCEqar&EOlBeOC5z}sTX2d>Q%8Uvz6l&q8G-plo?=I>K)6H ziRe9ISy&=J_nUdh^)>#h_Q@xmEaD6T?F%f)jJ=910Y*wvc%|2zyc`)b0)6;4SOHCQ zjd-gR#DF7V2JpdXcfjKC(-4+k%4ld8ph$(>oe`Yz&3d;oJW|85jAw$^N54BETx@|F z%U&d%qw%{&7~^a!|6SzQig>V71QQ{>`E?=A__27By?C%3p576?jC?FWYVmhh43IfX{|5e zv=NZ~vt|PE_gKym%&W9G7=TkMCk?qW{t6}k7YS+N2hzDm>i}MpH98i2<_-5gxXOsGN6R6a7CGm^{L zzBf!n%iUxkOPvSrL!ln(WJRUXT1$#{j@g?TJx20WH}=dom>c8@%k#%HmT zBE>tzv|`DkI~M8(D$7~YZ;UsVLhOxkGDnY<8kM^G_+c-nlWU2Anz5I|$C!OYOm7nJ zq$;Kmo25tGiaK%Dj&5aa0Bbw<@lD~Y;O=2Z{BJ8)XLf6@L1}d$C8QKg?TKxb5P~KWUuP&&~jV$pzLB_2n& zS*{%0xkz0mZRclsPk8hy7D~|#=VMI=1YW5qmC8|AG`)-fb)q9#0F-ZHeTR@8&DFfgB$hfYiKUJrvD5()%On?XRT9f=<#>hYg-I+`1|*hx zC$VHAdXFR)tkZ%WUO%f#@}15=)f|EP04t^GIUR1_beF?h<(X@8I)Yg-Rc$pTRwe<>Hb; zT$3{(2FciWG6U8|j#!`EMzlnQ7$@H(CW;q#ks3$iuFx8Q=pi6PSn=qXtMR>&OtA5@ zTO#SPM(RyTC~_YZa)yXcAuJTz2;uC=%5yM@MzUNf1*(xfG^G*Kj$W+92CS(U^xTRC1KdSMbvl>v#R*-0#!h~6KOShNLQ z#{I4-{j+%?;tcL9SPHie+wte%GJ-h3m#ih2iLZr>SQX02=aY~i!B46xZxY5N;7M%u~Zq5 zSel*0l8NYjpTwf2n(E!@`-q%g^T1$XgdmwPmW_-(xhb+|HbRm^!{?#Sgt4c7!#4iG z+oAZeaNEJt1J=cCUnO5h2_zPT(1Cq!rEkvwX3XKqCB?QTy1Gq)`ywPuW{+8=&EY6M zq(F-$Jstgz`&CX!SMD!jREQO!tT{(+}I(1)#^5c_;Gq`7N7Ctja zDQ_f8X629s`UKo%0!22gck65A2-r>|op!Ypf*hqFhLT3+7C()%Ld3|w9T2pGpOt0s zu*dPpbOeIAMt-f31zWqiRo*06$}0ieUc6b`42i24k9L(F26B(c9UdvcXv<+r!KpR* zpZ%KzY}*xzH=D@}mL@HOrHNv&Gz%Fl&8iHR*~;+>(F-$Jstgz`&CX!SMD!jRETzxl z9aU4=EGmqjRh!mS$(LWFmTx3>Gb98C*i{#E?*@0?A@Ly$2Et^U00`WZvJ~@@E9Sj zNHhUK636dQ0>XGx3WG#g&-%fS%%L zfM=rnD3&G)#nLQ9u{5iqSY|87D?~4hVyQDgu{1l1B@@wmM6n<< zDs)=HA|b;&=H_QnOT>BHx2Q|GhHaw5a?V^KR#H}CW7fJYu(=L_$3{q8w(}igg6DH} z%O&htAN-gc!Qd%{%U2;y^z;NW&&(m4-y&;RH^ny>5kPBA7(YScu!5oVSG-F6UTg|G zLL>>g;*k>gC5Vc2+orNuqWH-dc?7WSbB})HHMWp#CSzHev{;rV3d_Qe31{&jl3V;(LriBDKTM|Xlr0Zp~4V0q-X|TQPEv& zDa8C7rNu!%sU+x%AX9;PmMkL2K|%?}-lVkxUrveJNID==E1eNbC#-5s?i96vBpZBu zAi+@eYFSM_X+EwrTJ$D!S(>z5mL`hJ(k$e%G^=u1W-G@FM6V5VS?Ub9EbY!^$wTzo zFqftGbG>U>sO5A0Uqmv(-)kS}Eci2Ymvut3G#&||!tqyOv=F+~QW9%BU=;aZkx<*k zoaJ9~Wk{0|P4K&DHRyb>mobei9L&g@km{~Ph!cXC&VfEXrOsF8Q zf3tugr6Ik~Jo9#udA^8DF>-}89~`8g&4dUkAb2>wM-q+giTvVaA$qh*XlV54wvVMy zoR zL*1I-NH{SMwU0fCF3Kv=Asj$9{)WwE8-ib4fhbfgq$ra2RC@GMP|3Af;UsB1RF?h( zB7&&k*+&FTBHGF~ukw9dV%w{gZi|}s57_|J%gT9E@CEk;{M#pLhWNrIV3Y_NEalL0!E^qj6KJ{ z`0jZ;>;)X?U}+^RrfmCUwnwvMHYub@LoDB`Y~rH?a)+r{f3$wC}GOJ4H7#2uLx zgpQI`oH&GCng_X3P%QQod0U_l zKak^NQzRPkX0Z-ZiKN*$A8Z71BXWr~9p%g|B8$9Jj*8#QJvW{+@l;+LxjPy2_cM==^ zq_w+|R3A}895*c2YA#XD$}Qz6^JA^!TBB|^*%D#W+CxsqM?nH)mY0q*C;L?R>@!K9d-)M;#|#}%wuWO@>tp^9!tBB$I`CK zW0|cSuMoX3kEO|g$I|XRmP|zNk;kIRJazF(d4KSkj;hyuV6cF3X7+ILSgMf@09`mW z%mB^~H6)C#LBdKOUEA?s99!$zLG3h`_ngtw z_w~p7h%>m;yhiI9d!HF{Qq~DxyB%RQWYg#dVC>m$4rk{em7OSrIdtRq30%TjK2yqZ z_E8|8$Q)V)WZ_yu8A~CSLg>(l(KPQ}#DXYDIl8Uc_6dYa33?vAW{Z*axdY0j8YS~89t?h^SdVvrYk z-^$hne2zpQcVqw&7NV!NCAw5JLjJPN$|Wb*N*Ry!#bcF{VJyU=ap-`2;?RLe!DXX= zoX@c=oHa;cR+B1sl4UTd>Es+}1w_^^J_2MFY1K0#^~ul8cIqV_yhcWEGKi&33u0-b zKrC$l#4@QHeN_<4Z2fqF^mSnnOOpYJrQ1O)c}QRP2x8GbJj6{K77D+HyYED_Ds&GB z7OOHGudfjzn00yM?MT%oC=?)*jNDOuHlz~IuyWhPd*rX+lp&1l+iG);cPD8!B*kzn z)Nx+jx~*#v3%$DFFiS_N6XkDdnxGW|=_cWa=gGa&==_t0L{v|1HP$arQOwE5$M#*~ z$oQ*}$gXaWtvpJcR-lh{lMyUkS_DfMg<$Cd2$m`SUbiZOWwvs>LiEB2mL>xPOSdCf zG7-H;1PjMiajWHhC$ACS-P^C;2R0Edu9f*@Lmu zxurFL5k)%i_ekR%#TT+(Hv|OF>g?ynh*-Uf)Las-9_QSg=S8NSj_ z(Yaz(o!bC>r3=GXnhfA8-40*LMCTsiD;n2qyh825)RiU!>Poj$S29t%N9s!9$Gt<1skf*3 zyHEX#ID%>w9(Tsx>U*NB_k_$scur>4#UxzuwQzVy1*^8=_v8nNUdbc~me{?)p z#t{DuO~rS-_}`*W7QQ4CN9L|~J32^-3MDYiw&^GyCnF$zd=%X<8U$+1vM8d#jw-iw zERnz^!Be|?@am+b)1DqEd@WYcyvfv+E-iJXi=wV{3#lvJs??R)%JB-(3sYB`45%yJ zPF=}F^d6}z$eO->b|HKUU@4zGggztA<6io%zT`7|%rkRhEq1sz1Q4%2HnwGf6o62_ zNDH{lJc2gPJOv$;t{7ce@_?7%B|~R?Y$=Mt;lerqe3^@fyE>i~ zjxDxOh=k&1lG8Nm3K_=Eg^OKI0rtw2(v@yi_R4Jic!l(Z*(*&3?3He3uVf;9kL(r2i>a*jzJT6UYJPfs5od5G zdVs}R@!V{&r%Z!<-_aVS446(|}&kZ7s;jN|4(lU~r3lwKUP7pC<=IKT!|H#q!Ma~oHQ~wqcr`2Uj z{_Y?ZpV;qpg?i0yGJ&N_OJM1u2rS(*fn}P%w<>~VwsO2e^uh?1CIbXZwHE@W_s;8!PwYJ)SXiX-$1DvdS8q0Q@J|ks#JXMFrYf;JS`wIl!#Cf2_7EA~ zTR}?oAp)N}6^XCKj3M{uyhL%EZwRImf6bj z3egKASlSE_EZvS^$wc%X5iEr-uO@mbeb0S+TICYan%;Gx3Qn?5y=3hevqpS5>vF>b z$KMQi(eJBD8?Ww{S(W@;cJbbQy)nXm4*e5k535dni>-L zm&O8w}za<>SL$Vu{JhM+`N^spL#-YeN2ajp*iN1WT6|!O}$` zSh@g$Wm0r=RRqgy<#>VU^*_(l11?^s6FRW-G@lL@$hBX){2u^gDtj z6VZD_uxQnamTKxg3tG)0t<&$X5$ADV!dd!=9%LR2!YM6mB(Z=}S{FejHrV^PGM|HV z0vtpbnT=NJRgfv-op8k1x(*q%rf#uH?3bM&kYB8rIvHk|y$^_Ma?X&miKp6ClQ_J% zt>G&ojO@|C6+vU`SJ`qCPsdjE`!g@#(2XOW$NDOP?0X(nmpA`e!K1 zq?8`Uy_)oGfXdQ`sVr>7`0=b1zr@A1J1 zW8z1_6)B`X^c4xJ1<6mVZ+ zrxcL#;P8H)(Q-GL%F?H$vh-0@mVOzPrC*iGGFviUp>|;^OPc|erQfM6nW$Zu%7Xhw zgi)(Dm9_csNyHi4YhLYkR7s4Jr@ZUnYnMr2P+7PJ1#8OJP4mKt-G7JtQ_9baT zKCwO1CGmO3s}biE>oZCkx_k9AtV6RnSMw%QS^Bh8mOhHg(l4a4^s7=?W-G@lL@!Kb zX)~a*^gER$6VVG(S+qv;dH+0h@wCAqloFbL9{1HOxO<4n(a(u0MjFDAGTS~#lF$;WtG6qEQRV_CW=afOA7>UdVZ2fqJ^o6M`Z3a}9ey6fzB7Kik7TqR@*XOwAXW6E{Mw~&QL7nU4 z{YiulPj6uS#NrSHKDSL#DfUEsG$}}0Yy2kuAw`{BEtMfy5YbcYlwwSXG5Q{hKw7a2 z<8|WojdMs>A4x>3QNh1DyA3LT21_i(o23iTAZm?&UWp)^Cp`Gb*e6(SEE_h~6WWMN2iGThO1S z?{o2uID`8jCk2~?`{cKe;<>R0o(UI8IOOH*-#3p7T1)Si$ZI9#ko4OzpGY769u|RD z#$V}v>CjQICal=JN6=Vt>C;kK`Y0+( zzmUq(uS#W^tsk$DzA%-g%Ye$#?^Kpdr0`0ATOpU>yZ`easKzjR$!0_h7wBA;y^WVGE_( zHAg1Qh)0JFA~Hx*k6f27Vi$SLFeyg3q`LsCr?bMq)C5b(4IcfTDNd~7FS5aA)!=4pcI7= zGCfHBq;<3-xxL#9yEh!gr=pL7v$cMAokIeiSZL=qi{0^yd(<)=Enw()WJvMoZshL`$C*(b7jDTKWK@Ws<+QDxzh! ze!M{XhA^U~%K*_b?1+{;q;Ggcv><(2u%cm44Qy(DFT&p&9uO@o|I7&<5uO-9Lil5} z?=e3XBrIH@5E;gj20a3LW(zF*Qutzk=+-TQquJgC$kf@zfqCE)j%l09;)UXuNb!8K02;d#-vAYr?usnofRoSmjx+f=nPbf@h15XSqQMliC)zT>JIo%wt7w zn2cx{(jr=hC`8M!5YaNMifEaw9Ip_)FruZ)0MRn+h?Y!5?-9|Wo}TupYq86-^hFf4 zyq&>4oaH1|(D;(f7_%Q7)rrgr(gc7S>9GDZ#Do%))~%0DZbXm3DVadRfCusYI1}?N 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ⅈ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

    _5 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

    aKu5$Q~*4s4Ob8Zr$rB+jYcZji1AZp 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/~NP;M8yS^xDJ5v<3y%$9-imw5Y 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 j29RWdQfsljQfskNskOLNYMlv57Av)`g(MHJ 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

    o359V<|D@i_ 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

    FXSm}fftgu7Rn*!ITwGf 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∨EU(sC4Y@b~YP<{+Dh9hkq^q!^%U5+%~f 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%0A!-IN1dI1_@uw2gSZV*Xs-W9uxb@^|0@PS(Md$ zcpor{9sPoX5IFU5klOxH3C0x-t%4Bj+25gMC)MaX8rL<69XAM?lLaI5^qRQl56&|Ph6j|1^oB$5??8bb50)3`6vPq(io%650x#0QfhQF#}!U6 zz}L@he$L0fVbY}GkFJb;*C>)kVqc#dX&m?H=F%l#Zahs(zA{ZqK98m)zmcXTpH9O zw;m%)e#yx41E6Xpm`m2U@3f!uVQxGNOTID-OFoZtHxjPo(+O8@hPfX~t&$H? zt0WJ~t&+dERh|Xr*5g*m2f0-q^5>%7*)~7t!`yg2m3(DBm3$tbN`51sN=B_HHKNgk90C4Z5iJPXXNM}m?+4++Yn!`#p|PKLShBq;gHBq;ej5|sQ# z5|n&B5|lB(u?5T(gDfcNgR-C$FBX(1fw^Km7L?+7SWq4v=9XwED8{p(6f3i!6!Tb6 ziW^x_iuG7f#sJ4AFgM78l0GO4O7UVrc@~&kj|JuJR{yLp_lyk%#dsE!Vr3STVjc@h zaU%-~0=^E+{ZJN^Vvq$TeNYyZ;>CjUEHJko3rg`kEGS#S+)rvKD8{p(6f3i!6!Tb6 ziW^x_iuG7f#sJ4AFgM78l0GO4O7UVrc@~&kj|HW;U_p7{px>icS}p=}<5^IOm03`V zc`PW!jVvg|dMqeofMXMw8)QLAACv{9c(I^73(T#@f>Pu!nEN3=m#DNX#! z^H@-d8(C0_^;l5G0LLaUH^_pLJ}3)H@nS)F7MNR)1*IsS3+5jC`RBvjcovjmWfqiT z9t%owBMVBg9t+AC;MfG_23b(j2W3GiUMwij0(0xJpcLf`=6=ZYFA}sI&w^5{%z{$P zV?ilyWI-v`V?h}M9Gk%0APY+Rpe!iGiv{IbU~WAYl%jgU+z)yFMH&jmv!E0!v!E37 zSWt=^Sx}1gSWw0Q$0jg0$bynSC<{vQVnKNpm|KqprKtaDVeTm#3dXab6f3i!6!Tb6 ziW^x_iuG7f#sJ4AFgM78l0GO4O7UVrc@~&kj|HV@UNASmbYv;GoDXy3Sx}0VSx}03 zEGWf|EGWf#EGT1uV+)uo2U$?E2W3GiUo0q30(0ehEGXsfX<%+4zii8&vth0r&w^5} z%z{$RV?ilzWI-v{V?h}M9Gk%0APY+Npe!imiv{IbU~WAYl($>GVD4x9T%yvl9M6JM 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%0A2U?3--z~g*A1_L?y z1Rm$}F&N0nC-69*kHJ7rK7q&id<+J1@(Dc7=VLIClTYArJ|BaDoO}Y0^Z6JIN9zMLGNz~g*A zhWc`Hd;*X2`55ZU$?*w1&gWyOFDJ(*@Hn53p}w3PpTOgMJ_Z9h`2-&4^D!96$tUnQ zpO3*nPCkLh`Fsopa`Fj0&gWw=kdsf~aXue|ft-8-kMsE$4CLe!c%0A2U?3--z~g*A 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%0AF**Iv%}r<5xdKFWr7&r;UE2 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�c za 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

    |drPzCBeFPo^&loh&RK1sEVXgP;`;C%ytO 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

    No!vds5Uzz3qp#yyhCYt- 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%0DUgwF1>iwO-kQc!Jb@0t5|G|h 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�Vsh+$SvUq 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�+Lm<%KK9+5CDl^Wb3nm6iuXlq>sC0_yWw)@3d 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

    10yX}&F>awP+L1B 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Ⓢ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

    H6F`Ui;egl7(gaMk~5YvjI%B@nW-_<#lB-iW-D} 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

    BUvehM=%5*+#6;hM=e{m>0STUBORy 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%0A_G}gGa>Nc-a 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


    o&d0i9v%Pu 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 $^WX5(C&QtoDAgW@o| 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 z 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�@4_jybVrGZtEi4FUDWVop)kDij~n;#-hPtw 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
    Yc=_$pYr96bUdLgC7( z?h=VZ0)Y1Iy>`yV2aFC}$Xp8p>Fq)naYh-@aT7FUX z6ix`jc=}Y^RrgdLxqG=ha(7T3xjP__+#Qie?mi)p{2E5*>(r6EEp_Dnd)1M04I%_@a{2=;O%EokgBwvLmu3C!X%AwwweI$1Mvfy}XpskFFY~ z7Dz;W3(pMb!AYF!n*jzg_f#BWzQbb?3Ql$RQ3-_zkKq`wX&Cx(rzzi5M}~h+Wz(f> zdd?F7&?sq_Q;T^2TiLZv_7wM(lz&sR)e6`~2?pRoxQPu_MMm_5R1};X!CKFjiYiqw zMVXMfRFSGXe`Y-cVACo`Vcu}gT3hfNak+qH*gW8Nw|hQ5sL_F0i~nN%ta@+m$v1f} zhy$gus9b_pp#Ex7h1E%E$yr$o0Cx_g2G;jA5`)@?S-oU(*dsYUpwT`8PN|3`8a+Vb zQ>~O}dqQn=dLF_Ob`}6w>`pXvfPGYF@yX@w-<`AZfjTmT;;ps@u07Q`KVLhkrLMNg zAP$B}-wrZWJ{D}>mno*>z0 z5Uz~QEaR{!@1EKt01c_VrY448F{%9)_WV82d8&@wy<8o+JE)G_9Z*N^j;JGdpHN5s zEztSz|M~-<^L66L-Ih4=@V(;5-L^O~&LVBRYZ0dYQ95?BzYBr%z*(t+u=1q{lLJIz4NP3H1iRxgDM zDpp`Ld&Tq0r2apmi12Qxul4cZewk+dJ;yn4zS?& zy3Sr9oo+)M`L0SQ-X5(THb>-Nvi0gB6>y|_>#O0 z<3~XV<1HTw9WbZ>Ia!oP3h9l%!;i!9!N~siv0Y1Q;UY&Wk~3GGRnW zIZ=fn(AER%vl#(KA+Z;2C`_$tbU^>S!eJ4Tb>bE&JR z;>g|0#gV&%;>g_rapdlZICA$l#F765=sX1)F9teW+Q`HAY9n{s+Q@EPm=#e+hvr)Q zi1;rl3%CHx@x49?&{5fFz=yb7OfdIlkFy^mV*x-RH0o6qrQW9q{3D|nZF2SXE{^%V6B&Yi8O(~7I-@Yt6?)0YG zOv(k~p8!KxdD-hl93Ak;C(b4rH`McwkM*~6KHdQx96!D(^)YzHbB!M>HYdHZN|`ad z$)(=4Q>G>QG|EV%X@;~UnHg2mr0Y)b53dcobCNLKDnS6eVZs$gnl++&BQsJkmvDlt ztmubAe2{w94DkGcIA=Zo&tJjoF-p5Drasa}cHg}F7XoGOb<0j$JuMqy2uvPkE63tJ@ZBRXJlA!uk1Cl*Uj_@9=Ui*+MKNfuiQ!Fy zNr@oGdIo?O-)A9$Nl%YycpJlME4TZ5pz~B4xqG=ba(7T0xjUeZ+#S(I?mnT7{M#Cx zKLR>mCym@~Nh1&6D~;T3OC!f^&$ZLpFO5na199fE42#^54@AnTbz|+&SydUhfoReY z*DBw?Ds|3xR)MXP5@#f=Lyxy*>sqDQLg24;HQaYE+CROba<90A)Zd7c=4!Ycz*gGV zu};(j-FBMtO=;wl9H3QDQU{|>+DHPEeo&=Odc*EDf&{h1>1VMGCpjYC1hR0;OO^qs%BENE}QJ*B#2`iaWV#ZS0m?$DKT5Zi?Cvldru!Qlz zptkPFeq=A?fHEa~oo*fkgOk8wj}s&a`UBn4<*h7=<-_^y{1}Iwv#||ye0)MOa15yP zh*P~11I_kf)3R(jnI2yIt{5)o%60WQ1D!sLrk17qFG6lNH9)Ph@+6)je%#d12l^20 zwe|0$g?-lo3Tz^0sfwJ`nGdy0p}t+Zm7^^Bx9Rx=(0MA2+`U{HxjQJ0+#Qfc?v6+! zcYi|~`Hz6k*C``+Tgu48_bMZI+sepcUoeQLauz@e!iF?>Pi53#0j%c|bt^ljrc6AE zkwr8(6nZ*1NM{2+h?P&Z)3FRZ366od)?5b8BWH9Eb`HH07Jh$VkZHLhs_TR_WPL84>wKaZS|6%#Vtpx6cDdx|&@g z{j)lVqU_t2&tP`>yiwWqAg`(`XtF6P{knPvqnX(w3K+ z*FkL7RlLzJifVg-=Y}$JDn!pUT4&cR(PVR}^#F{9+i2uvSY7M8-nEOMPt@sjO<=7L z!DeSQ%ELrkxvNpkSsXwRV5+huDIZ>IZ3AnQq~o^~5wjCTL;NBp4A5bB-)m>hVy6~` zMtht6yN{HS$x`PiV3`b--=I=H29Z~~>-)Ue;MPrnp}Ph&C!RMoWKnQX#u_|$mjXv} z_8LA6Xd3g#jt{k5C$+L$PdT}BVho1*DyL?r;OZfDI*WxtBl-jD$F&W(CMH=`QI6k_al!3CBnEAxQ@; zRoJOhz3)ZrQ9i-)aDCl9&nZ?ZvJ~exTer)UZ!06ijNw$3c*|i|K!H=e^GVW;t2dMoxtE#iHb-Xszt@R`!ESO=cua<^;CfC=-)H{*j%DFNYYcyBxo>-i=i9-TR{ zGM9JtF0AKXAm*-Mo~!ZA1nrGxW~$l4vjaN;TVagYr(?}I9x$L+eiP8fobcA25>)}f zJpZ}g4p4Z10HB?-@j=&BtJecAaLc(qKZ~AXdxOqams2Tg-YH+0m;8Abc$8GcuXRmo zaX_FsGF=IyR^+13G-KLErN$EN5v7rmyVVw8a9Q>#b^Q6w)Qz)5V3mSYHulHecbW1{W#pWY zsdPfGWJwZoKnI*BuIW^tBpke!P5kBPA8}SW8>_9cn8cLeqNB?!e=t1wl1CXWP(y)l zC$W=8NzF-D#yP_Wrk4q)4LpKXAmgBvX8^-@EcH_{#Suj^CAj%(}pvLmA*Jsl1tM*MvzD_vc8E^#JQqe`CMwLcF?xmU@1g&Z$ zpGSHVu0&QUO@Li39ZVjjSa;>-ncz+7@ZSTSr^?9P%axJ4gUZO=0cGUwh%$2b31#Hp z1D!v>IbSD?+-(UX58o?{+-(aZ<6G_ujnB$kur+6emr;dNJ_7^OxX$uYSFqqt>NQo; z6C6SaI+r2A@NoCDGFQo#LoO3M-}N2hmvcSUS+ooHU1b`7DN7Iy4Mxg=MT){Ogl=HH z*+1WRTJlX{

    lasbci5HI8@XZFskw{t3#Y@DWcb-$`ihLaQ7kHP#5GOPM%X85UMX z`b8McrCb0M0tlE{PgOX@JggP`;#G$FTqDk!h%C|SNkJLOn|dhfM*xaM9d z-flw}8E3+3v;Z^o4cXmU#7$^Qq3Dn%>^*Nh7%}iWJm2%N`CzN2D2y_AjNjpdX&p{LmUI>TH zo4}GVZ>Y)RsIJsdwl!6NX@>hEh8OCGI=2+_+-fo9Xs@Lf*`~nh?{UskVdU=R!pPl0 zVdU z_~qR5pTDKN`JyCxt7^ec{7R0oP)PT~@9eSU{iZH5KDrl{FiuG6D&|xP1PtW+*lcL@>`$3o3j&erN`=5i$I_-20J zw9l^MZL*%2OVBFjy{UBr)=B`rvj?u<&_xEfz~C`XS8-qwV*u?FWaF&Fz2r3Yw#Fm< zOG}LnE0bM-qt1B+?3$%U7xV{u!C5g*>=DoiY$UrFR`05I_M9t;GbG3HNV`5V9jXlD zj^u`N$SeB=qG)!V#$GHRICV-oCWfeC>m?|MOzW5 z3Swc($<%>EPPMcGwlO#A(@#Mec~inUh-@a3(2FI?ATn*Y8lZ%c(5GtS%l2<;<3Prd zeB#~tW+x(aRwkd&gQYnrb$8pU4*xCA>7VK%_b=B)?hooB_Xl*5`y;x@{ol|<{u7+@ zb+X9)mMrq{y|T#twk&eA+=xB#LX^c|$w50Hho)>Y=m^V}qCFL95Qp-8Y;31En@<{* z5BiYoQTznkeG&G+KA%-mfJr;42n5c9LZ6e2O}L$Nc?4JoJO#!h6~}t!M8sel1%(%v zG2zd5R=)O|vdB4Gb*QlblSGi|!AR{j#)6_Q^$zfpl|WQe#U*i=d+k&fYB%B-X$1fP1UXHHob|L6OJ)yg{#kNSz7 z^YISnPzcnU$5SruBL0aPz~i%SQScD_<tDale@Kson&ChEIiQ@p(p3 zy}^$%nr)fcvnrV)s{wYR(nePUJL1o7!V-8^{Pd`q%kdqfuCr(*@l9rkE3h(_db=DQ z-Pc{Bw0x`iPQJ6L=VT@*(m3tKIUB0T$rh>-4A*3}xVxeN-aZ{p%JSV^E)KTguT$-~ zlk<%l-K<_n2yuHjE_WNR!l59_U>o8E5TkT1ZKQDqu^}j>V5r6H&>e=6now$YXjelog?`b4^C- z&DlPnBf=+5RayxFi11MmUPDcJ(&TJvr7ClMHYwAllp&iUTBaC58AR^BXi@Uk1QFw> z>T~+1s>uDzRgwFHs>uBTRpkDNDsul0gbDg%lK!iIa1jKu- zsvO2^j51UyX2hsq5~lJLlc;4(X=G(pv&5SgYqZOfZ;B$rG|?`#XjUe%U^nFyX*|t2 zoJ9C!KB#%^${pa9Be{cXxYrm(ESdQey`PgsVXsd0iBH+#E*CK{=};z6WmZ%MIjcfz z)|$Aho`am!Sw4P|%i#avIFu6tsh=K=cRT0f9nPT)1gfA@>BOREhoxZ@Bb6;}h9p%O z>7m9rb-!oL7;6vQ2mV=WC;Dv9liHOTgI;;zt8%Q3*ukr6Y|<*$)b4}uNOPmu#B`sl z^^0hwQ3)-SL-MF#GdQ+M>!{m38{0Ssn7xPyi(n2L{#*l*W+&j+stv;O7D;zi2t+pO zq`&6SDU99uZE3w-lO!(zRl44lK2PgZQ-4jPJvam~DuWm~Af}KhS?ZZX3wHI)EXP(n zQlkbEz8O@*vni>4+UiLBJ|9a6S?2kM9#sBM5D@AOo}vN#ZwhRwq5-_So_`y=cYW*q$0kH%H{4No}<9NmT}6_ z6ZhK0t126bh;K@~lhui;R#VTG^RUEZ@cgq<+`&J15P1{oL@+#!dQN-g+HySbq8!3Q<+4xpx+MhaeRs8P#UGw$d5++_n{)(C{V z8lxPnI@R?rkG`ijq!gX(sh%yZ`P5^n)|wzUA_Vx?wq^^I#R?-g$1`88kF?jbZfGKh zkpQppems%7jc`H9{%N&S06VCEDrYis1;!pm2&cpv7O9Yfu2msFt63-fr`WP!c%0r? z-%m!7wF7Qv&cRn=tE`a}YJ}$$AO%z}Q@cc@_nMm*Gz_A- znWR}|a?urNb;qujeTv4|w&z+v{571Fs&R78*Uw+Esn^f(IZri_`d^|G{aVPjSYJan6<`^7y@y$o;k?@=Yap?$)JJgGexXfvWOI7<4Hcn7&>% zw<;$ibs{tpsS&XY_=0rs@PB-}yf>b67Af1w>SEH;CxkzOX@}&#zisOWGjT2BN7THE zIk-ryCk>$Idd{?W@a~Rhhn<#uQxf^6?2K_FXeYXQ;JlxolYzJ>$22OI2DhBm^TrdC zcZn7W`~tHDCSj&QT%bnyBB^+!KL?)&19+}EOC1TH6STH9*2%TN#whQW(=Ml)t(+=w zDI-7Wy?Bze-rQ?OlhoLoDcO)j?v%BGqe$l<2xP4l#T)b*4>LSDAe`}DY91H^kj7cn zUtFIx9JwJR%jobRwV!r)a|97m{DsX8OSHkvR6{*L6D(IOMw57l2UiZTA zq;6R;W;$D80tf`*Dr7>^8v;>HG)h(iKfjhiy(_!}FGQ1MZ>8m?B61@{7!i!FMx54< zQG7_W$<(HrJOSApbuFbz`Cd*TN2W3^O$D3WZs01BmR4@r)q_BnLW2h!=-gv z^I_lwC>D)z8m6x`4k`Op9a&0i_p)mrDI&M3A5L`&g97m81#UG}y@n~LwhXleQqrc7 z0U8%#H!8v)1U4qa!D4P}Ni&_6Ok#;JOgRFSWz1&jYrC|9a5V_wLM22>S-^fV=Y*x6PNt>RqgDnE;P@QSg;B9SCJmjjanGGztOC^ESwX7}-2b{kvGm|+1Z*WIZ)IP~LrcU}Ky--;Wu2MZVOa|sE2l>r4KA1Y5 zZP*Hro=?aI&Phmkt`U#qg?Ou325=GQm2rWA!Z=^*lT|et7okRX4cUx?0$WuIwL)Kf zGh!zAvv>6SU94Y()WE4~D(O_w?t;k_f`X$k-OAsjBTfQtxHhtB$?ol~m)a6U2JxNi z4tR4uACyZXpLSIl$fEA~i?AD`8|mhA%?aau(a3>tbDjrTyP@_}^oqt>^PpqUF4&Ah zlAGoY{s(3<{p_9A6mC%57%@ep%(()yM16Hvb4#PoS#i)LW_7PlVE>UIayp*QHT7o| zca6#uUB$g5!KE8tmFFSOxROCe!lQ=bq5<#c<=GPJrT87QdKh+j0d zXxSj0s&Qr!tu*algp`2Vn7KhkW04imv|$_=z2?ze`3ao!R1mp;xgc_XP!PF4Ac))_ z5k&6)h9L5v;GD11L+-cqkjL-UL+-crkkd&#mep+}3z6uLumiktsedOWw~5_hOG3xO zfyhp#4Z>cOYr^()^?%aNljy6-fWCcyd*~CWk1yi4`MB!Q{2(AV+h8$&|N9nPpqE zyC{FTsyYhudsnHaM=b{wOyv$hlQ&gqSB&8qXv?djIUGNFGM3z`K(3xyJ#ALbJpFn zv5j+l-b)I!2)CxX*;Rla;1yaK(21c@!z7Pe?iR4)y}GQCF6q$iTvlS%vEYkCO_Lm_*XfQ zsC=jcH~f+^3(*e|^OLLr+{3MmWvdwZuJXWiHSOhdHuaD(p7;+iVy6Pa{1q07v1aT} z;^1M{|M2AWhag0Z+qzWjAYX&uO7nRvEOOgMVI#v=Ij3`-VX1lNPhM&yNmywu%J>s=LoLIxr1zY#V=R-CGn(*$AdRWExKEd$_-+xOb5T`5 zB2(T%9kr2ocMLnq8be*H9x2`Nm_yYzGbWw-=)pyJw+OE9tOpr3^^l{_D9iwVl1Llx zk7pIX(TOlmsemeKI$@Zg0%6MJnD9&>sJ@Kw;5^5*R)CNEj5MpBGa+1SQ8i+nu*i=~^q75N&`#0)3{!FGW50;r!= zV8`YMj6%t|39V7{nAAIU$$FyJyMPLd1R zs@J+gBo|aKv>K9P>>fedew;Hr)k7X$u7^Av)I%N)=pheB^pJ;7=pp}>&-s78n1~J3zhTzX(|K=Bix6Z{l;)HKx!o#$LQx zT2*9p@s)QO^_+hS&jw;_YVKEI zx69cksyoBUrH4%f#8ov?on|BXLb>Gh>G5`R?JsDE^y9%Hg4ZAmZnatm@w;HLdH-x| zBOQv-SUj*St!hsq9NN@FMC|KYFOvgu=NhJ@`A#)$OmmQk13)%ZQ=g>n_+HP$aW-|Y=Gl~oJ+=nj`t}>{7o<-7YJb*_!JL!&b=pn+@_#D^R`DIiZTxNFMiGYu>%~Q87|JDfPSZ z|8bL`%*(&WiDsW!8Lz1Of%dNTRAf)1q>Ynfe#EVTuyU5ey~Zyq|6b!4Siqjry+HS= z2Lpc%|9-aUT6eW(LFcDO?bgoO*hV^cg<5wNqi1WJwQSgyms%1~hhPnh9b$SgADx1! zv@eL<Y{r}ONd$vnF(y(x%U~ne)xYWbzSU+V?4nRBxJKo7Y|O}4Gd(PY zbG=21+%baCa!lS9`20Q6d8&y#yj&A`IH-v{9MD7_j%Xqee?t@b&ydd7sUisv# zsv-~Ds>m=hCsmjdn55cbEPIwdrlpKXI1W&NSQXd?HWl_2<8qa^#+DPOhwE<29Nd-b zz{(Ou^EuwSS6ygoZxu_A%C1C9nP1IiR&vd@?iI~B?D|^Y&*6c}?L<4}TI1I2wdI?t z$e2JP?337kJZZFl3F-($r+S*4)K0zuHUx$UAKlb9QyT-GI@b)PvrY(w&%v2y?9vHN zpeqLFB*r3Ds_+@tatn(PazfUoR*w?_sj?L#f_s^iSxoj3dLKXgsHxgHA0K3|aFE#r z6sr!kqVD39!cmSjS3%rjMRQsy&goWvB@?tLJ;K^PEBQbL)~M>@aC)RZ*g;Lr5-d!w zDmd=jY9@p3RSOs0BOK>lW3SqtyYNnW&_Gq7Ri0KrVcA(THGHIs%y0vxS*|&Yfu(q= ze|aScvqo7SAbg;-5|fcl#2|8owx&GA=%iCI6BsoX0cMdz=2V+5=Y#_DC2s|`%3&)& z)>WJ6R99ZLiE{8BjMdLiB8RFZFCizmrZ*FWi3Al6Z&&yP(s`ARb7jt8JHT7Mq(SGyV-bNv1|w6*31o)Q+c;1vV{=mBwOYa*``iPA5nEigSmv ziT*A16)r`@n_$nCS0l3TA6(HcOTMX!yr?QBejHX!OxL8gj;OH=H3y7r>QGgany#C* zW;ZE*b=nh9Lc8b81EHp<*R3_L;7h3dlkf?=NBYEB6XYrxWsn=QJJjf>SBJMIRK*!7 z$I__>55|L8Ny9HC3NSre)ckKY$iHz;@_j0oh`_&`XH=^h@3zLz`8yE!Sx%3c$&m$$ zHBx4x!V^Yo63aM>-NB`&_UcyGgxg{zN4^EF4V)$hs8L;cT;U zzR??Jf2qz3m%Hrc*FI83rYswP9i17r`dCXM?GU8b`Wi|e6tgwD!4RsFr3D>`i5Y7f zCRqzmztt8n8^rd6;LS1c`fcQgNI&0eXc%Zhz7&yPYic7r#eiOF@_OC+{WH;C_#Do~j}bFIPn#4yqy#2UL-VBdW;5CsdJNf^)u36?xcFMV`J_6?xcJ zMNTKUXxW@@a4k#KI8$;f-;!+7TIL}r1zrKW%5~s*`m)b4SIUE>3I|33lhBk&SVT8d z9(b1F$yot-IoKO4xq7b%Xz=#ZU4kD^GbA zC4bYi=3Fie8u2+}2l68_A8H)IooRQ)sCH$XQ`X3c!{5Om;4<*dT!-+G?~@r*NhiOJ zc9OC%If0co;@QXsf~KhW!0h9UmYQSMWlj-2*Gh_*|5ESBH?K+&{BRaK=i|L9@>~ul zg1D4e^!47!BMr53cpKJItD=$g(&5mqHHSGUiM?~Fb&l%><>hRYslF49K{zm#nnd^? z_Y3l0YL$*=b;cS?SlL!lN!oxq&Bmp6oE50jY@{L+oOZMjDU#ir*ZoKp`JxJyi{Krp z=hcZbygYR|a6T$=N~#_1MffL$Q7XK;sb?xFRy91Pe;i`^T=yk_j4T7o9^#M9b*c>& zpgz^aGzuMAKsn65tD(pA4Oo~^fj3gj)>3da?hiz44wq3eau-@=C*h%F{I^{r;=slIeSdHUYxV3ip;oU#&g;tCTl34!A$UPx}Ar2CQgh4d_l}U`5pex z^_7o|_*hrQnGm&6P9@E)_*b42Gyow_-VLPK)Kg7bNjL@Av{Zacb!U|R3oBz#oeWGD zd_htbtf!_{7+pi--n`X@Dl%oL!GOxl;xs^TVVmHtaBfO9gyn#jQjHrUkpdBAKci99 z)_Tin7$8lhWm+*msfptgv1sW}XH6+rOSKm69h~cImn+XFVVh6_?Yr5=%_^rBb#3yc zx3^Wib2grJm$#y;MrEvgKuNM%ms&8<6;zc<8qat{f&Uy_yVhn*17}~;5S+8tGbFK# zscLJ;#z%wwTd>r~6k?3hEzZ<};;yx%QUnKJs8ZD)RKbs>s8(Dl*VMIv9P~ zD@fnePO2_AN5|aD^ITNDfXy64AWlFD zsY)ToqqG9|WF%l`Hx&uRG`C9nJ}h!kfV;4z+R^@91P+>%DPwU@qKI z&bPv;!kY3OcoLlIQsWJ-j)Gch%l>A_rTMfJqHQlVPx!n7#&@cWG6=J}d1D z^%}t=HnNu2O+^E2!_!t^_IsT3R26x6xhnE-P!)MNpo%;kQAHj;p^E$xobz?6$itQ@ z^7Or`$iucO@>!K9tLhyn!Mm%Z4jMHz2_TTAi~$iMew9s(w}fd}gyt*mN@Wg2vf^KQnfM&v(P&I^io#yi zmQ7V;-hXnpu_ALq&RH0-Q&B;B>lst7b1LI`mWg(rBd0gPg@Il$r;qH<+dD^`gh(E@ z($}cr#dBOBPc_yG05Nmlvx*Q>!wM=>j;vRHiZHfQH4LBMlvBYU=k!ld*%mGTn+@`= z4w^J8x?#cLjqlj-y`^dM#WY)b)8Y1L0AgzKG!EXGrcWigHNL}xl!ID`nzp;0fMLW zSgDewlV^@m8S2SF6DOM)?t8DNC706d#W|a*$ahs8M=h=?bDG*1kRneYX6ochSug-I zG1cf0s74`4zBcDAabGFpM1NTMEZCS;pPw}PsUT9pKro^zMSA(v~vh3AEe# zEg7R!&|d2;;!XJ`Y|q|`kPTI2-i%Siy@VuSv>*vU7wj4sCdR3+-2pS1NI@wP_b}qD zavg53+>!U28Sv z`%0UnVx1Me7j=H5ip&ktN`I-1Fo*+bMHw$DjGlycNVXw=byrg*JxVOXoEahLmV?KH zg&5qNC5qt?r3v^4SNzghu2w-z3BGED+m@KoK(v6@IO42mnplB2U<9<6su} z_t6CS37qp(6?u5MD)Mkp6?r(IiaZ=qMIQc!D)RsQ=YRa~|M>6!`UAA{b=t_|mNxSA zz1qm*wl;F2XCaMAs30*QVF5;BsqI3H-iiqit|0fq_lX&sGA%imNm(Z!BZIw7)#Y5a zcTkLpea`=tvQBR}0h4MK5~!WZR^tocDll^RHJ^Bp+<`m@Vd7N^I=oRZ*iN)FZfYZ+ z#N=R_n2FRa@jgW3%J4Bdpw%c9V_Gq%O^th0k_Z^VxaYclv{2ySFsFUZE*@@?SvGsa zd=DCHa!eTitAbE+C#)xO9&QYY^2}6gBIlvcwUSQCbK!>I>B425-|n(=KHj07K^dzk z7&De&5B37Ctf>{!NW&(DqT)8el_1vOmUF#X&RM(F>WZo$<22L?%u!4CTJ5+^s0FUc z-WkOa;V|LYSPR4^>{H_tRycEb5`)US5IdyK3(m*fS6gc{)WZJR*hV`^#olUS;CXUX z>b(|5wETc*U44_yMe;jG-m6rRB^`Xi6smg1N9N2b2}{+`wFanD>Xzp`Yk8+cO}GnA ziG*zWt!~;lYzl4a08o}Ao0KhZudT%QFG?%2h}m2}jLCkqGd|Tu9$&7FJRa0W9uH_E zk4LnT$4_V@zYy(woj&rorH?#)uRij)t&g1MNL3xM#a9uuupdO{ki_Z!fPr7?3NQ+b z65VNn#5Q6!gf}`B?nVBguPtswfq%X#cW_eoYZQ2}$wc`M-IULX{3-qdZ%>#=fQT_8 z=YtWF&_yTD5?yJP4gT;cyX^U?Zsm0nauR;R zppmQ4xFm1IC@*#8Nfp1TM(%3V@OC+|g8-B41@q19jx}>&VjR#ScF5H@V4F$RQ8}}O znO3C;*eQo0s$iqvsopYf=pz&Kr~g`AYw4~U>UmGf+BE8xbM7hlUkQz?*tjr4zb_1>^R=8 zuN73KyE|v&gOeawY=kQiSeF`f{)$lubOVY(NQy*GP(Wwaqqyr0v9Q=KnlPq01_FaP z)eC1+P%L<=iNv&V-w1zGy4}>^Ms$>`VV;!6ofV{{^jrvS&~|GiO9l4(MXKUl3ngQ< z6`uVb?L5^-9$&7HJRa0X9uMdvk4N;8$4}@Z|2~KH$7tv4G?K?HjpXTjHIm0|jby8( z;`bt~g*_zmK&XKiB~nx6WGe-`i-=elkK{DwvVo~L;L6|!LLx=#R%F3i`anOnFP`wC zOo$sDE~-Hy?*>bAS3@TuPJ*6UW{lbve5oo;u3|X2@~l|?N7c+Od%mfWi~+>ZVbCC` zdH;;BvISvC+A_1?ft(T!B@TU!@h8JI*Bqo2Q)r|SFOY19a$8q@#~McGN5H z*arvT2tcCBjzriEQ~_=|*Z7htA;Wr8l@Ub|v%D|vuivR~G;U}lNB@}FP+ihh>z1mp zBu_*tfPt9@>h{S=tqRS-+flWa!ccggYt2s>RA!7kBr_leGADh2mx(@_x0U&}Qc{5~ zhso|3g@T#Y@MnEJZ5SIdSEWwz^8CFz$>X+8G8^tD9zNL|*maWOSlzL#@v0~%zvOvFnFPh8qnQ85rmpolHOV~rS^1@# zBK>sK?#*Ov>Lgoxe^73SdYEV_3QNGx_zd*ae_v|mqGzWHS};}ef9hiblZ@hg$SlHf zU`QERW-Elh#6wQXL0-fx!D5gCfT7^Mz_NKlbuZ_PCeVNaQlC*a$mv8{_FAiO)0qEe zgS^uZJk@%Gdzqz{Jge$HK{N9v@1HZ+Rd$LSv@lHg8P=_ELh?<#nMyO5L*|ybigJ=G zu%H3h7joUHKo?r{sa?rBQJm7(6XxK7Tg?fmW);Wlvw+z(jWE*Qe)I7oo#Y%=DpK*J z5;Z`tY2R5!ie*eP(t0?P;AT#KXlv0jxG6oCLAa59ZmT6HYl8)*c5$rD5xG!!7(%G7tY|N;1IwHq zu6x-=B4Ut6bZna1;xRce_HAwV=}|`a7EQZ)89R*NM7SmyKlmSfY3gT{Ya{#`9*?LckDpLWejT^-6m7g1?QCf#&)=(=JZ@_yCvbVx z**@xUu+l{Hm=+>Icz6(nDnTOX#iryt7=v4xnbbV2+R%75tnO4+G;IG|SI*fJ_;#Ka z6mTzN6M-&i+Vf3_=hT=iwcUNb=vlQBmgxc)wThP)u`IuIOYcQHo0`e#5I@%l2A?S- zlG+P0R%<;C0brxrqsYU8SQ!1WK8caM)D==o0~@1y4t$9c2n-NZPNo2#jI}!0%e_(`cdY`rTyXm=ZKOD1 z3Se*beOzlqd{s6(nJE=oVzMSoIm+Tx3yG97#w+Xxn;d+? zmKIgWl6KzR_21*ti{+Tanl&2z7}dGn1fP0U^;J$0nBENFqZ#(+ z8(vhy!PPMPCi8I|2|uZ&!S9L%n^fU5D}E^%1_P8E>cnfhY99SSNl+FKH_%l z(^a1gwYI~1sZ)TeHc~z5uDjM+0GXyoKqVyZG|v%{%(>o_ylW?ItJH}zCXcneb2dJ} zIh1TkSQ{XnVzaRx_m?xn1whlQ&X6h1ItwF3#%iqPeO5rh@=kce#9&a^jJKK+mU?H( z42}rGj_)Xa9_1ev1X~YdG`|hv1Jcj692X(F`y+w-pxp(RK|AB4+v^iJ=c#7$_;StU z@t|h%ctA6GJffLA{teCKKfyU)r7*YbK}6pRI#W$7(gTt<(K6)|OqA zf`M6W2MH zzra4<)Y+Vz7oj1as0NlmjZvbbnvf2o#T)%Fe!DFBwq`PZj^K`2Y0IGHd;&{^5!_vC zp72=sn3O(})(5RJBFaPtx4^Hdo)!MfDs{c)9(;M#h=7c*Qqc*SufmBm0yFNc9%TVz zs6mr$Jvo`49NeRvXil|+`vPB$dWLEDe7xs#PPG?O>)zFRhB?a#tE3coS2(AkMk42) zTxur6S}_ug(_Ax595E{$k@seAb~SS8mjrz^Z}0uKBN`<=!mJLpvRvzZ7e@$`2%kw4 z4=I;>Jvm$>GY_T$M5JGy)g&M=@8xqo(o9~p9U}6G$pDQoK>S~H5>S$fv;t3hz1JGz z9DTCZkfp5;3OU6wZ07nLNH+GkH9ynLHlQOdgMDCXatZGx<+&&ev%s zk6W6_^Y>~dkK3BbSD}%UBF!A(GL+wlq!s}Iv8T3I_Vr6KbAquNkytANe+no3ZIZ2gfIucg8!O&+trARPvGw`wqv=B zRrMK=8Z*zO-e+7)m_kWk-H88kpv5498Ai);<`zp+-j#VTFk>FCMR88=Nc_$ z8#kNkBcWy@9o+aJ{F~!3&-E5LZ~b2Dh}6nesifhNgWWkB+c<|oOb`Oi#3O<_6bR(h zPB;)?*-}d@Br?nisDN!^0$0gJ=xl~EN10AF<&eL@S_Fp<0x@|oIcx-|%S%ld;aox~ zkQH#ft?iQo?*TA>j>N*$_@Chu%-CbaK3K@f7Ep?aUEw9S(L>op% zG|j2EdU6optf~p3@7?t|o0`ege58(ZDihtwJ4TtMEtA`-!h^ZV8S|#HTSYL#Fd$qpi6mt7=47+Nc&O#;_@UwWmL2s9;l%L;(t(sJ9 zklyd1#^DFf*f}5XaL!d2Dv1Tvn<2!)yGH%Ht2Jx|OGt>Q>kyj5XI^SG;`&yt`S5eB zdB$n2yXQ=M_G4Egkt7Cuo(fM|T@whvd$EJ~P9p~9F81jn&I(+|j)S*hbwsgXt`_(z(_A!l7gNCMYW!m_;9qPl9UgBBu3dLLW6>cB-NoMDD`OTy;mHe3<{7O9fJbj=h!{gK3E7ZeJVsr0?YPbNns1 zpeeI)6-6CI9oUGjthDQ;vH3X|8HNgjD%Oj84Lh?X)23!J_qZvmmwqKo76DyX<`+D$ zsDg@lT9w<280@vi3)GY&1&1=)XGP{<)^GJi&M6IkR<;X@cGpQX>hKB2;rd*jn z90UwcDEF~k28;u94F8k!ESp+4tcjR$9Kp`2scAzqdF|^hC;gjM`pC z!NyPvpapgZZ!p&`NT0n6L)x18oaU;PnG>nF{!%lU11-gNrsnxvvjHcQzBh1=>gaMz zlgePj#45d$em>UGT>qbxy$Uki$?8lWX(r>%le-~vbgeBA1Ok8;(Z>enuZ@bCa;#}n z+bZpsnp&XbEJi3*ENPjByrA(;+bLEVOQ|vm^A0qq;J+JKb5X_JiqdE)Zs*jm}I-^955=8 z-+-3h3X+~r$QG-k%8%3xE%mJNG1nSF5K(GLg^Qv$s2=!5T}zGlnNBE(k&QR)%E+e< z6_3TZ%kM6l*FgoA7uEki3kxMxz*f&Bcq($*ZYEVTBRXy2OzX&C#y4U zs3qqp$XmU^qV&RD9OhX__^uKR;srkGRioQ!{os5O&@0oF`hWHjD|ym5fsyXDJ1&X^ zq8c&OYEQ3$$PCcsS*<^vTsQC1ivQ^}8aWkxtr=kVC5t!JlSC18-8~y0oDIR$3*JYj zKuN^A0;H=*$aG8bxNMw@UX_;-g*{4oBf^ng4HJWsYUEZMN0Xh?(lIDZBw(?xr5=WA zti_SsoM^<9>akFO{i1mZh!Scxb+0t|F%F^{qvx}H3gB~M4x zlBd6+mi#9;=j(Kmr!Af2`FnMer)`~N;${LPd=z*l+V6Na)d1&g$)-#N_8E+HQKu?d zk+2KYG=d7aep`0_qD(~&hfy_(dH$1)6W7GI0!MN>23eyCA6p%F4W3tjN^d>El(Z~N`^&XknowKox zbJB%0)bh@8H6o*vJYxZ0YluTRF128|4)r-~d+K$Qk_RmSa2aTDju?_Or|~()f&@Gu zPmnjyz@{7PnrUfNx;<6ag7i7NlkJHKKGhOTvz)?*Nkn9-gTO^fUjA4dpTId!b&{u- z>m*MHb&{t8I?2-!o#g2gI?2DqIsfnfw%bT&_*10uVx+UBk-U7bM)I_+k=(habE@re zQV4_%o>V_d0bkC&T*_*OFulm%XtSNfWaB;3*m*4jF$j;`#LZyBQfo8I8>k8-@>`es zCJAz^H8Fp$=7h7*7H=_%>domxGBLgTu|RpEt=pY-I@6{`GIu3H?^Pg)fo#M+IopE| zjbMgY85b?4?@DGey~9h*1krczN?{DP>qeCCgG$F>`>ctRavb2blh_GdQ>uj8dOHH& z)b5_@`4_D-oK;q*N-B7&SvkksUf;T*k(@hEwc5?8u@Y8gN5g>5wQI=#EK&pr5pb#1 z9(g!&q`0elt!kgunvTY{z7uAJsG_e`Fnhf$^~~(|;Av$*gJoFrJS~xjP+pp`JG~2z z8C{6D0C>p$$PaWX!JhIYYdN%8u-WDMSJ{ zHVYfGd0W<>Ksrw~lBbtzBu@u5lBWY2$xf8d5Sb%jC8j2k(ck)N1nFz zk<(?`$^OAUpJn+7Sg^zdJ_Joli@Q&W>)<7#chC05ln7O&QM9eA!3|*oLQR9Jrn12o z^|a?08g1aadd_JzO|_+JE-@&*!XNk}vIU7nF=6+*Z)YTNDdRFenpk()@=bl@lmcAJ z1V)mTal!aqYXoxwdRx!I*yV5_7axE)hBAAzP)5dOs1XD;+}tk0+_$w#&KgJ15XQ9= zh6M3q?4#y5)EY|d&Q$9oCuXUrl=MK_Yn8D}0VrteUgHo=pVRL7_@E*=j)%8VZAwZk z7#r2)ugXGoN+qy9af&(fOB$DHvANXl!%gNcQ;leFp0cyaEy;ynl{34ke78|~340&B zJ1I*Yp}DT^byl5K&Ztv{F;of9qj$9Hz3gS!KGH`{-Uy>G)RInnCEHRJDp?qSG+qV( zd8vhW)%GTp8({^gLk6y|#f(w72s*B+uxa&#H#LJs41;9;xh5v%-lzH%P(58zY}m0T zEH%g4XuKWG3=uYfCZB8Z5z6q_6as7|cYlv`p6Vk{FV{z&4(cOM2lSDrBl^hGC-jkD zgmk`68+qE&Mqa*G8+qE+Mhs>$o}N6#?TPeeQo1azA)+~*SZVWNnI`8nmUJT-94(#%8sS4T=}@1d(hW6 zVKAnLk=kX;H?@&lH>L8#pp{!0MaGoO9QdVG)lKwvF{Pk2vKnWZ;a=|vqG`%}61%5@ zsw*?RiUXLqyhTEciM6+?okQ~At~)wFXq zKB&@hnp`AffIL~DYc1&Z&1ZL1>>s)y*LPnH6GFv7jIE>=AC z!eAn8AxsP$P$P^$3VBe)L3)^)@&-8_3y+Ie!88!@-fHV+1M}nx-|z`o-yE%n34=nu zmHo!6oMfTlG2*Yf`Zp&i^kpc?2>3Lu2$Jr#<(ulrj8tSzsocOH4K-d+=$N{gE>&)% z%375*;S3mY37c8lID#VJ)%opx-i&(AwuYi7xc&KW`{=KKBg|PhjcRsIeO+yEZ4RE7 z>xd_^Iuk)DC?+$f-=?RWT-&Yw8YRrFa?9UrkZsk#sB61dPgPUYg}ECoxh*h0{L-qw zf{S5N$PH;P#EF8q6{?>!9*a^FK_cuv7|fwYsMlVmx}9A%3d<9P3`W?OS~Zc@RUr#| zjn&86;c24-G1Xd|#YXLp13pqm&cS@pQQ8800<2D39IOh{aIS?1Z59JTZLbs3%01l$ z_E=Om(YljUiAy~Lz%K{esy^CHb`j$O+@3Y`WWsv}Pa)RCtn>d4dIP)GhVr1N$9$kUcS^76g<$kVnyGWIF@ zY-}NN5d=ZlT`&T^{a&`bQFh6)66uS<+7YUd!BF(LXj>+uf|nKDn@Dx4JB9;NaCB0? zD-{8$50-b&>B~Y7i##{}GN&iN2Pwgy(+bqK0A5RVhH`4By_E=?`pAs$UB!i0HJ$eA zA?GQBhORX?Ct;j4tcopTtka9tmT9LdBe+z0w?5G{XE8~P>?EEbXlt&2Cu3c!@OR%mAMZIGR>)fGB*zC_YCL#~#TCH!8ljwv z*3~<~=0v9v)NrrW)eFOc!CALtqcX#)USei)ge5qSwF6Iz3shPrJ68xYwa(x#FiT%= z9bHkuh*a~z{t1QW%)DEzTwfH_;mxT(G!t^kF z(7IIds+>G!?kr9bpcogv$w09DfZL(EZ}o&BRdofXIYO#)JxPvEz1L)uswTX^&`@Ab z5dbCgEJrrJDd&_3fR*mGHA;Bk6G-Q&KJxT(edOt&KJs)xA9*^Wk34;$KJxIVIOD}Q zXG`CfhGXsgfv#FuPD>O@kPLTIEoJo6);HJ}EF^9vBD4WZgX*A22#B zFbJ-D-8jiW9&xD8XALO+9lA6|>Rgk`6_`SxURnxy4Y0wb1_e_Bgk|y=4sZwqbT$zy zpgyPopM{mt)Hw~tNRRT* zw>1V%gf`#`Aoja7o37GFxT?GCrhSp~%P2MBNf-%Lr=|8@rpA)&6{Q zsQr~^Pz7~r!>_dx;p$SQKD}LM=WJ}_oJMJ~2p?#fxfTARl;Txk0stFgGsj%~{C~u% z*IKAat3q2V@tr37p*BUPge(@Jo!UrqAfBKk|2jpOc7vfd4uEx1@OBfS##13+mQzkK z+>FM(ew%V|;57^t_u7JmyGG^^vCo`pDA}edOsA`p7TAIbWxYJZ~u@ zFW;+-JZ~!_yWNohXjGq6>xzn7ZQqD=VZCp)`N)lolC)YSLy_ZP=Gv5llI7(5iGtII zrJPqzSjT5#jS0E#Wq1-i5wXs-q2WI;TG1=SJ1EraOed3NF#frfJsTNL-SaiG%9N==KgKnv z$2dT8Jy1^f!JVHc{ZLIoKLtPtxRYJVW(71DGplIIeu0KH3cS1y-{*} z&F2ss)aqHjDODi(wHlxCq8OIh($$sg{|Kun0>dvNVFG*ZMaii%iC) zCfg@Nu#5=mvaJa7n6^tTb%L6RFEUkdLBL`_B1M#v<^cVj)FB}NAcQAD;~VNFgd#XHEq zMBk$+!*&(>GztYYs=z#{MDeQFHW`GS6$taDGBV~DbM0Q_t58?Y@NUYSo@H#og7o{~ zy;3s-n>bch8Neo|v?S77K&fmJ%o=WFF6h&WG%Q+oNj1bGXW(q`{ zYH<)N*W{aH?Lko4d1tlM{E;$p^!Zdy78+AYHD|IyJp+KJT43ql<|Rd(Uev0#8oCqA z+-vI%npB9yROXOwRtZ_k8I@K(EA^a%>#j8cgl7r)0NIy%(?$y`ZH|1?;R&=g?AEy^ z`>ycv$2fcf=R8$Lo?otvJRej>o)0J^&qtJz=T9gjzXa!eoi6gcp^My|zE>A{-quB4 z)m7ArSY<;D%FeJ^BhZPlfjN+uOGXLLte%UU@reNtU&KaCwJ>G_QdaqWe0U>2$=3Io z0?t!qwkwkazu7tSGIboa%(L5`M@*OZVCl zcSR66?Q*C&VaBp|aL!;1?XM^);*_RZY0eE&)z7}0gmaQ>7D@+K;_9z%Fh14#!X^6D zTO2rP6F>p8nzK$7#iTm`*A3zZN3%P|-LtWca}r!JF%&!js@bSrZDV*9CV;KWL(c+# z;2)*|Ae#n5l5I-fGh{hHb*iDcit1(Pf$lk~gyuTc@C;7%snaT_YEis6)D(^?*kcRK zqM;`RU3aCA!BK2IKz2fsOO4gAMX~)J=RDO#o?otuJRj6Wo)73E&qs8T=f9zg{Ck}9 z9A~^3=WM7Vcc<@FMV_}+kqIEK(t1;+>T~ittxyD(Isf9# zl#N+bvWF2$s{CBG6ay2#bCK1B|By|-%SX5_D1E!U5kBQ!rXmObsRE%9dtnojcNcH5 zx4&oJR7ECuyvr=Za$wwyIzWLJRVKYxM8Uu&Cjrh;wa+Sshd!+IdELt_$AhZs0)L#d z!^z?>yQ*GIhZ2VRT(gdA;Qu+NlZ*(a7_-mkQ;qm6=LP0Dxsqq76+j?AJUE4&^YOml zN~p6HhRNBt!p5o8J-s=Q2Ui0^ZfmZh|AgCNw#S;Q^zM_HJk@t753%;;RU9L8a#7tc zu98GYRF=T-P0a&*ShO4=Hh3!Kulat?J{NzLK6mn{>?44No;GNAeA|6HXX9BNa!UXE zdQ}#GFH91{!P0UwKPZSS64@@L*iUL9Yo(eKz6HE-u5EQwlHP~L16Wz2IY118d#yoX zbEO=L|Ff-_q^6bvR|DW$Wa%P4r;`bbAUS`P-Vcj!dN4wtz&TG{7IBF_g^k>>-d z$nz0Z1Tv% z1&-XyA=%d{Y!T$0;((ZQ12G_^F<$S278U?DC3G zao9wq5Yx~#mSsGvq&R6XtYlL*F}9Ml7BGT$R^pDoUIk5fPDYa!uas;kotWg-Q14d+*PKNf;s%13dkb6z?cy#(77|$)3VFX)`Su9ltU)EngIeEpcSYi zqT{>~a|;CR>n-*k={bKSikwuF2F|KNsk~cia6wya?_OykHgozirRKn|h`Ksu-eSCZ zP0ziCY!Cwre&n^oLb7c!uS4CJDY=RlPnQElMUYL3WLQjRX?V;6c{%g8t#=HYKGzn@ zStS_v?o&YLsVMUNa#7^@peXWuKoogCB8oi!4N>Gj0y%V@xXV!Q zGC!(j-qXo=YhWqF9q#J%K68JsPd8&y#zg!b}KB$R2AJ9aek7y##e?t@b zkATkCNg~f1lE~fZdnJ+Q4(YCe#n;$d8po}V*0ghx-Xj{#~*1>d_+Bm6A*Kpi~Oha43tgu-C zPf~o!raRX)b7pW;%d0UNu7>)+DNWv8IrUW$MJuJJS>68g7WVu-(0M9}JilBLc|ItK zJRgumo{vZ(&woP_`Hz6k*J&cp8=A=7>3cPi=WR{oQ9UoKYDCkjDN@?qAUW?y<#w3b zNkE6crg=eSek2)gN^j-dN7a7xVi{8A2M3`Vf>wYdVIDw=X!}~`KD!=kqm=zw{PbOM zIc|&)ZV;Ol`FB16!2Nu$oR_#aX5G|82B4*j_fmE?y~1lfD`9BP9D*k&qVH?0fvBVS zb4DkXN6Y~Usix*2O|$1(4T}mTGhT$Ass}nNU%<$Qf9T8RCb)zpgHPjMB_`nkR!NZD zWcR&Rl7M;eX%C1EK)&prk9R-^|B^FPTkRC(Ixfm%^aAdH67~+t{?9QwPc@O}mun)=2Q`uB1DeS55l!Uz6Pn1cNnL%NDDu1^irk&PR}^{P7DbLy z0|pUBNlJPKKV*dsny zrC^S&T+8B3N=v0ZODQ%ui$#?oY3e?geM?g8Qct^x{epRkRDb(s&32jcZBb;BII0`! zlnlz5g6A4j?tPOZ%`ssFmssjs+0gWYbY&$2ZvjC3Rq$w5`m9xLR62BTWq(fsKq;La z%l<|pTVX5DKur$-lMx5v-1SN3SXDT{RoJ#vim^r&DF1NgJLltlb2+IirT8MV&3Ld* z)KQ!>w6C=zT7eSwPGp0{ru1Izs*z>IGGjofoHqcl5T6=Z2wh>3h(NM2O|2|;9MC@? zOhFFoF7gCzJty~?wa4+-X}G`FeVN-7uRk&^J7;4X=s=W##Tcf$GS&=AiVa0u0f|y( z)z(5{nbFZkUq&M`nG9bNQd+d+CI=yVrYCCZrl!v|Sm~!&Yv`l7!BS{zb9E0O@@7(r zNd_6mFj&AE(5s5%qVE2nHs4~tyJ)&$3w!<^=sXogo?kACJRcNAo)3s3&qqX&=f5F} z{9pg|2SDfRRFRhrRpjpUy{gE|wkk5N2M15EfzeF)=~@OZCyI;8#@S)?!~KkPwN~aY z-5fXr*8wQL485ARA5f^onDoj`dz!{*eD{F~W$(f;o zR$)4(x(>|K@X#dLW6GCJRpg6CGt#DlpR@Y>b1H@)XZp%j^|Gq^auHaGYSN`f;iAUa zD7+9*;_fO0oQpX@aYX=KRv$Ha>2d=qU2E-(>ayfJ zq%JQz`L*RERb(7|YPmu4KR*fXBRwQqDMxFlAeSqo1BsU`RpjLps>rVaI$tM?ylluKcc<@_MP5FTMOJexiG{Er zMA7WizN`nXDly_%e}xssh%ZV(;B>GUXQhD>r(z|V+P_JFz$w5-oXP?i#1K}Ul?Vu# zud>~%?v>-o^^O?mFeakz(^RZlK%hm+MR5;6J*o`bx3}13$~R?^dnEuSS?5$_;M!Gg z9mzV1SMN0<;Y%31uAY_T2Uaq0Qe_7OeAr5S$z7?mLGFDKA7h!qq;r(^8w7OjsuPO5 z3gI%rw}5aeN&s6wNB<<3i|b}4I#p{%i|yh6cFxE9_HyxAIdY3T5E%3|1JT-L>{)yI zYp-!l7qj>>Jo2DiM5mONe;fHfr4|8%nMr;NlwWF$qde2q{$h{759Z)7?hacA^tDX@ zvgrSYlx{`3YYpa{sr7A6cFx8J$3L(nfDxw}0tl;AR>B8+ z+6r^}1 zf)_bCn`;W3Ik}L|7p3PSW-5L+XKbrn6s8B>C_qq2p*UhC>-U}?xoqkp-vtqf?gI~P zE5)~);b=9E)c5eLS3#mkx8lHY#d3Ps>sh>3Ck_ej zi@ww>!pMwHl7))#S9P;w6jbC(>H<*Gs8T0K(L3NH9@prcRLy}WAP7$DM_b>dH`Sd# z7I|bfkex>#FVNW#Mur-Q ze~~X^-Qx8|(E&b8g#5#-+97;X>R)-rd+ol|)?DlVIaGJ89Ta69f6~>jsAG#io%H1A znvGWVtkIET7r;;s_4%qQv|h!|{5D+XP~*TS5la+}a(yJ4ch1HKKxeHfPQSyw7Ks-> z;DBg>1wT6B1wDDIjTXeJL|Cf(0T7RL&)chFI7U@{k1|PDC7T-2tF!XRmv_^dO(%7Y zv?yxprG#p(JBIpJp%!sxx~tTybrqWKK9{ItZv!sY@Aqg7(KS#UCfbiBn{b4+?8?aOd_OWE-}30|tJ^%o5uf!{%)HV&B; z%=LeS={x7+gVa@cm#*#!I6TQ)MI4d)U+VMlK!6_L9FVN76_~bt7_Mu*4IVrq0D=yw zs8d?JaPfjk2d8i>ssW0ET)iOJ20W%HJ&)^CSnaio}wFsdhUD%t}bk*f#fMhI^ z?K{^tgqWm~CJ+ir5=>9b*VN*hMd-yO-StLeErmq}F0Ft(|GgF*2C?}Zqw`c5d3m`q z@^Vlac{!kryc|(RUjBwM^8fdL+dn`$Unh;cY)KaJB3X@K3F_-O6(-eLH`z_8L1CjCs`OD~(VMNyQ38UgR%v?^l#)J0t zDDXqPbGh_Wr zo&@(r%$t(1TfGs_nFc1&E6^?{5&A(%%kKGjhjcP3LRz5{841ud>*rdlDCd3SY%aA* zK?FuR!R)wRMxxhx25a1E4UbB)q?k#VBE2>s3-$$w#u-D(+*n6#?Sj0WYB+L&ElyOb z5>X#kO-blq#VFDC#m%p8Z?|(cwvkTMd9>9NUJ1yDgKq256MR950NB|A1bR#)zzp-p z(gj1Ym6%8j7NihnMRkJ&U(hlv1%d`9AXUn1O;4wiqA-IHN>cIy0ksm?VUZJFjDp-z zB!p*&^Hk;7Nx{ec(NF&gr1Ml7d3m`s@^Vlbc{w1Byd056UOpj>{M%~eKSMfSr;WU9 zX(Kn^tBt&DYa>_u`;h-6|K8R1rhF6(lB4hLW%)21Dbl^w2990FS`(y9wVCmeQQjTu z`WFRFknYh1!vw6gbZQNIgY9?p7l^ix2C?m@LAp z!CynYKb|of&iHPj&2TX?y0{&XT~5FRKMPSeD#J*CN(KN#!?=sXix>*4XK#7?OIH(-9{n)KLXX68;!;%J!gBKviSX3-y z^&71!DobfH;BBtqivlDs!zNcXH*jdY>6W`-z$#1Y>Ok~?O6I4j#t~=+>2SNyF5o>|d|# zozrHzGDDFp2Z?~ZprZM$>MK(?C_kOT4`p)T3gTr|e3KH6p{|+JFbT@;Ws=foOP-zJ z3lxU&A|oLDb>3U1vnh^zQKl(sc(6H=nW6RcCPs=7m+_iq0zqyRIr6L)DPB|_l42S$ zK^J9BW)&#$FY^@fC4PIZE92!GF%}Wq#^j4pAmRrboRlSH1>BSw0;7dr(Yv^NCFeCf zifeYx#|NiCkoQUWe5<$2TJ36<7>R`Z=Xx^&e?GYixu;uS)h0fV9`~8E!x=@|=2TMC z>bGEuhb00b zWNrQGDheF47-cY!6oDZ|M~Lh!czjn+>{Y-u+Da^xxt6I<1e_mX(JW8 zL2=~efH?AUL>zhfggEkxvR7ZHj=XHCBRAixj=XHEBVSd8M+BSg&Gy3=-fDwU%a#r+ zmO9r{>?e00;tm!)_Pm8Ni^rzGVrN}!WRoUpC6&)8@`P?(p5(NR;D^lBOqj9 z@8o9izhKdKLGo4amF}gzC9oUn$e@E?KDos7hRczHsRWPunj1x#9 z1>>ri13~5}QB_c-$%yy^Y=tXjeTr#KQxE7?>lsu63S-qIcYLm~43>qXfi7UJi7?4= z6?2WlsQrF@#6~-3V;kw@;D&206?fU^920nuwHDq*ff&YxNn&xv|5HJup@$^93Vhy$ zaRyPA7)rJh(?ekz>Ae&^a<8?fA!Tvbnv67hGJJq!0IkSSlD`QIhgxJjLo50Tf{Krtni=bmr*mX7k(v(k# zxBK~j{BiKkT-*MlV5(6)N)Df%%2yEOhChNIxaha!uvB@Jc2dyE-l%m`9yv`bcsJFy z%;K@aX)$Vz=7Z-0bE;J<=2p}?l}LEBRam2wAB=q3O;>1YRv3i{`-)MD%HpKYHCwAV zBb*X6`&qs<&9kSvK73G`n3M~HS%l%5ge4-qwikJB$RqOViG~IIVBbhN-*w}2<{N4)zl0mRnpe(%cyhxYwZYj7S7(SS{JD?5QR`T#7L*J zUVZ<0{!?8)$IyXsxf%|b`E(5NP?Oj>8y}qP$rfd~O4R12tsB)VSPYenH41RjO~`^g z*P!PdIRYpJT$qFCd*ADG!l;~Vf7aB_^_;C5GIHz+!$dHFVPzRHJ@>j}PW&W9SZmqk z7#LOVP>8UoOg{p!mZth)&2)DyL3%dxnGdp>)pRfj2Pj<*{{MNevo?o_#QRtDj| zujcZ{glwI7g)f`Se7cwHsw&iE2p9`Bbll|%@K&G# z{Zk+yVmzIAnw5wdE;UkTg{(O#Ta`rQ%eXu9u_^!#dOFn{&&qC+i3?6V@1Bo$NM|tf zNErn0bgFU9@u^Bj1Ydxcak}C}a#n%RcV__wRb}O`U=R=uStPy#yQF;@)(Hp9I&W%j zli9k3ICa(%9#K?i(-H5iUbOEl8*0=HLXpcZY$C}%Pa zYx+@juYPMk()q>A z?nF8=3Hy=GzgO^ABAqW2NM24`0?Ey{3MBvYOxqR7*RqQcoT&z$%I*>q5=yX*bGCpI z*wnD3a+Qq)ny`QE%ech)vR#P@Z)No-)iPwGf?wYGkeljj(u3}5+iMw=D89iE$%J7v zVLYN3h_xnITkB2nRQMbRZgm#GE?d4SkW2LWEP%D3=tZiZB!r8h z1u5{&M%7cJ!ouV-#mS{_M^S!chIE}A2F2aiGOMgDvMG#gWQ;NGQyKnnB&${izk(4F z9!}nhMiM?Dad4^?fQS7ti#zAz9nx9V-xuai`K+8!Z3YwEHr0DygneAM63$f4X%Mp$ znLD^CSJr?g=322ZY_5??*CcNET)$$SlZWChM)gw7Li%S#5?tY|WC$$hRnC~M#%R5$ zV+-f~q|xX3Yasd4ZFH>r(hySug*2ZDYfGI;(*BU#H_zb1S2KmYk3|NB4w`%g4=zDy-~Ic=#V zH{Ys~{LeFOXRxrwLv78}=gJtQJ5|*au6t>v3len@`63?>7=H_*Q0=J?0bSJ_&35NW zAY&8ov}KKhozAu0>Cg$CtD4Q6c;&_iMYotPz8RA_mko~>0RO=I!y|x;Kok3FLw-!i zmZpx(Y_c_YP1PY$dy$M3jFx67rH%xMKmWan*J>4XS{!yzSwi}gr!vUVT2a(*NyC$P znnAr%(QUiyntlD7cHnE>cTy#mTT0poGw{ZBM01G{`Cjuu_Aci>?yD02xk3Joc37E> za&S1Sa8k@ZA-Y)1QLZd!cB!5xGjOi&gVjgvK_8iVRo=IAwhY#UHx~DkF04ykKe`G$ zKMwp{>xH$=>S)yRlg1@w#b%+V^!=S{MI?(Xnc|e&-rwG6=WKkSsRK+@u^>dI1-|$W zk9blccS`KpN-!L3C6#-fRC@yjmnvor4KED6+ADLGW876#c9F^O(ST`dWcsx=0I4j9 zMpZ@z)@&%klhNtqzBUwwA_v1M6`j-~&-NMdz#qQt8QOWZO7gFM>oaKQ^D4^X$@|fpytvFotRV*OMo0EwXaGf}=jMBND zC-$moyVt{>zogpGwwUYmNrtM=s&t-Q( z9IdJxv34$(qh12PlKv_T2mV-n(2J@*FcYgHeDYU~I+>^p3GXfg6ouk*JzF&6+PXX3 zN3RT9BG+@>>!SJ)5Cav?__0W95M065_hk@M7{D`t4e{$uedmWK*=5T&wURNz7}tx& z7t=V36z^2k4Wc37!yNVxqWV!G;&Op=nblboIQKn^O^Kd8bw3(4AI!=3!CxSw)Xv`P znST*2QK%Z-Usb^pfTlv*iUoLiy!KFcfdk|JxWUl&`{&~w(m5-Sii62XaBZ#3MoEa9 z`jB`7&_qsy5-Ss2g9}twRyzOqgm+S@Y%50_Wk#ZnwdR(2JE>-lb+l@)fpMc40IF6_ zbQEO(&L+DF6v&BJD)P;Bx>_BHHlQuWx1F_fHnx!t!A?ZYsZ)UkS!*M#%GiX4y3}$_ zVN_QG*NezyKq0B16~P*qo>5^PA>N{d9fKHwu(7T`wg3L@MLDsgDM3|C0C-JB=RVFe zRnSWRUPW0`Y=A)|SX*W00J=2QZi>7A9_c*OO8)1sFGo7Zw32@@v%8Vb0j=bJui&pl zI$x%hyqvbQlG|_9O8)1WHj&O*nf@sA!Okcz5DiwgE>S49{O7hDRQE_VNO%C{KGI(z zR*2tnO|HiFj`lyc6aPnK%QLXaskvF?8SZ6+uM!$<6-M!PIdF);kh}0C4=t9r=e#P< z0;;%)Il=(($?)jZ*=5T&wUVQfJe6s@s@isxR7fi>#!O8Vc9(kFRXt_l&*YtFRfvo# z2uN+zT5r3miyEpO1RLaXDkF*u;tFBHFx7Z`+|gK9NTsnVS<=UMuldUf1ej`&nr18K zmw>}zjxM|B;~mnORRf&-Zdd;Bo; zMmkrKjA`}LgF+bFpyc54bG`Oe)U1JgFXZA7AtH^pTGCNZWesq0(0_i-{O8)1s zFGo7Zw32@@v%8Vb0j=bJui&plI$x%hyqvbQlG|_9O8)1WHj&P(>WoGCeKt=tZ>8Rs zV?f8+oLF3}bs8tz+Wgd(;uqn7vW-DNec4wK1U?uWNfi*~c(LDN@-a{0eaL3u4MYaR zZ=4ioPU^6Qm&m&>WyK>f4>N#|$M9hwrg}C^54oduZ?!I#-W%vnJ7_JF34`Lz(khAMye7d(!cFxB;q{G_Fc@%4{&q-O-t2*nMrJGU{ z7ww&#&8YgByYiE%_`25aOM{L0J$NG4bEhm{%2Gh_!tW$TawybVqnKjbTg{0NB*h&r z$}BVLXI0QyvFC1ehOyoyZQUTaEw}o7Ha^hRVFE--`uO+gBlA~)BAgDBG1qISjEQB8 zc~Y>GV{afRRhHL_2Ah-xg9bY*4WIK?8TuhvTb)o*3m)*Stj8#Naqt;$uB}WU#6A3 zoVK)*+i%rM{^yytPx{2x;sr@FtAaS$87Zhnl%35pl%at`af9bChb_y)RhekyP;{x6x9#%z0qpqacwL-96 z-A-G+sg)chIH$VW>>6SM<{2ceeR?z7$m(Ep*V<*H&?L3_ z5DTs^BU7BS=|DhmYn@hs>Z{V!BuFu-aT`RI`Y`Y-%pN;#FQ@a7Rx&sRvz1fSr`nv0 zS{?=g;fSm=opZh9pq7dVA-1(;a-^4xV}gKtZ4H2~TkRv6$s*TM2sPf-q|V}TNP-fY zL|O_eajbVt!CkL73?tDIARe!JHvkj^u$ZFnNv zMm!F`B2>X!6Sab6TGeYt!;WXbK#XN6K_55uvW8>7l=;B8q;pIaCyl&vr&^O=v`WVE z3>Wp5fZFJ#Ig81#ZfGS_nUv!iRTu#_pH()&YGDPY+WuZ^Bl$N*`dXvQTP8KJ)|jQE z`&#$9s4{4hds{?YB&fgFF33sftev)YV$L}uO5jOU>7CQq`TSB>pzMPP2F`5}cNdu% zo~Nn*LrPq?ib9^x#x~MPxAs(zG72?hu!KI64%ACVt54K2g;Ez~g$5IBEVH%-D5t0k zNm(R5=TNYPmm1Kh53(JG8scaHF<81zBpg{54j_2DzNX=qWHeBAsEx2{v-8Ypt-O8; z={(a){^zeRM>@x}l7BI?yOGWTt>k~N;IHI#zDz55Ic;erx8JIj{LeFOXRoku!WU;n zbk^Cx9w(balz1zXaaMsJp_a@4TjeOgDXFGuYI|EiJ-y_LpTQvM#lc$3*XD$-zTPE% zhHL_X7{=>V&vsHpPbA@GwptYy!e=EM<7qE-m)nDH*=5T&wUTe{^C2v}mQPt#@yfWQ z4_|dUWC1S<`A+h2yyqZfJLvl-HRlfM>~6&5P0EYl1egg2jX75WbR&a}lgX)Jtc+W& zJZ2Fi9d$ruQ*NpZiJsB9=78DF$rq2#pPlpZp3?y%oNE-}N>W9%mh-p?P1{*AdvGzN zK60K2?30{jqYNHnxrpP+N$6lMa#H3WK`vySl!=b|wD?Eo$nN@=odq(2{mWtCVntzm z*cXh$O*_Tsn6q}0sCh7oJ7;4X>99z$_~AGp9N8M03?Ie^u*?A{GAO(%K^AxinwcSH zVdsDi%vM`dGO6&5<+>=aa^?#PGKU6YYWtdu$UK5gFqB*kI1TK))F*jgwYg>*0O2xf z30FmgpKbU)m%VzXmHf|NUygK+X(j(+W_Kf<16s-dUcq09biPh2x!KZ6ZogM6x!KlA zjxya`TNKs?4|jL2itT+aUjlEyW*)S)R%N^Bhr&Sk+)4a#GGeFNH=A0?)~th| z?t~KYq3M$X`}O5zW>@8iGYeBAhGC@F%=Tz*bu8FCpVk#%ZYv!VG0}dMN zIysjdWJJ~swm|hhlu@+GQZZYgaq5iYveffKVj|U3Q;kfwQ^lp(&`MrZ6COqjvX=hz0~Y=V)k+}8;sw%);26zIw*&? zv3XnJ(fPx+qyEdbXIZ(x?mK#;f+R96J%C*;?CwHtz@<_i-CHaq}zd-;x%}< zXd)AsuzmDzpy^l-dRIshI5*TJg}Z5LdeT#_tx6JcQ7IQeMx(GJz!elT)+bRMl&Q*s zSJ0E=XMvF-^L{BUR~b9d_o6~PNXljleEt^cG*7jXo0n@PHwU$nn*&a`RK~gpP<0`oj2u)qlzolrnHYGV{k@88 zX6q9EYQRLoi;UN~-Xc{P zxB9RX&Q)A{q zgIWR6gg%ukU=~?1IUh}RMug41+y$;F)w`hUri}Oc4nvVINxlqM;P0^7SPkSdRV~); zMLHW=$%9yo;JKz&LZ=)M`vsI1?oUB|I@Lhg$`y z`z4H@vV3Pz1f%NG!Mn6NH_A!gz1FMezZ14*wSsg>8G(S;tyIbL+4vxP z)z#4FyeU$KO+Ap02FsD^JUUatUm+0LP>`OY6sd?|P}p3JDsDy*l&fSeV*Y^VEP}Bn zGRM|ZrnS~oG1*LNqgtCB+^S?G0bR~aUuttP#22NudEY_b=~Yz8zs;xA1DmH>$<52P zlAD8C$;|<+4Q%ytu0h*aji^si|wO$pMf;HI2khsA+ZJ8AUH#{8SSfW{S0fcXab@2b^GGRRP zT~sc?7ynP^3nqqI4CNs3wNbnmfem_ymKsmEH)`F~NoLgWTtvpJ_y7!iD#zC{Zy*=2 zgM0i5De;vjabU^5^yLtex+mgaYV3l86bhypx35u4cK3Qn}T;=OhwxhfU388eaO{^YISpfC!j}oE5Jwyt~Rft_u9aFskdGusVol zfRfS`aIP_H<$x2s_w|4Nnm+Qro`HRuYI_yvUNlav$PgU)S=IKGx!k2?6m3A>0z1GR zRe+NGs(2-k4tw?og4;P8A7rnF+H%|=d<`$pkjc0J+n_{mqRIy4xgazz0)zn6QIu8A z4adYNvCAja-4Hr8O4_CkX{=7>&m^9h~g7a^Um(@1W%G?KgT)kto( zHIlE2{ZGmPEvjy0V-T%lILLM-39XJFHXfUt?M-StbT1pv(I7E9NJ{wPCT;;LIu)~+ zGxbh7TW<(nGGje1~a z(c{rf?DhUlJ$LduqsG_OH1I4cNr)cJT#h0qHpzX7vIJRuuAe4m)-O6!AYOE#$H-R841-Gg$)Dg ztIRcwiTm)SmDEd%FP-IMt@Bl^;>`%?Qg56{f-5t_g!aT1IM=au8Tnk2HaAJrO{z$W zY64s>7?igFQm|7LyPVZq-wB0J;;pV*MIp~;Yv zSjL#PwAGz7Kut{*L(K9+E`X5msze}@%}~zL(8*yUEPibw>TymgiR_gYbwx7fHR2Ew zZDNwrdO6jkCh^a`*h;SPIlo>16G-Q&Mso9VjpXK_MsjmNBe^-Ek=%TnM)Fgn@nWR2 zrIFlyuSRmSt&z-@jyX`M5*>W-0@wk1SP@;XZ9J-SCm9d%19$+gnPd3wWth&QT`^eE zq9fqq?)UmUzLw9qV_ODp@%DaHY`l3^3=JXAED4Jk4ww__5#Ss!c5VGXnYgarrFqmW z?6T#X8p&j5Qvbrp;;l4B#Qhls<+)b*F9N(o)i4t>(&=;K>8Z{FU*KoCeplun9}0^Q zDOS)B_z3^5l7W2FH5;Hd=6sed#r)U}ezQfMuu; zy4JnI)q;S%- zPX?tG3CgZwGZvwM1Tg@0+=c72Tp>~=M-?5MweGUY7|jCvIqym>c_c>z z~UUapbc9Mni|4rnAd zM>LX~Z_`MAiZot~bhb2-yYJOVZnia&p-W-i)1Q1U`$(4qCrg6T2}zqV9v}o#2dh( zh@a{uvcbI)ZxfpB&6aFxBsanr5Z(BH&_vF3T*{EUY6df(zBmjdCK-eVR+4YZNg#cV zVT+d9 z2M>LZQh z$XNmH*pSy+mM8s{#h=52AsN|LZ7r41w@`%Fw+DSAaVHUPEZwsjN?~N~%9Iggu}}k& zm%1-0My8qP;kPOJ5}BRCI><^E1fiB7bT1;@xw(_mld4@Jg&B&P>Di*$evfpXY9u!= z*GO&-Y9u!YG?JSm8p+My&`AF8KfpO(r;yxiDI|B_tB~AmD{%8NFuszq*!aa}2t6Pc+-naWe7 zjF0@23KNrU!GrMEON~a(SLn*-$2&+5?#G+%vgDfz$)nyGzZGvT^m5X3U?ekh>S0a+ zgLs`$`N_L*9#_N6#=Lj+Zzq1wQ9q^?f8S~K5G=A*C|$s?=fn*u`4aLnD~p2Hlk!Dm z3nPEV+G^|FVNrr1uJzlnc6%AN4Ta=EUOu8KbGe<9)(6$JJ+v% zJliL5&Qpct=H&{>%|V6a=72(Sb3`Gz`5Ow!e}Z$qP9M41(ns#TS0B0gKp**57Lss* z*d08BElu_YCIDg-KMV#CBSaSAEVU3U=PykNi>^shn~)3sUOB6aewAheapahpXs3~Y zUh4Z;V>)K=sQBL0QgBWDGrmUE64bg_#w%x8;v-~YQy&86*_$cZ)JJaBryV^MGC7!5 zM(tYTp4zCfj9VBqRTxEaQ4Ej8WaE{Yd*PW$(ju&qXtmG>hr$1OcPex>Ff$@{d*giepZ3Y7y8emK~jv$2hH;BW>7OJs*A(dR*P%r6hb zmd0S=_rW=AX_9v=)Tx$qQne}{Poo@DeyS@FGDS>*g-s~M#-Tb|LrI_&IZuKyrTAmE zZuLzvW0=cGDln;RALY~11j&T4bO=581Y_!U)cdD!&QpEl=H>dx%|U(S=72tOb3`Ax z`5XGke}Z$qP93?~Qb+E-R~@<8R!43{)1HN4((y6MFx+bck=ej_oLxae5F;51yi-mw zQXNT@dQ_4(iJ;9Xl4DtE{2sL(n4Dgfn(-#!D-p@*0_)1oyEEP=CK2HVYl%U@XyK>s zijF�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 tqI6!G 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 IWbC%9ZRnqa9(3~nz0$_36auXW| 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%0D4LXD8vK2|8C}}k)1$I`vn7*gEejddZS%yW` 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

    iWrm#HkZuc$1w2UM1h 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

    LH2Vl=@*(*$eXwW(#X`-x-nU_1(a} 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%0AXe_Ov# z)|Qy^RNqCp$yo#;Gl5BursJt*l)vS#@CFFLEdDwPo?7wJghq+Wh0STIRQ)v!d9F

    QnR%lH<2FLO1@aeGeT zVYsW9G`w6fY1mCMY50y}((oq~lm7h+X!3_omr;FxPMkjYo%bRXcN zlKMoi?~SP<-K9bg&?CLA7_3YERl<>*b$`fyZ|Eh#VdpYym1^QGq?=b2J&W?7cnkdR ztk!(+ES*QN52uaO4&2wfsVz~|cN5p071qzuoJ0EQ1Ua0Rz$qS(!z`n`kNX zjpurcqh^}umOV%m4oF3}7yqiOU68%ARSI)|H9lZ{NhLs(ceUIhvKh2W>fG=PtwJQq z7Gk)KO6NFeCrK@4gAq-tklKallgj!QMXOh70p|`^6_Vv<8j{tgT4vJhDI>sFP|Mut z+9fSUB&?d6^e7bLo(^@C;-(*;Lesl?NyE$al7`*%l7{c-B@KTd6?pP92@;7UjE$Ae*wj;T(xC=NcP-3xP%i6yzq_1_5BO zDZ<3SJ!-!<^pbL2B_>x@Vkf!#7_?|uQB^kAEVeH5#FM#{QN4<}r}ifoYeD--`6z)0 zp3xo3Bf8;*Vx&~UCdrOXAkBASRxJz*4(MO?2dgMX0#A5V*q zw`IETuf{!vhu+20YaN79IZj9sH*Ot73o!M;%X2O2RgMP4!ci&iTx&blH_nP9IUppl zNtdw9EPs;iO57wdV5b=eq^S``r{Yx8&0$ZIm~yl^K6nh!KW2C5TB_^KEq($`@9HHD zFV{;NcGF85zN42kJfWBL5;Xl8y`*7FFKO6MFKO7;OZsQf&i#39{6Fz?dNelO&`Sb! z4vOdTSa9yiR%0ro9SAQ9o30AjC_Wv_*i!x(BqN>&L7OtCxw9R7Qgn!skLM#Q@hI{2 z=m;w7-Kr)GuMBK^Zf}K)Cn#IuP{vv!od3q1WrXT4g&6?s#In)Se z%6*6=BUL&4)v>0gQ7R$D1Vc?hE?UB&Tx+rhkugjS#afLft5s2%6Ca5VVQ%MIT3n}# ztBP=8z<8cR8Q54G5vR-o&2jh6wH^66Nh2vY2#`G5T9VJv^sZjg@N&JRVK=>`;X8Us z!xMT*FG16v(MuY(^pb}C^pb{cy`+Bz9Qv>E^IWDpoYE}qL2 zlS745^vAd`3$TCm1kpp%RxOvnAu3j%S(VJBy5Y` z6Zm(n&tIjYG2Fy<-a{ism61!aBiDDnJ@e6f-iMF$l87Klf>8cViFgPbrr=uBN09-s z8r8p$04xlD1!Cpj5D{CY%74O>b{!+uIh!?scq37#mCPj#@PkI%tgWXTjUrA-Z27kh8fGIFA1w3LN~A512) zExUWw6Nq2JMZO(HqK_yV5{Z!7kt1)T&{X-7 zYNP|_Sl^ybD8+)|kO^j#iB9k7v7YaS5t4UQEj4Ne33q)g!ya8MDGsjk82EgviY-QR ze0()NsO+8UD*=4m4NwypPZuU&zSL%8n@vgxL$T!Unzl9`FLP1)I+rd$qpO%M_nop8 zj`jRVM6R`jQP2ft)eaoN=wmG;jpih))78o{k2UpVNiRB*xfp{aOJ7?gdD*eXu-s^q zC(!h+Qqu5prKDjurKI6IN=d_?P)hm=n*NMN(y*nGH0-C5G~CljN*4kLmBs*NI?0AX z6X8}vZRM^Q{Ttq`ljFQ93&(+s+zj#D`hLvbYl6~Ui2VjnaIP^f2U%ha2L?sjJozqF z3#Z{7p7HH_(+;oi1vjGibSR^Sxg6BS=WDR8;wyjQ?nCx_LnF!Etwf@{0jrU2CN)Gv z(SE8~#L&U<5;Ny+Q&ro-yB>r_;fk5RbItleW;yrRTxyQ-!CDE;#@kuT6i0Cv!%L+X zz$A^VWO>QO5@8=|ZKFHMX8;%WCI+9;Qg+JjXy51X!PWSH=^g4TaiJozyw;Y35xppQ zx3pCwewE`8y(GIKDw00i!9CZv6CJXdKtZjFz z!o7)!vNc&AG0f4afSMpBz@cN=aIZ--T%JPHyBbNu%QcdQ-87Ph?`R|qe?lYaD`@&N z>PX|3I?}M8I?}kUj+EP7aCQ0jwd^+sFIu%!l|bnn3rnKki@71TI+pcKeF)C4qS8hM zharMopm8h{6BT_%%#`2ueHK-BS@DU;(!Uz7ZfDz*ww##)i<352a9UUh)^5tyTJhx<2-4{ z-6GltSK|XT<@MUy-XXH*T8tDE6Ncj~fSmw4ktk@SLb;=g>C!DqQQO-Tk0u#dDkYFd z9nwWb@+qTZ;c+5GBMfe4Q$)+L0?Qi}g|9l8iD;WTfP9`Kc9wI=rkPz`jFb9QP49SD z9cg^II?}kCI@0(Zb)@l6s3Uy^O@BrgY24C98ursg8n<n#8egu9 zH14L0G=4`HX?#K#=~FcQf_lS;i1uPM-BLsv_ESU}w-u41#7p_ROXrp8{O^9#KhbYG zZYUxp8#>hY4+?A&QLE;Nu|$e>Dbt+`PP%_IytyTf{37oMA`WF9sX4;m$n5~k@mMPW z;{YP^zv*d$mC!!IoI-+TRTT&&x|MKVFcq!=2xCtHNh*ECusgTT%BLb}ODf?0YTQ#9 zJSyc8HkFM;pL~Hl$m>sd6~6$9Brl2uqsQM-W6qJG0t$duB2r~FUpDbN-r|&>QF?xK+I?K92h#lj=SkP9hFW^ zN;T)Y11R!yO&>2Gv1n-Sb4_&Udr?Pc9o`W4EZ()YH;b2BSIGo39&k~~_T2l%!YgHy zD>1wzeH{c`GoHze;e}9#wce_HpFq>QT1ex|wUEZ$w2;Q{Xd#VHXd!)?H~k8l{)`sV zxTS?O?x%$`ZfhYO)MozA{PUlo2j;aMGUJ98QY)4^l|FaP9;^u)Khi=<$IIJ5aYg`hO5p6R>>Z) z!uV8OJ^vsdf|?_Wbx0i^Z)G$OuEqy>Q_zUo9~M9qPMU|*;uF0+Z8_r0DB2ITQDJc> z70I8)%I0p-u3oQGg@9oqR^Ag_Qn5%D-(CT%q_A zR9Bs9Ja_{!2s*;hT2YMJBHuqp)4N(o#@)1##_wn$jekN5=__dZGg?UFmKM^u zpBB=%t%XF4@ZTLWKi?rUZfGHm%A2N!h!PMyglmoQs5gk8!${Yfu(!ngbzyL z5iD8g2CzV2?x@Cnd@U-N$aIqUJE|IJQn-?8DFEnN|I3ULP!Zz-O!0!+T0L^ZQI>Gs z8(!8>J1%$poZsi?!PWR6HpSg!pl>g12@F!fxk66_Jrm6qB4Fp>aEOjBmlOGZ5mG`9 zq@)1Omdqu8MU)Ai@iZJ?rgf?f1h0K?P@#R`b<8E3=<9D=>#wWCpUXeHb5Yb+YrdwJ_<9=F5J&==Z+4H@F3sj1}OaW|Rz zV{QHrCv1BrS3GTs3`CCS(mn|EYaIs;2nUBOY}_tA2a*9ab=z_j8F2u4^45}kj;43D zkj9s5A&t9fA&uYBLK>gYLV5|B{)`sVxTS?O?x%$`ZfhZNsLrbE0q0sBdsx3jr7G~F zMkP^_w8^n*NupfJTIVW9Fi$0s7?Cv0VF*+=1Unf#zLu?}Py#f_UDcS6v5q%U-c^KE zcdNgB??joEnZz70p4^m90!eHs{zS@8h>0)n=IkN+y`hB^gGN-m)O&O)4GDLE8JCZN zKf@b@1-;gKM)eniKi1rXl(4>wxP#7S5aUUZ1E7or1gYYZ7vyAOZgW$m7wfRNkOf=^ zO)buBAupgsi{P=2oa3dRwel2VmbU;#Gu5kOLnw_-VuC(t~Gt>!-13+u7jy(H5W7W#FQ*#u9;O0 z)U3LvPQ*<3=ea%~Jz>Tpk&f$gOz&MSr19liNaJo=NaJ_3kj5vpkUqcV^b2VEGg?UF zmKM^upBB=%t%Zcu#BvWRBaH0?=ai2mik(%qM`}}b5k>y8d}Ip$HaY^&~zg! zrc6yVYffrxt+|Q!0=_ER#$1E_{G8<(LqOS{plL42?%hT&G$G6lC#EHCcr7NBt)4+KTNWhtbt0`*<*!+_en$Ak8tZFV_+P~~iGJ;u|OwVs{9m1mIr?xE~) zDtxfnr^19*wA)#K)hL1sO$XXs9<$%mhgwLOwZvQEn0wWM^&-_Mf59MwJ*_IJQZd9& zDv2mTl_!JY1)=e*l2#MzpByKqUO!oL_*=XSn1b-tB z6v$N}qK!&}BrOg~I}@s>73r!&L3*XvUx|@U(=O!0R8JuMkKh*nd#)w1Xe18K>bxu) z;_ZD&@{hNQt;f-Hx~qjWy<7`v+D!{-`i>UT^n@1DOJdWX(L$QGw2;RAw2-E4EhOTL z>y3(eKe`vuR&ZxHp}5bOjDuvdQ}j63!H%>y2Ofr25pAbhr!b|s{FE@@XzTZ9rEM@1 zt8V!U+lW2JCs=Bnu(gXc4x*+c=8;dfG8vKTJ{C$qTVaf-Og$-6H*GZle6k>ayF+F! zQw9Y{-Zl*j>O7%c9^419EDV>@PUeF*X4b)1o+;A`MzZFi+rHKlROZRhpV7tQGdzKy2nu$s&mSMmn@%5UA)V?4&cak& zNwznUUuf~MwnQtU90X-iC%K6{fqUY?lsRFe`Shrn5#rnqj=&K1h06i$hfNu)%i zLgqRY9E4fvbV7S_mN>60CxpN((uIf?cLrx_7II&dSUHL);!tE%8V?TCRm4xO`om*T z$=NR|{|Pj`tA#YZTnlO1O$%xIjuz7Ngcj0EV$+||LYlU;kjDMAkfv=dBrH%b`xKFv zQyqg`N;SM&sdpzjRt>9(T?Db(LI6@YxUR$w2T6O!FiD2=s5q-t9*?XVM>K71hqB@c z8qS3S_yMGmI+a|e>gHI#KeA|{}X+sN%_h!y~i|4F5 z=-fL-d`6%`{46639;ayLQ06WfYWxt4EuM@DT*8`?bH!*&9f{8n(&VP@bNwC`<79t~ zH6OJvKtuv9k&DbRra1kwsznMRI@C%gx6s#U!y8jP`(VG)^pO@)?kS@Rmkk5Hwl&>s zWAG;0Nnp~b4W^f8%HqKBN^KoO_+Bu~Ph%>1y<~7Nbu>W4WKUUs31_g?TlKDh#BoD7 zl0>v@FP_k7Y;2Be9lC?Et;E)msvP$28+~7_)4NS=>QWGuZogjKVcGa#?3P(9zB;`$GAjckH~ANzr|QYN%m0hh`Svm zZtD4)&FP;k$TriPG#oJ{XrbDitN2XbBdqDEW;ZI3(0=^v>J3H-xu>s~i1Y2=5RgG% zf(?xA+gv8=$=CpeuFNd3GArw8ZH!R?RZyH=0LBA1ml_Gs(5T)k8c$u#2~af}IQW+F z;nmni(-fw`c7iBu7`q8LGEHr1FF>3i0`{)9Vn`0D4l(p-CR{bSDzYNOiu1R~C1v_X zmD;5=j|p;>&{|{WEqYZLrA}CGB};x#qzm)R*f?~lVOH^59O!EuljmxBr@LB6)62Dx zrrorVrtfGWO@BfQ=?iH3A)>t)O}Dg=rv0>#rfn^xXz5xg- zhTY8-Q5;che^JfsJE%&B;)opPwrumDhQDyU*k+#D zmD#$eUWrfulN9B3jb~B+3?+`lra`brGj$tUNQv<95HRC1p1B35tMxgn90UyGEl<*< zvJ~Ax+(GJz@OB8LWWXb{%KSC8hK+)#)HM(FWDD@YZX8url!~OL)-&2x$NEh#r6gF1 z2>7TBwo#=O>JY24zr#)b_QBQIM$=v;&g3|Ir85#uLWTGB_0aLYDla{$ID*g{7fl@4 z%+$zrB6bAJAx=m=gzv=##068DW{}G}YDrRdaH@$Oi{-eW!9gg>0K?P>E&8T({5Tw(|5Fxraz&D^c6Jy87-t~OABe*PYY?< z)vg0g~1 zQ<3uN%M1}OVx)4^n|GV~9tvEPyTdWRh&N0;ZB5^*&Bnwtc9LUvP%7IJi3pX+eJokCD>7>{ylnCNW&QymR* zr8K|!{!u%-Bp5hu>7zZ?n?m^zah_F;%pq-r&5gF{NsR#WR+--CXnI!*X?nR9(zKfv z()1lIr0Gv+A^rOoE;#)V(q0UwTVhDlequ<|wir^cASCT01fEnSj&=T0fI{uTvFyR1 z>cB+>wGjhQa24e=AdA1k#sIK=eKL0|1I{992W5&N5dm{3T_7W}xhkVcM*=C(v(CLd z|BHg36is1=+8Q&^M(En8;CQ%|<~(G;H^h*LJg|CcOgb05bc%8s1E#3yS-c-}#wz6+ znyD=QB+@p@0IVTI0<%R`r#cizk;0Qw&L<^!*+Geiq;dx#8$BI4Jp|P0#Z=iE1x~rD zO_TsaG<`=5Y5EglNMC}}pHV}aw$zZO{nU`AZ8fBm zGI0MLo&IQax}}CR*UY6020N~*RUDecv8ux*JBdw971mld8s0p!Lb$Y+9rRV#QBoo= zd8qm5qz}<50qEvL9Gyv_4NqVn@mHe?X-NI?R}qIbI5Q8#y(-SZ9SAAOnkY_ARqy%X z)wp-VX(R74Wpl)t02dRDKL9)uNdmS?+2f-{-~_tQa-%<~%6H z5g3H(pX(>Z59C1E1gp|75cp|QBY(=9k}X~8h()_Xq(~&r*7{z2vlP=EYc|#``u%e_ zy{m>ay<81x+D#2<`i>gX^n@DH=h}i_5EuLq(q0UwTXIO#esW0Dwj2@^-hW4@J4B}& za!Bc7=<988U&8jOd^i32%Aobi$K|S20tX;e@h#y=dNfp;ds3y#Am_ufy17h!D*K++ zRaLfzk|lq~I2oJb-a)gNMqluWWW7p}Bj=>Dtl^AH>sT7ci)4n@xc|RO}!Y? z5igH8@ch2??~n!D0hoCu{K~c_B3jA#jQF0^U*VJDqcz$JWBq1UF_Cq!exqAietLWH zLjX7Y#I?3g#?#fLcPbBNfus6(tS4X!A|uQg*q|)Gy)3HWZZ{P?0jGE6kfxW*Ax*o< zAx+X+J%rd0P)@68MZN0UXr$&8f<@Qk+^Qc&|zj#a0o`V1ZNt$`e*~bz(Cp z#)#suBC7P3D&0iY(zzN+LkeMgr~?wYYNj6V5&#s_oy(F`Ba5e$8)qoPJJx|Z zDR&Bl&ME~=v++`6h%&v1ht$y?YpEa`u1Zhm*6*gq!%_v7SuhdHVbbT?@Eoz+3@3jK zwL?6mtNi5%c6aZG<#9Nj@9H7VFV{nwchf_fzoUmVKcR>8xq`#L|J(odZ~yTXO#K;E zqv;$Tzc4xQ7;k4-uYo65nM-!0brQMXl&a2e%;SJ~84S@9&qIFLh` z7&t)i6`Oih)hFR_(ur#s5uTRIHM+9dX<5KpH)U?3;p8xLs!xJTJdMDN5I*;&;B^xO zw)IBIs6Cjnn>SREFjJ6>z1VXMRPK(&yC8O9Ecg(;=j*7+o=G156h8R3MP zm}LS$P+Vd9Aa4i1>#RB@;RnZ& z`Q@re^KPn0^LJE{<|kB79Baz`RA~fQ%%q1G!@ORDT<7TFU;`G91LO(U_YGC2}(uan@Qk`>6aG)|A{KwH}NO zmWo&gq{=nTBz>sxYb{c)6lUAw1c^HbHEEd2 z=4Y{SE3dT$<9s!>Eg17f$0Y4hxIA->>iArodRH51ez`W%yqh-C{2gti`3Y^L7sjbS zqmVRjDI`t%DJ0F?3Q4PYH#lC>Qqg(?KS;)bm$JvXu=sBzRqkDD%F^>KqvFL*nhv>$ znPPlVNmnH*owu=?ESw|eAVT0$-H9HA2r>Q_bC!4%ws|a*x2PZ^87-cG3lG&sW@##8 z*FPGkZYU&y)VTY^ny{TIaJ`fPPYqL7W{|iR#A4QC`Y_srI>h;7&2f|lRZ@~(;kLdv zN!qp6JU8(*wf>-Z8ZcCc7LBF8Mv^iZ<{NySYhNrXcS)Tof9uZ>4#5CR!J|<|bJKv| zUyTnGl15GUNyh<#XQ|g9I!r@%qrnNQK&gcJV@*xmLH_qrKcnD>i$O51{5VqyX16M~ ziy{%u?ovl@)?$#tO?DgP1LKYK;5z7w3pUmmpo?g{~Hle4(8hv)~8ab^Ie6c z`Q-{p^KJ@B^LG@I=0Bp4^kq!_8J(ngODAdGPbX>K)=7d>ZR`}Ub(jZPQ&)$kIlO;A zD(}?@2Nm|5giNzgFp4@&9boV*1`CpnI2hA|%MW@fmxwDJMgLPBV9HaXL)g?e;-0Un zZcV|BL}*gzBMTjYaMhgfjp3HtGKJ%#8N3ahB;0-CJnBjo#eC3pqcW7yr6PLAM5~C? zH@C$jBAmc$8f(P{H5!JV1X*38rGh0mi`+7Lsy&iU5Ii(>Td-DySh=cANf*RoS+oQL%z>7 z^pHA`CCbR=a(9-nt%X0RJ}^a4Vq6C~N^D?|GJRA`W8@YVocpqOPcpnOPaUU zl2Ulj*5^o!Wz}-ew4%~nQl*0pI(8C?iQW=6o}WY(94!z46VvNRpUQl+D)@JCE&qmI z3sXs)1s)T@VJw<5B8)J7G57>?jW!)7s+dfygj3IRjx|~gB1nw)kSnZ)2d(&qT2kn} zV;RHTghNdg2r3heDIUZZFqh$tLB77;21JaqXSPzN!`L84 z@oGR~aQa-UH;IOfBrM|>aR{u0uO8}MV(PE8M*>**RIL0-GxjK^ex#NJQbL&|QOt(a zlr5q|f~;%3ybFaV74C&A7D)XTeHRBa7IpF06n z1H~r~w`!>eS7RGfnXH2%NF1MZ`ruaf^};7*TRW9jH@DKMoA4$tL#)XHn}BKRWzI_N zkGFL3dntZMe9-z-<4K7hqh0FYfQxLhNKzhaOM{DpN+Ku$XFT=;NQmUZdqv@F%ClnD z=61NAz|^~%N%PA!ljhwtljiSeCe43BGwDCSAoB1bq`eqUw=|RH{WO#2ZOtUprco9< z)~U_4Un+mOh>Az{ftR;HDFYh1EGL#TKc8r7QtYiooXB-G|z9&Wwar$Bl3=28Eb5@G>?`iZD=Nudjq(LQS#o(X|Yy- z=TT`-ct29eVF<^XOImYSVb(T@O=bI-Ct{RE^1#XS;j*mtn-I7-SY3@dz06}h4Hqra z9a^iDiD?($pg?)UdEy{|Qjim*)sKqg(g(}Vn%~#w!PWSH_8kjYq6EUrC?Ak&Efw?R z2D+vOM6{neYjp-i*+~6UlhU@iY=)WwbK!t$R|ki%7w`D2x_p)aZv<}*kA)CB30rx) zQG$fUfPlsboa@k~hVWb)CE6cQSuFdrV+C{K(9-eGpixh(iW#W`m=I*alONl5ahtgYah-IQxl)N#eGjH;7)17cl8=0T~gGMM|T zu??rB4$h(ta#0*FOuX9GR>xqNAEs0T=`d^@u*UPne$C@&{rc6CR zH`LUSAQ+VH2k@il%QMgQ7JN%62aevgCOx{rq9u}&U$q?>RbSu2c*v!)nSO27C*bt1 zX43p}&7^rZ&7}D|no08$nn_>DqJ9piKcks6Z)qmY`)MZ4+nPx(2uh6uB&sq-nCM*m zEHjJYjq&GX6P209WaxSZu5?`qR;S_`r29O^uE#1&e!j|K{pSzL32 zD@M39)n`&ey3{(ek3u8kqVZRcQtuyWCK)ivU59q*>xHi-U8kC2esX+xnP5FbCu*H) zo8|UcQ9lX0r}{l9TX=S|56~zn8Ujv_HQl+LR&;KdeGZ@qTVl@K81?r1_|dNKTWdQe z0vCZ5Wn<}sq!RE}a{L6G-qlQ+U#^)n@1~hFe@8QEenKN}3 z+OkCH0#b(aq_KCpe&kY&$A{8#8mc@aF1`7;#IUQjQMBUv@m^rV6DvZ{;D@X=HGq5;<6I+$ z<&R{yJmubUCzsm%vr5G&b{OQD<}yL33;qqf<1by_7yfZLUG8coEiczhT6WV+TE3&1 zwEPLpr2q53+b`hh&*&vBTY5?JetJpEwq8;s);LgI9gU0XRY*0a^^M=V=zlG%N4_R0 zJ$&$?3<9Mbe52)E^IcMS&rMu?9o}BnHt9oZX*l2*0c;O_iE02(z(!*< z+CmG0M65a35XAviA(4}MRNGxA=|?R1fLHGjS@Jz59MWmATE67>LcO1zW~ zqqf!%t~njHLg!R~xr$g^ec~l$1X%xrLd?{DHT5(iH#cDd1w=KS>YT5lLZBxi4b8t< zv8I56)tes-PnVDMk`{5Y@E^GX_gWh=1#v@dT^GTDO1}DmP%_uf&b3rm;Wf|q)wkB( z@8tlWgtG^^HR()k>)T1-@*Jkm&JYewuVe;)6#?I4{e)EtD~%I=OL)A8-8i>wFBa^) z<#2wEr+4*|mY3@#ExYL@E#J{gTAt8LdJ&%fj8@XJrIj@ArCi0((XVc8K6k0^t;8@S+e~F_oS!C)$DmV3< zR&3cS?kZdwjNP%Ue4Kf5eO+1kN#8OkL6t1B2+ZZd?CG+hl@y(G@IoxWUVIkni6wI?@^^e>5Dm+IVYG%E%jP|n;M+1=7Y$0RVJ0ZDTo&GxTzUBt0N}& zjR6IOZtO2sudm(VGy~)=D+B$U(p9DH2#gZNA0A$fZ9Glp4>o(MZ9~>Dk{V3tP*bod zj0YtLsp?*o3dR*2Q~~%~AC0Qhc*$N>w7trzJJoy5YF38WNkbV(t(v;D5qEV2LJeut zP(Gbx^;ipr!wD9r;}p|zsBu!79?|?Qhx2nhy{nb9yj&}3*-a~H`Hoi7@+Y*CzJ{ki zqm#63=_Jkj=_D=NI!Q+zTWW5|5#jW5C{nE_elT4U*Fu@7&SCFv-3qskj7uG7-0xA5 zAoj6SY3_PEfbVQ`suN{!u-e$rB++p4c?;qt;ViCrRQdWE;Z+tqqUP6nQw&1x>LB}s ziw;xSmTB!C#nTO)B=9cRI?Lr}b{7$8Csj|uc2gXi8$i}F{H^M^tQIkSbwVV97Qg%6*{rFnG>k_z7}s1&2_kK*(dPy zu1?bOa-F1QH=U&AJ32|rpU_GAQtRo@NF*&=5=qN`5=qOpL{ccVV;OCHRRXx^o#Dgc zS;JS!$d5{*`3ADc_o%rv9cZ!*P_1xj$x{(f%DSwgIRivz=q zp9P_-;*YDsJs{?w^k39w;NhBjLax@@$_{<9Ab(4r^2TF5JH@nz`sQ2!)0Xw5FoxhV z1u&h)C`ZRPb6-?clcosOFy)#r2!g5XHRH+dP`Ey+ZjIH0T!61^;yIpqRuGiS>y zcNYa6M8Qe1!G4mEB96r^5UZQoBVs&gI>oDl);4a?xqjcPs%cgxIxfhm?BgUSEH+x& zM$AoICBB_eO|`1g$0y_&YYa!}6h`gwSYsp7K4|3~G>xjC{WXRMSL1`?Ui_A(UJsPd zg-9yA;$#}n9ogy|>ws;SIxYJ>;T_PuDG zh>OXG1(uTp!dE%hXpdS9Jh~`3Fb`uLv|bXS@X^E8l6(%Qch!-Wm#ZT!yQw2B-%&?e zo=``64V?arFw(LmjI``0jI?YEBe}Sf(?5t)ibStCtCI*=7$F>7M-0R<2PIOIR}x`I zJ%gL#QxL-`RGCwxgmId&F>=IlngbsOqoGbSwr~|W2xU2G3_16TOX;?Wm=hz!vbObm z;<>=`qvfO%pzlxng*_?vaqvOK84R# zt&khxSxGA?BT*$z1P??PCrPT+OLlH5R5+T{g@aV7)j?xUk&=FMd^CCbkucI(0dX#2 zk?2S2uJ}qw-D^z~c@6v`w&hXY8Pf-O5KbJzY5p9QJ^)kVQqZ|&^e0)2I6v6r7Ku)7T%tgI@q^= zU(DSd-%asNLXIFrb*I2kubg0RnR_%_w;_y_I|q0h=J;46&8>L6H$e>%z4F9q+ExBI zlH}B29cm^5(L-5YqEKkw#FMwG<##@hv7ME5j@HCf<6Kp!ih}?kH>zMtO`C{ioTuQ{ zp)7TaxQRdRPqK0 z|8|W*TT>jl4N=FuYN~(*^=S}gdDsN{t6ts@ddszLIPOHDYgv?oN@j2_s_5z=1HK`Q z6n&hbEMO#xB}8>Lp~~Bqx~gm_cg)W3oAb8h zIvNlOKzhU-DGToFu(UdKn1We8)#BwJYD>+k3*)^u#Wg;M)4Re*%gcq4mfeJrmhT87 zEl&s|eHxv92~K}T7-`uOMq2h0Mq0Lok>Uzd2|+Z|)Y*#B1MZGx7(>IVCnf#)V_66? zV*CU=0WON_bB!`k+?PE#i&!LPUPZS?-se(Jj&2Qwh{V`1auA>}W;gKYm9XjuSH zj2{a@7$90WdJgBZf384&^tQHTLl|k*Oy}z9w~+#9yf<+sZ<9PRu8*QMtbd%3YuV*g zzo;Sw#?E&Mj0&l+v#C^pw_D1l6XW9m9YqvJuaNbJJs|%LegLpQI<_7R7;1&tBl$hw zwbXO4(tI%r2E{d5SEDZa#8XpKFP4AC;CkF5_ zt|DdPwT-pq8s$9CVyGkBs09F~MrT!~nuuuR6V2lDK*kcF0kf*VmSTX zPW~jE${;)rr~kNre=s`z5nZJDu%(N%?52zK*LXJJG}R2pvJkm6@leJp-HKz`gHVc? zU(6borYS2DHVIQtH7XEyD#IIfLcuRa6&NSEL_~E`k_SWTYgLZ24H(;)Un)e2;jk+d zG`8>O`|#T}DY?e^Z62bE2pMkiHEbu07CF0Hi<*|?e zU{^;VrPxgIS})IpM#!?QW$RUe#nM8Zq!GHQ=L3D@JS`}eHe90OLybR5-Pign;PIr= zD5wR%e-c3gbh9B&>b*)wjMkr+eul$sjxfr+-2h=}U0> zBeF>IVM`Wi*-aMdukqX|MZyGKRn`N{#%Tt2upG877+clIbK0oDNQDG^)KSJ6Bmefl zsR6#$lXL4a>=2IoTI0DYd)Vlt9_5td)<W_2ugKVDIp~i|VFvP+0jCfPn{Z|HiH9g%)YaBv`w- zHEdzNpW4aYGDy0<)> z&*Ai*EYe^9`*JwlOBP86;Tbr6LKf*YWbcotBF%>_RitG%RiwYhvk9jdaHvt-VxokI zxTx|L`tKkooAlA3vXN--0cF6^P}brsLwa$}ZqZ5AnZ|e?CC?T)?Q5OaMF!TjxI~p# zCxx&mSVv{?a%C$|IMwf?1jpoUtPWQ&#RJIbo!eB?e(zI~{5pm&&T=Rv&_ z0AQ~~Ac(?vU{Y5l7H}L`Rpc5#i&gO|?|#`z)ZJf=56E8f6kQD{a+TV6;j%9^S&3cy z+OD~Lkm!*GTkBFm2D%ci>^0TK`L@YHdvZmud1|I zG|&|b0?q_2zZ`*w4ETmB5-b`Jky21d+P>BS=b#tB0zs?lQj&q@lTF#sNeR43J;J%> z>+LfU_0x<3jKt}Y1acD*m|~H5Rh1`@$WGBS zb+hCu+nTt83g+=cICRhk?h+%f3pw%I%IbMFNV_%RiyT?n<~;@ za@23MYcq-ZWW_eUD4GKD-+DG<$jZMm}Tb zTqS;m3Jr3-oTLdO0ClYi4O!aN6tJ8T78GfMAIeKIaf1j6{J~x%Q6~Vz6TIs9K-1vQ z0MsX?)GyN5k6t5-s-mliWicB-ajTI~;oR4foNwOi6L5M@73r`4eL0-&rHUkj@C=+j zp^EexIQ<8Jjx&izH!20q-Pv zm4gW6^hZK3%En-stelNKm~|ps<=S#7r`kG*FcT`wW#lO~YLq@o#Dk>)NRzZDggTeEUf9TW}1f#_=YM{uZ*bO1wfKKw67CL7x1NKv{h|&G?suMV0kHP$SnGX z&J?0{@3!xj#FA=_{x1JSYZGb*gx0KO2rQ4M}YaM zzNM3!Fy5S=2UlYoPE(+xmtl&@N&rf^Nr{AVTbubLdUjGGIFV{!TRlS4Dp87uz_Q_i zk`TYv<``8tkYesbjcruxOlomeRCH2SB_PS>xM;&c{6Ze-$V7BPm3jP|r3GNGioNj( zH-)M`htqqiNPqqB%i(k{RU{dNXW;Y+RisbJ-Y>!FkEkNehYeMv_OP2O(qH4*CVMe= z233HRlf=oJ%al=^a#n!}=M{#EpJzpGY0wbA1Q3u-%Q+kC`Pcw@z{yOe3xOmRaT`e| zH^RxKj#xexjYGQ69easVInmj>;m9ANwsTP|IojX z=wn&!I08%U1#-FR{%6gJgk_yC;!qE2qXL<5aau*lx!LwnviBoZq{Ms5G2&ySQVq}m z(AZQbEuL}#yhgMs=X#}RZQx@N>t1VV0XK+;)ZFsSr55Qd5X)ACdKH^{@od7Wdo^)_lR>)_q(owrGz;ej2VE{NbRlMKl94<~ zX(#cX3Q5xMc&Tqs%II3BlUOA6sn{Wk8_ARo_3y~x6HgMgU<2kFRT^$CW%e=ep;;lB zr+N?+ zZ7tH_xl*Kisz`tR@5|wIFI6NNglFLN300)mM5jNZiZmZKRFT@lZmLLsjc5D*aH0p% zwz$8YN`j6$(}P3|E^<9js-cY>y3QZxiAW^^4#ZESm2iK71D$mukF#P$+;rlPR06m4 zGcx&OSp|NBi%hXhDw9QVrqKtB2;>4ZSf;fs4K)_IFQ+T(NWJlcB7<)W@{e#DYMeP> zUgxrvMD&oZfhm=Et;%*r9s@{}q+q0H8MWSTR#i#rb+Lfgdd{RyeJp;cX$fFZ8xzS& za=&xo#8IIcffze$(KB&+8Wk!vs?nb1kfl89P&*}}Mf~lfG7cZ9A|)myB831LYFgP; zvj~@yVzwL*JRkAh5jRjZS?(7&*J9_gUp&OFUNycJuiDiVr&CQmpQAQsWVG=sc`|+? zku9DQ&vz9d*^RcQmDXN1|4B!QRRbrl^U5ahyD4O|P>)7Yw(qkEylS)AG60p9ED&pOTLW4K=bbMxCp zhPtbDPG=z|lrWvQR1RPirw{J(Gc@Q>|C>@B0%t~|WP0`*xx%T;a;|X|Tbv7aAvV}? zWBqs2H2rCB`$Kht-;zu&5TFOR)7m? zpGuuJcSVt!my04byNMz--w{P>o)ATP37Y8ZQi%w55o?`G#fd>x0pW-y>a&u?%XNy-mVF&jtS|UC>KnnFM4T#T zOx&#UB@A5X(zmfirbhLrMAGE;7DcGN;_}==bAF$zhwS%;CK9s(Mn+rsQsxe(4g*V& zkkX;G<^V&DcfoH=*N;l6VI)&df6VJOJ83crHyMX;i?WV zj*m;TBj-f&n~?la$1oHG4vut5az(l5X561#-X@tZHpi?wE*#l7J8K=rR+F3BGxDcH zy%Bi4%2{LCB5uXD=<73QRkfuQYm2=398K?PA~i49L~3@^L~6dHiPSuyiS!aQ{TWH5 zWBpKYM_6~rRyH|PUu|^f_-=Y=ouf_)ggG>Z*8|Z=q3emFE=Ham9 zropbZ78^3@0GLvxuR+js8gYD}wv{N3dan54tIC0JaKb062Ml55Oqv>5mq~_&{NX>4FNX>T?k(xiDi1ZaS z{TV@|W=jyM*-sFu*%m~~6_{f84kD~pWja&EgQcWsLfNxigWT3(#wzCu+h98V`vpj3#Ie!UUnk zkn&g82dj{p4MC(-S4!6c6WyzSC|WoedD31AJS^|TI}M5pBa05Ep38*x!r)v^tD@VC z>R2mq67@JMKS~^#OJ%S1E|C&$>#wfLr^4t*>w!`pc8dBZTNM`L!{FVGVlf((1)m>O zdu%=uM9O`*aF~Z$lIT7&DJ%oHNQ9>ZN}@(31tM9Y$>OgVdMc9SSVbJNuZft1skDq8 zRXTiD;aSqr-n30^<|u$^5_2%;+9KT7grj^?;X*IRG%_n}0zSjy@qFCkrxYBTyMjo~ z%LS2|-2{=E?+79_e?k!H3uyWwqP-YRxAc&j{q&HUZ9Sya94Xo(z6hy>RRhVu8!Riw z51v-p%}#nnqbzY}Vrne}AX=H!M@ZasR2rreA|`rkMxit2i(<`fb~uL^rc>&t&)B(B0^H^M3(+NpJ&o}F%D5z z6PNpANHR0IkQE}wlcv`13Hjqh}7&S zh}3KgB1N^~P?igGk$a+{lvD*nmJ>TTNU5AS_b#=Q0tqYF<%rc0wdg<0x$!g&C75s+1Fcdc9yfJPybJ5hYRt6b0U+XP$#UJEDTb|XB3f|Ek&eeKSiWwTM>z^esJaxti)DgdE2s&x$#n!OX(DO zdrqVgIARcF%6vxr?o_|&+_)#I3nDBL%cVYlRE+7G-AJt~8jX25m(`AmometjZ$FLDbni5!)`|^L+)l zm!Y~@RE6%j7995v^1iDr65@c(KiBd^o=mkyIKa{86iTKlm%M0KOCG(Jp*BP=@)1uR z=dY>FnmZ6!s`34kPvGfYMWp8Cib&0Fib&0O6p@-I6p>yOpZ<&_QnMwA)a)mT)ND&4 z9aN7KEp(jQbJ<+-U@0}^FvFTGeOPLd ze?weEr}$jU6C!|Vf(X(UWuSv1UkLP7wN6ZWRIOCvunJXiH7^RzDNtZZ;Gao$;HEYz z16-xT4E`=cPu?0TX%?jpL6rNS4%)0NJf4H9e{s>D)4y--N+LBcmqcoIlSFF1BZ<`f z2}z`{;pxw4A~jo@NX>qlNX@n;Qm)aKx@zu_;Wv2y!p$hy4t31kjP4Xn^wRoz@=<(g zBtBKNk7;UUnqYSuAzC_g6kp}S4WgPs#*HX@s_|fdL6L~YDE~Jo3XWFXQsZ<%My`Nt z^b>;a@}LFZ&_r?uGd#ND_*QyUy-GhPGot+MP@kNYG~+i>xWJ=<-fQb^az705<|;#e zEyI6t$5K}&);J#GP&GrT@4D97j$)??{!*1pe0{2K#P|74;{$e~D}y~N=kPG!`;jIR z&H<%Q#9w3y`N~B_Z=n(tRD&$ZS}HPK<)B>T5F{DV)z-xw!7T)%Q$jG+c4eam6BqsO zPzwxMPXS+aH(7pR`dL{~jzIFEV~ymX(y%0Gj&5r*}1xnwM)L zHM?mdHQ&)hYM#(UdJ*6IGpb1KmMT)SpDI$jt%`J3VPC3XXC3)-+3t`+5JwV0!Hh)W z6>Hd*g{2P0Iz~w+9qXBV7f()vc&tP1ZdRTgt^BT@nQz4IgQ3KpFp{cl?Su!6Ig-Gw zj2np6l^w^_fXk`50SWLf+V{^tV!_)DRis>brOF>nAo1gHX2hq&mE=I7xrLIn>4Mt) zRrIi_Spscw+gNfjx}joJF7In3*!FRT`9?M^4y_U#tK!zAHYjd8)MEEa$G{a6w_Zh& zBo-z{h7G>yQ#_8R?Oj!*_T{Qb?QW__?RQj>+9y1j{P%zRAOH3rpI;&VF|NHB zQ@6B{n*Fqq+HGy5`1sI6;$%Zw$#5)gRXf(deP>LYD3jU4+<=H6AOAjM#3##S9Hf-%sPq2z$+5(0$0XY4w3k}D5=2fxXs3gX|2eZE@eKValDlx z`eZ@=R^!Xt6A`P9mgsSmPjZo$a#4M4qe`H&I!{|=Jri(|H6Gr_eiQD&!yzSyXMzFe zlfu-L>wx+|18f6(VW~0mWZv$gC>r*eorT$VFB9*Tn@nLL-v0KWc-4x-?7>t=J-!;- zn3`+Dg?yuk1pbZNmwY7r>_G>F$r|e5Om@-8K7vneO=U!%&NWR}HB3ck0o;OGPHK%Rk*;GCQUMHnOTxvRl<>H=9sG}a8beaN#$uLCH$lNFx7&MHwO6$Oueg()V^FB zsohN*sr`;NQu~B9(hD*5XB3j!Erq0JKZT@rTOkQMH>v!AV|JA1->Fv9T@M%Yc!#p$ zaj}V*I8>@X!dOghP?zKyMg-#(@ifNPlr@c>PhWPL3eQwUO=Squ5U2XpR?#-R^-&yl zDsVt8j0^t@8o;$;m|(bZ!*A6-4_WaIg(N}(5Oh#}moctlH>nRIIy{L3UPU7kfe$L^ zT;&x+{n0@P+&!ytt>@>)GL0(eey%VEAdN6}>Ba4~U*I&QGhSD|V2f>k*+s!Xm^f}1Eg z34II;TcLgb{S%maS0Sl=xk6IAn?h3i9fhR!PbegP9aDcsC#l`iNow}fNoqgPNm3e! z<6*7!+@!36KzLxRW;!m&cnY`Rb$wHluOZ7#o_q##(AVEWqXk=tM|dW&5>-Par$A6e zsJ$wSsI!W85Scms%;nQ^#VmRZTWh!sse4Oo77HK|!U-GBQhlf+=yWW1LtY#{hNToJj8E6Vx<8wT|8Xxqc3h+yz;C&KVo`Xa+ z4@!lsB74%!+SKOcGlS}R(n!oiAGH;Z^^${1!AJ@4%tVS5E#UI9b#Xu$5646WZ4e6w zkqoW!u*8>1z2gn6^+qgzS^(gvad25emC)sCgQt3D+PgYQ?aOtN+TC=L+VAKjwNL0I zy)aJw8MUN#OD(D0Pc5n4R!hR!N( z7M55OV*&3;B`%IX@gk9q${fSuf&-$+##e%z+2pg+KfRxpRS* z#)h8(36{IjFkxHe7oRN1-|Cb4n#I=DHe|GwgCxwz91|>EYF=U7&oY?yVNytgX9D}G z8X!K&JAsby<%Bn@2+ri46$c07nZH$|#YY-yea>QlVb%u)fx*|l-Xa{zrFP|2K3-%N z;68|(A771aOeI;~DTUE0yP4`Gexp{aLDjvGJsc=rb&-e#q&6Eh7Yf4PBAC+D}%FRlJ+SrHIq6VJ@|JdyC+rDu8>XsUdPW6xkLWC}L<;35Ozr%DUF)%N$nGANw14jKg6{cW9pV>QoEmKQoF601j}a6pJ?)`cqBG> zuEWovC4Rx;2G!;=99UCqbNIeNXu#*C;y^$Eo{cV+B>RV>jg7}P3*)i(qZ9_x^E#KQ zI*JD-?n~zg-%GT0dO!R(rNO2~oBM0v!=d21`rF}AEB>KoQp#Bf9SmTrWy7PQ29<(W<$w;~X55F_OU@^R?cz%13Zjz(&SdH$)EIlVh;ZLFgjd~)Y7%N5=mN%lHBxw5jOq$D=G89CcL`xSrxFlKl zqlv;|e9fk-*8w)L>&>$8R^vta#jqErWBXgG?oww(#l6*@$9jT?RupxJ_ z^S8HP;2{gXp_v5!gQRfQQ3) zXAJXNZ_n&5>Pi}vF|!yCsLzLE z)Q>ciAgdEAf>vygp(Y))#R-_@M)J3lC;=9X3C%4uxEdqMQL<+$*@xJQ`|UYi4T ztue5HI)**KD^0$rTI;N8Czj-}Ma6%Pr*}1z z+Lvo4wYzC1wcpW9YM;fJz%vkbrZ`fo;pO_sWHxb@Uj?Ni1`k|IRhSMLn1?3mk1_6(jDV>?>m+F-5Em zs~Y15ea8C|*D3pYRBhEDhLRByN%G10Q47AInUvdY$W`-g2N~44=KHLiC*12r(L5dj zz60DihzVLnfEABpsdw@XvCMADP*tZy3NUPcS5Uy%z-#D7ydgf%3LM1J&idP^Li5vl zQLHf0E*t

    apgB73-CuC6B&7nn(ReGl>^#)Sx`6eiuh!P=i-KbF888l8s83N0H?r zLzup$mi(lim{2-nElkqrB*aw;#%H45#KN3wqlP}1>oXD0Rvs7vDh+3R3;5pE*e4atU9nI7#k>TBlVpCJ`~e2cuI`L8Oeu$34beTEk#Fx9TEQJyt;Grb$7hb;JpW)f5x zMBqvNEeSjDYj^{qu%XNq-VJ^PYl0e7gnmfLk)&hRm3@xURSxnf^GP^D{TY!jb9QxE zD4zlA&o!4oO^{Jpg7oTiHPf@YnS#;eP$#X1I(gWk_&B*nZLRNpxF_`^%_OG&pv>Z^ zklV7FxH2GVBtyUvTrwO*oHq_pQ@;sCv(_e0(X*sYP72X+HRFC!7AM*wP8AL+=?uym zR3`4L>lqKRYQ#t75=A5GRL6>geAZ@SA&HUs%*7i2w`2PRp5E0=YG1CI)b6I4)P6@Z zseM8-=|y<@Gnz^5mS$4BpJr0Kt(io$kfw7mhy%p|l-ephUCf|s5}QlnA$Dg6(fg7 zK*V>dr={$qsW}LxN4(6a#1-cTHwz|-X^;L_?Y`A2{hHL;OXG?ob4YmlD+`ps+?&Qf?+a% z1<-%4eT3=+>raq0sfgxeA7H8dvZ$PuUBC(qx*X;FAf9#~X(k2TRJL~#g0R(bG7{t; zYf>Vx%*JE89&1{O`#``|#pt<$=UU5;laV4l5hkG?z$_^5V@(j01TN8Ux30By+>UZ+ zSX%HDtc>&}D9^GnLZV=mqa|&x1W?4EmAyS}5jdaXX?IsMse8F*Qn#CCQuiIrr0xmL zq!;B+e?~8<+tN#F_tQ)2w)K+WJh6j`aIn0%pg5Ks|4Z55+)I9}Ll^OEw@Rgz1xL%Lqh|ZY@&=BS``%1r<~M=Ayn6Octie)y0vB zJC;!b1ELMgX#01g`j7?R&`V0E(pYnk7ZbYiQYJi1Hpx1SCAsCbRs;IbQUNK1QDqkO z(T>P5kgN=0W4yp{G)wTg`c}X_mRdum_x&=_PgF(M#(7gkI9u@bqW2lDaLeq;@~8q;6X)DV>EllUQNJ zByqwo^&9F)z_RG^iR4K|ru5`UsZ6RnO1kGzc919%{PNXL=?~%aQ`zW{W2*1GsHPX& zOvs>TU6Q1MhkzGQx(Y*77`x#R@VH!co)f+CB?5|_!Q}ZfL(2ud^-_$ zSKEi)P;`53Jij+=Q z_T#t9L$Cone<-ubGZ{k(;oO3kYkgy6n1ETyw?}&SmdUxv{GRJAt_sHo@oI#{B$lx~ z82L06@tFt3?z#<`q~>o4!&IW!6}Z&@UX(?HUZ;e|Qp9N=IhL)&whjW)UIYQK2{|6t z@?0weut&K6S|iMuakH3F2nEp=)X+fvIt5B;668gK??dgTTmv-JYNvw*GF!R5RqyhP zi+pf3K4?E}YO*X6#Ly!mztjsaVh`{Eqln1jaRd%^5OTjD-a=oWXB)G%2tWbksC$ZX z?v=^MlMSid)>QgZ@I_gUXgMD1H?07f17(emSw1YOQO3L~GtL&dDCG+q-#kb6-jzw} zUM`c=?Ix4deMcs#dqO7ZHE{Yf3Q66TLQ=P%LQ=P_kQ5I_5_=~Iy4LfF_pk1WWmIGw6dtlG zQ+cixjx>SleV0eMf{zrEg6#6t8pUSNE)dMCw0H4&pkvaLsahpc2)WJ&LPS|urT`BL zpo^R$vNS8RL3OOx~o!|2$n-l zoiWFjxhhD10#5HLBy}%WNa}V|Nb0_$kktJNg`}^*>4%W^VmRFrN9y(yN9wl4ky56M z0mSuGgM^jNR++w5iLU6SNHh+|JBKLp0|k4a z;gfvkX@qG*Ap~i8i(y7^kawgIj9nn|IpPxi!>h3kr$EZA2(T3);%m@S75_FJzIZJi zN<@ZgQ|$yb(NbP&is{1&W!h^4i#p~vXBF#`3>}rZAZAX-*;-o{GJpvMggJ(}eL;sV zrN~629C=m3LtG~>&IX0RIMu(ew^F4i;PkFIQulIkq;5BHr0zT7NZk|SNS`K8zXYd0 zqm9&UX(M&}X(M&p+DNccqiSm6Qj-q4lrfyd>KG(bCkr8Xs#6O&coo@4Sx1cCsVqvO zlR1oo`2@yv!2V!KO?EqT|zKp~YjhXRF% zbEg~HNW2r4)M^pYGrrY4-J-I$PcF(*V+V6Xoo1bICU?IAM63@{C5becLT2<*)_hR$ z=&al`PhQ1K^r|yr#emj9g(k`HFgfI1kMO<*M`vMu8GPGw2!{fiu z*2uTR>c>1Qn#$!Yg0)_|HEH$-l{LDLw2`2?sp44_HHU;&lW$6+FNG|*)b>`Y_Unh4LRB^aPG&lIlpvw3?;xFj8|nF8nf@!7_F_EU(njj` z(?;sHwUN>-ie-e*TMBEUyKsERi(5u>s)GriL}dk?qhOY0#^AID)qE1qfS$Sg1gouV zSgbR}KZ--J#l4(!Vy)29@N-?+{ip;m9uh_T9&<#t@Lc~+lf6cs5MV507;Pt_-Q&9{ zd&q)sXd_{eNMKE>W*w9z4BLAn_yq0%jN!i0Q>= zVP54EMGr~d3Z=z%;EezrJglxh2`3n(NDxz@)j?qy9t{i%K*a9Lb)m}I&RdNc z_gCZYJ*aGQ7!c z8TSPWmT84`$0@}P#!bb!CHsphP!?rS5jBVXsN{UgAoz9_Ohn{LM=a_W&lMxx)kf-G zu8q{~rj68nM;oboLL2Etc=|KiNZpn;Qn#NrQn#&*1ZK4=gr{I4Ssh}MOJNO1xK)`# z7~{DPRLb+mI{2jRh#!cfK)T$VN^}ISUCYX!Jajl|a`6B#zQpyMG6zM+kjI2$Aa7cfzZ;~G~}LKfZ-8`bstVy&S)-unz_g1gOzV{<-BquggOT=qjYU43+V35VP!sQApLDEUJ zK@bOEEAb$kz*jSMD(Pb@(q6<;!Tl!4KWR(%HRjMYieVc$rEDM<1~a*^*&!zIC0Kq6 z1aa?JlBT}BQ+Z#cw{E862|T^4jnutd8>!n(8>#z_Hd6Pa+DQFZFzvN?+HYwib^B=} z_1oG=$$lQ|a4ll};QL@uugW%pEIEdl8rWB?YG0NVRLvbVb6M4sv}BX<1SPw|323Xd zg+N9r3dRaUg+&W}ExXUbCu)LNOL@;wW^Gk56o_?H6AiW-FCsV03}w4{M~qMISb5Nb z_Z!+spgrqAu~ZUeZ{N8pZchD&-i9~JEj|idlGDb>sm~TD$hs|MGCTD^gx>4w-@bKk z785^Q9T_;Y*3LA zZp}%PwK!F9twlOC|M=~Z>cltTpxI?%*+6so7>y{PC@sM%ZxtAPil_ZuZKVF?+DQFw z+DQF(w2}HJw2@wfr$3{O)Ng4cb^B=}_1oG=7uC3|iZQOr;bGZVIi*pcS3xNU2ex)p zeGzd5IXo~6wyxDx7})D{KP+`@lYRo_9XrDhi%Dw&qjR#j_8&3(FI~5q}BlX+bNG_b< zkX}`VJFC*=AVMiBb7b0%Wd}KW#GAwkgAy)Q+95ZV`_TB`w#*cXC$Ke+I`o$e6j+(4 zS!IX()g+6YdR?ftxy)Lm<4*Mxvzg9IxMk&e)3P&^$qMg%%Q!w{!8f##_|7yWf*>%T zB-{{&yOxPf{S@C%@FZrMcouqZ`J3DU0Sa?ZQZ70K@@2rasN}-R&ieedb_!2pZBt5v z=Y{zPk-=!nd9L-$Rt2GiN{w=|2k{3$1ik^_5NRPX&k-tmFn`*Aq>Z#{^RR(ek>Dq_ zI)fm@iDw1OZfbGFn!>hgZCb0~gM)b`rn0YTY9zc6VQD*FJcpDDC1_fVG*tI>OfE{| z5WSv+jJTKSqQgaF287YXs-sFNTs%iKJ#JA3pX2FWZKVF?+DQFw+DQF(w2}HJw2@wf zr#~Z()NhF+b^D1U_1oe|;94)2c$LyitIijY6dpJVzThAh5VM23PHamAI>=}c{eiP> z{V(MTG#W65w1VGw)SDeA4k0ojcE*mM>uFI>T@XT#J%NT)5EkMN z&h)D4sa5=Q?!6fwwBQ@!ND&r?u_ks`K(PF+J|{lQIi#I5ah7Vj$9Hs)p2f zE`&Z9Q9whY?I#g?jml)=iKvk@*hgT87ejC+1~}4tcrLx>o4p2k$*N+c#rLy%!PZlm z`A5Z(`j5nsnAXq)u)8V_11~_CAgQosap4pPLD5{&9HQ4x+Nd0{PKka>=_0&>+exI% z!4XAsIoES?LpUu-93|W-jsweosx1P-@^g?=dRENKp~(0p0-9Roww6D4?C^7INj}HZ zyW&Xw%f*rU-Ncdl?}#JyPlzME2v2`T9jV_^N9y-eN9woLks=g8PIIo~5LWge+vh4w z>W=2J&io7m+}1Hqy(R}!tRjqIbm*J<#yIChvV9%N+-gqTs;W~ge$r2Tp6>-SROrZG z<)(2p9l$xdQYQr@Z5f})8VvPhekP@LtE73zf^VoJtt#!jsBjYR!RZCZ1Ypo+Iz6^${`VB(^ZFSc14xNsN7 z+LnXdlt~g(5~lC${{_2;dW&?A-fD+#g#@I=ad&XDI1W0b zQ2&cc+|F`$b3Nbu6rSEyN9td$j@0j_j?{lg9jX5l>PTP0(+@H2#dx|UkJRrckJN9= zBlYSTSzQ3XmhE123^|_Z%HTj@Ou!oD-Wp}p7S#o%;*%l`oLDMajiYMj5~sD~{0hCI?Fvt;c* z2tQJ1pf|`83{?#hbCA{t*6pkr61K8>^s2z|f@|*0T@>Z#vMxO#*JQHh%*RkWC0ak% z+BKbKYt}AHM*P5hGSYFss#js?>`Sx6BEk@*FzV{<}q%=M=bQR{EMA2MCrW2X2 zY7&kDwu;^p_Z@4ZPbxJ#yVaJXq)wK|c^qmCY!rfar~%xgqc~xg0pw0O9kGb6fPEq| z4z87&YP+12b;U^nuNS>L@7t>+ZhEdB>8?Cd|8jYxem8lf{yXwW{S)#?FT&HG(MRgH z^pX1g^pW~)eWYHfF*+tu1`f7%6k_7aMx2kTU0iXVv(#tK;_`S7haFUCWM0w<3Ff{% zp%G3H)liuV)pk&H6s8vpRRIa{UOF(vZzg*OZn?iA}%4u7>@vB4;OkW!~qKMq52yy`i_|Coxu;n5RNqyu&-bl zq*2(qttLyHa4YvX zbU9NGcDFU!S#?Lb@ms$iM5D7QS4FtF98gR+WKkm=$ACaCR+yp)bFN` z)PF}GseeKr=|y<@Gx|vVmOfIypFUE*t&fBiX2VnOlDoi~vZ~RQqZ|T8QvBee!uzZE z-bUpU7$5!?>kJ#1X1%!(A~7!}Wi3{|d zc{1p7s3&wP!Xz>cci9#~93IV|Zs;R16NC;&QG@sqi5B1HAp8MyGrgOu_i@30GWWr( zv1XUGYJ}9OZV~~B0nV+i*Lr(jpP6Py8QqYMs&O=@_Q;)RMis6vV5 zF_j+?Mw8vt0IQI|$?05p$O40pARQ>rF=w(4_3y~~l1mkl5p|<$9mb1lmMHkf&CWtH zlBWI^@+!IJtpoBop5E0*>R+yp)bFN`)PF}Gss9uDNdNf-`Q8s9?Zt4qC6CnaCy&%` z%OmAp##5QBN$r7YE$r$<;x!Y_M!Ov|h>1Iu4Y){{oB!<$n_N!4>VW+uCRG=15)+&`T5Yvh)BD16#8s;^YQR|-+uF89P??^F%9I9}g zm6|oIynO1R)XUjt^1Aytj2mv9z3`j+i=R}ObFP$ zKl(igBRB24e;Ts{_?7q}@vxX-b>vP!r1Hg(?a9Fui=msN=$ z0uSOdM!pC#cO z_l5Gyw!RAtplU1ET#vO=9Ok4b^jxTrxL!Ru(T$W#6n6bsR@>RoT;ahSQJKky3!nhLKD~nuH`CoSRyi+`hI4aVdw3t-dPrikBDtLAY8#=~5dH zza>5fULmyoQa=H`v?u|#Op|$Jo($mvnQ^VH)=Gd1Vu0FTh>A|I??Q)B350{d^CH!W zTwJkLuJ<{d-c?8HU#^bS@1~B_e@7jue?lGUHPPwMh$9VK;z<2|;z+}`IFd#GA}r6( zbDg$`|6pL(I!S;Y$;T9BVkA%X`$*zLLB5@73-?8+@K9$oIU3HQijh(PssbneDkjv? zH8=}p8o4kS%pAk;5kHHg z7(_>p3bF=e7kTSAM*3v#R3R8-2dT)4b;xa-a3JURUH0H=d_eZ%fvBF%Qbh#u2T{8j zmUwL-wDI({wZMSYERkNKN<5!jx<^0tP@m6@YQ(fUysn(TIPEJYJ?bUUL-Iz_HwU!B zxl{BDbpc_E)9RjrzRCo{1!0B*T9BFvDIMT42IMVPPairl1airJ4 z>Cb2*4O`ks{eId=!?rfks4hj~gXs9GX6Gc;n%w+_OWKre$bFFFjwlIC=K=r$_)u~v zq0p21b%;yIyAjh^sTVj+PY)1qDmcJmMVb^BK(Uc^3iDkUYGv+XtBAUB901j80ffm% zV2e2HmxJ(-0pHL@;yYJ44T~y<02A_-KzOTAh`26t0Q?m&OW49JGTx!=FA-)guEp*v zKh0kOXoDisT(Yv1Z3XtD4%yZWO^!TO1H}`fhDd-m6*kPO*v`%E)HI2egqMiCJDFZE zfZspr+u7tgz*$Sh3`i?IgiYsLFH@tVIN$mAT5EDyD^5Oh%Mv5}lGJWc*#BLav}y?43(^ z&-J~~-8g4_ON1wIYufksdT=#9h)#*?@B}y@Y%s!NrGrT;_aaKty`-u!-@M1v;0Z*d zk!4e5bhfMLhpTGh0b7o3T2p3C%C$a&XA;T6rbe4*cD3OyB71Yo-=&_DJI(QJAqmI~ zt4Zdhd;{?<%>MLLY431X8fkdBG}5q}G}7=LX{6x^X{6Ugr$3{NG;Ap&_4_F!4cp2{ zoV?Vpp6dh;qHt$1MWc#JNV5Q^zFEY8d=&kMp-wA$Q|B@jylp`PK=}8wapKQyTpG5pp5_FMdY*dM)$d|4h@qD-uxg-Q=_mYWwxdxF$>4*YclC$sTGsIRcOz zv;2@o86SWVg6XVH&a~!60A)s!6F$~K$SnXe5iDxI<>7n|r+1Z+hLz8<9~huPJc!iY1k4*8uk-L8n%Uzp!0~b_;-pyFxtvt&Z<1PivIz2B6~oj zM}(w`hs2y%AkN=d2ASB4%w(%!}Blu2>!v483q zu%g>pu76`najF^Xm9PAjEPBX*ZwMp#>NsksFDgq)j7pyHP~XhIlc?)zyt!Hcmqk@H zgf`3pwD(*tlo)?Q_Lc`ayAW*YjqPk zdI#;a1Vefg+2XFLU~GA?@pSk|7->`#8lA9H9RViAz!>==GKwm;rm8P}TBr9R-WpkM zQhe{e5RltS)PXE03x?l^N6Erd;l<|cCEEb}h5%Y>%2<+MVxof>|O0IF-Rn>)N$`6F3Fj3~^$ga?AK!C;O=4np|Xs+uhd*UKD@u zgh4smtC%Z5FWm;>zLN7im7%^!F`w`tSAfXsU>9@W%%Q9ukv89ZzLncNWWYCck#avQ zZ@(72{3f-!lr76$W#qpvWvMU9h$mJgd=Q71!pyh7N`;Hasck|RO1hj9yR{AzoKS_S^5Phubo|&*Ah`W$$oT7ioC8F4C}@ zF4FKFU8La&U8GNQr(c58pOHlxwq%ip{bZ4bZCRv%!(8W^Q_`sLBtSZsJy_(DLi}Q8 zqq#lSxy0qYs1z_goWxAZi>*pA@tIYSeh}46VkZP&TNbVrDIE$@mBvt+y@<lS^OM@x}5WRW8J2dl?>lel7Zhq6}5EB3W|j5^s-!W`_oGOnq8 z<~?vGfMxNQ5lJ|fO*{%Pv#RG>RXB((5w|RJQHMZf@0)64EnNTzDQ@v6y9G_~F0F|A#I(v!S*rw2@Ql5ligf zm*)vMy(^0}yj&J(*i9B`_>L^n@F!%Ez67T~qlz?asUi*gsUi*Asz`|>F@w03IIQqF zeVx&0t8&Wu415%4@mgn*bB_)1ZETB(yhVy|m|5UD-HL}g-`E320vr%CVH+m((dR0v zp`Mv4Rbrq^JuUsT=dv{P#}2Ys0n)atV=lH*sZ&HDh_R0k8t@HOq|}E{og!V{B*3P! zwoxQfeQYCJ#@noFH*uo{5v;i%D3?M$F|=)xxuA{s7&jY(4y9iig&kONyDU z(wxEp3csk3>Ng=F)m*1&R4Is)LbKB?JO1Emd=Q;71pu11Xl@QyN}oyWRWNi``TF2; zbV2S_6PjCSnwqk7oGPb)*Kt+vTCysdzV=od_r7)THz;zN)Rbc_rDQkO_s#r%oI{O3 zR(G|i(MG}u$a_td8HZYt?eRIX_pU0^@N!k8VK-Hz;XA5G!xO4VuZd27Mipt;Qbii} zQ$-rKRgtK(1V%2Ra2Gk9qas*hqZIm3I@pzs2`8q4#)uNCFepVXikYb9q(misgd$*j zMTr38q;COqMhVgYNxAh3Qc^{diL?*(z9&V(`3?4l=j+=uPDRLRt2@41xQ7h*hAL9h zY1pZ@#)9pJFJum)aDFL^2K43TO#&Rb7wP_2gn9Z~9Y^r zR@3^9gXk4}fYoVkRZQ2wy;HC7n*-WvvN;F%WnPnSACdY@x_k_g8 z$82hH@pe=4KrscIhAl$0486<@=-U^i*NL2S2|AQR_Y|DoRYe+Ju8K75riwItM-^%K z6RJpGg43T-MH;qLk%s+Lk%nzmq{x91qXJf^0+6fP*b+Cw|Ey(-u?@LIqb(yDS%GVT zLL}(svK+YGSPl$zy29-uV~qr`5SnTIm}(@%*sDZhj&hnY)cn;d>X6**QS}@U$X7LD zbTZemcE=hCmi5=SKV-l+RFOK>hX8Kr_2-+#>aAiEacgEX28XhJSoYkqeW{;UF_c*3 zzuy8wt}-e|ms**$24RuOh|aZ2iHenPcKtPs0d7!=Llw?Mk&m>)P&S%XjnI#rq?D|( z6BUO)dZ*0rkt!0eokT4O|7(32L_#(^kOC;3Yk~mPNDt#J0(aDcooaFcrIR90%MjzA zTom*-s#$|%iM%qP2c@C{hxo!Ok$|Ykz2w(AbR0vg_h00_(1@Nw^RBiIM~oEtRoN33 zczCX|_pU0^@N!k8VK-Hz;XA5G!xO4VpTp@F(DY|Sk;W}iq+vf%q;XpmDYu&8Js#_j zq@snOOrZ-05^LJXtTe8AIn@)~pqlC#rCNh_gg0}U56lhUeiYZ6tdfd+bN>mS!8bnE zsE!ID`QB9q@wfDyh%}HmLb&qqF@J82NFwo8nEHtQ9ydghFj>4kMI4NaP!#@sRuGyH zU%o*CK-S@^Pl9~V16>)(bUNY>u!c*`inS`>^e-YVbIql5f?cg!ZYaQz^6f*-D*@>s zU5|(Xv*uULF~RIu`)&|DiqR%c%FenGtPifnz0@hVh{M+^G)qBiU)#p+4;vLuBgMRL zlNfd7Yi+6&%&O`s4hx$AE_SM|2>Rk~kWr5+gIz;1>cUY_E$%YT>rjh_=h9_}g7HRJk%*C7W8+Zt%VsvIr$A zTxhq-7C%{#Z4n2eUtIij>SDy!GQw~Q;M}Y@GFL&jWmHom%NR8i%sOxoMLbpsLK!p# zy}B}qbndezU>=b?yM|o!S&cbSVaMcN%Uoa04XSdRZ-h-{UIPlPb{TLm*V=-_@R?Dl z+NyfFzZxH8PN89@+MM8Ggphrh-pRSz<64dzKOkX}S>O@OdmN2RoYWQ~ewI>!OBFj1*A`hkOyjVU>?cz2&lF z#zy=~7%`OnJ~>W377kFo0zP0eT4~)e=0sbnX-s77^fI2ogJr$rh9nXNB)wx`^^`>O zP{;?aFi%NNAL?hTlH^{jK?-^?umlp)o#o%7s+5wb21GQ5$e_RdOfmRe^V({UfT@vd z7gA!JX`*oAd{9z6O}46+i$Xtsj(mlyc;-jDWX6vqktP+mrhN)GQBD;bj}6u;22K7N zCv~nxCGXrSnheR{5;u|#M6qw*1$i@wjwcFCSr$_~)-!R4aZH%LNCES2HpEiT;q4-p z0^YAW8hvexS)1viEO{=7Xlo1ly86o&dGk4%-jzfeUoMF>?k0&een%2%d_ofGC20CH zib&&@BGRy*BGS06h?FY{r?Pxk(MPQ$91>-Ab@0f8am*s3a44&WTT1kaNy4=!e!-^Z zE-4BayE0F3lu%45b7{+>V`!|}is49)>ZK5XF(gGKzM4-)Ou$tc5N`0QVly!uMC357 zL|)M`AKuN`L-u<^5$P(msI(XH#^8rCpu9Kplqy=hg{3}o5aOn6YN{2ENx#%g%wp5= zh^UT9lO^@j;NM*H1d3D78wAA*f+EH65~_9eG+%{~*jmk+M55MoPHtMUGAuN!fx(9; zZEt$O53a@sOz*XpJIh0a2QjT^^(Z$qGov{Vtw!VMv|CU_re$&<){))%>-=Yx(cn@DzI=qQ?S=yU-2_C=eLwzv9M9o0C?d#$P)0xL$D zr<9gpN-zXd;lm_y3n_6vxw-js-_2l%? zsJs{-tWg0C;ZyE9zylzq$QW4jtqRintFeuyxhYLSeHu*JV8@z>6x0IpE_}m55aDo^ zV+VhG(Emm}R~ibS=B$D%+{E-9a0K%7a&NVYSesjb^x$fI!1NvqIhgvh z3JY>AkII@!Ls(lgnNBKkPW6%@+`&SXAf)7s09>d^^m!JtE^=*qRX?R1j}5=nG7O@K zSR}|E-Xa}Rt-g^lu<$A?PhZkn|C{(*S<>hgzx@?Qa(yl~y{m^bzFZG!+)WQ@{Ei;d z_$Ty`zMy^oA)>t)O}FHb#{J}w#%(#IiwYuegjaQG__EJdRYh^JPi6Tyz`cqCO)(9^ zytGQ5>ga+1u*7L)eEZ*AMMbM5i6YTToop?JjK2;03RehCcYQz1@8yWO4hG{w0f_j` zlbT!8T5zm!rlga1cdRr#Xumh)kUH_4#9OI`2Itm#gQE&d!4F5PxwNH~(dH*lYs&0j zl!Ii>Sb6@P9J+dr!VI6vn9s@`0}AXE!YwzPI%rwNddy}P-kzUZ05R#RDoZ(wm}Fpu zeGzK&mdAf^H9m+OMXJJ0iwPB*~$3|*u%5upBDPl^^J1sm*JJctw zVwI#i&Td!F&jf*p0LRb@#S(z<8E?D<9Fnc#y=s4^c6Jy88xJFOATqHbxY+@ua}zj81tsyDgMc|);t+-a?N4^E@CJm{Bx~Q5wqZYM z#yZV$6rKfJk=VJ^8?j&F@9`Pl5egQBew69`NDZk~^-!{gObTuyFL0@)>NQQ#p(MUM z)z-@GrDP@fTkw*nsdXE-;-G5V^s7LzsKuBq!ZbxNp8y}U=794qIAu6H{KN@n!Jr6m z<;dwW={U!@T`=3k<m(o@3pJ5&0`?W<(QG1)lg4xfO-E@528`dM2c&Tdn`x!z<$ zZrf5cQm(qk`Qn(sIkP#`#@#7PO0Z9r6YWPQ;c;$ZBj#2zKMhh^woWz4>08}$H$O+y zyJAS=%f*n!-NcZ_?}#Cde?koDD`@&NT1exT7Sgz%7Sgz_g@oPB#Sp6Zn3SiCKq;uE zs-Hr+est~a#_lF+`^G2vY}T%=KQ^8n7yu?}5s zg>P!Zv8d7K?CPL_$Ah@;dFz0Dj;43Dkj9s5A&t9fA&uYBLK>gYLV8JT`ZHQc)0P&} zxStl%w5^47RKxWk*%xefiV<+S!5AD~5J)vMi@023lY?q5iKloPN0jHlkzzO^#d0Yl z#UZDLm9PL>42F>`TxhGYK9lO)Lmm5rdOKF>RA2VXd#gW9$ec5_Y6}?Fe7gyDKJuamojC8$}@9~=~$+Z%xn6Dl^F+(TG5bTEzb-# z^DQc}Vedp>PTk9)09CJxCj$p@QEZ=`!docE?JLQmXvuT%*`^v>x_Y2gX`Y-OUX6Q~ zoSrm6ovMEL->V#-6bguR#+maiNeR_i2D!7ViqaPa@)5g|)4{e#7im+!&xI|-&BW7u zBW}o2pPx(u>8~Q;$v!yIM%o%e9cE-L#OV z?`R=Se?klCD`@&NT1eBD7Sgz%7Sgn>g*1tn0)bX#s1CAKjp7~mDy9-tnK5dbAjgOo z(?x?zJC>orf>H^SK8&djw)G1qDJY%A$|j45AHZ9vS0kcsj*mv!V8}P+iPPsJ4W4wM zf@A6k0)2D+91+%obuZI~77{q;yPokh(ju?QEsqGiJd4r&?GnwVj9y~?u|CglLJ$(( z5CIcJHJUjWsT^u0C)I2*i@E9&uSVEE3Og+ggm04+r1I%ehhVg<6>y`Psf%*))*}8D zq&>JA+i1E7QGjud!&M>|XHhInC=&tIP6!X}aa5w6&4$YZz2HLUMg__)S*N%eEX3W& zt?Ww2fb>bfA8NF)%5fH*i)H$t%W*Do%J3C%k=R&llyg0S`5BeRUG4aAxNffJ6KHx@ z3u$_}7Sgnv7Si+`Eu`rQEu>Fl)Bp3o+b`hh&!{0yTWUz-erib5wi*&vEUG?-I!dET z6n!Tc#SI4^RgRcyZ;wj!v?`BCg})@>D+oa;-#hD-e>9g3$K8)!tF z87fO8S*oMJU*UcN3|Q@J{hQW+^fjvD3O|8wKi`yTAF|*ZYDkA$4)%up7;n~LsJA4D z$PH?kD~x?thBhm?)Cv>PgTm=SooZHcg8?B1CciDiN&i#S8kK*>l)~UUn2P!DYwzUJ z8`ejLpZqC)4S5BJR20laeG0FDz=x;tNpT|}{-d|DO&_TtQB=-mCSq)r6O4RFQ-eq| z_PJhWl{gC16k_~P%f>PX@9fr+6mRM`sXDsWcv!r+uQ<0N(xY{#3@;Q2o0+Y4Q89KZ zc?t9(0B~H+wfS1{yEuFt*j^0*N!v@}>=)zv1fJeiLz-T$hBWP_hBSRg4QculYDizh z)1T2pnzrk z0!!ye=Ah`07&Dsma_qsxT)NShsX6L6Cnd%Ij%8{vTohdpUGl%tImAqWrTQoXGY+#jAfsD`rP#hqdB`DbHY}ZaMVv6NhPSpyNK7k15^>UfG8CYCg z5TAuq%sBYab@em-EBqDlGHw~^5YQ8v1DA5Gc?h@5RyfvMq{NLw2gPtJGJ66~@9H5< zFV{nwcGE+ezN3dU{Rus!ui@#>C?ZW;ib&Ibib&J8A`;Q%K~*_8y}6EREGw2;*`-WJ z;x({F5n`?+?aQiSQsPw0faCa;;ES7%sQniL%qROMWBiA$9kuex-(fZ z))V|E%;JCHP8Si1zRPY>nail!B1}8T?v5SSgov_NHk|Km#aqN@QBEAHlFwkybKR_R zu2-RI>YTxDGR=%uaI`$APc?m{h;&t%8;;09rDCMjQ-4HGlty6jqPT4-pc9oJF$)gh zK^sg|codP?mK-8B!ScT4-W?{~nyBjI@<}EN1gFT337u4g#GtEs7vU^USelI zqYelMnS`nYjpyQ$W$wH~v-_0)}A4#Y7V|_P4nAA^W|d zh(sNYZ(ECmoJ=&yyF|x$0?g2{#*1HZlxYQPBZ?;vD(OEZ1n~_fMd+g<)!cwL$^3$y zbIn}Z9pRVp1{BSv^2rY%LJX+K4zXU(jPiLk(O%aQl0 z#yJWHR;lOlw`3bbuqhzuw^Bo&EXekq;h43E;gI^`r`|HO9eKrTjlESek2lU0VX&&l zTH(|WpK4wK2!f)hJx=wRC_fPYD+L&7IgC91j8rj3N2p`%CK!!YzSg9QH&!?p4{*Se zthJsOCI5hiC{!HZ_vwSHv5lrDWe!hrB1jIbrkcSL@}3ZAv~!mzV^FK)3ff=@FOR09i4ZWhOPs)cFf5VL`D!H^0Pb2V;PM=$kLyyHnn z1K;9YTej|PeF9DIDk4oUS45h2Q$(7+qlh&92}Pu@py|&jB28P0NYj3bNYl0=QZ845 zqQPbpgJK;)8Zn$W$VrGC%1kUuokT)~$dY3zqYzzRT=Gjhs4Gm!)2x7x zB^K$FTSdeeHzK2Axrsip%3wKF#5nTj!V1g~ao<^Ww~TGn_fC(Z>4qW_MJU9kCvoSP zCX#ZgT)mblzKWb{R8?zz3)V1+JMq)$ylw0KFp2S(L}a##Vv`%^H;m+5yQWoDQaWYX zUn;IKKO7l8VsRm8!W-UVs!v84N-Q*p&Q7Tcr3Y8zUY|^>(0dfen=*1z@Jx*o?ooSC z_AtfG43VQm^vTnB4vT%QgT^vkRE9MwR?g9AYs$u3tI)d(*y!lxlBKSeyj2YqTPkg4 zxJ7&hx?rxKyfxSvF=aSjjd>LXf8JV>&(ZX*BGUA7MWksrMWpFFib&I+P(=C)n*NL; z(zKp77^(_{~T#QjX5@ri$;t?~`KFXcRqa zzc&<-5)l$G5RDHtQaJLcWt_{y8Fi*WpYgqHKc3C=hF0~f`nuGkSvlv~xJHn)}$Lufog;T9<{I^?4&x5P6 zji$L|UX#f7JIbZIs6gzunj~1?rj8Gc?p38>xms_o&6d{Zb8W@cGp+TFXAwfVSDXz2 zek&*1iRfrWXn=(Y`8gmgOkWetyR<4^OS>^gqp8_|*66goE=uc=^gcXS*LznHX?nRL z(zKf*()1lgr0EGoq?e%S&nO~ITZ%~2eu_xbwj$C|8A0eK{!Kx|RRs7UweZ5mC1|0Rc~6yMvrS=*&|Yf1c?Zh6upO z)Z<~KMs2QHClI=*%!L_?PV-ih?*3|g5St3gtO%HPU5*U(K}vcjg?o7)%KHl(C34ZI zj1ETzx7AVUS=CRoivAY$pn!ki7USg59Yu~q7c?pez;%vvDADSrHg+1#RYc7ZNbx(P z1ux~`PKwtls7n$AjNd8@`y5U0Dk4oUS45h2Q$(7+qlh&92}Pu@py|&jBF$ThNYj3b zNb|NLQi=%rvVSR(CzfdnX*!h{Xl!wkTO zaz&(hH$|lRJBmp2pHM{l&wu~7|M74C@jt(SsXwEOG;ir5P5bF0&D*+2;8P#S@CZ_Fhs|USR>42uf4MLE!I!<|`ApN75x}l3Sh~tfVQB&qI$t(=!f%Lp;`&>r`z^dO4T`ysNk` zm(rmtp&=_1YF(M6h{&_#M7rv8jJ(!8aO zH0`I2G;eDorR-kWIS%$JiYd2?gOqJq#FX+4_} zw_s?`Vm}Y+t4PNxmKfI0VZo(rZKP;G38HgC5P}a(*xTPmPDYJ-o$w@@QYzy3g(MGI z@eOUHtMr)22oeaTf>-4o2l1SZx_Qmk#;Xwph`&JxPNG|K*mXJHf zjCZvQR@IY5CI4+y_)FP4omP^J_PM?nmK(1o0D+&g)-wsuvckL_Yfk)qE8KZ-H9pW9 zBoM|4BN#u`r1QUQ!Z-*3K5VcE7+fAu7Gz?X!9|L-PFgUQIUAA#IMoa10tQKZO)BEz zd!d(@6x^Jo5STuRnawU*Q@oqPGx-55L$a`wHq)_|8B-7ys7`aW<#c|Isdu%J=9gwBfHc^4N9dn293OtMMrJyP=VkTg)(Y zUCnE!e_zE2BxV-IuzHJ%PB6A^r1a&OqtGY}?V(J1?rT5SE?{lJU3?qgs7i3M3Lx;u z;A{aGs}F~#C282#2qSF=c?obFYv18D`KAU|sSy%C+Bq|Sq>&V9fADFog#qnwKuwv< zIuy_j(D&{io#fO+TM*Ytd~yoUbO5g^W#_M=w%^vm2TkYNqKlF>_y;TiPVGsqP0}u1 z9hnGj;$AT}j035kq5cYNPT9X5%|&mwMIC&OsdqJ!=9gUsQLwM)7Gn!N1cA59*yEKWC8yb(K%YoGh+&NY5;F{)3;dSA>6Zx;p_ zGVM|$jLzPp8N4l}q`pRkiH^cLrEQ$Gq;lFqw9 z%!8}(fi6C2Tczz8bSUyuy#V@rxxWnVx2Z|bWwvZBy+BItLAAFh6uyTGqXgS zv+(e-I#5vdjp+3hy5pLG=tC{=K?M*exnQ~H6&H{3;46%EOnlJ~DWP0K%>Tkm6MsL) z{oYkdnqRJzH1DRAG=E1aX?{W}>2-1Hhq(4)Ox@B;n)lO7nz!|m;uPPiY;O5cY;#-4 z5nWuEL~slARrHzE3!lLRT*|m4H@NB;!y962r?Q>lE9ZK0)D4Ml7%d5;Ynhm|u}j5{ zPePrMlZ=q*x!xjPg>sB;X3u@xip4;!=qhw35AoF>pHChoB&E)7ReVMHccc#I^7scq8e!9cAh% zf4S7>G2jvKQPIp~mO(xN(P{+p@Upgu#`~-BK|YnBSaI8=;YKWxvNfd}I4p_e*i@ik zQyV)j2`?$C-61~?D8xycbI-LH&_W!;v;c$IO!2J%`bOKRl-#<+K}03ttuq`-MCwSn zwtm(pm0cdhjYkIx599h2rry;{nqRJ$H1DRDG=E1gX?{X4=~GPoUtd7epV3R2xAcXOtj!2e>yaLLKw!4Kn}M|%O*7sgdpKi~u3ODxvQ7#+nJ zb41-=xwvWxq+H9y@V6jnXE~c&y~_JDlawOvRG;P|LM+{paLyPJX(#bUQ3Jld&&EUc zdqXdY&>}Ipt9yo;*G7EyS$&!58PLD>#C$NQ zlu+XWl5~huKCfmT&0Bg&^L~0s^R`}6O8Yo4AP2Upsl%L#&#?~bqErpB>?9mo zRjD$os)X1f8ga6k$&7J;n>z5={DUCkf7buRHzi~m6tw&BrL-4jho za9Sd-(co2tH;cdnUooVq=Dm~&4GRv7JJkv_q6x!FKq&I_RP%}vCOiYM!Uara-q{_D zJXeqsbm1fM)|VR3D7bm_9@P0Gy`&(JqQF!nfq6_2|5j*>!;(AM6P87>15l+J06Rc2)&1w0P1G65oo8#P(vDaoKRSuJxN}{jat8p$j6+a;`0i zGrHUo*SBQ8T%IT{wNIhxUA?6F<$6i;ZhA@ccl46xKcScO6*T=By`*_dFKOOSFKOP^ zOF9el4vJzT4a)Ju)lo*z8XR8YQBV-> zk7`s|=s^-K1Q3&29U#HL;6Zgy*x*JEJ0=OVvC1*?&??f6VZGtTL-u<^FNyaa#YWrE z<*wRO88_l^V)ahk>?G5LiTL1#m@lq>8B+6cx6qTlOnC~S_ z8p@a_D@?2@5)`n=eYV7!WPgwK7P$k5Z(*%i8Ii9+=&eBL{%UNaDU%r2ijbKh9%^f) zU6*Zetc?wdgbtBVB$!0o)o8{aRuPUG8XR59sK%UE<-qlN*U#^!l@1~bDe@8EA{u6ph zUqREK(Mwvk^pfWN^pcisy`-zEa$0eDxR&5e_*Jk?Q7lJ2t#WOd446BtGF%}s%ULx( zxjS5SqQtvtLKy0qK^S7kOFbu-O%lZpb>L@7t&}t}ORAaA47I>463020QcU&JS4c4%M%=jCa?MFO&{0FGe|;)8UGC~7 zEiczgT6WV*TE3%~wEQ8xr2p${wMajsm$Yo@CC&TkB`w=}Nm$cH@xn>9tOvyutt@4$ zs*;dDxYa7_@08sfL{AZAp7o6|hH#hB*9DIul+I? zvq-jdpc1ooWt&|sg{9BsAw=7%e~sEABbgqw;v0HN>&=zFrK{vQTy9L};kQdc@N--P z9KlKgz6huqpZvGrAHt6cQFO2cmhEI6h6uLZ}nU6>kzqF z6~TnX5Fwgd`v`vK`u8NhH~zmB>TN|toYi1P&JqVPnOBPG=J!c?cZfsoLo(o`Ht*Z`{abQH#8~5r z64SMgOxng&`oJ?MCC_u=#8yK4b4Q~V8XOxnb zEv2M+Kc%E)TPcYnG@t8$<%Sj|e!#p@sTV$fQW^=AO3Qg)7Bu}0sxY$dJ4_`Q5*HY| zxD*<2L}O?~bKxLkt-~`DDbj3*Au|gt6@W&JZu)anGZhUUm1eY3T*`G+m_>{i#M+hv z{>g&;Bbr7yozMjXC_?V4`2Q$;zbZ9`7sPLRRp@jYFD5R*iMZKRo3U=p9Kp%kU*X|k zs9BAZJe>4f4K=%|Y*S!HD0NhMX(xc-U0TJmon|99)!@r%wGXN%V4l(^}*_x|${?CACOxZQw?Wof~Y}z$_## z3C^YB%iJ?_sl##+C6WtohuZuHr43-Y<3Km{T`3}G9z>g@|8;o^P46ltEiYF}T6R-P zTE3%{wEPLBq_3dq&uAnqTN+98ei}*3wnh^198Ncp1*jRdH~f5601@NBohIVIdSQ>% z13^-Uh?eS}+$6*E+p_K)NWMLyqivZaGnEIMB%b;9Z+K6zoXCssg8K^(JeKiVH3kev z5SF&F$Y~ZZej)ruB#H_lFuuq_&+Gsbr`_()?EN~J4~0K8>iM8LTJ>`es_y%HjI;nFQ@ z3;K%gzit)leU7GgHIkN>Ya}hZX(TP*(MVdJ&`A0eP5;mTZnyDt_zI@I7*DtKk(T}R zk(Out#IKp%3a-HBTTLnaG)Z_zSoAxK%GZEL&5@{gDMLg9pWb5J*2TyT&AT5+Wha?EL zf~q{94%v1Vm#f_Mq2jMMq0MDkWjpcs=!w9ww=f~<|8-56A4P`B4wPX zTJ7biZ<)$q$F~xH9yV4$aTd#bQSnZrv>$s7zI{?2A?^QNeb-SvJ<)bvYHSJn7?0l3 z2L7~_sJp)!+jttLwbcO`>S*A+^~xOPG9Fw3wf+){pVgqtcA~yE*UO&jAb^i49Osqf zpsdP#wi==DAWa(?>6T+HOp3h@^;fxQNvca=bO;d$DA?P!-Y!=t4|M=3WH^i9U!4;^ zKZU1vwUL&WYa=bYX(KJ)(MDRH&_;R@p8kw3(z2zCwCtygv~24lh5M8H9WibtTB2nS zW?@O^vfVJHo$68!>Y2dc&k7YE{RIZ{7-?wQLxvJ$LR9jz%cU8?)x-Zodz;n{= zfj>Y#P!+LJbP}JO4jD1n%n!ZuW3%;R?l=^7utVyDQHL7AJ6%{iN)(mB~ z(>jRRn`Cs2kJkbL5^a;d(f1DEHLwekJ-7B0|I0TD3K;XOYO|oHvh$t1lA|b0;!SWl zwZX^Qk3`TU5Dy|Rp;SAiHGgp=53a@s*;6Mn*4iEvqY;y`*?zlNfM9#6&6!IERf3QV zD6VE(3(OScB09(do;=m|K1&>uZ@h}!=Ls~ktrBU8$OT)ft#9dW6#4t}Ibs1fJg2MOt32i?r;fi?n=47iswux=3Hc)1OgBTDFvtmi?5G zmThGukPF_hQx|`V@<5_%9awC4s)aya9UKe`@oXa`BGob|GnYEqrZ6BXzvSe=5)1;- z)TIt=jx8fsXaEvmb0Z9n;erHHRSsBkkXb6Lo8+lXa%6RsU}SC2s>foq>7e3!;WiXmKkVInq>L0nYeMU>wmQFo z*G=g)5#p(~A_xlwkPS&?k5dL>Yp-%CaB(l9L?)B(ON{~d0%Sa^I?9FIX_m%?I%?`K zwY}3{%Ar2goATBXj%K=V<#+FI5hW$1bs}u(=R8-9bXOT^dATyuvYRr}@*QQQ4|2Q@>ZBlZmg=CT>}+l*!8gEF=73|nReuGWxhN5ajqX&c zh*yv-rda61qZzvmZKPbyvDUaEP=`5(fyS?K{ST&^S!X@*IPfeO`%r5_Ods_J_50#k zFi-HeN$as$bK8E*1+AXhLLwa>WA*6g;bk#bOx>RL=CZzi$U$hzK&Ki=Po$dwR?C*X%% z)l+*`XA#H;h+MP|U~TfK*D}HzAHs)9v`qY;3$)VOWV^ICnMWs1Z z8Pnwh1sV0L$C!d&tFeuyjfmywCd{?*+|+Xt37;&bXmALa2q{vb!wakSHkSZ*b?9>G zt>ikOVX`D`9fU!p@ez`i!@^IK>bWkMXUgfEkEkLohb>j4Wj9r%zs9r8 z^y)Cd27~8`b!|s*Nr(qjMd_K}jWYW4WE0s7fqxZoMJ8 z!3N{bU(4JaU5_-^F{acXQxz2nl~b;&VhJGzPimCClocN}{>1dRsOlm6y`hSf9+1D0 zXDMc3EQAnRji^mEwPImhp$RYgJU_uI^` z$jbgA(#6yR2Vn5AW_?urn%l{bHO|~tq~aI8<*JI}(-y6Ge>FacO{wXHNgXT{|DXkqBI~mxYzrpkR&@1#=#m?qYrC@f<8DGGiGW$O zy;@NRaW{!~NrJH9l{Lnl!4=|vdpWqRoFkmh;hEU!W1 zIJ_%!K)@3PCL(6m69SS5U-{A8{dTN1AxLB97#m~8dm(g*V#cX<4d0Uc;pN?}>VaXj znEE9CmU^SG;?2XW@qvy*SFg%OYE%itmL}W|!2=yK)FzMgC5M7dD9PlMKaaKLR#7j5 z^0JXNIoHofU$k{_T4gRnEJ?>9SJ~pcvTPhTTq<0%wk8+Xi3s~DEhXI6=nWp~uW}t9 zt}5gPBfRNCJ%Oh8RFVGr-$xQymRRUJ=%^>7Df~+*#8@M=+{>Uw zx(Kz&Wsa^tm>^W?B{PFLJ1ded9rgEm8w}_{1tVw0P2oTv%hbIs$ltn7@lURW9J#mW zSmrmf=?BfFlz~!_BtkA1JJSv^*Q}V5ES1EYoZh*Y}xk-Ecfnn-_*XA@0VRj#(8hByYk8IvO#u@p=U+^M3EaInM;o;#sns=&$<*rXi{#zY*3zM6Fk|NEyEd4BkMkxK*dwEcD>q*KIt$i`EJku$4PFie!^&=u~fZ z5IY+VSuO&TH%&D_u?Kj>LHbT6djLypJ-uvJdt07nn^RLelP1UAcS993Rn%5vSnR8zAFCSmG< z`$_hJ<~!9^2ZQ5c^F|#Q62nkSNJs@|Y8A16(2+^8fuNRyu+(88l!Hzmz<~n89$fIb zH@&Bc^w)1+?oHpNi6n#Yj5qxgnn<5})7u{H#olyB5ve=8O%ds@@$4)1ZnAdbV&+N+ zJlR&q9=i^@7ha}4?o>bTM6$v!r8c$}6s*K``dAqYyDn*VdyRdSD#Ai-K! z?>Gq-$_2YRGWbj1v&!K*iI#nS4(Yw8i1gQQU+zucrHCYh@QgQoLJ{fH-1I;H^9%0u zM+A|U!;TLe_u9FeB(_+Sv-X-%8_mZT4R1!}?(p=M6+qSIRQEU+tz9Nf+ zEe0x(Qr+OfIaXDLIr~ght4(HT)gHUN+r>eG34C|CGZfu-KG3N!YLqc3h;fs z#e)L)zgFX3;dIl)xeGTH_@yQnpWcc8b`ggyT=PR62mXp!vJ+OF!_sScE;VJ4gM$d1 z>a}w{`BcX$sQI~;WD}+oP94Qw5@#{`*i5Us-)4mpEL*NNCy2ml^GrT@scp2|k^Q+l zy(ftD*Kc3$PTwVnB!lpbJN*-aNMCZNKca`U9Cq}Oy2IP_kp3Fat~)(j2UVaBZUjOi z+2c_aPm6i?;vPl)^-%vG<<^YakyYTbaCD4;(hngoVAZ4&RU}cdH~forA(QMs4Cz&0 z;Z$!CZ9420MtCZB&`IqFSB0~%-UCJ+s|M+0Q~1#C$-R8CAphba^)=IjGIv0 ztB6-*fV^IAa68rOC0Fcf8QAJ9A?_D!1oOU=0NgM$R$B zksjq>Be+8R$nh5tk~%Wa$523xAOhSghJ5Z$@981^_1l-b(|741$sj!APXB}+(wE%n zkH{e{haEYj?(jA_q`$_q-y~yT7Uw2sh?~O9F6v85@d|5!`C7`v878H4)`*=!UWbeG zwQv~uS>~N@A=f#$Hly>3(>sf`&l51t)}Z14*r5=Kl_5vh`}e=SG~FVthf^T97u7Y5 zJ=@0|K4idma5lz5(NH=Sznde;`AnkAkcX>ty|RB`F6fh z>)fgwJBfKSi><;>QUS#4;1395gh3LP)ndb6*5mKU~PZ zC5OZp!!rjEA=gTd$HcKE$PAm>Y;1cbWmF*(r^gH9xDIA*i7gKgZctq5={PI?A)8Iv zl8hG@&GIv5Hpg1e%#99BZLh{al3Ih}w6%B_RXvDjHZcb|Vzc^|=Di5#b9Z`A4(YGo zzTBO@OAbi};Td=OC*+X6bh=S^?4oAXv=|P%OkC z@&g8Tk~`(Mz1X^O4P<}jrlzv>xyw~NX834i zrvz1uP^(SGw$jtFiA+bHOh0rcmrq%r7;d6y8-YW!r$xhnuA3VS6XX<8Ku$ zt|r%Mf;ciffymT%rR8$jOFakKj8PzSt}CGS!T*7&ap_xaj@)`qp?t1o2z;~DK_H&x znK?de!M={$_FQ&)PY>y@-@e?PzDo~D2H_cZ`h*_RYrx*05kzWs1d+PK`vj4ieLjt!ToXqfMLXP=u!uBN=?RO(5QATm@<{ES zfF`b9p&Nxp_EB!s-s-z%?J2xMT8A$6z0}v)r`r{qd~h{xTy{!La;j;%sHTwnj)q#2 z+*k+t%&^+pPDCuQrgPtsfEY0GK)6f27-;^W3N6bMGvyL>qY;1~Zde`2ZLMIShLd&Zq9Qxhsg&yj&2ed7B_o^BqB?=1&MB z{nvke!JYn$B2u%Xh}0e4r-;<-DJs za^PvApXxcj;_=rrA2Q%Oib#9|iODM371r5zg03pp@vbS$we|mKAOd@@wGM#RpbE1H zn-_I0twIJYK; zAlkqZfHDzUf!d(orm#-*BAQfWPY(JkWwX&*f>toqCoMqM>IkP|veu&F*uy)tSQu|1 zfa&s_JH4xj)Vy2~sd<|sQu7@}q~-}lq}RC9pOHjrb|jIy!}}zWnj4ZxYP+D0mW+<9 zkJH(g%^<){{xQ~X!L=~mWDKpqUhKpw;50c9wxOw0i#z4~;j*9&aqjIZ3E5XcnSmok zX4>>!xiUuYh*|DLXpDtBl!?x@B~950Tw6LD;C!?nZ}E@;-;qR04hE1r)U$DJk^d1D zG@3Yvvf3vV^Ky|+SI>zs1vXLWT_+IOe;ZK-!U%#M+^^U;oyciqv+30AYCTyKutp&B zz{q{=l%w|`j#2+-2eF$>ccmeUT@bz8)5l(Wa5ZiS3<81TtPV8=B;Vmx9cr85Do=t; z(-S?{)ZmCt5>|*lHJf~>WdJ=74FS+tAZm)pN@eVRzkz9tfTKR0t>W^swC%1wgOaB*irfmVQUosLhYaf2*Gxo)zGW7!X^ zQ7b$RgBd>PROi?Yd%m00A%Nl0uw4acM_5J(73qY@J7lfozzH`FHCG|psHk;%ko?l@ zXd*>l2$)pPDsVCgoYIq7WSv%HWPO54lG+^W&3d5<(T*a`p+2p8FfJ}lh`jNso(WVt z$j;&eNN_^vn(Mdhqejp%B}URQ9BDM5`7U80*&?Y)wlunO6IUr znAK*$l{D&p#dcMw1QuO=qKFiT}`Cs<(f#%+cc4y?`R@5 ze?k-KOYZb%M3I_3QKaU5qDalYC{kT|{b96c@nF*xPR>L|*OePF1tw}|SQJnoLg#ax z^3ZyQvLyi-Pi5o@{quyazBl?WfQ(Z5o}~gaC|8SQ4lp8b*OVgwg3guX{H>A)xF(~R zvRDzGkXu3I_?l~D-a`g_M-+)PCss@rlX=3nj!JDTj|gIyI(JhRFzgpnl}oL5YMxvD zzcpuu|DS7i^OLUrih6de_N0-Mj^X6RW=Ws#QagnZAo7H&M)#sR@wdSNhMEU{5(x{X zgxj?g@Zf6PaHpr*iec9=P+t2~?gbY#tG{V9L=0Zfrkd-;PJ)hkX57>jApLk%HtHzO z*Jz@W;8}7`A}clovD5Ki%Nb6u`qFZnPhT4=rR}-CF|d&e=tR?D@QM$-DQ4@Q1AFg^ zA~i1;MQYwAiqw2Z6sdVa6zL`I^rlODu{+&UMQYxsiq!0@BBdRJf)9Ddu}*m_&^5I@ zKGT%tAfM<|I0FA^6qH|71@`+0_YSE(OmYO?`EYi6OBE^IR7$%+v2#7aP*V`1k5qyHLDDjP zsbxs#8Bbu!T;{&iq07~YqV=T7M)lH6kTz%VaiT)t0o*>&%urJgZVvvQ=5TWpeFQFg zqp`Naq5~DWIpY_*m;=~6mz~~KMQUEIiqyPK6{-1-DpK<&RFVGg|7pMAPk%-hso9f7 zYThS{)a=V5fgl1u9mIhNhKKFLzQcPt$#ncahIk?lV4xzfK;qW9EPjZ&qHxYa4KWKT z<0+LqiT#v|AxUxGM=>BtZGo#Wp7>l+D&mB*u|}TR zKWM>sWRaqje6DXuDvrM(Mqs>KjXHO*Smp@B%q+^ECKAEG;|+VwA0F*ob2bW=WOuak zT;X#LwHH!&1?~egr`(MP6hkU+r`lTX7r<1jA1lg3s`bqxxEur=r1X6)>_4~~`~EcD ztlC-$8mayYn2%>X)Z~H!6O7?c6TY&LxPOitp+;BRjMO$qi3FEzY^oiF%ciyhsBUkL z(y5lGQ>k~9sLHBN>)igWhE&2M2xFrHyXZu;b#Mk%^rNV@)G^t;e)e;JdRG>ydATf7 z^EO$e<~y=T%@eXnpK_7D=1+e{7pd9PMQYxsi`4AvB0=WBpGJy>I#pMP8toZ8U4*;U zzK|Q(2xZT8Y-7!_(FDL#9pPM?xYpnD{G$SLV8e9Ji+XgHiHMIOi=(b7P;^k39j!BI zrk$jPWcB{s9S2a&4Dk7}ta&QF0>XbWZy&PYJGw~joyAn=PS3H-aQx;{h7CU$IuIio zYV5FagVQO#!1w_Y69#GD9_$2ikZaCfj>Q}%efK# zY0~WS?Ww;XYaJ|Wn+s5`yW_#txZzLnaR3x}C6fF@9h|c`ttT~*gqTE#pw{f@a_}-L zgGZ&at*3=TE4pW|sCKgU|ixU0tN+<+@1C+jNnd@8}{me?k}OYyR|Sgpry(VWj4L!br`& zFcRDiHazAc^ja~B4$2=7rs;NN_oB=|%Pedvit>b9vPBS1373HXQidoU9Mq!-?D6%OEHF)Z`SsEA>5ec` zWZ9N_kKAc<(cIuYF~&{3OR)34H^WPL6r5BlvGS@b>k~T5JuOR#he|lFKsd>3DQu8)pq~<%q zNX-+%NH4;Be?}Rp*;7Vp-lvSz>?=%Oc|s@_$T|h%u3O7yXf*b~0H4 ze*P+rbjPyS>Bk)F3Fk-g-W_Eme9+(87pYwnK_~|#ujK91aM;v4fyAz=Glsc+DU*yp z%H4FToRjfKcppqvwO4jWC|MY6=0hk&h@)h?nm>GBF3rSvmdJ!SZR*SK!7d8#zgiXS1DP||!9cq&?hE!3HwRp_T zs!aKKr8_<0Pwy%tH7{32YTl-d)O<%7sreJiNMG}(KO>FQ?nxsx?~_Jq_ob0iiv)CP z%HEN;BugRu9?Od1%R*+D>cE#!dcs55?yTP|ps%0rMrB^L(iJ?d{keN_=oqXMzPgBek~BaMXNX#^-nZ&2tc zBgMeS!)lD~nVFS^lTJm$AK;M0!XP3>7t=^gLH-MX*VbxB;bJKB9Ofwht~EDV0rfEv zTT#yiy-1G`)RnWwFA0OlH-kd+G|aqI6B8L-`>-BdjT<`nV|kfQO`vCOm2@SOk!|&F zqp&U7*lhc?CY_BMlAglI+~M8UB85xd*7GCjDLgseQ1m~xH#{Q3GN2ns0+BGeXv0I& z0|+|RwqtTvRa7YzE$Z!w3=C-ST4N6W+&tq?+q=?8?aQT++P6s~wcn9OYX5{Z(%1ay z&uAmHd)i3N`?QhTeQl)NCyiZGt+10tjwm{Zy01@?)r6_3G80}nxo2AkKekVKXjE{A zI`R=}XzPFzY=_-~_s4&!o)?=gh%9y9wk$YymQ=!;wyk;>h#7dhQDE96DZU_;WQ@W< zFAp+c+8u4A!C5=yDRHleATUvj0K9lHq5w?0^1GS$dL+@D{1#7#-)zg2CR5hF zNCu6WXI?>WwF?4^j`(}`3A0@UkrOSXr~vRmo-0{H4hSW4zL6lQQTTNcUY+tkHB*ilOS0F&^tnI1tBusY zTpOuJGW9c`rcPiP~3&7b~^I8wVOj?}zQ9I4$GN6JCKR+N6EFEM&v91WGu<@Q5y1hsG9%GNAlsGU z$`w{y89FP*1TN#iVqV}a; zo8{+KSJfyZs5sYO0iBcHlj=u;lE7=xVvAUK5m^nSH)O)5MxKib=9=P^z0NQ8_T}P8?c2nW+V6-XwSPh!>3{z7KmON${P$OSP=7`tsohgZ zYTl=i)b1-J!3GVYcBtdj$ONSCLA)i`BU|+~rn`~nkbjc*aCGrQ_^qidr6u!EYVG5Y z=f*2&`aE9@;CSe@4mtfF0i?vBiE^*Wj>?=m$xy^l&Skk{`|+|Mmz0t4zSqWyhphOH zLJ~942-C(ShK0qqk!}b97-cXcd#^exNAmFQ|+|7*2}K?ER0szFi7B8{8BtLqgsV|x@RbC9Du9g z!yJ4d;;T$#6crff9_`|j1^L$%Gp90ul)Gj%6UKbuUzN!pRpGQYPFfTDT7h5?ik(O# zB9lZu@6s1DbgA`ORr79?mG&aX9JRt16#^}{#o9(yACD{QYOYNci}~Orkmy1AdS+>@ zk!*XU()+8i?^BOrK0dEC@j6$Bah$#o7=90UA_as$&xz#;&NfEDUJ zo0DQXOXZ6W!VDtlU|RqkknbLAql^k_$&#Z=Hq>&CLaB2>f%4;o#cVYJ6uj?x)gybt zr{0xGYF{ps)V@t7sr`;jQu`-ll5XO@<5zszi~Z@IPEz|mouqbOCn-0qfb~hGJGD*l zPLUUA^`>Vf9A3-?-e;qZU&P%YQs%!FP0$Rw3QFwvI@l zt(j;9+nvRAB~8F*Mb%arX1wR6O!z@yA0|H#q=+)D%sFr#wN3mxB|3cTLA7%#s3)y0 zDI2~X>^ZmTfFdjX0omU~>xpu&C_Z^kS8JFUiWF@8Sjh)hW8a?=!uhJCWOT5TntD}2 zlcdx@1soHK)Ll(nFA#(YCEG>&RBg0GIoe|W#vfeD@@^7+X%(XLb`i2A>EK%!$)U_tceThL z{;8AJMQ*$9>LKdZkwD>uBzvrobj(*AL(cVsv9S4i+DS zz0@0RkMewP=_F+vj5Wkb18v3m4LOQeUF)?s!5R_RUCQGuD#&y6BAr2ry3E3T;1M$O!P;*0V)ls1&nf0 zhWm?I{DeQftCQ5eTqmi0n@&>u9i62137w=D`O}}#Nox0WlG^v_B(?iGNwavei|Sw; z87gwCG!-J6Kh}}V?Z$X9>{?q#9(6cMHG?`bfYCztAoHOKpef5pb=J3K`o5T4?}fSe z{p9q-2+jhqIw*&k)Vl$On0H^wc1KbUdIeb=<_@zk)z~mNFm~EKIO~%I`KLeST}cI^ zX4I5f1?R>*N6(x{L15ldYZWDP)isGpIW}7kVm{=05w&o8X&Dc80&uxlIfD$8a zd#ZgAstvvv66(3$4x_sW`^W99s-(Na_2Ry!vEC&OD$U2fdvG;w^r5lCfmSwR<{A?fZ0++I^j*TwP4qNjXORq2QTPvxy8FM`kGVLO$r$fxlfy0x^)! zbNoRbv4e0`&SjM1Vfj2GBx51`CPP$k9-SX~$w^P^RAa?tam>xu$<@wcr9$AisB)Q0 zl#hBcewNJrQD*6mPEszfVeCqYP8t!jLL$=0&<3q<>#x!{!R+!G@B{l?R*6Ul4=x7o zq_Ws1W^tM^PPM9GI8k6E>cL>E&J30xO=tWpm16RKq8OYEi4HYWIj%`9DER$!wQjXL zQht0iKfR@sgg4C9?o7~Bn_&^bE?23aYI38)H`hxJBJf3?g0O9=ZF$gPj65S)tGG&T z8sg>C-=nP%SgET;ot2YPHpqQ*!1U)jK7;D8f$TeN^{u}5piq|Wmez0TBX_4t6)XMF{_-#=y>CByDl{r z5N>c+Vu7%9$UR9isDTPONYxStqKfS#Bf2OFOM;?uVs59w|B8vk>QO4p4W~E|6%SKm zJ=PN_#}Su-lq`Z3)0WA2)a*fmwLQuXyQPz~NQx>oP5GuwmV8_QbiHI06a>rU$|m8c zgTVr^W&^Vj#L8b=kSt1vCKjG+qN6@I)D)+8mdVm{BCNr-7;Ch-d8V&r7*xXN^SNw_ zqqo(l7;}Hshh`osZ7*aF@jBUF83mnCfDO{!MtUXNll0~NG8&D$XqgWcy>@+=kEANa9Y(0a&Mb* zccaP|{X2?h1w5GxT7)Q&y|NC>!&xiiyJblGPLc$Al;7Lk(n(@#u?d;1$V^fj)nZu0 zI#&{{HQj7rUX{=huL?xds}Vx(a-rL>PN$Os%lhnOUC#n06PEz-TPST6~>CfmS zb$dEV?fZ0+x_zA_Yi>Rzss z)V)n7sr!yjQum`eN#j?1+Kc_^o=#HxKAog)UnhwpoX%5@Cupt6duLNJ+OmVbREpA1 zZc$t6Z{rQ|Rx&%lWx3V5uV(@%jpD3?P6?*kmfakL@us%~Zv>NdDq}K;=Xw-cO6e-M zc8Zl0leN}cq*{5d|6A}T2JO*|Xh$b$P(~K?RTbt=sA+CVU&?3=N>Iogb1z+6hM!N8 zy;<{lfi#ZXgxlb|3s)IFh-^df)yGa5spK8>VqUn2?J z(w8EF+{Uh{vK3J@a91b?wzFV)VyNJMQvd>1+R8?sl=I-xIK046@v3bZlU(@-ytbBA z&AsKM2BZuim}?m>#(WVNMPR?E7EDnr#1EmU)bOHlCkPJIHHrg_@X?HDMV)g|s$KKjbj0*E2KGg`U83iN z>4x7|Vu!m}#qIK?o0#4xHt-hgJHAnc!CYFV92tMg9{Cj~Jh&P+@ZO=8m@i1~$;&fk z+ROw8ls3*v`v)Pzl)#S)I|zeDrQf;Bg)Pnh_1e@!2?#^~vy_U+d-%afSu#$xH_!%K zLCsezC)xMGq`^yV2)s67b1#Yo8#kO`<+dEg@u~W0cUL2+d$~qZ_co2B?mHSu-4hx~ zFY>29qmR_>=_7UT(?{y|^^rCKI|reri?}8n2jC;j1^94^H2_B0naecQyE1fg|kR5$^NXWgsCGpltMy!WX77;lQQzN z{VW-=7({t8rk6BD4BH^pcwQVuUwa3WKdDljej{)WfXT6(K=M#UWUIP_h`)$8CgtGU zUa{`}YTUcG&9Fvlf~Q&%;2r2<7X^FCSam3T-)X4Z2Tf2@OT`r9d1-ti(A@-`_af}g z>N$;Eee1LDYy|g#`1Fa*OGuM$SUANV!Zw;w>r7@Lg>k!_;2akLN$(Pw(m@ zbuZUP>fWZ0)O|-Ese79~(oLWCVt=})kJPOL!c1|H33St`c&VRZUS z3tr5H*f5~J@Oa3S`G2tMuHL1&*7hE<;5+(AJTEE=DuSJ)t(e>C&h=*SZ}B)JKqOMk z7Bfd&(1>~K>LhP=&`c+_T57e^HA5j0kWy*NC^i(|6`X_QMwJBchUha0F}4VMI8kev z|6G7g>ekk%a69?rrJnX^|7mwiAL%Gxwn&bu6(ydZ3^is!QlJIzg$crID|z*Zby%0t+CKrk$_XpO0mp6eSq zwkI9)+?}mF2ekR1aQbWt2L|d?Pr!R(#LlWI#s`p1E7$JTB*=Fqmm}=&AGF|m`bhW) z;6OFaV|tmJ6z=94*TuMkD%eSDdd)YpBD&}#q@2Iyd&&5$=MX_1o=k}h7a?K`=}~+- zkr6+kS`LcO3Xk=T80_HNhuRm^Vc8crC=lS);(5n1-h49t^ijO`mOfJ2jR_#w06-!X z==EE|s3ntd>!ubQ&&fE}*n!zcXdU45kP<@!k7+w_sT@8~0S ze?lMWzrWy3e?}dt+fzsC-lvY#?W-dZhR*6#03AFVass`>58-2A8u7PHc>sdokoyVQ z1w0XUTe&_#wyJ;RsH4K)C@U>GqS$hAXUJ4s!Og8D)K;hR4@W8METV~|dWzrRx5t_d zOk1=C8~FsOCj5HShwS%`I?^CtGN}R@oeGVY8BJ%%smyzCT?=u5h!&E?*<;Q6#<@&u zG#9!u#hA*`IiZNDok*~`1e+)b4<~04UFf#HSqIPTMi6#6@zEcR!kk#|~qrVdpo z56?K93ECB?}Bj zG?1Dj&m@KrK@!7+W`mpE>CFVn+GJRHFTCk5ockgBy`znkK3j6*woKNlJU_PxOl4-t z+ej^Vo0H6Y(v07q97Gdo1UQl!`9{7J@Y*t@L_uM6@tma$^{m7!QU!Wu)CcEUpU5JB z4p3Jh?gEI!RUK=c(`SW|Ctkv^Q^jRBiGs5|$_%@ujYK{=CPJy{nDXy<8iqdz&^=_Z@Ad?oVhVeZ`yp zj51QUr;OCSPZ_D(S4L_DG_CTKVR?=+2bVfFluuiO^V1Wu`Flz1Yyn&-!|^+!Bk2yL^oI1E(ihBGbk1 zW+e}0NXb(-MHD>wEYi&^w)N3y?WMk#YWbve>!OG&%KxNiVjrC(GPDURUWIN%O@y7Y zXS(mN#=bWtxLB1$=ZYN#WVt02Cod-OEHYV|ngwr!fF&&>2n?YtPxS;yUD3#u{zK}s zc&|e((jpJXp&N7@I2yUK@K}q~D9hw zAN*0WxPMi-bHgeAaVduY!j3bE9Nkp!I;%eG3susI%YMPVfIK*J1}zq?CY-h3e-+%H zQ5|dL$v=R+ym)W1y`ssD~LQvZZ9(x=(!*Zk?vC?oZI%1GV&l#%*< zWu#FGJ0VW!An-3$N{T-O-u#=MLo7bo4o43^*p(gUKwv?iA(87$F*vA(xv0haqRl~hpCUluBlWo?AN)NL(9Q@- zIfjwk9BRqg*u10Lo5_yx@@&C~p9tmv5Mi;&UQgPN03y8O;i=kbe^(i)f4MSJ|2Ac$ z{yWM@{S(SaFUn7UMj5H!Q%36Er;OC^Dh5>)@2bJ^E{ z3bUmx8w#Z`7h0)8xr!lrQpOb|RwyoGi?%S$3$m@4rlSJsSX&Gi#=*5%#v^_c*eITC zl-S=)HnuAV@4 zd6Z^zqzgpe4Ach@$VkW;S@X6`avaE5Gh~tVPT(l(A8xo1>5E9I=}+QsDLx+SZ;7)a zu-DY;k-tBx+}qz$Mmmbo!>~G42ZOb;RZg|dCKXTuZR3$eL|(*N>Q&JMC?ZIRR&tR?8&qi}(9M0{YCypA_QDgRaYTtnxU2taR%jh+#a3nz zi=TEm(g!{R4ve8|%h1^qga-r=htH6TMWD0g<69oG;5*7l5Js6TGC`sS^5DcE=Q8BU z<}ioM5P+YU*^9DBR*!gR65l92s>0FF(kVKqatf{h>aa>!F3Jqd5P2nz1qXt0?Q2h^ ztc%OB;vg&{i-ndz08DX2VrF&91aEzYl(dJbl@k=@6K&64yslCHqu$Te!MNzIUss1U=64DQ|NGx>`I+5fQ{DXd6E!`Xemkpn(swnQ}1$z{DN| z|G7WCtBlmYTp6iH^)SG_o#XfaU9jSkxI#R!{ zjuhpiv5q3>-Ke@InI4CVK84&223#fawME$OS!BWHU%(KM6G8c+!1`|lO8Bjq8;&k^ zUEzCotZz@x2%Z&?j^fr(hksGYhX5Tj1T%?DE*+J8BVjuE_E2v(tHc%mvloJYvLOHT zsg39D$aWzM8HfoaW(QJy2x=<02b;tZt-NQ8sA#`LkyW6f)>6d`sJUd;0kVj8h} zIFa1nc9Mx6YrmwWM40j{wiACF;;Y8oDT-s)1a((d%+8HsByQ_Uk$rGA_I)Z1$P~_V z;VzS)D)*>cdE&X9P;mP!B6LI81l)jCS?_PM7BJr zr~_4<<-ymcNqnqlMud`(THihjtv<_hvv|EI+Y|&YnulmDJy%1$tB%yaTpg)@n>tee z9d)GsPpBh(-KYMHLQ=n{kkr3VA*tV2NJ?=AUx+8eyDVkP!^6aOa-8reOC3c*;6Zdn z4ppwJn(9E}tK#hrWzj7TI;-0-h%$y|t79CG3)XimLtynD{14-2gk*3W@*sqmGgn7> zGI{g4tULMoQGt0>9>AU-zw;hA4TDBDJ0<|2|d&4GS^lgq+(#64*wqHX)c1Vc|A6*HH1Q47LnnsMkGM* z2vRLIStr5WA<-||mP36zOPj|BgaZ|0fiZzV1_hMklG?(@E;zr<2t0>m;4jcS(6DG(S~H z!R9v69cSeoX#(%dW+z;gWGDxCQLUE$lY>V0oD2xxCVUu_HAanG`BbBwg$Zv`JJ`f5 z;#)9M7s;~W#j)G~SrKa`Gm>IKE_qz)w-@E~c;!cx9r`_;Br$ddMI8~n1B9c_NIanO zSMFn%XPtx>%+iOVbjCU#195*$>2*fg4B8E$ilWI9${9)|(mQGTFP6RFZcd1Ea(sQ*0Q+BS`&Lu<~3MPwJ zI@csp90?2eQd83kyoq=QsPb6fo=bi3>r`494+o0>vze94;+1osT36GDA5G}V_&JP> zmaW6`F!fz6E#FA!2N=Q#`K~mNZ%_HuyE;kz%XO0ax9KGH-_c3x|AbD`*L~{Gs3rA# zYDxY3)ROvrwIraYqwH2Lpc3wCiIgbzEM>@^oNV`92`&ZZur==43x zh}ls~N>)dPx9Hnet-$YZONS?^2p&s0JVtC%u8G-C8)E`w1*!2ISm}x;4uFRyvTvW3e?*4h*b+VDk|KgyenO}Xgd;_$5Xyf4_9Wt18nB+rQ}3!J^)FXT>fff8 z)PF}UseeK(>4iS^XEc-gJ@K-lCxb%3yOwFVNTHz@ znK4c0_(FkQ0l``wSFw#ckttxvtm5aUmIz?A)R-w#0k{nct|x<3V9|_|Y-lP&kR}NV zNMjibOiwguJ#s3q%+;e6ydBM?cqV-GT1J?Eb8q@k@11ynw-*lFi*T9y*XMd~-vxU% zGYF)7ta;*F@a{MlFy{#OfB;iTB{jnM3%jp8v^9>dF;M|T5A`tD+(UCqGl_5`QjBacg;Uly3IvaLA=u&w%yk^HvH3iID>SuJ;26mZ!W=SJ zo-hB(^G%wIkeGN?1U@H0EKJ{7&1ZN%0wpH>BDf=A8lMpvg3vS20cM1tT(mxdQ~<5v zIgZj@&7}V2no0fJG?V)8XeRZ4LNn>>KJ{mGlZHLrr2c)nNyENwQX>4hJc>EAt)*aO z(aAw6qNG<8zbpHVhg$?6VZT$~6B=lwkE3fvbnrp^OfMWWJuk;HWQ5-MLWmm&v6JFG zU^So0LX!lB@M+pNPfROq%US3!@tgomj zs{%d?|Bj9Y8LBwImbY2NQ3`5Kf+4=zrczxa^p&~94J$@XA9b-1OQWbtFl8Mz>W<@r5X1dC*5lX$iV`M-n@ z%0XAD9`%9|HkH0}rJ#aTJQ>WXOcpdi0^Nn zjvnv@-g^Gn_E-5(e641QpWtPGh2xL=)Zwmf((rQKq~UG4NyB$^lZHQ`oAh;``ZL-| z!=83h|32-cVP88bp=evjyHm9?8b(-IRXrp4Vm1@UhTpDrqzRDm*{gUd)a5WM9KziE zjin^l5Gsg zUG1dd<=RQZ+q9F0?`S6tPiQB-(5L>4e$ud~pVYrkKWW(4PdX{ji^YQeN5H$)!AtIV zD!UaO9Y7n5;O&I*~LGmk}9IrrL}48fL(ovf?nJKdw#+|(Qpm8H~(@dwK|mvNqjrXN%*T?AoL=1aTE zR0f>feG+9g8WPg`NW+LqkdI=&!!7-!-1fp|n`&|cxU-qbN;xcDc@Z`e{_Nj5UzBw5 zYQXMmEik2WAP}Ir?QB-dPDWVcui`Vxy<4q4D?ro@sJhY(NN-T z(t-#aC|op5-L_UHgiTDMa%^(Sv&w~FLDPsJ6sh`3asJEje2l3ZrqPbput2aolha3 z7k2Bj0>^}gY%Pw@p|*Dl7QE6{3(15Y1P%f41YXc#Ay)>rVQLaMvQaoJef@1P=jCI9 zu2oNvTVSe7jVg*v>&N!~_^zXvQ(0`mNQ+88i2$yL^a-DOS3_xdxrWm4HVviWI~q#E z6B0AxH;J3ixr8-w7QU0~z)xl5bN+Ci z$2xhN(mGrs#kKSq^s+-(1&X>`{S_8yRg#u#!l({i%5sd7MmWkD0yhF%^PEU0ZuQ$- zQm3jH;~ykGYGY71ne`@an8q@zuYy#7?@p&5M#ANslq)9O1=mlILIyk?PA_z%>ds> zn6L<0jkF=C)gNo!*sD8eT4;G`vkhY50zW((r_Y(pOT{Pu=NFm-b?Jx~HBryiYx8*jG;?qQ^XL z>Z6H5!(8S)!k~n+pop^!GUvOg)6Zw<-*1JRMnPC)z~shcFl#*_L`At=oM$jhx@Ly@ zf9@w&(Fa_alGZ3oGwKP=lXo4TES7VWPObstI50na)l2W@E!G}qeN~RQBW8c zDGY>B<^cBy$T%xpNXtD|o_a4eXOLPlbnG3~Z)_{`+r0`yqt+AyC zwKf52L@B|A-k~;OE?t14r-%%II)wTqkdxea33@)^PVcHG4KG(u8s4U!G<-)rX?Q|C z={4^3XM~f6J>jI`eZon@zHm}xX@)wr2XP-3AzEQltYyXl=`gCC9$X*z7y)#|1-d$; znEhN@h7raL;yeZ9G6w#|4HBRScLMAi>fGZ*BF?WuqPys@4WL`;?ZYO4wlNYx#FQM< zQMc9eqgCG34Ezf5A2Q%O!buU#m+-EOPt8RJwr7UvD zRRV8a_)PBu&RhU;k`Zhr`TMa}GMyUCE-Ro)oQtC;`wS{kCIe~<5o{FhP zbx;vqj*^>L1ZEu7?SzvI`G|OiF%0#MxWu^ALv8gGM-`1`LvU=BSEnAp@u9rh)mIBEEfaMJLEaMEks>Cb2;4SSkN!}~OohJDSXRh7m~Y)!Hp ziZi2Xr%`I)oKe_m$^}pt%{?YfnayxbfQwaV;_PCmb5mzqM$$KOhK7GBI~48^kR{K= zxpieHj;fjhKH_K=Ijm9GT9p2vnqZcJUvXaNvVW7*cB5zbU@z*hqnU(*!hs|sUTa)* z5MjH|va_-Ea+qn6yp)yX|E>8`%xhCC0|$xs2H<5bn2$GgeWzCBQS6WWC*DP&DGGyi?mkk|0Hs2HO^sZ*o@N&(h;cc2p!*?{3hCig4^tn6z z8M&lkPcCVApIp+gFPD_7FPAdKgXu(=?m?&ITxZcaTUzo(kinw3-C`1tp%XepKAc;x z2-&eBr!uVxqj99LD9AZ6^5j^U<-QDT`U|i(qT$3*Z)JoR)pFy6HGXVWl-IWUeA;TT zF~frfd`B)R-wy=`5|Zs&S9S_lLxONQ)w_n?tCmzi-2l15B65GF=9mx%pMk~1+JYfO ziHFpTkm6ELUIg|p68jj{M2h9bi-a3W4W8^;`F?f;J8mpL!Adq-pHAeh#`HJ(E4gQ2Xy(^bAyj(76 zc$-|(@Ey6N;R(5<*JP(Zqm(r4DJ2c>Q%V~4m695Pq7moB6l16rlBViN_CQ#S!6#E8 zk0Iy8#aXujw?8GcF_7 zL{dp4J=n@MFf(ENp2{v_pRkBH=gXt{(2i2lL3wu=yr2iv3CZ_W&kocniY3-F_p!_$ zR_x>d)VW!W+|7>TBJWj)aITmJKE;JPa~C}EQR_+K1tAPSbB_zIAgNa;~7t1 z7I}1K7^W_15iq>3BEZw&rIwoeO^%n*;93j^Ppdxb2u!e4Q*CBI zqO{8}5@OgxZOz<23~G;A;I~5^!)#5x#k>a?eCkfeyCO;B%SDpLw}~W;-w{a~pAbp< z+?{^GoBoVE(zqv&G`vq9Y224b!ZwrWjp7BRzpSZ4OX5k{Ej|_7b}G{ly-xEDJ6UeA z9WOFNt2jR{17Z}SovKo9LZL&Anc17SvqN11Lx zn2-H~_IpPj334mnW@0hx&yiXWu+!scQb_<6YHh~Z;4oof@5eL5a#>z#MCAY2jHlqo>+Ck)r}Fq=YEM zB>gD3DxmPL_9K3sx9G31?}MvxL%{c3ej*7n86g22o~*AICUXU+kLEF;DpNVuw!!nI z=ZnSD0^=hI2M2A1lXBcf)s$6iU6#tSfe<068xUMZyF_i}(VklLd(zqvyG`vp|X}lqc zbgqM!D`Qlu8*~Ucv}SxzmLw$K7`8U^tLoy5jZ^>%m$j0k)wP{`$)b3bIicO;QIbq4{e zQJPKJc&u;kgnyF8pkojUHo4yfSgfQRV0K243pB8e`5~tw63PJ(Ovk#X`-F zV1>`Mo=H)<`rD*HDtLxLMJlMW`cb9PTqV@kZ<(bOY?;GHbJJUrNNkwD)s79!fWG1j zS%5=rtwqgBZ1@B?Ydz;62qII=rp0Rt2mzSMLBNv{AmVF}wb)UC(DBTzPh`3Zk{~C3V*l& ze$vUmHk$8T>_Xhaz7VV!5fH^=x%`EANhLP&d@zFCn@!3Gh)Bw`)m|e4z>o4??6L?4 z{r)+1`AAJXioV~{Me2l|Zc6jX4m$zOtu|68-Wo62i#Hbe{6oFiqM`#?CP4NMU5rJk97(qsL6QGMzUWGb)*SIAa9y4=)X$Fs#MVbMqaAT1fIT-ZM8yKr%}j_g8+~*6 zPP{TR7nyu8UeYIW`&LFC<{5@sxqZmHBqZ?CE@gy$_jN?{_58E}<5R&PI;|2r=vZ%& z>)b#GhWgu(tMSty9nuDgVg;WH zYXfSZl|f!qnvM^X#7Vf!YfXBZh?@E&!3za;OXK6|(+qml=LwXz+VGTA*!C1+asiEx zv%DkOa~1=pk^rY1QUUkOUUMD)6F&8>IMVoXaisBW;z;9n#F54)#F0Mrsb6xZKO>Gb z?ujFf?-NHF_r;N75@pJWIgjEb9OTwaVHri{Ps|LJ2v?)18xuVlMIynJ%i#Ixa3SHv zPN?)6VQrCHkK$0~vgA{J`%yF}pkbU27AV}!t?XYYOiNjpRTgd%nI^C+&Ip=n`=9~e z5l2b_jnm+%L%nyL67#_u_cgm0)xEIqseAE%IXx_Ls{|cu*s78j6iCgsOtZ55V>!xiyd;tHnkSR0syu^1y54$Dt;G0RB;DCcrLp*{S2RFRgW zF$=4KER<`4r+Pjx_pF+DE@1)-I@FW-BnTBt+YA3Wi(8*h?k&mZ?)0uW()e<5r15Ry zNaJ_Jk;W&)kzV6Ye?}Z>+!IF{-zSbV?u#Rxm0N~OB1%LnDj%noc14OW7m*vtigFz( zTop`c_fIQgErGPb<7}nuka`|ZBj|_HK~5$GMDoT#AY4xTSSA;oa8(E}|I0$0Wko=v zajgljNh(hDFBxy6PwrZaPZs1~7t5&eKMj|l2UyIm+y(2FjvrDIZ2ereo|$e`d`r@# z+U26zg*L;gl7r`VY7k|W`_j=P)PjJ6Fr^jlJBx7~2`1*AtW}PB6wb{%24kY z1mZB^5^;vBQvc+cYfVZnm7~-Rjw?_hr346H0?CgOVIkHc&N+z=#&QxtMaD&B1K$^D z%EaZG!$09p?}{UhFBeA|-zJVUen%W>{1f6xUvj5EBaSrgi6f2g6Gs~N#gPCua~sB` zj4fCeIbkxoQ=P?D+&@elKqz7BsLTU<5TJFFoq$?%tP>gVZmIEXVoQRI!Ka|Y6kWUD z<1|(l+kh<*`|+%73@1$fM5c|UIjF$6DsM|65y<)?JAn(sDeN&AKUt7}x>H8V_hZX) z?<`i5d<?|rKNzE_y`EUpXt{#MdvlUitf<|={ z7zvZM7qMgnMMO=?J?U+|?@63N-lEsia&RIX^7|Wq8HXp_>0NQ8@#W%3p6P0#rV)5Fo+Av1TTT z#8l(oEe(CLAUCc(9m`tf!ceSOUo$#N$jBP4fpEq70ujt5FwC?tMN$dEj#>Bs^>3&s z;Dx<7Md???&WdyzUK_t9r^RWj6P8ek_0LtOqWlo70P_>N^?E+fJc&IQpnI&fjfnfB zSivoEq-ZAt-%K^pxUaM(jrFP~UlWaXDt6=XUE2)C-PD#NS|lb-yBN@JU;n1_=2TOe zYgh&P5CyRnSP~|vk!(uxWLzKP?CZDzKco#<&`*@Gh*HI0$}L5L7IH7sRS)e6cY0SG zX?(dj()c!Ur13lANaGXYNT0gX|Gn=`r>}Ul*Lu@wPaA1`pElC8uZ;xwbWpQ59tG17 z3LuF`TZb)IK&x7_sHF~giRUCaCH59J7%_ABs;Un~_XrP-RTdh3P!rBf{ZZ z+8RUj;sHMZNipN3;Sx7N-6JBwUNurOnv`nrqwB<7d zFN`Et&2BYvmVeTFwPGrSI?ov9kEcEEO{crsNYl%;k*2q4BTe7YMw*_`MtX@i{TXef zX-^wze4jSbw6Bd6b3lfQ6;y_|iI@|t2RQ9qM-Gb^MH-G7M`)>oln(w@pIqvwME+)g6@Fw5k7RmGJk(OK^5^7E;5&Q?h!wWsVh7{Kk8w>aIF`qb^-CJ^Ed@G7H9y&-ixhZf9Ti4tz z7GSOKjS#QcXqid^5dI}>0g`qp8c%<&Ma{j%5SIv-MR!W=_)yO@2Rha^U1#cmV=hNO*xo^Jos$DdNv;! zHV5re$03d3huS&>INO!U{e(BYtBo|hTpMY6n>Nz)9c`rPPiP~3#hd<&Hqx}GjWoVb z8)@3tM#_z51hzsxH{~_qvC8WN+f+ty7F7^y+R3KoCJgz3Mo$i!DP}IYY_1grI8t(e zu}H(ba_DFhfKCc?#GpivomwpUowC?g6r)C5=3K;jE|WT$?}1OfqTdhM?;UNVWOB-- z@lqjNf`Sq=@Dt*ew&pUm;IYg&&m;=MZ_Ub3PlE2!Pm0fGorikwMg~7O$Zs`ItZLL5 zh&PA;y85nzE9~vZoPFTHsjW(umf|2eYcE6~#Xf$k`Z((x`JP9S-doy8yar)TUKMb> zts|40vsKiOVh{uZmkij1O)c;wK!9MO6>}>>&TKZ04BcP9e?rbmKomxrkYtYGCZ;VR zl~tGMo$3@)yDJMHNyZt4LjVCh^r5D{RkfH6%7KNa7d_(Va?`uoNYl%;k*2q4BTe7Y zMw*_`MtX@i{TWrHX-^etdY>xNw6BVE62~X}kV753PC7P&to23cVJdh4K7CnA%*si1 zt=u4TtZ&3pnw@f1@NORo7b#5&AbS7G)E4=cbb9bi!tG1h?5OPHbGkBf)CN=L;rVNQ zOL#$tdQ+Z^H$6X^4eh8RCHcW8sqFyM-KpPiRlWG2{Cu_k(4|(x86ok*Ssb6pm$OP3 zPt`jy^_c6(^kC|nGMk-He`m?eP`GQy`Z<{GtS6k6eU2VOTPv0>&87@{Cp!A7y!o=n zAicjDH|~@n&2MU}GoY}E84%&gR0~i%?~n9(6i+8OFdK}`DPkC50)UoZ9Kp!L^!?Srea?@jRv2Njm_LmUBuok^s;i?(GNn1}K) z*{E!-w*EgWPsLXeN*oo!Y&sxk(cgM`#N0kS);N22nW_&q-j}}uk!Eb9{0fwFE3GhO z-y$A~P7&v35ymEM!DeqsKKG_~^^m5Q>mf~V(?goRqlYv-p@;OTH~p_0Ei%(rT-uA> z>7E|a^gcbLXwx3QJ)6yisQ{S)qI{bdZ`t_EhiJg6*C`XIhR@= zo=Ly~M#o%I1w5z#+i0|avu^9TXzxU(vX`}0XuvbcZ;qy`Hq)P;X66aSv;Xm*e&jnv(C5U+;VgHsf_bMOjj~097M3ebB#0CSzvGGvKi@> z#8!1>s9U|)Nk}kuE45L8EMFmTRT7Lg-B9~3 zciQqUSZZd2hE3jLteuj(-hO{Rf{Bl2r?>QwSaee1TzwAz=2#QjN_!;wKuodZ_QD7r zYf(cja70ESVyZ=Dio?C_YvN{UKqfk3$^`dt+z@lvL|Y@CiAW+xl^FS4(;e`ih*ISS zA}h8?TBL?rl1}C#jRO1xdd41n^SL{{tA{kbTn}k_n;z2i9X+J!2|c9OxYM7}Lz?#V zkf!(PAx-;wNQBo>KWfUEbb>S^FpkT@itu@zszm@_bbX-_QMqaBX=FkeVR8}9A~qmW z>g2KfExF~PMi_wzER*2nNDy+Gn=-!_!O^+z_*i3rAsKRxa^N^y6?aFqrIHDQgGG7v z@}L3V(L3#6m7AQ+4Ob?G+q;!kymLLz-T$hcvxS z4{7?29@6wD^pL*fPJc!ZY1-36n%<{}H0|plQAb-vw?9hz2OMb=b0ud~8mv*lg-z6z z>5H5xs1&`30KCWgd~Q7ByEt<=D}jLS`$*yFR7N<=qP~nO&&fSy*pI0`nY>DD+2|k4 z_5ZZWA7qU{$@pICiBtWAtms#b?;!)eqlZMu5@8)-c#(bw0tFghYZjwFt}adjkyN`0 zAl7;h@;BVtq~s#A$oCRz;MUaNnhbEM_3!mGP)Y1^ZWh00?jK%ZQ-zbn$NaKQiC)?k zo0|0$3c9l6sjuP>@G+pOk3#Ra^pMWl#;qXPL7VfS;_^ZGJN|tWKW7$TJE)k&Jhb7jJ8 z+=#GTYB|Tfc=L02dRGr=dbu9b^fo=D={tHz(-V3~pZ1)7$({a;Akw@ih%~)V5NW<4 zh@_nDBtVt(#A%2DSFI8=c#@kMbdqv`HHHyK1V52esE{{mGvrmLGUnmruVwI4{}dn` zhob*qL=BCSEEy)K6yG(KMZvXhVqXqoiV$3cfJ%i?y#NG~TtG48hQ*DriCweolz6)Leoyr0e2RHj#8=mUKi40!vx#Bx`*={~*RE ze-)zIRO8Qe@4uhlD=!Uct*zOOj0k}gK0}!~D?h0jhkdkM5s3#^W8a-7-e_t->4k0T z%V6)Zks!dDb#>8pio^o0Qc(eQRBP=ZvBilP^Q*<4+Y(<9bmdkKoj zy%SwcD_M6`LFf8goF~x~vq9dTY?kjj)hzu@KA-nJJ>yR2yMjpb%LS3 zi}Y0PAk79?2;4I68taAq7DMR`?9$Z#)1xF4YB5Zy*+%|TxQwp zotj$1PVARPaBeU7d=Vumge2Ahx))BHw1}S!wR)>mwxY2C;Ys!NRv}apx4w2_6t|Qc z_d+m!?Yjq86&r=02fSt5^IHH3KpA2%Y9;47L}?;tY-4Smljs%Q zQ&gn+t|HR>az&*1ZHh?qcNCH4KcR?p_xAAVD}L?8K6OtQX?mY7(!8&W6rVSI*rC7o zJrMM#@P)^n%Bn@_jw6kw-0C?|rB{))yVg;zF}94(rZkgpImmBB+8Zj!rOePOJ`IV= zCOeJUqLgPEZwh*%GY3%?jfD6-fE>PjsrSMc0SEHTU#90FE54(PL^2)r*162ltO$p> z&xKo*xtlWVxmJesa4qv5G#A4QKZ~`MPs)9JU9BhHJvYS(>^sX7M+jD`9#Mx-avyLI zN6?pXj(oak+^j$5I^^=HMvG5n-{o>_3dsU0=%_jGRqO7r#=cKY7$R0dEl1it3bfx<>KnTZ~2TER)upTiSaW&%g1*g+QKB+%SyoSWoR zSb(Eg2;dP+cdLI_g|H!?anKI+gFVf4iwv!{RZn=Tc_0t5dKom0>pvXX;kjZ3dCriYcJ5N5t5V| zh;r=;JGy^(HEvW<<*`x?Z0rA20wTr5K^SYh=HhXF%f@bNa~>4x5#&L6CJ-dBBmGZ7 znn^s?hR6S{D))!V&7^>%1KTWhe3-;u)F+-7U zq()&eUgoTD7C%VF2tfjv3Wz9PjOxx<#-vjqI|~mysuKnSMc#W7=f=#XL5=LuD-aBZ ze?J>$!@G@TwP~9qls^kRvp>bV998ID#L=0QAr0c_oW)AQh%JvIjXU~CfOOF+AQBPf zq!%fMI#;8}g6uA87k!!VR)xv*nTXqkaV43ex`(eksUH#lNScfUVHrk3ZVXX1m>qXOK`w&?0PIZDE7CpDHbP7Yw2WEG%hQ7N6W z?f3~>4d#-TIZ{~!p9-zR&7bO6;fr&nf%59^xg7PbKGOVheWdwq`bhJ4^pWN#^pRfU zPjC9P7yHvag{1j?3Q6<6LK1n-B0mDkm;w<8Em)sk^Vqom520bvt8CBFlEt-{LVN1~%0Z2)$dOgV|(JvZoxP z040R^E8hCCFei~C$WIsbqq6PUSS&M>PPhj2#1jZ;a;d>u$0V|trDMK-!S$cjzkhh3lj({hveog(}?MULAna{B{L1bO8zd| zzr+Zj4!k$570yh>!NMUhA5d*rlXSQMTWU>+Qzo&;a@`25SE3cN-K9)#FGeV3zEKR= z7-`JEz6%5Izp{W59JNO!lIB|yNuwqLo(@U%qAk~ps?fu6`E2vf14_}s0I*xztn4iso0hg!6Wqadt&mpWAk5gis87JPlU zrsuMr6r^Cjki{jRUF&bdntakm@g46$GnisVezk2m4__&jz*I2 z2E}yo#$cX7IKcpp^=7NGXZ(Lqa{xbbeRA}v){tTyF;SWzmEYx-aiBp^Wq!h(VNh`( z(qkgZz{`U@Y(kq)!W(cwgH}Fu2BI*0y`mLn`Ye~izq$NcQDN@YdlW6WrID1&@`UB4 z*%?HXAaJX}kx}A_(v-rhHgz-z8uOA+6bNYAT6jwKAg+Pzm3#UEr$!@eA~S!k^yNNSa@+ku<+eBWeDQ zM$-HzG?KpNPk%-vY2Fh_n%^gqH1CTfkzqw54bMW3!9nJbl1qZhVgbq8*0QA7_f2Rp z^u#oUwsq(R@r%wP9ft2Ym(kb+e-U!S0$PM};vduNBaMjM3xio>{FgfBpoHX3#0I&< zlAlNn32RQB62DIdg@;4=flO(9G$Yy(NjghAkrEbuBvoI`{@C+0`0`TYM^4&$qR>bEMPT?gyLym zl%KZZrkz!9KZ_3Ys3QJ+OC*VHmVin{|4n_%3^zT}E=CZbaFi5M zrib`k2ZRGl7(`f;%lbsCGbq%o8k=ghgM2z9Yc_mzvG|tZV=6xcK9WaIwJ9m?L=zjo zxzzR|tR*TqJ%{(+6-k<3E|N6AO(bdlj!4q{Cq$C|@0a}P&!{BLdn!ru`&5$VeU&8g z4LnP#ibEX`j%Th8rhe9z9fazTD;PO|P%j9!Pi1g&FLzr;V-%7Mc1fN)3AXYbrF8X> zp+N<~(;UU2S!HMOyo>~6MPJ1x^)Xk%<=MyjedU3DMwWU|PB$v!%eB*&`fU`X)XIVH z%gjynS0ru0Ht@D{t$aG0mfAs#Hn*MkHHJZv6s{omii67I{dwkGrake)qiDe`l_UZ! z!1r)#m4D&vfzgAJs?eXCXP6WMQR<#-Y5B)og~T&2HGM4JMQmQ+dte#LF;S8{)(Fp1 zMgknC0H5Lkqr#u|^;`1m=q&ZM$(d-L+$cM4l#M1-63CMeq_6qYpOHyg_GFUg_sJwJ`!Y$JYNlAmh?S|Dh1JW=(wDM;WFyf$ z7|S}Rds5X;vJ{S6x?X8gr&u$TsmYyOr?QXaMad!+X5($6AFs;aCNGcej+KYgOJ0XX z20bK<@9W(`tziZ8FMw6RD*|}3DSmz}5&DV$_|vH2ix8eRS?Yr#)Uj;<4s!X+ zxwaoiz?U3GWs0LGS&uNCAT6+6+5ChNO&zOM<&2D3$CF79fspVRY}sXzxyBYg65%VQ zmaaAv-;Q67I0^wOD6tOsL6n1Eq3`4Vbh#^&w7gsY7nWCPe!Fc1}Ar=5{knR2BQSF8q3h7qIvC$`N#=_S1uoh z=phTfqmu+~9rdG0rk9#6smWFzBG#HPsG%iwujJc`Z0SzZo3CG$;p#H18b}n7`{kL%!L=gb4yd(A2)5EK= z?@z;71+#7I|KxO&M7h$ki}z$hl74Ts`Oi+yN$i0k@YKpH@l6LIs8KLF)iUQfWSs;t z|2nXZ$Y;?yI@FSrWfRc&o;;R{{2Kfj3S!7)u&p=<1k7u_T|`^Rc}0`hmAU@hpWf9; zT3)V`w7g9xY59&$(()&ClD_6oe?}u|+0#gx-=~qZ>}w3Wb+4p}7nD+Q9yh1>ey~3QbamnaXxAt`;WqEP~AGU#UPk zmPk9AdP^WW&|@-9N?xQ~sk*i`H@WYGPc~)F@ykRaL>akf{YvEgcyfdd@Or0OZN6nz zvXy!W$`|q@NjfpU2*(gE7sy1K%kX8h|Tp__G z9BQ(14aB7;k?-X>1Qz)%3)$BeP1TZx2g~JY(jd&iB*aw(HY)uDSRydsi__o)gaHL{ ztSP40pPT9kWzThde24OMYMWhs57Orwp!a}lu0km?=AY+@RLM1Po ztVnRCwazI2$BHacIdg(GiNFI|7EvGpm7Op!oHHd{5UixaB&>Shblrh$VX<&_57LpA z9eE@yS40H~2t@3~nP8zp)LqLuCtNs|t>j$^bkcf++r<8g$VINzn8hOZJGvDLhDxJ< zvA+PuD)0g{1SV+fTP~&&=P8r)I-sSysl%O$PN=EhZubBPVdSiEiacxTHYp) zw0uV%Y55cKNMCZNKckMc?5QIy?^8!w_SKQ1e}tLBpk3-zf!iHb`%GTK8KQEfTBh&l z&gGrwI{+eGIM38{*@zrl z;<~jK=I|67X}PP8w7gs$X?dGE(()a3q~!^9q?cr;H(lC`-RYh<((*oWq-9?mDdgCx z3=yy@=YCboM2MIWM4GZFrX-ny$@z|2nu1rt>kwjL9^x9tvILR*J(bmAJid2rP`M5# z93>fLEs?Lqm7L0Qq{VTqH;O!zD6j`553?*s;Bh|Lmytg`*q*WMh$E4PToe`ns}BO> z8Ffgo!WOV%(PkfO&PZFbN;sds)++R5a{S+)jF2RAOy)_BFGO<`cpEaU;CTx{M3f)T zK@!AU;8&FNfjFL=+MMgVz(m=D@dShkYwbRWX{T$|?!nc#K}Hh1NhCFBqKPzMcd^we ztrF)XI_hhqx@nYUi>n!H`oi8;`kr#C7z>R)87Brr0m11~lbCo`{4HXb9QjinA2xq3 zic$SOUCk;SBQ1YI9O+B$ z^k=k@mOX8x<$c;n%f2>Jy8JMz{EN#Ht0c62abR)@C1)2zs4Js)5nLSg@~s>Mb+p_9 zql{`$F$d_7Oen2>WJqiMn;`pKp9H+c_2nKl#?Sf2MH9ZmkU7`*6G~v5smH;3R(Oql z3T%p9A?Uc4sva`nJK9Lt&`!xk>Yt=D0!xnqc*)9RD^E4|SzA|Pc{0femb5Qx8-nIs z>x|V7dLRXeM$R+U%f9S>`d7}iR?(c8>KnmIqb5j*rkuG~*Vd+@V7`4V8;u($2m?%J zHRcC9mzG=FNJj$@$8srlRuQ{k=wRXis)9*7Ra1$G5|fHslwv-ygjFAK&c~W`CYNZ( zH_MzQnsQcAn@O<eNXEp?HGloT zWOy*w)XSKyWEg#|82L?Z$HrF?)xhfdJu5_0!FS2h1m{I<5zkG$L^MTFTLe#E(azW| zDw^g-I`&;t20x58b{r5Sh%d36SXxd=P575mzjZ1~kQXr8ao&|Ke;!q?hBz7{Ht%7imo9!8rwyyU`i zMXz`U7zf^qpV38H_H>b! z_vs=n`?^RR#V|$*Hq{L>E94|!=&qjQBQ%a4F1AgzMZngBRg*9rTm5!Zh5{WhT#2R* zaH|?&I%m3i0-ubGDH$`~RO*4b+Sq zF94HODncpcvn@qB?giTf9DsPR))XLCLCVke>-4v|on@-!4+RM0Mo<<>k6a z%iDC3mhb2yEl=noeM&_7iZ}fkRitH46=`{&D$=sAij?ad0c5%|0l6CZQWiaJXXJTZ z**X5|q^u-L3E;E}x8wOlt=MEK@d>#d4kO~i=2Av2DZ;sY!a-~#Uo(|UDe+NcF%of! zHWJ@5);C5k-1L?z5?{jN7~P3Y#Z! z5Q5wiP%1|Z{Bx--9VV0LW&lgknc!anG^QS~o}=B>;^mqM4mJN5_=Ha-=%g@^&KQ7r zzL8~SBdQ-^NN9@Z?VEzEg@Y#5$*y*mmE4RE|{%JDY|8SOP<;j>WyvnbieBFMtApi8H zsabF3MIz=ZGe`okNCtp7Ax0Z)_Ebg;bazoabFp8fHYrEo-rQAj1yRZ@s!yk}VT#!u zxPz=J|B^)E0;oG5>XSrhtMnq0ZHrts3jHQ)Pn`jxElFcrJMq`5KDZh;>ZV$flV}0) zoqfFkd0xu4_)da3G1ijKvv^Hy=|(^{sA(?VUFs!Qb+R$7x#AA!pY2Kj#c!n;Oo89e zK^ldve$nwy+(5`9Mq;kEB}nDTf;gfvNC3)#ood5{81V$s``eD*^rpXl`&w`M4?FpT z-qZ%+VQ>1c{rhuB?@uTq{q=f#ib%`56p?<7=Z*qC_6fu?+Bw*^t?YFCjaVog)YPfS zs^15$0TWG;tEo8{ zl&dfDJ-NYjsktmHQ{yqFHI$dB<_}I-Bxl)ugT|@MHQhjr zlXybxr%nht5z+im1Mu(FxS@!o?V3AHrBW2>sYCe^7ACwThK?T+@oklql&=zufHe@y zxt^Ay##%>=ma&64)PXXDDtja>EjaC}#Y>YY;0D3eRvUg1yaehSasx+cuD_*Dya|XNoxi`I|i1h2XFZZTzQbe*rc*dLl2}Pv;`hqw82|c90UT;qiX?d3((y#IC zdQ<#mto2kD)Yno)PMe=lR*{kr+yzuXfD+p>;}-#ej<}$^ z<_4gx_7VFcy2A3@z1X=y>o2te7g2noO^JH~=HyMuXvMd}<6^phVG|Fo#*MnE2z0(= zw$sGNMp>H$CT!_y`tYW$ z=Hk`2N$-tYTyio`vzQGCkPoQF;Yo-Kb@e?CEGuFJW?1)}350?G1gIFz2ICIigo^skfMv zXOVp-z@N*!<|g#37k|ip@5mty0_`wXt8(v@rBwBdzT;MF!rw+hm28q)^QG1k;z)2{ ze2+R?8u682{F1RVD`{UPZzi8_%kYvEMR#K^2eAnkz!Y!FaToEbB7duDd#~1v;a|^W zJ&DJd2i)0X9WuXHG;0Xl(ETYq0I@J1>WQ;KBko{bE$)qYZ*nqCU}iPgSMCZaLyt# z_E$jb32%Bw4(Zo#U+zucB!^^!@QgS86LLsj@uokahV<9#?WiIB_0#ux(|t9hRh6!^ z^(&(ZvHnt)56_C3fR#i2D#uKIfZUGUDy1FeM`5jy^#U#_b7@p7qdrOnua#eVl|f0?v(yvs2NG*;)T|;cft@>!7-)AYf|^%YTOeSWRvq^mI5RE8by!xRXkKu z>7_}RC-|pot}Y@F)Gpe5@A9jI1d#VBEgT%NSnXwv`&up}}( zemz9`wierM;sFg5jsy8@LXx{{yV?`p^o|{d6 zz3Gk^Qh#`t7}Brt?B}Lfqgh9nY?bVwt>eMr9F#}WixQz5ktxVEIrd>Tfnaj9gkXj` zh#?SMX8o0myxJtsntN>e`V2mj5IYPe4nJ8eoGC(b{01gcZ%00br<}y^jhs0wB%XGv z(bf&C583Y>F{C6ssv~2xi3eKySM|#B29uyQ__PsKR|o1v&Hd!Hi7_zyKzBpU7Gt1n z7vuuJb*Q<-HGm)_8c++#s0wZ0kTz=e+4pXd(UedOKQ3{o!3&NWaFj>rGwJjD(8pG5#_QcEDVR@*kZV z>>`)0Dl8cU8J^X>$$HMJ^{vW=qKE|8C00zM&Y4Bs5GX zT%892gJoRuSZV7J zmj_dyTkK>)gD)@>V?8;(@La1pyHwZII_KgPeD+o|nuZY-A6X?|mcqX1RgVU7557$m zxvO{IjO&l}%!liyx3rKVMy2{9%X3jnESr`=N05ntk1*s^!wR9j|JX1e2{j-?ry;mL$E85`gYn~87<5CftgZ$wPc)Z4MWE`kNvBGIyB8xbP& zjeO=(BV>7gedY;odPfWC*Kc3$P2Z%2WP|XGH~kY@NMG@$KcR*6*X!+QA@zrMX(9a@ z&wjtD>^Fu38#zm3v=JNVC?6TcJ~5I;k^O=yaC-^3a4K5TMxv07WMUM`XY{hHUatqou%qkjC>Q{Q00@ z4TvQ=)cAXjFmHrUg?j}hjBRwOQN?r+90?iD2Ia^+S2w+*h4kyUFZZTz(n7L9c*dJP zp@sBm-SmI{^FRK-|M>5(_|%_JMEdI`cNCHO!@CrbevN0}r&5DbllWPMBEY5GTe8+~ z)BQ=lfDgtut8WA(Hq24}N}LuxLwRNv&Ikz*&rNO;uhNw9>g1u15|;@Ei>IVoNSTU&%rFxpH_sanR#q8CWogT%nE2AO*VAtQ>{DA5_cE{Y1Qlnm%$5 zjUdn5%Sus?hKp0}l;p3h5`OejGxIRsdrJ}NqIM~KOfFpoqL8!*-h~u9^g1SVt^bc= zGeuUDO?a+FA`@kr{zmZ{>)Sg)LBQn%RvZ(KEu*z?O1!d|N28z`;F)SOI;7Jy?+dr+ zP|JLlTnM2vnK8chZ`y=ZSoaRd=RWn0BGRwlzTBt2NfF5g;TfO$gd)QCq* z{q>SNx=8)uUAjoW#m-YgeJNyFhJDK&D6 z^zfhR^U-GA%8FBbN)3>Jy{}RA;vN&WM@e=nqY!Bu^+Kk>j&K_vjPK{K)S0trBn0D( zkkS|C14R0l-+jo6@8}{$nO{A?7s;t&LUXM&qh8B^V{(srON<^qiRa|TOy-hEMx144 zom9srJ*v#7n)RT;tb<57xzz+83`j}rG}Y%fL5aiF|6Th~ujG}FlIk3OZo=QB!bHiJed{(2MG<1bpy}MujZ|bD@(dxJ*C^tdEyH*Cyck z=|&xEDp^_>w&bZnakpAp8jm=zXCcWcP>Y<#q))1Yrrb?og`X_77%Xk5bifxX*W*)v zWw%fG)H}LJzkd62pZX?UBpZZheCnUjMf$o={TX$nW=9>VKfF&Jso7UYBHJ6qdr4O% zXz;0yR_@g7>X2aF30(nv($j)C~*n)(ugwCQjj`HZoE7bJ3Pi^k1BQ-BqM{3@tj?{cd9jW;f>PTPrsXwEU z)a+;^^@sOqBsKdQNgUKsc?7;KmK$FS@I^q{l*MgjQ%_>l5JX4Y&!m4Ucw#(}F9KTy z2kz_W0wwWtaj*ZFrl-e7dnzsl^kn6Ob#V=$*nJQncTB@X6er5 z?b|Z5xlr(tq_u& zYJoc)RUn15Umt712%0<9fG^@SMIZ6^I60W1&t2*XslxWP)w0Y0MNeVB&0US8=H(hm z&D%7Rn(t^NHGe`Q>FYlAXOxnf9i^oH@IIxa=7v(zSVx_}7E9@-Z&2Tp_&$?RMZ6lh zgLyS)K}KmyC!{5)$IBAZ5-Ym!+qY+)6qHQLB)dn3ch$ z`<4g*V}W(YgEAg5WG;HsTvxe${QHm<-%(0RHMA*1jVTVa#z-N%@bjkLk2oRsiDDjw z8ia--qDk1wqNJopX{u+Uz`=^8TSl00Vi?vR!0%MMW)PyE`tDZWa63 zWT<_SOXHi`9XNvE+pOy2t8qicm%5{pVivs>Oi$n#y+FKKDwxP6ZuQh$EctEWn9Pr`v%-|6j!*!!xTjMS@@+cp1e189YRVIxm2GM1Eu^723 z7>Gb&6lMWhS|n5UmgIAvdRHl_dAU+j^ERcV<~vGB&7V+8`npg38NH-tM=z;AyiYHw z+1E?TRlp+d=VC>m8`ZDK4*2{g#!Ie;#JXdx$1+3M!eFO>Me4~2ZrGKL$I9le5Hetu zuc#Teg2;FphZ#RWKuul-^#d~zU4XWX(Lr3Q+!+SMhbK{wP$C9AG--iZvrqAUn;pHR zDC0BIwM<$1EJ*;Cnw42|ka^{kL?Eg}lj(+4M!NEQrlZ7+R~yUhV>WYZsn!!Hk#Uk! zu4+L94&?K>837s%2>Mj(lb_@1m2Jno6PsQ1E_ht2TjJN*r>rw;(p|Ig2Ula?r>0NF zR0B=%CV;0`$-~OM(HbP!In+<^j=X$4@mQY$HN~Hi*An)10&*HLdkOm%1t}Lva{8Ge zd~16hw9N6uEWg5{M$mkC#moRGw3Y!_qm^C+-}}rxGr#TVJ)in=y`<)CdP&W9^pcuC zp_lZ3|4;h`fBG|uNzI;OQu98=q~?ZV(z)zf8t1UBQ`x~%bo)5+zG=h+z~~@>E)sBq z`z~d90}cUh{r(Kq%*Oc;{u-hpIW0a0tIfZoY`SvAQ6;TlkBp=%8%pY)mB@528vbzPY{ zV9HK;DOoP*N#ZHo2>j+=J3{>5vu2%IaJ-umuI@TR*Dj&1);xJE)oD;$RtC?zl$j4- z91H=spc;E8`PyHx$Ahb}?@wFFf05|-Drm3`I4mg=Pc@%@c}AukoihecFrt>7Hg%^FGa_W?wVutfQSO zDAtqAu`PRwCrS>}m7%~ygcd3PJLzD;5+%dou=8Dbz;uanB*}19r#-7UgLTf8jOQ8~ z`6hn3RSLkjkQ%t(cDdq$9~8-;m}FvSd5GWN8yQxqFM>ytyx>Ke2N|Z#j%HG*q|{D% z`=tzOxIiQv0^FDn*5s(sMH`vf0%KLDP$$N67}SbovJR{>Cja*wfK{B-RkJ95nG^x# zE_Zbs$M35NlH`Vd;s^slmXXKIJ#F&r)Da@Nx0aa)cx3$ZUNUrlHE!gmr}7JvAeUr+ z)5n*6c*8-9;Q=vy@w04Kzz{H5!df*L=Pnq0E?%;)X$q!1*7obgGbS9#J!&k5a9+a8 z(8CE_35iu}C5R!orJ@@VNdOsT=#2v1i!yPREjPYiiF8l+)4Q5U&C4~Dnzv~tHQ&)p zYM#(cdXYc<8P%j_Pc^A|pK4OGubM8fmtKsvX7;|)3TVg@bBQnB@eib*-DWKhaI zb1$1%wecC3@(`WuX)a;rnWr)@y~5*Fz!$-GBOSb49kteYFdAT^;m;h)6j*?bTnL|W z*2wuJoEX{LX!0Opfci`{Rl@Q}f25g39ZW zc(L+03jQit`=#bP99>nMliM;XyyvNAl+p5ea@9s()a^~A8vjcl-QNY@qIoK&_52^%_ATgw2J3kKULL8_{eY#1_zHZW>f=H@j=lYk- zCtAGnI9Sh3^)NENsFp)?5Op!s`b*hC(8e^Ni)@(c?I?eMN5S~01@0vMfwT-@{f9c# z89D4zLTiG2OqRg6Mx7pbFY>oZJSQvHClBO(uLZ1!EclLYQsM#-0x(h{m#zNK+hEvw zy}?0!r?Wh4l#5Adl&hX)8o>-Odr`Zj2_P-`Aq>Z5q?E#0J6xnU%w+gc1?MYzeQjKYLj04keF zq}lN2ntF!bsO)ml)(VWSBS1=@u2+s~Q{R>Bm?sl(aEO%K&MIoS43EE#f*~85!=eE0 zq}gDc@%wmBK#ideW1jOI-g{R!sd>3>Qu8+5q~<%iNzD_wNuP3(zUEJVMl-3|(@bjK zr z94F`fJu9SZCsA*5RoPr-I4Rv)JB7+`WZzXiNL(i0I*2#NF2F^kErj$4g!%E+xY3I` z)kaPC=*TNS^DHo9Gac57jn`>M`#{2*vR~ejKqU{OMiIq~_(C zNzL0dlbY{nCN+OTGwEyo^k?*vnmxUw=6!le&Awhzl*{`%dg*Y)uAR%*USU%q7@V8rkf`v0TQ_Us&g)(3-nr9GNVGohEWsb%24IaQ}@WtXP zN8L$$;8C@LfUhKEVy?}Pq6N3~k`{r>QP7?1$OJ}TYr~A$aEX5iaL|gs8lbOQi zZo-Fws&ZE;J^)(}n5Gg^f_ZpT;Ko~-vZKmX(Rf(Ou*^yy$nJCJ_Ja(Vc1J4-KYvss zLUJ_a;&`0&0Fg6Z%HWal<(7c1o4;GEF=$rj$skRW#J9`?y!fF)KU? zUmt}A<6)_vPTE1hfp|mS+TA+5i!1zT5ZUxh;V8hCX+U{U)3?2)mBbJYbB7q9;(L^f zAO^6>2^4q%DzI!b68K|H6QN0t35Y9U2fmU_cCG*8%iQ3bqQj`A<@n$S*)(9VWQ!8C z+LYM0D%Q*jQwcfS^|%)PE0{I&k2BoDL^Z3)onr~GMqS1YM~xmHs9Hm#)gJ6cKY z6Iw|x@~1zelhp3%BsK5TNox0XlA^uS*D=Sxec zrXYEjaLG_R@Qirya~Y6`f^TL0ds+6}7$+;-iQkJC&Yd;CpMN$lhw<}C!Cz+?x0I;X z8fT~C*RPc1Aq&2vlN2raV;Ss#b5qSUX4MyFf&KD+?$%62QfNVLro)GJwKDOxY_8eLUI5ilI>j^N$Hn+&zwk-kYZ3aM%So6^;p^c_;W7ElrQTvu5i+;$iKq6c zPEvbICn+)_3PDmN=If93+6nX4+9XW$S;=!TT|Y`Bjlwy68F(+00Jd3BWk7TO?P{qe z9i`~>tD>5mR}I5q2y0Of0xVYLo@BeZm`U%#@&jJbq;xi#&F48F7=-O(vp(TZ@9HGA zFV{(G-=>q)en%&%{S!J#U-PFwqmk6^X(To8(@1LfHIhd0g`$s6Kz=H3LjHJEI1L4& zS8$F+9-Zw@<#7n133>-}O%CNPIHb8bm3#?=79&G7QLT1Si8ayj_w!R}#Q@4DflhbE z2MNfD5Dqm1SZAQEh>4%d5HT~!SYgS|`Z*xc@MKqC49QFbboiK?ov*w!hld|UASETv2rawq8i0)#-X;&uv zARZa1PovIL*5{=7CAZP5IJr1KeNfA{y`_;9nF%~5?4Yr}e$e&p*uN1FJ=JkI%Wo11u=z3`9atbE z-V5TQ)p~Q0FdK#1F||}lt@Y3O)4Li;?aMWi+P7&WwcpW5YX5{r(%1ay&*&qyd-_Pt z`}C38eSIXt-RRK_Wv?*;>5V5RQOAC6%@pn$iEL{=;J?WAu-a6=&UIip&iJNeFLQmK zZ^wovuT)6iDUc2yh0kCd)Te`QJ&5_*2x070qQWqO<(g*6+Xdeycb@9=QLA_~Ki$zs zIte%=cZ-t4q2^{&2`kF>Wa|8uxj&TYCF%JaIg~k2pYB0W-yn^BVk=B3*(ht(2pMJt zSjpVMx|NyFT{Wti4l49T6N?y%xy0MHwFhxf;3aVv4=_9rK`bf~}lcgvmPELYl2NNbEJC((ZK+0PGPfrDY zkQx}p7nf<;I-b!N5}9F=|4s0JEFWNEf0PehBgB|U(B>j?1>ZO-cs`4t+&C)}-aCoR ziJ79~W>96B+-z4)?UM!hm)>Ci@uVyHMU>2di>qdoDk^*^>dAQ9Rinm712=+gQ@(={ zCUYLWK9VF>29_Bq4jJOPW;DVBB80l%D5hFt2>C@ij$yrFbXAwm&2SRn3FlgroI(5L zB#szuk&p6`+FSZa(e`1J;IqW-IjInkpo^o#*6M1w@rHsy2n$kI6^rWMt}=dn5cqd5S|}(2 z|Hu0zTjY~n&D=$-YGMI^J=QI^(}KYdHFHOC(D;`cHF3w^*h*u4S2RKd`;nz4uUu=6 z8DT`%VO7b569=U&QoQ1*|AQ(kje8jHy`_&7?I6L^QNCsAmG`BLjt5aFXjR@QEH$;& zbNRqfpO3aaWf9TTXTkjh6EKcAV!qftM}Ti+lZ&~8uS{3zNedw8JUyg+Egt!7u3wPs z@=>@hq3o*r0Dv&o>$^YUPw(m@wJ+C4YTu@h)P6@FseM8p=|%qZXY`TUJ$1w2#m^??-by-O;1B!S=5UF6cwUWu#i5mJ^$$*zj%{_*kozgq1 z0`FC39V}l8(5w>QJ1XbhysD=%&*^d{iUA5G(s7gr;!eyp*Iea52kv*3?VjdhzzwCIm!Cu+`V%t)h0FMFNXR3jvJ+ z4uJJ+BQ^?%^tq<>tYSQPazvsTn|pcGXx51#jCo00-29Y3y{nJZzFZ%veVaZ~`yG9x z_HFt|H+|ZR{pp@QQu{uAq;_8)>2DY;c@cITWNog4nd^y_-!-aBMrxa*O+L%f<`{1E zc|ul>{3hI$a2>A~UBRX-yYHY$w}$*?x+P`nqdqa0y~d2VF+X>pfn!cGTvNT#s`k1R zhR!uY*fxyh*WW&5!FTkLoCFZRgat(4f2>u?eLMILYTzU^WPF0(I-#JUkYLnRpPiNE z<4BWAOCM=do^_D8;X#o4L9$)=9SYUF0C;Sqkny~2EkjsFc)G1V!_-GonZOm# z3uNEc@<#%tsqwH>X*v^-G6^7x+5`CTT*rZB2vJZVh$sCd;`J!0%78p#Pw`hNzC2ey zy{nJZzFZ%veVaZ~`yG9x_HFt|H+|ZR{pp@QQu{uAq;_8)DZTN)P;J>GY+w2-=`f^5 zd9Huc=&cS$Yc=2jLmd=@H(8cCQbPr_7sgj&d8}?5Aq&2vj|7eyA)Hg0J!UIS6>Y5*$p@8C+8Tn# z;{Wlpyunm!f_LMuh>tG9267qpSVp?N@|Ukk717gDt4dt9DK1OdZL4=V3aX534~Adl z7ye~OfcHA$i}L|h{{4S)VLlny^(v?L;A-5^8|-RWXNha1vbof@zeuHl4TCRBRTM;* zY3gdrSsa@QHEr*pLJa?&L?+9n0uZ)Leqj3g+O#avK_mqH{zdiESsM6EH%Dd=agD8c zPzKE=OC#IwcLZ+Y^LS@MtJB_+eC|*0>Lax;*GFpKrjOKqM<1#E6Z%O1?@RvlXY`TU zJ$}xm28+2R#)qT>7C@8@a?(ZoLHc*Sw9Jw9EA@@O^9lvQk;V#pfoS8^|z^A zw%Ro+4_-ur4N7sSc?un-t(_G~c%mn%1)gQ#!vyYXuYu@piaOEov$XnX*QK4xZW)C6V+z*9JO> zK*+Zogyp8>0sH}l0O+3$4@%4%O`2!`AH4Rd-s>zV|11C^mlg~kGxLN$y{nJZzFZ%v zeVaZ~`yG9x_6dEY7x~kl(MRg`^pV>4=_7Uf`bdM&*T1O-HDwSu6lqVp)FB07+*INT zhIlFyg#X2Kq%_mjPsmsZ{>^kbsYwCvhSkQrB*-TcnCdgR;%X~fZ|}*QCcwsTZS@xT zmE5Z??*cfM%cn$W%pI@5aaRNThz0L<^pQ@=Pw^(q6O~E~VFYhjEAq;rW-C{FsXp8b zeeGpXc{BW7q~_Eq6-`~WR$!!qh6HPoq1;L{p{}Rf}>)FPe9x|M4JXtRggL>egq4gZvty2^eh106YzVg*PI2W_w*~goKfe!mm*8lt&-s zm)Rn-WzZ;{T;J|-f7;#EN9ta#kJPiPk%-qsoT>>YTu`i)a~md zrK7WvC54ZqvJrlSgOlTlRRsbr~2MplEwFO@UhPLZqf?*Q@$6&m}Z2nOlUf8z`Fa7cX`Ny@8~0u zrT~~l%l}lfLVY;biIDw6ej(Ap;0fd-t}$23+Dc~;ZK#l9I5CzO@?Na2=o20_>twRL zy#PN}DL1i`rhvp_m>D5hJ~05b?nCVtu!p0Z*d}2iT1Hs&+*F`s?r_bxA6$(a`bdJ9 z0dp4l%3KgE_V2+>L8?e@+RU^S1q=akW#QYJ2=HXc&3HN>mt2^~cnFE`q?=w|9-Qao zB8jaw`6LR##Xemmuts@wB(K$GZb1$5QRG&<+)s=5BnRyOX*fF}y?8wm zh1{N}%zM>r<+dDZk(ZjY0D)7j%p#TLloRo`cwyou;7Lp}nDbV150@!Q{;C6DdWo&b zd@sUI7+X|@N%BaN#xmr~weI}jYTUqk+wvWqvbhL2ik1c~Ji=eR9>4_?%0l9CnAWjg z08Z?rJh#^;lioM=zr_?e6L$buZUP>fWZ0)O|-EsrwW9NMG}(KckP-?dc=6@6$)> z_VtknZlm4+w`VLLF)By1ZUfeBlr<+)ig+pD(o_~dH;=bvkt3USu7er&%vL5Pq<#5- zS$H4+#`m1c(BXj~ghWH9FK@w^4OOL)kZR(kz6);=EnhI+QyG~_d}c=SD^GjKg74@f zC6fmB!_zUN;$)3tLsL)8)z-%{W2;%Up%cfWZ0)O|-Ese3{n=|%qZXY`S}J$NWoOk^K9!g)R;R2YAf$29ZR3>Az+@**V&cxwC&|B^&35_2=l z)}AbF0vJh%A7V89B6~b!!Efp#t;)GbGN@)_%zViSu@9Ih1~PnIv1Bizx`eL6PXH9R zdi&fD52pz5kGGcx2SqrFQW_t3s@01b<|lFvy;_ETt?2bdN0O-Z2=mNu>i$fLl znDW!Ar1>!3drKcFQd5MBdYMg0epo#O2jqq-NRz|jx$wxj)}2??rcKGCuW!loIZ6tH z(t5Vmzo4>dxH{Lgj-nQvMOTQ(CwVB(8SCIgPV1zRw6)d9gtt$GYOP4Hu z4>I`NpWf9+>Rzso)V)m~sr!yTQuinHk^bwyK6j@#UD}J?>7G1N_da=~ZeJeBmzUy3 zQl$~v6mdD+AgLz~P0ftCVvOIO$^dfCFwTIPjnO86TfT*#T*;YNQKhCVO+8VlE1OWC~w5Caf+=vc!_3gRjn)Gxkdw?SaX$$s7YR>!e^GD&{9eE_|4$f^7X?Ifp zJTsJ(c&@d=HO0+i@AwI6wrnN;V*3CQLebvpT_fhF@^-`+1YY6hT`^no14`%X|?kL%htQ63gX& zB9@AG>FQh3=gYzjH6CjB2dChSd~ZoUcc*vdk-C@5BXw_+N9w*KkJLROkMt=W=}YeP zXVj6pJ$0n+ed%nBTG3#dfX_^t%gyl-1>VvxOIJiOg1 z4T$!^{)}!%9Vy|0zMnJ!D~59;LBN4ThqoQ?KKJrj>?LIp9_=6 zv6H6AvFY;p8Ml!!&UK^&uAy|wvv{Ks1Bzeyu07l%=>8y{Yc z8)^E6GZ_0G_UQBP!(VXD-3Fi z&r0;cZ6mi#X4}>_jyf=r5;!kWcBA8lYvl=yO)X@U6o3j`3TmEnr+3wnx|gdXb#GHg z>b|3n)cpx{q%XPCpAkpu_Qa98_lYBQ`{GD3R%_V_0&$2vlZsMluvhTitF#v4i|ClK z2RL2k2uz6IyGtJ34PhKv#MGN z{rM}B2a%L=(KYbsqXv9O90?m287kHRYm2=js}$juz$HP$STjoL6Zab_dl#tX;yTp> zfzl~}^1T-!h?~G?fMUKkP(9i5Sau)sQuv`R^|Bg-CLo2!TEj>S4)rc>R)O3Vu#y>|s6{22kt9oB>#uNI)1zSTjy4k5A*oO(CQH5d;>x5P zIS?!Jo#w-#EIzXm_bY{lh_PPkuX1UnGFyBDv$BdOeH8tLc8*nCA>1P_H}{benhg3a z-@$`9l2s6FC9=6W#_WwO?Yg%BaO zwY5m2J54mzlK{wUIgTOGs~AAh%GJ?3iU^SA<)#i%Dxc(&l%y&3Z#q^i9*&Wi6gZbU z3z2nKTPLbWf{@bL!#gUH4ZZQ&n)ZY{y{nDXy<8iqdz&^=_Z@Ad?g?$A*SOQ4kw)tF zq>;M!Nh5Xp(n#P@AUtGZxn1d8rw7A$5=-x_w*KUeZP^%3A?_E4vb~Pt+I!0iMvQn~t#fC@V;4j&&I%=M<1}DVs!173?mJDau#<KDPsx@rYE`-BOcCT7!+EI>WB@dd*-daHV+i35oi$AR? zeOYi&4#JL$k|5mOpo+T%p89J(d2MaQcJqIg1&*qk=DHe~sCWhT)V2El;A-5+PN5Jf zYMVqTpah&-{aP*FskZ$|gxaLh#6oSoMtY%#Iv|aH67>s-BV3f$lksMnnBw!thWv<9 zbLTv6mgth?{!~kz%|QfpuD5f2_$CY%5^?S-l-TRc0`h8`jRjgWqY1-9SWq`h50!x5XwanTg{y}t& zbRv(o1Xu`~@2(`CkKh})xDk^hH<0~4kq1G?7-7wwOYGLvGDJF=lKxQ7 z3`v@}RR!oY8z1UviK!@>H+4Yxmt|O$IY+@>bf`2l^MBFi({^>P#qM;RkNVrd;H|c) zYD2l4f*6_jbdUP}sXOiODkJqTS4QgJri|2oM;WPqLK*2b?(}Dbk@`Jhr0#vfNd3Mr zQcR-SJ}`Pge#SDkDZ=1hPGtikqf51JEb~q-YIy-%G!89Y;5hKU3@JvEykr&7N|v@s zw>y=@L)j0&%V;T}xJVaS^f@IRsW_s#R@8;)+DFn75z}(aTdIFdXWo_ClnYfr6P2QPFbw zs<=1II>8n}6)VhmHWe8bRgaltK128d#GQbN0HLd$1!6ky+3x$RaU(n3>b3FLt)%s$ zNR6}FYQfSWjjQ3cS;DQBlgR~GiFA-ulr07f#V2UEYPm<@?77GVhlWFDE5Q5$tUlDp zJMqF2SE>{~3G3$&5skvyOgd*i)7L2+@=Q1i|H1(78iFC78C-LRB*5pX>{i#EoD3* zCxKH%>sEiunRZ?UNht8*mCf+s`jRIRI;-Z%IgTzJ*q7-c3R8Go%uO zh(1(q&q_DKRAD?#S=jgt@o;e3lc-3>z+S+SWQp3F4}>`@vzR_De0)D*0)0Mo<{^hzz{o8br`tRr>^?yPa>A%0?PJc!gso#@D>fR@d)bGn8VSdRWaiN$d z!r7y0h897}MOiR-2c5iQSqO5MO)&2u(D-P=6XEh)KaX64>;di+v?|q91=eA*Dt}6w z23ZljQnkelDnR9mufFU`Sjt^}ZzJG!(l=fVZtkhRe6k?_lIfB_P5Vy5*&vK%1^qo z7RkNVdcJ#BIjP~l5kqAnx%m{kG_p?gL*?~PtQp9duWaE1{@Kuu$28JK{LBNbTYyUQonPJcGfr_W%l;BRFT}O z!sb7S;zRBl*rio()c2<9F5^k7&~vrZyQ)b2%TiSKR4Mm-b?Jx~GcNzfTpZ-&aLSmUYzm=*#qxA$5Z1;v|Q%3P%aS z2j;^Cz>Vl+6`;3FWllH2ss!{H=je@&W$H1=842Jjc1}(;aG|J6orEd!leO#w&%xni zC&+BmSSSVt=vE{PRWUYs>zDC=$bj#tB4K~sM~YobNP*+Wd1@Wb3S7u$SvPRFXuTe4 z?3*Z6K(b_g5yV-`Iw$KRxB;yM{1);TF?xaS%oez2m@V=UM4Ex3D9fE?NmJ!$wqwtQq!8&Tex&$8VA8|YB3^0rI<0{z+B(!x<*LV)Hv1}Z7va? zYui!sPB-lN<9(lSr*~D6`j@LB^>0%}>c69k)c*-pq%XPCpHW5X_f(Pk_o*WF`>IHA zC8@{Z(Bj;{kq%|J$Vi;=kC6hI@u}VjVia% z_O&k>ad=n_=9qBcDBwSL-)-dsAZD@VAeU+A`TcXJS6~Hk`&Xa$;A-4ZMN(@>#Ftb` z4s(?%3DZO(KG#cfh~UGeftVw}#A!lj)k0fEFCj8)wVW`DIi$G{js=jO#X(w+M3gu> z#*hpDR9R(9=g3ga(H7x-L#jX4+YOSUvO*}|0?5^0UGx*~^sXvW|8iBN{%xvA{dZK6 z`ahwH^gmzlravQ!)bEKR_3sl!>i0#FP-97C4sz103pjUnF{#yG<}#O1*t6W;9&z-QKa<7@RpMP>4mfA_8;;gOd>v=cWuj%GNZYc8uLrKx7M5W zatBGoMIvS{sfCe6#dC|TmRJaU9H;{~A#yG=9lG}KPqvDtBH)Kx*=o$bJ12c30_gqSQt#lMeiO)lQAL! zvC~uD^sXpU|8h~J{%xX2{dYu>`adCx^c8RVGnz>Ko+eWNK24;4UlR#?9F_$3X)3GM zD)&n7rh3ucJK%O0jxo6jzXfUPC2|^D4$P{`X0lQN&Ed3OsevEHB7KyiGftwri?0hljx z6CxQ|jF7!{kgJN+B51-?Z+%iyH;QmJKMK6x(nLy&N?)6nN#|<_&VYCEOav?edD}Wx zi@Hd&&CWV>O!rpLhw?m%4MzZX5@YTxIy?UOC{h7OFP8})>*&n_ro+cQ*U@0Z9kf)` zPSE6yq9aSv*H+^&vb~~j($um|SB~5h-t?{}QvY&Ir2cK1Nd0#-k@_bzkv^@Qe#M*q zj3iROCyCU*PZFu$mqdd1gD=S?9#m;mu8hh7hp_)R7$5jr3SoFh@*`QtG^6TUD2MTr zh{LM9ISMzNm7xYwBNvnE-lmKuN~D+imoPbHKEYE5mHd1=c`s!Na4v+_I2 znx{vzp&dyi@YvMq@NFv4u1ZVrYN=pNWvDk1Zkd&%@@FCz)(yjWaY7=33O+R)Qj#ma z@mQbFMblk5h+K%RyqWQXNCPwyhor(s<_b(mKHb%Bnp7yBMfwKg*u+DM?#NgU;$d3v zElDH_2f4Cvu2;otB0RFFG>S)Ag@WR%()dL_O1K744g_+kX`)$;WISqpV7UZ*Vo|dR z_~b#^XQN`NrBqr;^7i7=FXkSp3Czu_OgE)trW+61C?>#b`evrcl3uB8Pk7V2l1Tl_ zC6W5KNh0;%kwohMge1~eyy?#XXv6piMx)?_%~r*Xn&?^7BVUb-x6bXVYuVaV&(1P-ydyPT z{z{raqY&)mfJ6+`eerJ?yJL9+5{qzz&mU&%5&J#tC?fgJ&cnZ;I3PXXw?VmJE78A6 z8T%@vz%mxO2u0MRkh8j4XFf?EM>LDc^IZoQ`D;=F7821?V>pN-<4p7<(2)^Ra11c1 z%p3ojdvTd}HBZwu?Xnra;9quY34KG(j8s4UeG<-)9Y4{V0NdNhtUvQ^Cqlh%@DI)dnQ$!kW zC?Y{;8Ozl~X@+xyn*!2PoE(ypS}~%SdaBQmCgD_xtB32U`Z%MU!m~u~dX?%(Hc5o7 z`r|f{v$&u@p}E*%D0{;<5>fL;Rx_WJGGk+cUSUD!vY-&C0=Qmk43zEq2NjWq9Yv&3 zwl5tJ3N?uLnR}xCP1y;fqtgLL1WJh$&UGl{3e@?886Fjy_{q4q^hexaCe9;q-lwrLiwqt3$mzo@{;)cpq*lB7r?ek$0`v zj(Y?z7ttv4#Vp}ezhz^m1$(VQN8n+rshL&(pLN92W-NLSI6}Avqn)pI)BRYV$Iu81_eO%ZAMjv~_V zClrys{MC#wCh&0?#M1rPAHH#oy!E~#f0GF7W835QpX7*I)IN>tkFOCk_ zNrflipInuOlRTDrPezJK@5+Yd7L!ZaiO3boLGbx7aOIL#IgZ?QiV-G1BZtG<3Bx{# z=Mr`)(+A^ulsYaSkdwo9ns;a27+DrJ`gZ?T! zW+AmWLn@vGMk&5&eaK_M1d=fltbhQh_!iE$m`Nb-I8sK~iIB?5FhXnZh42aooy?r~ zC9L61_c}7}uf`2`igO^{A8W%09_Ph~3WwS-=>R3#66kGpq+Hwz@BvW5#K|2&*9%2~ z>27K(Y!wIJXM4wb(fzyw|_DO0DRL#6{VZ=lZKg*)JP( zd5VWL+*L#xUap8VyiE~l_>Lmd@Ps1LYuxG2C?XAeib(zY6p@B~MI_EW0V_EK_{>rK z`*03Vb@DFC?t<#@w{k}~D+7^yGR<*Q*@L(;+}EMb{ogVw!IXr{RI`A2$xHs$E3a^X zidVvPYFCZMLl(W(3?vOW)zd~*!t$n*-j`tgQFpqdh;)&Ix`_TWNodugI^lJmYSwdC zDArS}F$z0`$lNNWV$B=LWOSxi|4_X032j#c9Ar&Xz)iS{04i|xK5BRax))_@j zIw(#%2txR^ai4IfcNLL_mn$L-Z&O4XzN3gV{0T**FS*m7QA8T{6p@DaDIyK~ib$=x z!`b^em#1A&gg-LZ&AlRXF=`g)gEIckI=`Wnf!7kq!RApdlyjINb)I7l$( zET@XIU(^BP*#a(Jm85_LW)|1-3OtARrXQDg0zKd-(T|eL4KlzU!M19}R+Zd<=a1r- z1%F_^ag1Zx@j>p$xbqmF+DkHAKFpzA@VpqLnHRz&f}u0HgNb^$X$b5iG;S5yMEm6G$Uf80YLAU6@Zydl5($Fus3DyRn7!4kr1T{l4Z~!R^6pVtXl}oeBf5zC6Lld~AZJM!Nfs! zU&tb)qEIs1T4$b|Yq&{#F6Ac<3RVb}F3LO!(UO`;osQBYR-4~8s$sXHNu}rcsL}F9 z3IW(G`+SPm+#9AkJ`O%~ zV*cem1~qOSm9OTiam8bNSE{d~M)8~!{E1J0PuU`}K$cU7F}y%vgRM4Ve`S7MgARfP zY7e;R`D0X1xYN6eNW;q&k%qS^A`RbBL>it@M0$-o{TWH5VNViic%LNFurG-e!J#Wa z_K^*wLBFe0f>p>>+Tz?cGWer}_|n&n+2sFS8Ocp}SBQwGvOt@PNFZG&<;>)VM+2Rw zdU9?q5pH%7sV6sQlJVkNNhGj^ys2zqqyn%^yt^`_gyUq2d%^c73-T`!2f_&1$GAjt zRIKNvESmcw$Rx4jCy~lp_0$I!JeBRXy&F|FOHPQL#WIQ{#>$flrO~LZxe4G*$nyKQ zQ2@Zvkw)?JwruyJT^3zB5ozPhNsd^(UUvLaGnN}^ALUu!l0;&-LBP+okw$^NM{Qlu z=Ww$4`BW1}d`Ij?1{i8OPN}bF#)Z!H^H#X_CKVOm>%g)F(D^-vMG(>;rXT<;4l}n3 z05J5my+R^T#%l&yZp2f4l~1OzX8Tx%k19pCM=to>o!*s18eT4mG`vj`Y50yL((r^N z(reu5&uAhIdzwhY`!tb;eNCiDZwiURX;l&EG6J0KooDf5ixs;*nL#&1QGB8kLkpsMB{MQ7x9{V&%6j5Fvy%CY(QGkFwwZpgN$uk)~MC>VWYk`7jLNyH7c9o+i?vSu~&2DH>OyL#7SYo zNqAIhL?*X4Q~@g8oncnH2e`!q_4QspHW2`_f(OF_o*U{`>IGt zkcD$g7J4Z|N)DFX2=k?q4kw34BTL@ zFK_gG>Vt!ROMZJQYeAlgGi-!qVX??^8tDaLCpIybPtI~>MR4-tgUsG>M-?f=Bc&Co z=}Mz7j9)CE8j$!rNWvg+nsvi@p7ggA-a6H=J5_~SWrM)>7M6<&)um>Rx+T`ORVg4T z(p>u}d9pa;VRMr?<2(go2mU?P+EQ4^b$$OrEfQ|@53k0)JIxJoM1M<7F?rWTX*!d| za2Lmz90y(RmYe98nz&7lj_0Rl0mDxX-kXZf#38w;n8gsYw-ZuNWNM8J;;~N90%`rI z+9}&5dP~Qe^yu{e9xZiOrk*%$6Et#`Lmr-D_KtT|k;a#+B8_iTMH;`OiZuQSRirPu z)1OgA8uwI@hWDu=jr*!d5prAVq*AxC$-O8uH0zX5dldh2R9z9f5>5l>2@J{=*QK72 z;8^HTl!yBIF>B~4%uu4&@`!KB^mIgz&b?(v;SBvFm32~>b#t_ErQ4_(@Q`C9X zbg*4%VM)D)xJwHF%^?@$ZZ+mchp1OoWmaZOP>@QEdQ)@bBG24AAfLO_yQ)az%Tim)z;ks3MJfsz}58RFTGgRisq`E}=FM-Xhc}H(vI2b|>9enTs!I zd5~*LRgRwnGGZafW7ORmaX7)qLB=Fu4)hJuN;^MSK~%@3M9)m#yy^D5S>`Bc=qV%ib9kMsxBD-c_&^AT*BdM z>a`oe1Grq`nZOlGEhJl=*e3M*rH&7D0LVsB)mPbn)wTzuC1MFJ8@Pg~iRF}W;Qxui zRou^=bW%lHt^oKG?)0uI()e;!r15R4NaJ@@k;W%fkzSLX{){TpxTlIVyiXNr+*d_P z{Saf@lzZXyM9WMp*@(E{SOm0@i?*^Wxn)tE=9@C4lNiDgic|fz6+hKiq2k^NrZ=7G zAaZ<$+L@WQmY0Q}-Av4*2QbFBZ9$8MV4^xRW*+{zY*@xmK3)7W1*YV5mHViMfTMbj7IsjUvq zL7VER-XBtD;sNN(;mJt@lB1D3WSMlwHe$jB$`RHdnR&jQXptr1^Gxxn7LO@QLVx+# zx*y=}SyZQJG97B$w~Fo>={{OmFl25b)2X(_wpR`L+@0Q4MH*kOiZs4W6>0pAD$@9b zD$;AR)1OgA8uwI@#`mcrjr*!dXLWn_LW+Ec32+;E-Jnp|hW#wjz`-U_718vqV{evn z766X3&>`qS;kk0M1$vJE;l{<#!-ZnT3Dfz;NbIYF0W>dHY~hl~a@7w( z){S#!{J&hxLk4_D6)9TbDu5B*;~uFucLG;QZOG`b*KvR#d8eAWbda9Qn&T%%bv`8d zQk~N}NwJJ-fn0@9<_XHHNt8yx!USQyK@N`+TI;38!>$AYfUa~@62$%*)fRJBi6EL* zk5;m8sUjVe^0GZ9K`Oa5hCB0N*y#))FjFe*zv?~JBNer@4)fu9o=vf}0a;JAy zk;a#+B8_iTMH;`OiZnio5wF>4XpG-T>QjP$7)2r=2=2wtt zL>rcRM>B*8zQfc7TT>@(8f$#<#-(i4@F>{3ql$!M#^&OJ_X#rWXoOmj$oRsPu*;|V zMn=NVPlDK4&q;peph85hWVk-sWe+$~HtQkt~yXwHn)@MvJG%chabU|2fIVuPVWY>D1RZV&)={G}d#-HHN*)&?gJB zFNzcy+JnX=c96@~zHB`AK%dJzV*I0&0GsGs>kyjoSTj8cY={~UhzUKQNATRBx zV~r=I-LZ^+bU-d;%!vbFQn|Hu5UZ6erxA*r#*MD_olEwir;i_V_~2^XzMH=5GiZp&l6lr`y z6zL`2^k+1Y#yw4>@qL;|j8qP#sM5JWirTLCS|CLL>aK$j4ebYjMtU1|M8BqQU^lvP7INt zd&Corp)b?9iWWIOYQJ|hk^a_2D%jMl;}CPe4BMJrU&475P@DT3B;MX;ZO2(o|awk-9>(iP$z|W1S}DSQ8g;mXJqCd9PrnH3V{~&2~{Z z8+!FxQ^3-O#vst37kvp2$CBqV;;9yfPx?Yx7Cz!ugsOy+TaD*$LRy5>cwgWVsxrgJ z271Dq-ql1JU#^KXzD*Np{EjBl_=G0XOT6jNNFt4Ul1StGB$38_NhJJbBeKOobj(5d z(WFMkXoM=un9cV))Dt*_le#l<3$*e@JmRXV&Lqy^qEcEeP2I{Tgn_h{jmIPUa^f-SvVg zrsUk#idlUxqQ#UnF?#3vD?BCtrjN2MGaj`BA}fGH{29)IxC<{%1OPXPzun3~7z-f5 ziy$8RPO-|Uu>orK>W_-jBSn3(QhaJ#?%?6V=`Bg5v#vpi7IdR+z|_yR?U{OBbyYqW zXkLU~yzjwfQVs~=MpxUC*FK2Q%g=Ku9YL_F%qgt={z+I2gi(y=Tt{zqc@t1#uJ=8P zkUT1Hrmzwqg=+O!@6I;Dbikkrjqf>cdRG!@e7Pjj_%=zT@jH@8;}eodU*RGBumAY( z|N4SY{TW@PaZeX%e4j4TxUY-Ui7yeU^|mZ7CLpvJvP>+ivWZB#5YmdDu&PFfWlf{T zTE~?D7KNS}1K@rWVosK%J=6Eh*x7VbX2d@QqgkymE4>5kwt_*&la zQl{{r%I@@NPPC(ogh$yVQqLQtmbsL_!Th#L0FozDk~`Ka^~zZzo}uGnf3-g6Q}5~`jW5?l z8sDaiG=4`HY5YUFNMH1+KO>Gb?TI6e?-NIw_QjDn0F*#D7+A!}^Z-~%JB3UHMiOn| z1oE9I6$fQZ(HpqbAtxNhG!VQ;!GU8*5G@h}hupU}MoU1LCcd9a@F02xIT{`#@qr3p z2ife%E8%yiG9`F@{BHhTYlM`qBKQ5Ee!#RNj&#yYQ%$t~%|#IoT%O40V!oD|p-DWm z;Pl7(ZLXpv{t-fvTkXK$=UTBwzB$VL;-ZlhU5xj)^(|-R!Qj}r`E#gsU>}7crMVx} z8+p=ffDuI9XRN>FY0I^z=E2q2_o<%mH+@Y9(ibU$xMIrx#RI|z=Z-YI z-B`zg=kUF3ctTGO6kfIyk!;ohB*^24MOly|0|?M)d*eZuT4ua;@?ZihHs4mi%?-7X z8>U)R7LU=ok%?fp+gp-Ped=^q9BF#FIMVbsair-x;z-jI;z%#dQ-4MwY1&gr8sDdo zH0>)S9aNsdOY#4Ny+;{{sSL+a!T2V+V{QVO>ah9F7_!4gP!f<4nF}5Zv$g2hQ&o** z=%uV?C(9aMZc}E$H+bTClJ~7;Ai#bj$ROW5i%ccE&Vn$91G}icWQbZd>K_R*l6ACDOw30gAQb-~v%k|;- z1`dT525|uj|W)As>Qnpl|7ZcY$czA5y6vS2vY1h)$u0Z#h>I3x4AwO6V{a_2K}5=c}?r9 z^VDO#Z!{A?zppHvhwS%`KvJh9q*GfknOPJxhBBe8pu5Z~a3E$){XUT)5N(B-XcZ5H z>#H$r@_)Gn;8=4!NZ2U6T*fKtXrz-_D@-vNHqiiy8L^NIHSZfG+$*MjWin%;!REXA z?V>1Qc@XuTZV4m>o;lZahfGEIz*dC&bE!e3aDA@rl(O?&TRl>{Y}&KFMN@Oqk=%r@ zI!TXcBi@k`3`?j|HU}-4^i-Rl%sAi;BPWQIdPJunB>)oPTT|m?mI6(P9!SV@xdz8i zc+;Nt@qGeG)4o8`ppJN)3<>5z z#1xEb+EM#5s!37CIz#Syn?&_#q<=tp_9BksBG@tn;-+j>E#sa|? z#}XWc70L;S2DbwZ0|V49A+RxL@9j<(&R`D5&D_?FaoN z_XiUNDP5g(ta_1`qNfHF{!|flx+{=0y<8w^dYeGf^c{hu=}!nGeaW5vj6l+~Cy+F~ zPatX97f5PE5?q8dhF!9hDT7lQh6_23B#>~tnDks#B9?CMJ;TW3qStzUuZkURxwBzZ zpghQ^rr5NW=^n+8y~rjpX2uXa7^h7xs_{0?Qk$O4<|lOHnRI|4~| z&!i7Q-leIL4pm{C*h;F9(W+4B0Fx>Vv5Tz#vDN`cH;ZGP+3oB7B7KK5WRD0*u-ZNe zPAlG0FE>aPbrJguTimNsosf$(hp>jf9czUTN}Wiia_RRqfqHN?_T4FcF(wB$n*z<#DiyRRQzYTAmQKCPbEWx~t=ZaGLcz{9!Tl-}CIHCTAUo!%8lnqDrDG`&qAY5I;p z()1?;lD^_jZ@RP>yVE^^r0IPENz=YSQdsXeAM(s|op?9Nq?MBbox)r)%ouadjU5h7 z2}fjHi=w7VtzlI(WhB!Dk9)k7!A!rocp|xwbuO#Jx2Mm6zf#tP$&FAkc1u+y-o-#M z5M-;&DMT8D8@pWrpDf5f-D&O>QB5jLQcFiLLjtO2g*(x>Z)+w(^T90(7EVLXp=Lep zr>vVW&gd56QSc??z*u1{KDJwwW5NOa!9_&n2wo}h!tv$?HbR3_?Jsc6lQM0d09G1l zr={K{cx3YOoO%`^|wTN;sZt~iX3~Xc_3PgSR`Aj zeafBQ6-b(1E|4_6O(1FdjzH4%gh0}3-09CKBu#q?Nz?ljlBOF9Nt{UXiL=f+SPfxl zQzsr9kQVN?Ofe^T)rp6j#Pbu}3%TOE$h0o121Ws&PXah%CtyaA!N`#YIuul!EVQq& z`BtycLdb#pvKf%*&Y5A4NF1@LU@%PiToD)L!HnIdk9njhN_Fo1uT z+ODI?2tdbO9X(w7q6Nko4r)|xm8lM5I&plc*>VsJViOc3S{!RpPjZ;6K!^wrlS^M} zfg$*Xe=P2Dx`p=01)saqy9!Cu%N3HQw<#n|-%&`K{)9r(m)z;kNF+^r5=qnhB$B3m ziKLT&Hs5#XK6OrWu7d%*!G*U=ps)RvuDZJ$-T5fJPPzf#9j5YNw@J(|k{PbY~KQM}b+^gp7 zO2PWr5m@a-_(QAkh{9p#TIjJXGGWswS}~54pO7=-C!oE}LQ7iFut>_5M~S_+B$5td zJdG;;<2-xG88Jx?Xy;)6Rd_4i>p+@2M~~~6;P6L zN*c+JdgfRLmK=CcjVxK$Shk0=j!PuK#YE=>W2mtQIQFSdFczg3KZB8^5q_;V>eRPE zjyfpQiWUT}XVw3)UYPW*3^>o(y*uNR1^K5tB}vHzU|@c0&G({W72mliH>d798@e9r zIe~~Z6RUp0n`Ld8Z>1IPJ&uM4%wbt}aK1%_I#RIo4CC0Fn%$`Es>?Q6B|A$2*{sxw z6fc*^X#6KNqzu>ooCjCq#?_~6HX^L1Ui%;>7jQzZTM*ke8iZXPmfWOEoN%c{WeRu> zH3&98PzWvyXGJBJZJF!v*4p;O!nx+*P@^JF3+Y{%XRh`m3Q{-_SxCmY)u;x=RJk${ z79bT}YA9Ho4`hw4%D0mVDN_yNCjhj0l-au@kA(H4 zQk$yj@xu~*o`f=& zvgw=Zw@H_<$ePzl5=uw)oKVI~@T7FfobIz=;mCU66#(WzQ68;i-;zf<$!UhP9fNiT9#xffS~mNgk_8 zDc=&EeEb1H&+)_deXL2^U&sR)4@lwfz2nyvSqwf(?y4rCxYqV#Z692XeRmpomH~;ZOia?tWwBLSaj!xI*lMCfN|vY>uQ#h# z47c2f|94hn4c`@MZCpA_NOZ)8ztq38nu9Za7MLU!(zef08ft0zWUm9>s=F?iC5nKB zn+=eFo5kfmrHnM+RYsa$u8cIlO&Mwajxy5xgfh~n+3ACcEF&3mFq)B8k`=6z8l zBK6e@f6bhiq&$9l$viiZ`E*BBJHGR5gRBl?p&%~li{flW?aaa7ShU7d&eB=JVBW^3yh zMyCVFX{?1OFXae_yF1nxn9#E}6QAMTqf5&BVlFtCTH5Vee|f^4-W5ffUoMI?zfBZr z{*EZp{DdgdYuxG2s3OgKsz}rORFUR=RixbEDZ=3*<^iXz7omsGkT+OQ2m?-`2KrxM zSeZUtXxcG;KaF6Qza>|UrYxov_lP^dy{oJg$E#c|z%p5@+I0B#bTD)^!ci=ZO)f0m z1_~L1j4>NR)h>b>e~srM1HPk*gi}f?#P^8l5jnS}98S^)QLti{DW?gNPe;dA>yQkV zOqGO!|Ns6MS{ixmMbZtq+lSov@K3uRT}Fy?a<+I5JWwN!4bPmFXNI*h)!g@@gc00q z_Eo^b3gAe=mOb9f{nfakG1%#$I3K$~HZ!%;r8XXJhwT*JuUN87N2gs&N15ALx=3^wVy*N;M-w>XNG@Q(ZG}M8y`x>c(Bvv?e(XLi+Qy)bno5}08TBYbck^S;pf~2|DKi9gbG96M8)lP6w ze8#0_D;>m)?OZzrWFWH0YyBJLBmi(_+U!0;B68`74e#+@?ytrT83#bit+w>4w0qD- z%`H7lF$uT&v2u|b&Znyvh=S3vUM7ml!sY+Q{Gv>Za|2*tY`?#y5u6K z*zNZToez2@PEQRnovNwnj1^_kw`E3`tu5o6-gAQHO_opAi?PirNhP4b1(0ko68>+% zbgkJtK3Y57QANUv1zE(EF-G8O5i_x>jaDxzcE_^aSk;5(X%eg&9t-n#thLQe<5)m! zF}YemM`3E5~>jAU%lAt2!r6DCq0<~alZijc(r6G*94xjc#$ z+)_nKMW87cL9S(~FreL(n6;^T4K9Qp02)$!01<|})dD0EBqpK4+1Fz8C-}V%rrxGk%&I5ChjKR#MJ-BCr#W#VT!83CB-ZGd0|lseU0W<*QPQ?4#h z4I3Ph@Fh&zORZtABq&wqbJ=>}aGc&nq^P7Ju9360m$K=R%Mo)J8=d_{jXl}sX z>W!i+KwW?Qu+G;yt*BH1=GTW;`bE1H;#fp(gcGu9BNS+$*LO1s_nQc z-i(+7F%tFOb8XPmbJ^)#Riydlsz~$ORFUTIs3OgOLKW#t?(}C=k>)*Br1^cSNb?O< zBxQyPdD}A7lWLwvkyb#l(jz#RRp``2M=qDP4v9io`0uD5PEaO(9>sCBxvT<{Ddr3! zzYwyA63MsYm_({1g=ppE(-y;7$F?=~w`tP>WWLCD@=3-((81Uq1$%c?k&YroCY4}} zP0dXl6xIrtBHJ2w)Yl3y(x?b*fqW7)O{ll*(Ma#F#*OThFK%kHg}4rQfg|N5 zPqkF=;Q&w)>ycjL(AL^ctEkCjp$9d=MD9ryhgAjcqZ(WS`beA#w?;WTC3tg;d2&)*Br1^cSNb|lbQkvHKGTmwZ0Ly|N1UM+zcCe8Y02?Vl%szo>Q??`*Y5e|| zHo3?Gf=WTOAsj!HQQg$W#&6+3P<;b-JS%5fRkBaiCV zzz_ZMA`h;{4OJw?RwqSv@%Yp@+S<}7=8m-6>q}(9c*U5;&%t?l> ztA9a-)B|I$W(x2DFk5&tcpa2kpOzC^PQ?34qWYdxtbY(7pzR#QluwH1LQtZ zK^6BjIUheUK}JNx+&Uw86lb0bCx4H}>S>|CJW77qQAMI;mCNWRIhmo>1V>8Xl0w&7 zR*dxtOIrC`f(ELcV#&73!TDYgiGx_U*lt3KRs_}DJ}Xc<4i@e%PQEFdp7tvC6k*D# z_FamO>>z?I_K_?ynQ(43QfaVN^ALaaFxY!b6)An8xV3X_S}KIOS4OS0WPRRFOehnL z3uP0gRsv+B>@@wHkOV9st;0QC4 zbNx2$J1hfR1m}6EqZja~s||G8BNu$`PVcHB%`aC)n%}01G=E1GY5o(cNdNl_-t=cg zk>)*7r1^cKNb?O*Bn}k^59^Cf0@P80W-Wwh-*;s)@O-J$sHcS#0;`#eX*lXCwdGbc zktOgIvl11+q>KD<=%7T)V$7t|0xWSYKQOD98l`!WLn0vzs;w>!#(a_f3my#LAGQ5! z!Sf;ey(5Yg#Xn*O^E*#v1|yV)hehu$WSUc!A?7x)n z71R)9G0_A~(b53$J=fN0l|6?XO;CHTt&`T6xkeS9@wpBQ1|cPO7DIV3!7I;6Uas0J z24T1&@sE4c<*p{u@^Ve24-=-$d*swz#-C3>cn1EJ?lgt8$2{K13az=7T73^9yzmpyEy%(7| zOxsb_Ewg4Yh|z&RmT?(0l3baZ(P9PYn;$ z#lx+<3mHB$LGKGu0X~wo@;&UnbZb_M1uA<~1{r-0{>5N2!oJ3anH?1coyBbm-a$nT z4|=S3N%6C-=Mz;#6_IxYJq8C+-2kM6l_a{O!S&J0PM2GfNGT7pozCTHSOCh5(Z2`g zmNG+{n}FKe+Wa{VO6ODaH?y5^lc3{J)07*5`g-Q9ASf&%ZR|8svE&4ifC;DiB;gy| zp6ofIqW?d8Z`vbEvYhFCp8G2ft^k1~$eHxr9fCe^xPXLaA%=IfKoBl+?Rz!7q0bS9 zq@e$^3_7B&@}{~Wio33U7L5naji!wqkr4MigM4;u8=TC( zvu6&IHpzhlL}W#+eq#3~RHsUg*VKDYTS363vuuIn!c?CgZ4SY56?!JfQdrBgundh} z9Ea!6`UpqXbH>@Cpu#h!ebiBm9qUs?TNIrR+CL9L4G#ap;LLm)?P$v11%stR?`A*? z1kes*37hGnSy4PBBo}NS6fB;?wogE^gNl|oF#H=0idYvd;(FweDt7#be-o{jGk z6pzS_8_ft@+A14Z0G3E#i;w+2>T+TiVSqR*m>yGz@qqbWPH+ES5KTvSL@MGtB9+y4 zL@Lkhh*TErh$IqCU$Y@nX>Ev<*V_=Ov^PW|K4@Qk8%?~y6mvBdB+E!+iTYr>B%t?) zZXIF*agYq2r-XMu^x23W^aeHf#Y2q`m~)9NR-nPfC*A@hXXw3g_Bu{FkBO#2t8Z7`IBjl> z>J9fBjW>J;wKO^lh;zt=*o+KCzU}$S&Ub?EbO@ai`41_}Y-j_04ajp8^Y(Sspvpvl zA@VAmZB-SST1~KTtRcWLJ(%?UP_KG+ZgX!#qz$Xs3Ine842Q+Uu5+YhO<_d`OwA%6)!iV6jJK726S+U>|Xt7LfaYKQ>vf=tVz!8ztQ@Kbn7 zdaDWB+7wj@z5@qDQ4lR7))S^=9LYN(+^)t4q{Ans79JTu0DsrvK^YsXTOiT4i~*=v&=` z6sg;xE&@KIM6U^AUE(8auVdNMq!&*>Z8a;xx@^7aNQ>$9OKjOCW~w+t)T3z3&_-Bn zkx@GW-CY*TP0K(YN7K>$kc#+zNM*JCkjgXrAr+1NkpAiS_HjJD8`Fg2X=_8IvfhSB zrM)2%I;NQ=-+{sNfuZl{r%`Ior%RBG9;zYJW@(K4q`o3jd6+Hg!+rJsw6A)qCJdQ| zra^dP2^~cSZO}{woE{@zkVeC(iCNuMpG)s@ULNktFqrYcCQ10F=oEok(Bgv! z(jGabl3`b!wBZ95q26QuVjiN47}71lSP*YIR^Cqi}1Gy};( z3hy%zlZyoILh%zhkCM>j+& z;u|8B)iy*b&uoZPG&V$<7EfQZBT{MYh*Z|w5vjCyM1qkbqFDw78n)>swV%+w*;TLS znF&)ZgzlZIE@;p8Zbixp6GnUlYeX>siXqH%S51<3c7>4wC^YpGiSFFg*Z`l7m;v{N zXpWvN^(k{bH(VXY9cT+d2w#j{MJ@s7Mye@}X6l{st^Ly;JdpO=WXScp>LxuSyii^s z-qEW8-~!RZ#XUf6h|-E}>X2{9tjy+YXg@hu-7s|p;2QC4+2k&U8cEB=NJqeEkS;q>xhha*|VN1aYJw^fjIOmZbwq;^d{WwF~9~Ghwd^$5{8dQe}gz9x$oevzHV^uTS zQ$)6))cwL`mctz))!GIXKs2jWwRN;*P8XjAupk6?2)0 zxv26eXJPyC;fW#gZrDy0^lDou=5V5nd!nf*TkjU-7l?gqN(bMe0T7%yTsz~8@bnOr z&=aOt{NSg&p@^y+&m8#zoKHn9q+1&e?_h4-jgg8+tx6p_#`B*SQA zxVm&`hiGOvlrR@|&PZ8thL9!j_*)H}$MJM@OQa&cB~n>!OQiD5mPkcoOQdP>^fh}T zmDZj}WxYL-N_$TvB+?|%;49;P4y?C{T7v7O^pbFNiDUKA#BI9jD-oS(&V|j(WX9Vb zc!Xe1jF=h*@FP;A3rQRjjQ3dG0yMtS*pVLdS9e^cCpkAF=)> zL8VMfrS>Ev%4iZ5ec)W55;a6wb&Onw@9047&uu*ugcK+Pg`KBm*bK5idJ8JrmRJ#N zc6j!r%)LF4GQ+-byQ!jNjdi-|zM2Ni1hEgTd1`my6j47SNy0JF6kx6G+c%s>hWB~? zs6sU#RD#$I0uPC%UJ)6QNWlPchDeDv)rbfqKe9){BoCYenp9|@(1=v1S52ZjYZ-*g zf?g0$NB2Z3;(H>M)%HXx&+Lg*7VL>66i;8XD^h9gid5Fy6{)m$MJjAhI+~z_$zSmH zi^>JB7pq5xu{#!nkaF+X<|qVCAVR?~5uH(`LM=r-=Btx|gF=sQciAQ3Z0r<2O7+(? zXNp#stIi=Y9D?5Dg@oT#7eP_=SX~f}zO(N1i31z4`g*t;+B$r0ecIR+2`x0*I~Bd^ zQ~gYWToC^Os`TF{AcaX@_#K*ALKcAf6d4NJ7!RET$J{?0Kfcd-Sv+}U5TMl%(N0XY zrj66lt;JKtD!{ohx(TZQ=YwjLs?@-)5l;pM6S6k;RA~z#mLKt5Xy3}mnNQ=6eu`v? zEsPDj=}1SZU&>@@B!ozhuuzd?;N+0JKCOvt*989$6MoM|VXk z;=3Z1)pkWH&+Lj+GEyEo#s6g+8 zLgavH<2;e@v%jKOP{K(v?Uh~)j+lF5E{@L*L8Uv?bEB6)&eKo(2XeD75+a(Zcl37X z5y~SXIeOcO{I~}v))9p>13N^TFau8c>qs`d>wr&3d(zc^(}XQD6s(A2Js%Wdh?~3x zNYgmz^!pkj_>0>dEBN?3$B^C7t42|Nu>#RDp%N=1Uv%u*@$~I!wBspID*l!M=%+Tep3qhSph+-TbH#MZ}bnc#vrUYJbom+(k$e)N7k?S3j8Pp|#t zE8{712=n9VaQ(hgKYhv0NM_U88L6zcGg5ax?fMjn>#mw1c`I9eA3Pc*w@g3fJHwsW z+zRcj#F|ct4X}|m8migS{;qIJhZ-&LS&3?_9kf4pk7V zrV0a2kcw|Fdg$3P()O#2*MT!31SOoE?JN)8*cl1UMbb$j$D!PTP=+Ui*vhnAkU~4A zB*J;)9#BKh)T^gXGK*Yj?@>=;Q|~c~Gt{1zY1b%s;8u@pnu;oQIC$h8t~&d|XQc2{ z*%%{j|AQkVf@3u?7fw4TGNRo1dSv8Eh`BTO8GL&hcXsVXmB%1AjxW;-7m$2x>jmIq zBC8hntaYQ^-eb=QAhGn zuNn~?^E<@!qSc1n1NQ+xWraqVr`YumWEfA6jDtmi0_R8a8r&61icP&wdxnJ!r$ zai#>qFnNutMO+6eQ(x~2LIk~xn{m^T5nJGIu?o;X;M>meh9VquVek&Z4h>oE>k3M2 z?eO_v)VzjeXJ|>%mOZ|@d4#W-uV{OF8h84=yBZO;41o(wAH?!TC5UK(x-2u0nsyRm zWk>vdVL70Z<_+f}2Z$A(l1BDbmMxns?G^plY^(%>$R#@Jm{ zxLYR4qoYf(I8Q9mEP!H*Gu+n2akw<%7sS)Cy^*?~ipSHn_C{h3VM#n)us71f`t)BW z#nYGUj$}5i-I2;_yCZey)2>fVUGQ5rGRF6Lw``B3%(Yb1JfV6z$GW5Nbe7c>CvMuO zv)4PluSYTa_{n#;`shphwT5DzVCrMGM>$$VRLq z33o~_2|;HYJyvL$Wu^yj?2d%ULX)1cI!HVpnu~#>Vl_Hk9by^Po|gfIvs;B5Ms7lH zuLOFDAiyL(+LqPVbD%A8O#MEM^`jZNulE&Cm8OT`+EG&@N88miCrX*oQ1s3Mgbu6= zluF1P5NA=G;heE*kY{04qPJ|$$C>#w+VQloD$KCzkH07ajS<{j+-_=KW4Zcz6X})q zu^NSEgbxsc$Qm;A23uC;(JedFPeFUaGQAS%3o2ZEKd>f@X9i2V1~L>IMvWMq*oJ7d zBXOwagZ?%mChf4u6jj7xB7qTSkBj2z*zQQ(PsQWuTDv1Lhp;4`YV3|QEuOw)eJGsaVW5Ggb&)qQl@oCm zondngyVKClWgv)UbNisrFcK1HtzPxbgz9>w~!v9f6Lxc@9--1g_Y zepVZ3)N*_N#FnWO(muYY7!5Mmb|hH+uhAf==&(b(RDNKi4#?OCOaYb2orU?COsdzkHYkwr>5SGN#1^XjCtWW>?FTec7m%sY=6JqL1_DC|D#vVywv)Ud> z-TAcN)&_MG$v0EF2<2yS6h^gWonHtiKn!78kwuyd~4y*TwF z(QDo@0}j=l(Qb3QdY;+6m8JTdIfOow2?ZiU1`>oRp3+{L2C&0xlzadR96rhj3{{wgJHG|gTd#5#6q1v zoAJH3N79KU6!?mTwBZ{*A)=rvV;xWG`MUbIFdraywADzik9p5T5yOV4(Xq`eaoq52 zM;KQ`DJB*+QYWNHXzDZ5PHfw)9c#YOHd>}G!2`n!Xm~5vGp85Wvl$yCriG(#9g%35MNRC^vAbMQ$^hg2S+&vJU0U;;gWU?oP6t5&hp}oeUfP8fYs9Y zH|<6N_qD56kLQ5z)0VHkMjDdzSc!6AL@l07WW*R^At|?v%%zR$Y<0YF#q?&Lclp)L z&2aARleA|oZrZsPkq_Sq_1}aBumy=k1En|gNg{kt)lBej0s*ir(Huep327YSC^I(< z>K<4tWy>BmJ`rb&N|atWi$n>^@P)m-Y?6&7WvYRofrOeBXN!pI*aC&v5}BcqG=#=wk-v3-)dpNhxSwf0G34q-`5U9eBmul z>6gRtmp`2n#e^ehV`rqWS#4*e?tI!26dsxjC=C3AI09S&l_p;`-1d2NXl~ zCGTqU8gXCU8VGA#G29^Si;H@mJu%#A+RR|{-oNhWR;BlLM*3F+Q8kdq5p-;4r0%EU z5p=Dck(fhR5Jd0uMAIuUIy8Y$32&=ALW)m=a>sf;mQ_v=mB`US zA%%v=>M+apg`oY`nMn8=mERAGpCI`k%*{y2esVz zSJc38@bCBQ%%{Z?CB*3s2;JT(c%Gpgecbk6^$6NPA%;k!G^LBooPEz$lmDq;;MaJ@U(q5 zYXgyRVCuO+4ghA|d`ZOPNIJGBQukBwNV?XZNX#KDiKGkmL>gs~SXiABz+{7`X>5QL zHtTJGWZD}b!NSn|1hofyg|+P&szZnflN%wL?HI%oShjm)=nK7ok~v;9V_|2oEi_S) zYr_*9Sa5@NA~;i1GBQ8JI1buOfQ_&OhRxs_5mad-0w7VgULC!_4MYZH(NO&&ZG6`s z2arsC|Hd45Z5kUO{cG@CD|ni_8z4ci#)C%D$?`iaU3A7#p6=O(3MkhQn&{mQu^J2V zHG1zJIt*CSUZ3RZd(FVmtSmj>2MJ~3#Qz$M1Z zBft^`kA#A?f{{cZ*4+wI7-cRPXwN6xCkPXK~PlL!G8DrKo2;>0&qfknc0(O*Q83V>l-EfTy4f*9>s z1h2ptp)Cg&Z%Uw5iJNnn)xmxhNx7!iAqEv~YznSV%#8;wbp(S#W9KBr_5gYVD?MI`! ztS;p{=OTZ^LPh(AvQaEuWPH9ZbppsPO^~yyiIxp*n89{oFbuM%E^Ys4siA`w63bO_ z6(F5xdny>_shR^?OF+wE)TnPU-I`hhNsoi)=x#?we77UB+HObYnca@eg58dm1kcxO zZDbl-8->k!TN|17)<*x@wq2`jYZ_Y{y$9)V%2)IyLU_Ml-{_i|PvcJ87TIO2VFUpO z51kk;Ul%`u4AE&=a%kip>Y@dih0G3%3W1Sx*INc5A&aD!wV{f`Utzg!s%e~|^vE0^=tQp7-`K zLN-T>4G*1#AgGjq!Rq|gb+q3e7T%#QHsqTGd$SEl&r$i*3tW8+P!uC;7@>wdvY#GVBZ-a-un7u5sb`1~ir`FdH}ve0@2WXaX3cg{q20uG z^$w81ZmQ{RmbGn1H!U*an--bXHZ3yGY+7WbH!W%h&$|IkB6$9$3!lUP{@ri>@^`=c zFMt2<|LgDm=J)^gAOGgBzdT$$e>V8$_WSSqAABX7zKyar1XD)N4?q9Szxf~Oj`#on z`|eTVa>b5l#E)pjkLbjY=*5p1#E%%okC?=dn8lA+OO^;mi9vGUgA;e z^#pnA3G&tx&f!gljW@^ z%Ue&Dx1KC-Jz3s*vVz(pZ#`MwdWyXD6nX0@^43%2t*6LaPm#BtB5yrK-g=6HSgN6x zD#)c91-*2mAee3x6w{4@WV%t%Og9Rm=|({{-6+VW8wER3!44GcNCQ03AP+Rq0}b{- z13u884>a%t1^&P&00>5bKrjjjf>B@)i~@vU6et9vfFT$K4#6mZ2u6WKFbXJwQD6~_ z0*qi3Xau8xBNzo9!6*O;MuA8$3P^%cU=oZ1lwcI71fzf@7zHlDD1Zq@flM$8Xo68- z6O00!U=-*CqktzE1wO$j018HdP%sLJf>B@;i~^)!6etCwfGHRSPQfUE3PyocFbb%G zQD7B}0<2&ZXa%EyD;Nb{!6*O=MuAu`3dn*{U>1x5v|tpd1*3p17zJ*@D1Zw_fm|>O z=z>vT7mNbDU=-*Dqku0M1%AOO01QTfU@!^@gHd1@i~_`96etFxfH4>aj=?B^3`T)u zFbXJxQD7O20?c3(Xa=KzGZ+P)!7A_!R)J@*3Os{V;2Ep}&tMgJ2CKj`SOuQJD)08LR@&U=?@_}rz1&vJ= zGbg6%=>|tH3i@1)jkw@C;UgXRr!9gH_-etOCzq6?g`#z%y6{p1~^c z3|4_>unIhbRp1${0?%L-cm}J$Ggt+l!7A_!R)J@*3Os{V;2Ep}&tMgJ2CKj`SOuQJ zD)08LR@&U=?@unIhbRp1${0?%L-cm}J$Ggt+l!7A_!R)J@*3Os{V;2Ep}&tMgJ2CKj` zSOuQJD)08LR@&U=?@b3{HV(a0)zwQ{Wk#0?*(Scm}7yGdKmF!71b3{HV(a0)zwQ{Wk#0?*(Scm}7yGdKmF z!71b3{HV(a0)zwQ{Wk#0?*(Scm}7y zGdKmF!71c!r?BGXw>mAt>++L4juo3Oqwl;2DAf&kz)NhM>SR1O=WUDDVtH zfoBK`JVQ|68G-`O5EOWZpujT(1)d=&@C-qLX9x;BLr~xuf&$MF6nKW9z%v8|o*^jk z3_*cs2nswyP~aJY0?!Z>c!r?BGXw>mAt>++L4juo3Oqwl;2DAf&kz)NhM>SR1O=WU zDDVtHfoBK`JVQ|68G-`O5EOWZpujT(1)d=&@C-qLX9x;BLr~xuf&$MF6nKW9z%v8| zo*^jk3_*cs2nswyP~aJY0?!Z>c!r?BGXw>mAt>++L4juo3Oqwl;2DAf&kz)NhM>SR z1O=WUDDVtHfoBK`JVQ|68G-`O5EOWZpujT(1)d=&@C-qLX9x;BLr~xuf&$MF6nKW9 zz%v8|o*^jk3_*cs2nswyRNxt+0?!Z?c!sFJGeiZRAu8|;QGsWO3Oqwp;2EL<&kz-O zhN!?ZLLsH-wk^;|=6nKWDz%wKTo*^ml3`v1!ND4edQs5bq0?&{Xc!s3FGb9C`At~?- zNr7ib3Oqwn;2Dwv&yW;&hNQqVBn6%!Dew$QfoDhxJVR388Il6ekQ8`^q`)&I1)d=( z@C-?TXGjV>LsH-wk^;|=6nKWDz%wKTo*^ml3`v1!ND4edQs5bq0?&{Xc!s3FGb9C` zAt~?-Nr7ib3Oqwn;2Dwv&yW;&hNQqVBn6%!Dew$QfoDhxJVR388Il6ekQ8`^q`)&I z1)d=(@C-?TXGjV>LsH-wk^;|=6nKWDz%wKTo*^ml3`v1!ND4edQs5bq0?&{Xc!s3F zGb9C`At~?-Nr7ib3Oqwr;2E+4&yW>(hOEFdWCflfEAR|ifoI4HJVRFC8L|S;kQI1_ ztiUs51)d=*@C;djXUGaXLssA!vI5VL6?lfMz%yh8o*^sn3|WC^$O=3|R^S=30?&{Y zc!sRNGh_vxAuI3(hOEFdWCflfEAR|ifoI4HJVRFC8L|S; zkQI1_tiUs51)d=*@C;djXUGaXLssA!vI5VL6?lfMz%yh8o*^sn3|WC^$O=3|R^S=3 z0?&{Yc!sRNGh_vxAuI3(hOEFdWCflfEAR|ifoI4HJVRFC z8L|S;kQI1_tiUs51)d=*@C;djXUGaXLssA!vI5VL6?lfMz%yh8o*^sn3|WC^$O=3| zR^S=30?&{Yc!sRNGh_vxAuI3(hOEFd6a}84DDVtLfoCWR zJVR078HxhWP!xEEqQEm01)iZO@C-$PXDA9hLs8%viUQA26nKWBz%vvDo}no43`K!w zC<;77QQ#Sh0?$wsc!r|DGZY1$p(yYSMS*813Oqwm;2DYn&rlS2hN8eT6a}84DDVtL zfoCWRJVR078HxhWP!xEEqQEm01)iZO@C-$PXDA9hLs8%viUQA26nKWBz%vvDo}no4 z3`K!wC<;77QQ#Sh0?$wsc!r|DGZY1$p(yYSMS*813Oqwm;2DYn&rlS2hN8eT6a}84 zDDVtLfoCWRJVR078HxhWP!xEEqQEm01)iZO@C-$PXDA9hLs8%viUQA26nKWBz%vvD zo}no43`K!wC<;77QQ#Sh0?$wsc!r|DGZY1$p(yYSMS*813Oqwm;2DYn&rlS2hN8eT z6a}84DDVtLfoCWRJcHRN01e$id96q7)E^?w}eLr2si}2i34B z1Pz{Sxz#+PWYFLy4 z5YZh}!=ezU?z+PGhsBC38TSG7!78^XfP8-gPAZI%!JWk zCX5C%VKkTtqrprV4Q9ezU?z+PGhsBC38TSG7!78^XfP8-gPAZI z%!JWkCX5C%VKkTtqrprV4Q9ezU?z+PGhsBC38TSG7!78^XfP8- zgPAZI%!JWkCX5C%VKkTtqrprV4Q9e%U?!{vGhsED39G?OSPf>v zYA_R4gPE`z%!JioCaeZCVKtZutHDfI4Q9e>FcVgTnXnqngw%U?!{vGhsED39G?O zSPf>vYA_R4gPE`z%!JioCaeZCVKtZutHDfI4Q9e>FcVgTnXnqngw%U?!{vGhsED z39G?OSPf>vYA_R4gPE`z%!JioCaeZCVKtZutHDfI4Q9e>FcVgTnXnqngw#U?!Xf zGvPFt38%qKI1OgPX)qH`gPCv|%!JcmCY%N{;WU^Dr@>4(4Q9e=FcVILnQ$7+gwtRq zoCY)DG?)pe!Av*}X2NMO6HbGfa2m{n(_ki?1~cI_m# zU?!XfGvPFt38%qKI1OgPX)qH`gPCv|%!JcmCY%N{;WU^Dr@>4(4Q9e=FcVILnQ$7+ zgwtRqoCY)DG?)pe!Av*}X2NMO6HbGfa2m{n(_ki?1~cI_m#U?!XfGvPFt38%qKI1OgPX)qH`gPCv|%!JcmCY%N{;WU^Dr@>4(4Q9e=FcVIL znQ$7+gwtRqoCY)DG?)pe!Av*}X2NMO6HbGfa2m{n(_ki?1~cI_m(U?#i(U?#i(U?#i(U?#iIputQ84Q3)}FcU$8nFt!pM9^R+f(A1YG?IputQ84Q3)}FcU$8nFt!pM9^R+f(A1YG?IputQ84Q3)}FcU$8nFt!pM9^R+f(A1YG?gPBMg%tX>)CXxm-ku;czq`^!i4Q3)~FcV3GnMfMUMABd; zk_I!8G?gPBMg%tX>)CXxm-ku;czq`^!i4Q3)~FcV3GnMfMU zMABd;k_I!8G?gPBMg%tX>)CXxm-ku;czq`^!i4Q3)~FcVpW znaCQqQ}(O@Qu1~XAK zn2DmnOcV`fqG&J^MT40r8q7q|U?z$NGf^~{iK4+w6b)vgXfP8+gPABA%tX;(CW;0# zQ8bu|qQOiQ4Q8TfFcU?CnJ5~}MA2X-iUu=LG?qQ}(O@Qu z1~XAKn2DmnOcV`fqG&J^MT40r8q7q|U?z$NGf^~{iK4+w6b)vgXfP8+gPABA%tX;( zCW;0#Q8bu|qQOiQ4Q8TfFcU?CnJ5~}MA2X-iUu=LG?qQ} z(O@Qu1~XAKn2DmnOcV`fqG&J^MT40r8q7q|U?z$NGf^~{iK4+w6b)vgXfP8+gPABA z%tX;(CW;0#Q8bu|qQOiQ4Q8TfFcU?CnJ5~}MA2X-iUu=LG?JBPzQQbl1Evh@HyhU{f)vzc9W}-W&hD9kb z6Wu{IEJ}fy=nkr3Q3}jNcTf$BQeY;!gKAim0yEJaRKuban2GM78WyF%Omqj;uqXv) zqC2RDMJX^7-9a@hN`aZ^4ys{M3d}@zPz{SxU?#eQYFLy4GtnJX!=eCc1-aSd;=Y(H&I7q7;~k z?w}eLrNB&d2i34B1!kfir82Cu8vlaB$y&vzuD{@LvQ{ywg5X#Cu z8u^05$y&vzF23M!vQ{ywg)caqtW}Ka-wO^WYZarK_kzR8TE(c&z2I=NRw1ix8(D4J z$ZFe0R@*kR+P0C^wvDW|ZDh4=Bdcv2S#8_MYTHIu+cvV=wvpAgjjXn9WVLN0t8E)u zZQIIf+g4WFwzAr`mDRSbthQ}swQVb_ZChDw+sbO&R#w}#vf8$l)wZpywryp#Z7Zv7 zTUl+}%4*wIR@=6++P0O|wymtTZDqA>E30i=S#8_OYTH&;+qSaWww2Ykt*o|fWwmW9 zt8H6ZZQIIf+g4WFwzAr`mDRSbthQ}swQVb_ZChDw+sbO&R#w}#vf8$l)wZpywryp# zZ7Zv7TUl+}%4*wIR@=6++P0O|wymtTZDqA>E30i=S#8_OYTH&;+qSaWww2Ykt*o|f zWwmW9t8H6ZZQIIf+g4WFwzAr`mDRSbthQ}swQVb_ZChDw+sbO&R#w}#vf8$l)wZpy zwryp#Z7Zv7TUl+}%4*wIR@=6++P0O|wymtTZDqA>E30i=S#8_OYTH&;+qSaWww2Yk zt*o|fWwmW9t8H6ZZQIIf+g4WFwzAr`mDRSLthViBwQVP>Z97?Q+sSI%PFCA?vf8$j z)wZ3iw(VrKZ6~X3J6Ubp$!gn9R@-*6+P0I`wwZ97?Q+sSI%PFCA? zvf8$j)wZ3iw(VrKZ6~X3J6Ubp$!gn9R@-*6+P0I`wwZ97?Q+sSI% zPFCA?vf8$j)wZ3iw(VrKZ6~X3J6Ubp$!gn9R@-*6+P0I`wwZ97?Q z+skU(URK-ovf8$n)waE?w(VuLZ7-{Bds%JU%WB(RR@?Tn+P0U~w!N&j?PaxXFRN{P zS#8_PYTI5`+xD{BwwKkmy{xwFWwmWDt8IH(ZQILg+g?`N_OjZxm({ktthViCwQVn} zZF^a5+skU(URK-ovf8$n)waE?w(VuLZ7-{Bds%JU%WB(RR@?Tn+P0U~w!N&j?PaxX zFRN{PS#8_PYTI5`+xD{BwwKkmy{xwFWwmWDt8IH(ZQILg+g?`N_OjZxm({ktthViC zwQVn}ZF^a5+skU(URK-ovf8$n)waE?w(VuLZ7-{Bds%JU%WB(RR@?Tn+P0U~w!N&j z?PaxXFRN{PS#8_PYTI5`+xD{BwwKkmy{xwFWwmWDt8IH(ZQILg+g?`N_OjZxm({kt zthViCwQVn}ZF^a5+skU(URK-ovf8$n)wYAIwjE@(?I5dd2U%@9$ZFd`R@)A;+IEoD zwu7v;9b~obAggT$S#3MWYTH3p+YYkYc97M!gRHh4WVP)et8E8aZ9B+n+d)>_4zk*I zkkz(>thOCwwe29QZ3kIxJIHF=K~~!ivf6f#)wYAIwjE@(?I5dd2U%@9$ZFd`R@)A; z+IEoDwu7v;9b~obAggT$S#3MWYTH3p+YYkYc97M!gRHh4WVP)et8E8aZ9B+n+d)>_ z4zk*Ikkz(>thOCwwe29QZ3kIxJIHF=K~~!ivf6f#)wYAIwjE@(?I5dd2U%@9$ZFd` zR@)A;+IEoDwu7v;9b~obAggT$S#3MWYTH3p+YYkYc97M!gRHh4WVP)et8E8aZ9B+n z+d)>_4zk*Ikkz(>thOCwwe29QZ3kIxJIHF=K~~!ivf6f#)wYAIwjE@(?I5dd2U%@9 z%4*wDR@;uU+IE!Hwxg`J9c8ucD64HpS#3MYYTHp(+m5o@c9hk&qpY?aWwq@nt8GVF zZ9B?p+fi2AjNmkoVvf6f% z)wYwYww+|P?If#hCs}Pf$!gn4R@+Xp+IEuFwv(*3on*D`B&%&FS#3MXYTHRx+fK6D zc9PY$ldQI#WVP)it8FJ)Z9BNmkoV zvf6f%)wYwYww+|P?If#hCs}Pf$!gn4R@+Xp+IEuFwv(*3on*D`B&%&FS#3MXYTHRx z+fK6Dc9PY$ldQI#WVP)it8FJ)Z9B zNmkoVvf6f%)wYwYww+|P?If#hCs}Pf$!gn4R@+Xp+IEuFwv(*3on*D`B&%&FS#3MZ zYTH>>+s?Auc9zw)v#hqAWwq@rt8HglZ9B_q+gVoI&a&EemesbithSwHwe2jcZD(0+ zJIiX@SytQ5vf6f*)wZ*&ww-0Q?JTQpXIX7K%WB(MR@=_9+IE)JwzI6Zon^J{EURs2 zS#3MZYTH>>+s?Auc9zw)v#hqAWwq@rt8HglZ9B_q+gVoI&a&EemesbithSwHwe2jc zZD(0+JIiX@SytQ5vf6f*)wZ*&ww-0Q?JTQpXIX7K%WB(MR@=_9+IE)JwzI6Zon^J{ zEURs2S#3MZYTH>>+s?Auc9zw)v#hqAWwq@rt8HglZ9B_q+gVoI&a&EemesbithSwH zwe2jcZD(0+JIiX@SytQ5vf6f*)wZ*&ww-0Q?JTQpXIX7K%WB(MR@=_9+IE)JwzI6Z zon^J{EURs2S#3MZYTH>>+s?Auc9zw)i>$U?WVP)gt8EuqZM(>7+eKE}F0$Hok=3?~ zthQZbwe2FSZ5LT>yU1$WMOND`vf6f$)wYYQwq0bk?INpf7g=q)$ZFd~R@*MJ+IErE zwu`K`U1YWGBCBl|S#7(>YTHFt+b*)&c9GS#i>$U?WVP)gt8EuqZM(>7+eKE}F0$Ho zk=3?~thQZbwe2FSZ5LT>yU1$WMOND`vf6f$)wYYQwq0bk?INpf7g=q)$ZFd~R@*MJ z+IErEwu`K`U1YWGBCBl|S#7(>YTHFt+b*)&c9GS#i>$U?WVP)gt8EuqZM(>7+eKE} zF0$Hok=3?~thQZbwe2FSZ5LT>yU1$WMOND`vf6f$)wYYQwq0bk?INpf7g=q)$ZFd~ zR@*MJ+IErEwu`K`U1YWGBCBl|S#7(>YTHFt+b*)&c9GS#i>$U?WVP)gt8EuiZQE@` zwe9Y3l2*|jPSPs6!%132cQ{F_=nf}o72V+^t)e@eq*Zi>leCKNaI#h*s%>|NleG#_ zZM!?1tW}6=+uh-0twL1W?hYqw6{6a9cQ{$A5Y@K3!^v8OsJ7i5PSz?!we9Y3vQ{Cg zZFh&0wF*&fyE~k$RfuZa-Qi@dLR8!C4kv3BqS|(MI9aO@)wa9C$y$Y|w%r|0)+$7` z?e1{0Rw1fwcZZX;3Q=vlJDjXlh-%y2;bg5sRNL+jCu|NleG#_ZM!?1tW}6=+uh-0twL1W?hYqw6{6a9 zcQ{$A5Y@K3!^v8OsJ7i5PSz?!we9Y3vQ{CgZFh&0wF*&fyE~k$RfuZa-Qi@dLR8!C z4kv3BqS|(MI8m!Gvf8$h)wYeSwrym!Z6m8~8(D4J$ZFe0R@*kR+P0C^wvDW|ZDh4= zBdcv2S#8_MYTHIu+cvV=wvpAgjjXn9WVLN0t8E)uZQICd+eTK~HnQ5bk=3@1thQ}r zwQVD-Z5vr_+sJC$MpoN4vf8$h)wYeSwrym!Z6m8~8(D4J$ZFe0R@*kR+P0C^wvDW| zZDh4=Bdcv2S#8_MYTHIu+cvV=wvpAgjjXn9WVLN0t8E)uZQICd+eTK~HnQ5bk=3@1 zthQ}rwQVD-Z5vr_+sJC$MpoN4vf8$h)wYeSwrym!Z6m8~8(D4J$ZFe0R@*kR+P0C^ zwvDW|ZDh4=Bdcv2S#8_MYTHIu+cvV=wvpAgjjXn9WVLN0t8E)uZQICd+eTK~HnQ5b zk=3@1thQ}rwQVD-Z5vr_+sJC$MpoN4vf8$h)wYeSwrym!Z7Zv7TUl+}%4*wIR@=6+ z+P0O|wymtTZDqA>E30i=S#8_OYTH&;+qSaWww2Ykt*o|fWwmW9t8H6ZZQIIf+g4WF zwzAr`mDRSbthQ}swQVb_ZChDw+sbO&R#w}#vf8$l)wZpywryp#Z7Zv7TUl+}%4*wI zR@=6++P0O|wymtTZDqA>E30i=S#8_OYTH&;+qSaWww2Ykt*o|fWwmW9t8H6ZZQIIf z+g4WFwzAr`mDRSbthQ}swQVb_ZChDw+sbO&R#w}#vf8$l)wZpywryp#Z7Zv7TUl+} z%4*wIR@=6++P0O|wymtTZDqA>E30i=S#8_OYTH&;+qSaWww2Ykt*o|fWwmW9t8H6Z zZQIIf+g4WFwzAr`mDRSbthQ}swQVb_ZChDw+sbO&R#w}#vf8$l)wZpywryp#Z7Zv7 zTUl+}%4*wIR@-*6+P0I`wwZ97?Q+sSI%PFCA?vf8$j)wZ3iw(VrK zZ6~X3J6Ubp$!gn9R@-*6+P0I`wwZ97?Q+sSI%PFCA?vf8$j)wZ3i zw(VrKZ6~X3J6Ubp$!gn9R@-*6+P0I`wwZ97?Q+sSI%PFCA?vf8$j z)wZ3iw(VrKZ6~X3J6Ubp$!gn9R@-*6+P0I`ww_4zk*Ikkz(>thOCwwe29Q zZ3kIxJIHF=K~~!ivf6f#)wYAIwjE@(?I5dd2U%@9$ZFd`R@)A;+IEoDwu7v;9b~ob zAggT$S#3MWYTH3p+YYkYc97M!gRHh4WVP)et8E8aZ9B+n+d)>_4zk*Ikkz(>thOCw zwe29QZ3kIxJIHF=K~~!ivf6f#)wYAIwjE@(?I5dd2U%@9$ZFd`R@)A;+IEoDwu7v; z9b~obAggT$S#3MWYTH3p+YYkYc97M!gRHh4WVP)et8E8aZ9B+n+d)>_4zk*Ikkz(> zthOCwwe29QZ3kIxJIHF=K~~!ivf6f#)wYAIwjE@(?I5dd2U%@9$ZFd`R@)A;+IEoD zwu7v;9b~obAggT$S#3MWYTH3p+YYkYc97M!gRHh4WVP)mt8GVFZ9B?p+fi2AjNmkoVvf6f%)wYwYww+|P?If#h zCs}Pf$!gn4R@+Xp+IEuFwv(*3on*D`B&%&FS#3MXYTHRx+fK6Dc9PY$ldQI#WVP)i zt8FJ)Z9BNmkoVvf6f%)wYwYww+|P z?If#hCs}Pf$!gn4R@+Xp+IEuFwv(*3on*D`B&%&FS#3MXYTHRx+fK6Dc9PY$ldQI# zWVP)it8FJ)Z9BNmkoVvf6f%)wYwY zww+|P?If#hCs}Pf$!gn4R@+Xp+IEuFwv(*3on*D`B&%&FS#3MXYTHRx+fK6Dc9PY$ zldQI#WVP)it8FJ)Z9B>+s?Au zc9zw)v#hqAWwq@rt8HglZ9B_q+gVoI&a&EemesbithSwHwe2jcZD(0+JIiX@SytQ5 zvf6f*)wZ*&ww-0Q?JTQpXIX7K%WB(MR@=_9+IE)JwzI6Zon^J{EURs2S#3MZYTH>> z+s?Auc9zw)v#hqAWwq@rt8HglZ9B_q+gVoI&a&EemesbithSwHwe2jcZD(0+JIiX@ zSytQ5vf6f*)wZ*&ww-0Q?JTQpXIX7K%WB(MR@=_9+IE)JwzI6Zon^J{EURs2S#3MZ zYTH>>+s?Auc9zw)v#hqAWwq@rt8HglZ9B_q+gVoI&a&EemesbithSwHwe2jcZD(0+ zJIiX@SytOFvf6f$)wYYQwq0bk?INpf7g=q)$ZFd~R@*MJ+IErEwu`K`U1YWGBCBl| zS#7(>YTHFt+b*)&c9GS#i>$U?WVP)gt8EuqZM(>7+eKE}F0$Hok=3?~thQZbwe2FS zZ5LT>yU1$WMOND`vf6f$)wYYQwq0bk?INpf7g=q)$ZFd~R@*MJ+IErEwu`K`U1YWG zBCBl|S#7(>YTHFt+b*)&c9GS#i>$U?WVP)gt8EuqZM(>7+eKE}F0$Hok=3?~thQZb zwe2FSZ5LT>yU1$WMOND`vf6f$)wYYQwq0bk?INpf7g=q)$ZFd~R@*MJ+IErEwu`K` zU1YWGBCBl|S#7(>YTHFt+b*)&c9GS#i>$U?WVP)gt8EuqZM(>7+eKE}F0$Hok=3?~ zthQZbwe2FSZ5LT>yU1$WMOND`vf6f$)wYYQwp~QEZNCxKw!6bgT19s_Nvr4%CutSk z;Uul1JDj9dbcd6)itccdR?!_!(ki;c$y$Y|w%r|0)+$7`?e1{0Rw1fwcZZX;3Q=vl zJDjXlh-%y2;bg5sRNL+jCu|NleG#_ZM!?1tW}6=+uh-0twL1W?hYqw6{6a9cQ{$A5Y@K3!^v8OsJ7i5 zPSz?!we9Y3vQ{CgZFh&0wF*&fyE~k$RfuZa-Qi@dLR8!C4kv3BqS|(MI9aO@)wa9C z$y$Y|w%r|0)+$7`?e1{0Rw1fwcZZX;3Q=vlJDjXlh-%y2;bg5sRNL+jCuz{u4cVF7S^7i8|fA*(; z`kR0EXY}8f?yz6_zxs0gr*FS(_ur0(FQ;FA`r*r$f3hK%^84-AAN#-ixBvIopME@l z^Z)+u|LyjhKOcX%{U-ay+eHtK_V%s8vEIHlIMUm<>i_=n>zD4#%H(%_=ZXW-^|N58z;qU*t``u(GocDjC-*&(09^seYy*I+aLE|_CNjDeeVDB;G!!>Rqw@cTTvn{`h-*djFlgZ(JX94gJOSzTxUJae@E#$L$Zt?w`NC`q^*)y!*)? zwqO6y{RGS7?Hk>5@BaU0Ezpm?KmOSL^i6*MH~;pBuith5{*%V7{ z|LgAf&5^tB(U16%e>r~rf4=|L{jYiZzx_`?{BZp7?SFrJ{Nd+s|NP~LjKQ1y8Hu<08{9fp@E?wjQ2;ga4h(@ zt3mB}s15`Hv@6Btn5exraEI$V%{<1HncMyvQg3eA)Vp)E)p)(Dj;!>*b1d}^y8h0d z`m5UXzaMS=4t{eRt8>`&|2F;KdQ%;)+1Atn=aWunS1{kq?TDG%sb+2`o4LI)bK5p^ zD`e&m3{B9?UBk@%s%Gx4&3xl(WY{9Z?3eHfkz`kw6{0E@qe=Cze81dwSfu?jH-<&L zV~uqOUyT|W=@yy8rWy?lJR+JO&so6?6Lr^Sj!!<~e8bEmT^T#h?8J=g)Zed&+M&N5 z)GU;j_y0!Dy)QM6?^&i|`}0CZPIn=(`0i?ahdVyv2ynIi*HWt6O^af>8!>h_)!5x+ zV|O>k?%KxggpB=xxd|G(Zy0-6)!6+YrpIcqD2pvj6={6`^@KDNDK`@AQlt4kR`W#J zm{8KP<3yII?>040AeVBiZUNZ^lGa^0N3$6w>IX@Ce=gb8Pk1YxXC3d_!dTnjOj{=8kuHiOKsB zllN0i-cL4pe`E5#ZSr2o&@VuA)Q}IrnIOIQz8(iT26{~}4#Y#G{WB}=aBcFaW^vYt#J0cU zZJK%1E5k>eg=xc(Po|nG$|2YP6sb6zpkd_=G8=R*PPsZ$bVE{qH>uyTV~!=(enSk#g`QM=4M;tp}Ok@!Igw z4oB{Q8W_fgih4UQ?#FBMhbufFkLZu*S(HaR-sO62$b{U!8gF3nI)-}JkORRX;@+V@ z;xA`?cE>0OkgLHFBa1lLvm>5w{&B?o<5csHlg&Tgn15`We-twR2L>o;{;6U9c~$dI z*XCcKaUoK%#fUU>i$vYk_y!#cjXRGde^+BYmVZXu2^Bp|u3y5Qb-0ml1Qy3AyRbD9 z!U)2=xSy`gf7>4w2{*C{)XDgK6cfIc9FKj%b#u?u8~}IFF@#%>4I=B>gf(M;S}cLLz^X6S#z2_Qi~oc}$;MDrl|@6QFL2Fe;p_-Lq+LxPF6`ru=qbL9$f{m5MoP&;Cc z-RN=PE<t0AOqVo?1A_5@kAjh;!NyCeVOkH@`x+Q zQ(Zxx>ut*@_eIRfI1H3Ut?ewe85H0`y7~o`kPQz>zcS z=|T&9^WXD5LK*Q0WvWLglRZMY@d%~u5sHvUcx0232v3u?TNk%81KtjqJ3z> zvK~llh|{=CL}(%uBJ*+cvJx|({BXVIQiGf;0kkYoE#Nz#bI?jadVy<4^@fuK#YiHA zt$&55KnWVmA1T}MdlV}`Zc(4njBL_I*5pUB*DX7FfkkA07=)bMkSO1o;AMFBSaj; zPtjmNvJGqy`2%`kfkB9nBXAB->9+pth~`-9fEYY73>WeqRC$nzM^Z9LXqv$+au;K~p_vREn(4%$xkV1m9p=zTL5GjbRnlFwutT#hcW8#-A*A$ubsC6< zkO+vdVeD*T;5!jBhmAP-R) zxkL4V$S%-u~{hiML_2W-zgVHYJt-j;}*?iaM4UB7tJlYXzs9!MhaehWVDh_ zqlGV;b@@dz02pbe4S519=Yh_{gwb9{`x5PSTC^~HI0Qg-jL0Dp3NC`R3$WB<|2rr^ z@L3S}i3)P;ugW}Y9T1Ed2RgEe2ZUzSO>h*3fz@yt@OYl}RSC+T2SJ$u{)h%HjU}-B z3N1>cK#tML$WM+87llBC=Y@PMF-QY<6~}=qMjwN;RX8G6?!j|HZn2lyuLZ7SjDIwf z0Z22QfHb!Vq`AXD8Yu|!k?Bghjur-K*5x400EFBywg%A(OBzuLCCP?GMszIzIg+;E z>JmM%b|n@nl4_*ohOyOf8fc9Y%h;Om)!&a3kA0SJdC12OWQ?OUlR-)|ouo9kD5bf>QW`0k@{s{cI*=AlY1ZW_O>7QN zz>dHhBPfG@f}(-S8pR0YzfCo8}$to8!*Pbt!@O}NL+GY<4^QEsOjcSYMKF#iKGa|TiA4TWc`ZF z_GrMJCv0M0-3}#4=v|!Z6QSPGuHJbNa43t=T|t)^PXu`m`d!$e!7OtlV?3sr3}l+= zM5eh#GR++()69l4r(3S1=V+0bW?dB13|LG=*Tj00KrE0u)4n35dKYBMmg}g#8X0MW z7@x*^XBq`ytRrju<5Lg-NjXGc7ONOc=e!w9Gk`JC{6h@Kz$0z6!T?Ch0vLCW8$x** z{ta)Ds@FjgwrjN&M^Ep{e<0vHHih9B^b#3Zg_DFAN2>|W%rc-YFo+9@BwALeQ~$!K~3rfI*|P z4DPbbbc6#?6n6}GoxOB#&!Q|c2H&N(~Oa#W-=;jrn92v78bSlIwrGm(dm{h>1kSws9l#4HKjE)26YuH zk#=r4R3AeWQ>al5^cM|q!*iIr?tm!xeKk7(9>}ZV&(IHqH*y$u!Y3j_Laz_edS)px zphVF%<jAp-^qbpdi|q#@63Cv1u9H z1hmo6BFmT6wZJot5vyi0vTCL?tL7G3b@#O6+1ToI&mg%MRf|-$>yoN=K&qlQiNTJ@ zsMXBYAn^{dMnnv?LjJ|NKCyU-o~UI*EJU+1wEJ;zqG#Q-O}srI{^8jk?iXw)4n}8v0Xjw z#M<_e_2jTx@V9&)Ke&H1q;c{{BGKLstjUdBIkVIgx!P`#er3lvTsxV=wbMCVd&}Ya zJ9VF(&EbCk(~sXZw&HsohHIO*)Vv#eD(d$!Wrvt&lCt^DI00ErWzk7pd}$VWH1J z`8|Vs_>Rj5wlUP61qUSJyH-yB*b9z9#&$AfY^OuU_7*bscP1F^Y{>YI7kuH4q%FqS zuDmDdfH8*A!!Z!agX$72imOIO@gDUB>w=)h0qBlYgLVVY^{*gZp)xfL--V)t1PDnL zas?V?L~m@~SfL#<#%zk2(p)s*7#m4FbYCwGtUmk=s!`$)Hr4k)&@XIm8$knv9=t5d zKx&9HwY_i%iuK_N>(@IrK|ouThw3BA0U%q2OMq{~j3{pPzCJP}WcVpSFWTyT9wT7~ z1T|7m+UW{j4I`OIb`RB)!I7h_h+Zjvlfnf82pWng?Qt|$R|1aXnFfGXKx7msX*>uf z7aD4TFC5*mb^4aAGxlt~C8+(K*-bl}puXb^Uk6az7C>#+1*q)+poSsB8KCz@vw)i# z(Lou|wgX6#klXUM0FV$aGt%l3pVZ0G@1bC@UF*#SVkV@)jhrz6{N z2eJxMF7yJo3^;|1NRT+2qo*32rCg+8u<3iaA1XNy^)Bt$MmTVC_!Qbd3J-2mJ+Wui zJ;ESmqPX)2j|j7f45^;sj_ni%*9duI!^Cc6x;THhST0tPJ4CO8f_UtnbicB7D|AZnp-;ty+AmlKU$ZtFwAh0u~-w@fE~D>CO;>j25$G6@Lo2u|Cwc7S8T5u72}V5xtF+66oh z@;(F|I9pU0_>N^`*61`PBTvWD zLSRBBLt8H6{5SQAXh#H;CO9{^diY7!=Yn2m5d5^=wP34a@62I|3GJ zxVbYYb`NRm=~F$QzyQ z+i(z%DYLY5!t zV}m1h^5BS_J~(0@+HmlTWxvSP zJ(IBz{pp2X{ZA2eD5#;+6Y7OK7Wi;{8j3}7>+2D)M+j91{nx?}S>9ELSAqLN*hTY( zkbHQXi$r_brkka^=$4^?rGTEQub?eDLv^q__SPQ93TK2x+G&Grhq`AiB6y@N`&&3_ zxP4M@QL~_uI#mBgAeX623!x1#`-!Qv;7t%3P$l8od9WZf5Q{cepGg@Mp5VSN<~{2; z(w>s&5u%7N^~ut*#PQLBz~AockrC9;QiUf+TtF&<^GB{LyI2C_@_FywP=^)_jyv@#fP z!uCisS`9ajS_5?oa$r`AAzs6};Ur;k2Zqxi#YG@P7X^{}#2QMG1r9hp_yNPT0-Ons z4@XU}hC%BR-BeT@hkE{)&xQ+iEJ&Hlt6|Qy01@GgOWE?dc~j4ga{yF&Gtr&uM1**h z+i>`iuZ{JXTkpSo;*8NYW6l{ZP*k<7*p6?4bRN zdW~Lq0Fmm_95~-e1Z9Lg%d$H(BG5@IEGas%XN`MHdxIfFqPk>Pf${`hdOS6(AL^fP z*&Rc?U}`6t&yghtv{xcl6wC)99;t|{|F&%Ra-;|JCS|6P!jK7xMI)V^2~-BifLku{ zu|_)5A$lnikrW8 zto!<#I~GIvrmA~J%wQ$pcc_|n^=Nd5(fMK3v}dUfaS!k<@B{Eji01wGkxKx*J1`D| zfMQk)1lG$XYMYnFY>T)ZOQMkEZ<*zylRz73Gkc_&GFR6#X{WFboFV#JNbHf-9NAT) zdxqzGs&@&$kNgKVQrK)OdP)!}XmcQ}XFM-k?=$-0=v|Y*l-v!p)-knA2})l3cljzGi(b9A;DYdZy@VlhR%!)p4!QS zr*`__sl6RMwc*YHyPZ9GdMCkq-4v>AO`+O#r%-KbZGZu6TdSmel05OWO^_1-+#9BUnpdBWmgk9<%bLYS@JCraf| z9Vr6biK%|L@EvRKz+uw6i#F9gQqvoM3#YfQZWa!TUX0qxU>{rS*qEoCJmzV~$2|X} zal8NQPk;N{E1SKu_pW_7>-iT$ll|N8|M>II-N)?y`0YzS>F{=d$)+P|x~&0FyY2v} z%^%%#2LqtG7dY?4uHjiG^})YvnE*rF29i`1A*g{_p9>`f>R!wA37Q4-)w7`FLsCnn z1ul(wA9^)Ys(HX$lDfdBj16?!$pf8s`aq|>9q7Eb^@M#m&^gzgyl%?Vwx&GYx>KIE zd~|m*75$-|CzeAw}+OyJ?frNFq^U>YO zVEB#DrVp11xUu0kH+lHYjSs&)lL@$o6L6!Zn{G|_b)#^uH45j}9ffnl*KK?_)3xt4 z6BxdRE)O7Q$>Ar3P$F(MK+`1Du&VO{%_3t$k7|c1) zfXC*;WddV!4sPCS8FVdX(5=f1x{uBbx*;=oPap8V@?2ny8FZ7G zL8r$Iy62cdr~%iu`#NaQwV*+_E;Q&qIyC6sD>Uea(BM6R;P@-g1;(I3HyIjq)1g5( z9U64cL4z%S@;YkJwWvYAE;Z;rIyLBq)Zo2bApOd7fiY^(O{NB&9yREmqXr@6UD@s< z+Yz)~-@*p{y4axq=-8ltuh^g;VuSZ`fy1vm7w}`)pr4El`svu9pN2RW9JixIsUe8}xeIpnr}Vj1Aj;9XRM);Gka@9P}R@ z9Q5xM9Q1Z#E^wm}_+M8pFa{3#$>5-$4i5V1;GlmF9BlcM*O7z1MGpFP$wB|o$wA*H z2dB>v?0+S>z!*8`CzFF-j~w*Rk%Q6S+V1PnLEl0L{krI&|LEwTf3N7EZ=-|LhX^*m zl3ZX69rTmYK|dWG^wZHn{~S8l@+Yrj2Yrhj^y{*N{-d*l{vkU!o(mj*Eq#G8cF<2| z2fZFU=$~T;(=F@s$aW-cx5WvV;Dkvx9yrJ2+*g(7)qcV2mB~li5M9#}4}E*ui|eTj(R(5wzXVVh6*z>|prl z>|l7W>|mJ64o;aVJigytAdIntVKO@yrn7@#Iy)GiV+ULQFi*b&JKp>*uj=Rc^x|#TI^t0mmLfrogEC%vV-?>0T%P$MJ_PL z4u;9>V9;X+!*lFlx$WsavK>j=ZLx!4U3M^hbapVjS9UNw%MRYl1vc+27Z_s)!(?_a zOlJqfbapU2#}2mq$?Mp`&|(L}y6j;1=!7!N}40`Nfc#a)3 zo7*9vN5&&*ye)VztP2l@j}8xp_X-b&C*i?+$-wEoi3DTtV3-UKhUxHNm<|ty=itGn zLwOxN7+UmTSeG6QADtcyBJ|)(CkfmlyB(tk!(@6e=+T4WIeO5VMqBT7_+V(^gJE5K zFnn};FuYfMFo@uTFC8Ul-TB8}Wegt-lkveY9UlzS@xkyMKG<|9uj2AAC(VuvuicWBg#4%nt@VelR@84_b5E*n4C=g2o$L0AXAgAdDX!AdK%7AdHd# z;cK#iyu_=-F@P{m1_if(X^Jfz7gPU<@LRlOe)59U_d=A;S0^MA&pF zucHWKiz1BcQiSoNQ-pCy5uRpd1N&EJ1IsAFI7Si1$rNGKqX^?u6yet|n=jiR53Nl^ zADNJ(3Ab3nxGqZ=KRQbo-z!TPhb-ZKW=`-c*_1erv4n9lOBkoKgmF4c7@uMZ$K1;6 zh{D(+3gfy&Vf^SsVSGpw9`9rZzpi%{#WA8VP9_SY9#I&dA_~90y@E24aWGwIGHbudVFDgiZATdzBd~-_7)3zWJH2SoLZb=T9-3S zADuHy@0Bx5i#fx&$w68*IY?uiVVcYtrs&`uzm`!dF|SzwK{A zcGZ4u|5=o$92VK{7;l&+^M*-}H%#++!|nIq!+?J}y;<#-6O4Mg^+;N83ph;c0*C3N z1BdCo0*7e;93n^`P1a}eR(tHe>wj0({$^RwB8nS znASxO(?>@R(|bh@(-1ja-DN1bl`-TnO-2sWbmTBiM-J0`RS;G`R ziBB104bx=SFimF-({$D_&1VfCxRcj0hN;CErga&^^wAl^G++#m$9llX7{l0q^v>4r zqTKRQI1-z!9zhY%qmI^f~{fJpSg55O%1pn?5w((oa& zhyHhb{~db6A;uK@(*}O*Lv<_%xS;-bfF+%F^|s)5JbfoDPVQHIlRF>1z^h<=nEmHh)(Q86D?&6+jEP5qO=U3dRbs!ttM>#v?wf;I zV4Y*IT%HWe<>|0oZoqPP?DCeCdtjGe|M1f<-x_xLIzTSB0J*#_AeV=L9D-24zK*8a z2l~1|J`brTRtQ(V)Btvj)kZU>NLYs%$=VLhpMEWaHV>FX0i%AX$0Ym{GbzXOr_V7g zH%Oupx>}o8j~?X8Iw{TU&(`CLaMhTLIn?wMcMQG<2rVVQtVGx?>U-xgA}&uR;_^5V zcY7@6vfXgiaF0Tu~uL5f0_( zmPJRJ_DuDs(1i@9K#tWDK>0z@yF0LC6_KX@zH8-yqZfE(o!d=y5@}|BJ3!W4f7Sc` zx-bVr87%5yOvWJl#ZOUu?&_UE(Z0Rpzzb}23@^)*@v=M}FUz-hnY&}7w{+P;8+{#8 zmRm?!UKc6L1EdTY7bY7+sdW+>ARdtwc^aF)LKGxT6iuXE{WoGshJE+z5e<{Wu0~=g ztTb4``nREvK*vqBdowdN4c9ihzXYvw)f;Ap3GY=7GycAKjAa!{a|fP`r`%%P#_ zgb8=}zkN7c^8!m9>tX8;VueYeyLVJB3qLo{SR$dp;$^%5})Z13v)Od#BLkJJBPVhviJCVyF$Ah9t zf<&(IgTBLdCP0kA_mAABZC&s15E;LJtQqE8&OFDk(zU&!97OBYvr-Z%=&9Aj89n%Q zK5T1V0%QYz2ssC;0CbMfi9sg^|=!#XJ$RT>h}WBoT` zGsUM|gSMi;0^$UqI-x67z5oHRn~=} z@&JZH%s@;~jtv5Lq-7N7yUk>#_eS6i4)y z@tdF_%1m;hT-)x6;m`-12J~7K?yOj!+t?aVSLi)~pF&oFY#-g=E$bvh`9U3wx?qQl z8b7t?#r$`JNQ$XjX&Kp=hxv+rG-D0b@8V%z@PZ5fbf-?(I|eA<^pZn)@6py5X^1E z%oZrrj!C<43kc4bsDU*V#?}@D_5*VrrGD;arezKAr(HT*#MyhG(~b0+G7elIHVWI- z3pDdm?J|5>D$Lf_k0vJhSWgK66sfdVyC)4X*+j8lDG`7Q7h}{KN`~ErY#~@Y;C|@-lp% zDok=;-QbaZbYYXm2ezj$+#~807(V{J?48ABjJqn6xvMgryDGQbmAM066)EuQk!eYq zb_={J>w;Hh0A8I~45djE;0K#(ZZuGXMmNABR}CLhXk@Z6=zfdY0tSH)e2Kgl(lS~_ zxdu=)kI+azT!wn)Sk?f%A_fX|0Xzwt??cX?*@uFV!f(>_z~zMJoyPUnB5;`KnKN9A zFb{n6zIq|rn!Nvt{v8Y-ch4+>w#pc^RVG7QWjeG~8he7>p|*+?we`rrBn`YpZIyMY ztummtU|dx5A{9g&VZ;$CXd3!E)D#i5IiftwnNrYQHC_;04wDFo#ko2YMDU#Jf=5vR zs-GHHGehTq+JbzBWPqe^NJa2SrrI5nZ~)Dana~VkT_w07GYJ((*rhuMNEMHd41 zsuJGkgxp^GWM>aUcbKIjsReUCHuEv!t4t=o%5>tZ+!9~r4)Rr`kgrE(CTZp^xkkBvjdmzpw%XJ}f-MdTQSyrXv!u2u?dtm>N1yY&Q!0CZ<_wvwm0; z%pbdBTma-bmNh`WpxD8vVI8Q%QPRS*p-zFv+p`%y%VzfXY@B(f^i>A9m}etP0BwMl zV=N0vduHejyc1Fp>RJHOv1hliz}Uxdu`(GKE7NhY(%9PT4lh=uc(F&uCTZ*~UaYLk zi|YHj=`I8k)nAw5A21NDt1jU6_S zn!*XpoVzarUJNh!f<8@6c+?~CUEAux5M+^Npy`bsAfh};@@#6knK_T1*tOb?`@@t# zPy*2XkmP5kDIgaDAApi7us(cTq;{7v)~rls&B}DvtlY9@_lEb&Y}jnNl}TE8i!Uqd z@?~YfmmyDt71H#Mt4o^{Fhs>&H4B7y3b~~&{3D-XWRWwn?EnIsFvffo1uI5qfH8$$ zlxAk`1HKHZ7fJz~7y@--JqB1aJORC|2WkNF{r)5qgJ&!o?6)&J{R1}5vbkhzjzUu` zq277;R1^?28M>+N3VlknO!6{Ce2h&ili9Q~olPr^4ZH5ZX=OH?Hr>`FZN0^#na#RD zS{VRoD9{5Guu`)^YV>aFBBbqb_?|KQy717kJFwyswnJl(ScrCowBEV`-A6KT|ubsY!}wCq_ga|>g@TbT^JmFd7+xdq&3+wi82Y(Xd0}gOmqdMYQb@-f1t^*ACJFG&W^UW` zc2BRe_9gq^4a8OLZ1#>!Wl)^aQDZ%!sz` zJyv(NznH_>k--_!Ko1)$pj-(M5@U8zhoSoqRr0a}Py4oVT*V-Pn1r@N_c z3$-39ixV3LMoR~xF0KtY1F|&|B+)!($`6bbtxcLPI8;NXL1N(5vEEN zvSH2(z!)4yV3QiST6CiE*+({xNZLw&g(sF1p{zr(c3|+viCwc{vzq>bd7ppZvO5Kb zb!5WphACMn$WU^kV}%kovmy~{7rIUdzU3`@e&}b>>z+4fhdA^8UU#G6$RWnFsc8c2 zkcGPHfN{UT@!*~w*xnI#(XO^{#x~}{CNrXB9}`{JEhXyj3~A9_lW<|L!$jXctL4Jh z1x35FY7JbXLquJg%lpdDE^N<6FcXWdmVr-*`lRRLXbd64k)Z||w!o3cVae0fqp1!q zTwdZZ%ftq#D3yUQT{eFLcLQf}U>z9G%4WDf%B}jdMF!ip% z(V)pqZ;ye2qYt&Ou3*nv-S{hHcGUA?o0y_g2vv%)kKdVT!5 z(s{MaT-n#-fJie~n4&g}tLI7q1KJR-4QIKpcO+l-6Ic>F#_;3rr_+PSbO4!bd@wz9 zx6wG8LB1C~UdJH6eO4=atVhl=pCBOuLMgSaT&$JL(dec7_D{ZR9x&c!jwo3c+t%-JxMgk}?<^dNSH`XrD}(pUskYV=4L z@*SAJkF3jrR2)7Cegqr$QZzs}1;@ctXZ{imSF8Z&Rq*BLZlIe0UFOJkJi$Go_qV|- zV}$|A+SE@E>?&{^6btw%y}ao%mwhScSV=~cn5M32TyJ9iggv{%DAMS)l(;j<4p=r7 zF1q_UR?zP-NN>;7JM>u&Z1qzg3%QA5pLML~kAeX46Se_6Ji7W*$8t8ZRcLeb2%9&X zxyI#p^%>Iu?Y`b4JU@D|CrU>=4_s$|eu)A1uEq9Eh)ZLpbQ5@fK%`mcx^@V>OU7Q7Ck{HgvFF%Z{<3XRKb^db~g zP&@V{w)Oc@oI&h`FU<9K_^1=@yp!tnqT=K`c4St`@amCXM}$?<-{-={ut;>o-}-v5 z_{PtqSTG1Pvl$Bj;DvFLs8snY5DojQ4XcPyixYx{XpfkQAu!&S#63Y*9~Jqo-Ydj0 z)RTx65Lt1JRN3Q>VTB+jpX&K@suTAL5y`MIO;l^ROBAI;y)LxIXzJpkkIb~3>*xfj zHq~pRExXYG%=L^t%e(e0*MyxME*0UD=rlIq(fxFKbecZmK|W*|(^=h2ao4C4Et{_URiJ;9LCHjr%m6*U-DdTi@v${g5>uW((| zMTK8vK8WH#s-Ds@e-9rC5GOLl6&VORs`T=$T<;J57IiEMO)ORrW{XT4Q5~x-)%%8j zqwb}hGSK5<8ZuTJA~tQ{g{~mer9FF6@cL9$_FoCE$KT?t7?X(Djye!kKKcP$)_Ftr zL45^ZpE7a^+Nu-zLa29!G96pjC;G04W(St_(WoIqppe&KH3r_fMjtNKPox*N!O~)V z*0{s`)p58RkP5Lf4O=0&F03Nj--K2B#By?Rj`b}O+c%8M#Qh|63eN&(g}a1LM16j! zPXty*pN^jXp*}S{YfuI_0{jbVJ$kJO>z(op8McP}4rk?Aw8qyx+YTLfl2(Xk>lX4M za>h-)YQy@;Jln;74d_}I*0tWSd}_~*LwO4BF#JZW&xrPEVwoeoix<_dsrQh!ncmhr z8CaHwGsknGR~Pwu4xDd+5Am!ILS6;+4*CL&-M|_)jH{vUovlyJF>(S{iO2zujhq*J z4!pt4f&aId(HO#`o)9`c?7h1Ln85+>;UhY~^*No1C znd$RjW_%v(si8(tFY20y<5si1zzgTDOmptatUPyR?1%RPgXthBpKC|m(di&FeLBdD zPX|30bstU$joMpk*xL(7g-ml)$gDgnWZZ|hH}`I%?qJ9U>dM+tcXY_cOdql_GlpzT zV=MN%QTO4H&1^65!f6}RoVGD5Pum#(;l03MCLuBwYQ3mCI+I|g&m@@fnS|$}?!&Q! zQG3e`dwb!0f@#htn3d-fO!)Bj7T#^t9Z=x(rl!rhQFoLAH`6I_GlK#*4GR2j)O`qn z&-MZ@q`^&-1~)6y;3j@}FA$qim({w*6{7Aa(`u$Ot!A8QeJ<)g#9Bw~&9$0KF9cjo z6L2*v1Fj~0c!NvtHteQm*k#48T_Nm_VpL{2MrCGTRA%~q=5*I&-M|ZZD%0et%*s5K z`S3iI8S+&3dd&Wnad(ubGShh~qsUX4=Xfe-8wU46pvp9XD!VdJWj;JmW!^1NWrjf2 zy(TjolF*O4qd=9J4pf;LK$V#RRGH_1s+JpgWQ3A#z&430yE0K_KRi)oheXxAxXWgF z)Z?xlC93RnqRJ`~RrWce%DINYy%4FgO{B`Mj8xeVk5t)ri&WVmQgtux9$pxC?I==Z zrz2H%22y2bAXWA`q^ju#UdUA0CR1fsW~%ImXR5577~yZmDsol!Ij$--fQm=UUDV*3T$Np!tFj-StFrHwtFjNds`0pc zP^ouExhgxItFkk=Dm#O#vd?ik*W*Nt*jZaP=xW^h$*23O^t%$F-)Vr-*am7C60IYq9@J;zm**f6*ka#gO$Rk@Y9D)-^J zD)(-=Dz})cdcZTgXX5TCSLLR2Rc;1X}fNRkqm0Ovsavz?na!+zq_u}sMsXp^4SLLR2RZfws za?f#9X49A;c(mR{Ev^Yxxs|~x_u;`R_in)|_as<#FYun8YBZ06Rc<<1?3Ve0QMAfUN2}Znw93sutK4&FRnreVvO-Be;G1lf zUzx4)AD*r9l5Ev&As_cp+Won{<_5nXd95p04s*bX9)@ zzpUHrN9ig*ov!kVbd`UOuA;YF4=nD5c$IJBReoi>%71vg%D-E@%4^|O_UuQN_<~Wq z%1_6u{0zLx&%mqvb9hzT54@1C@=d|nW%FhG`47)o`FG1%`5|YupBaBOHjeb8oRy!>S@{{9m7l>``KLImQE%`< z+R8U+E59;r$z6vYDSK-6MSK-~lS788OVNeL~{UV{QNM zJxb&LQ<0#fOvc%xDBkto$^ALKy=QQVGZ=-h!gTm5%z&@L4EQR{hp#3$f)~nmFcVS;pwaJ zZt1HK-lHcNrLV$t`YOzzufh!aD$J*^9(jQmvR9$WUWJv}tMK93t1w`%j>me$$W-6h zfA-GS@8ity*1%K$9oPR(V!K-{q@Keldlja$S3!}z3iH{kAHMFsUJUM5+<75#6`IIZ zSQ)trA0D|1?-scV1LO)F;%$FsN2c|L{@=U)ybnz4#XAENK&}3F_H1jbg~)RlMXthh zVNtiPtb^klQ{|>!B!7XzHqkL7E&R2yQd{vmiSB3d})wmOQ zWP*}TAU3J0xH4502UJx`EXhOK*Bi&x)J^{#yRVCnz=Qt#yHiaHw=)ek4hSe11RMnF zN+gxQ2wi`!`Bc-@J$|P*;pA(Iim!;6Ii6j~*`$tNY=Ar=lz`#)ry6=Nd57;H`z-w#hu%)M z{l7u`?_s6K8X7Y?L9Kjr{LHSbe-F=tV;$;sSMS0RpNm)_{*Wo)X=za3|ZEsO$FaXK&+Z-FVf9Qz?OHOU@cNJ+&eB^6hu zq~d^*LIs;yT^g9*PHeIUO%w@Yj(Rv$Tl#h)g^&8NyM-j$i<5zy=1q^cf{_dj6M~w}Ch&e>mE`_z9 zQGtU1!B_ME4h!S;C}$O?b5`+|v%2pEZaJ&_x$8sDYLXXtAzKxjY*k#Dt%?J-YR@uK zSO?ZTDo|8Qh(yR#QJ-Ru30TCo|9wW>x?AMH6KIR90~+4jGaxApkczcTfF5Z%$GHtejnEE_;)8Xaq#Lu5mL=xXO&kA}P* z))`R6qD#N6c8uOORqMMN({WcfbF-TPIfh*3#QgLDpSNXCg4MrJ4v^hYwvRp?yVvN$ zV^0y>Q=IFT-MiS|*Ri#ST7#pyI!yrt2)B`#D!+|p6RI(ynGClE zL!o6JYj6h!f>OaS0S+x92wyN{G^MH4BT0e7gy%=Vs7PcwEq`qHDp$~E^+iBX-`jNHG5_T=)ORYK(5s#ajYheK0TZXaw>9(o9d>JkD+1&M*tU%-=x3o&xEo>rce+Fo9neWt{Wf_r1~Al zaxENx&$Cn1m0&HvAe8DV@qOe+sDY6&9T@3=`+RI6w&Tz5%2h%ELNT#I_B0;9-=G-`gCNY zJP=sX_&G613S}cQUbr1(gD5=V65$>XY~e!ig<~WK$TqBk{!Hr0SU5qUC#4jOc5 zEFgqYu$U{!4>(ZIcItsUIk5IW!iI(0L|_B&$zdU^0DN6o_KtF(aXJSYZ#hu8viBhi zI>CWFGG9ptlA8QyTABY$1O5}yj(1tGuu))84;UutYlMeOK|ul|MG@*yqA=bA<`$UZ z45sVA@;WSe+SM7kA1ipaypTlSjBzOd$OGII{#~m1N9OK`?|`d0RYwPxxZ76uLOIx> zo)xl96y~^gkY*^Bai!3-cg&4=mNB7(L&vMIBKp)Sy~dy4HPf@J&H+x7;PykkQ&iIL ztII>P0GS@n27C{$3K@-?e`eRNjj23XUno40?V{@m_7RK^vLLJxl)XFF9x%(4#x%;^ zrs>>my5(-~=0$i$(@NCza3{klZtaE0ZE7O7X=UU#4UyYZT{>9!J7%6hJ>g`KL3!4X zqW&06D%a(RtOkFT*{ljm!XtBHFiK=Z=*|E@K$(To4`45rJ~~p7#rzZN_|a~DaK9+C zP&V}Ei3U7f@mpgj?TLcSrq1)?-b`k^0|(j0DF+0}Q1;Gi0I#VGl(p^1oc4 zC<4-ntrcXzB(7j3&FmJY0R&BDCc_OgYqvNCiz5>!w59(|gvTxG5awlAVHyRN({x}t z-2%(^-R3Q@e7BrT5BGhX;x=E%E2k!}eEa!tdks9}G(()`G`r8~>4|QiIu6!$$6f z9v?~%EKhX1P}o3Fc0u}R znD0X3MKUL3<6})5aD7PE5Yo{?PgJa&X{?kE5C9SIPcx1AfI`x>wSUXUeeh~id>pk1@ z?lW8p^0Gs9y;a;gKc5qm1CR4JF2fBNbs9H#_I;;ui)Y_=8u7+y_zEk6}ln-lBhh{)@wk4gU$x-8KFY1eg{vCCQdJ9`bhT2Dva;j!d{1@N^lo)K;(MD*9 z*tz}`H9XPvss5Xs60}*wNVElaHIBk;pt!<#3Ij=y5m83~ZNV8jB3=2F>xe81z~`Y= zdAdx9%sl$F13{hzWFwyq^P*n5`W0hY8z$)BzM|uS9tGSjrW24qV00FL3-RQ@1_cc- z5Oe)E4WRk@1ZcQ-SD&+=uZZFXj5?4T!1lfaxdm+RJCIwzw#AXu2PEJ?9vHBw18E_) zjcJRQI*=h?3nPWQI50_RZ=0y{&|NY1iRLk0)Aj8RQ0O10f!1oa;Sx1F-NMblG z4QZi(V8d!Cb^?Q3-b`qgi4QhU^$aYay%b^MP=NM8!JHg?s&_tb&+TsR`x{({y_P!gr zMQ!i9k=rd-(>*tGOW7`SBM;12(v9R6Xxo?+c%>W3L(CTW155|4I!K0$^FoIJ*aUtb z`9oxLd|1{H`B3K2)~zTG;@K$AhD&G#OlV(!=g3BJNbqI7gDsE_lm|2OkURiX;W}Yb zFebP>I4=}naEtqyP1HO9PSL5Laran1&oJNw8+=eR7_Qn@$B8=uOa&MWo)TKGG$e$) zf^DGV7%zy%X=JJtTob;JToNS@0m?YTW&MzR7jDH*Cp(jT3%A~NCixa_&3BwhzGYjN zIgb(eHa_4&VUL83;4FckAQ><!+{LRNHBySpE0NAHSYacFp4Fizw%a{6(W6;>Hf2T9PN-fpvuQ1C zD@`k>#ZZ$4!nk)H<}#0BMbwB$;DP9Vf<6C-*pJbjg$b_jpkFXpGQ;ZNXl@J znTl>%l}UR8p_vq!vj%#DhSR>fA3R%x2h!M)X8P)W4s1`f4dZx^%X+YRlsV1QnbSPZ zoHm~IHA{AnH_fwo(|f+?0V;M#v^>ny z)-wD0SF|pX5U^ei4ayv=jiC=i0w+uB^JU8H?0>*o#}*DXe&tub1-5&-yszneu3%?9 z;mULH+dP*szPZXRWf*=51s8_EX$OBccR)L!x6;H39%htQ&C_YsJcCxv4O;acu9~HA)kg*{>S3B2 z0Iv+J=HXk?u@;dVgz7!~rR=zVy%Waf11nr;7Z#SN!{=bV0<++|qBu4^3rPdE3nC2d z6qHJ|BjCPzGYt9Rm}PGEG5}UF%e-TIfN%MhQrmh}G}!~(!`3^JXHxNb0J|P9Jl*+D zz`E(BTJRxE=Z0bbtAB;M3D%GJ3hP1zhn5Ab99H3H&d%fk?~0M? zBb(u&Ged006(T$E)jH`t8?a8C@!U4=fR&}q^HTNDXqn^tmWjW(i;k&hX!+t<;Th7~ zH;@}5uT0fT0trMOMZ_$w1n0nJc91y&W8@nwQZoh~spaV>c$-mHHcw||^9)utH{M5o z50=eRur!jl@u2lUJ?eK>R0salB3^E*+{m&VLrz^kS0Kin=LfcGjYy3yuL_4fOZ1L3! zk@HcL*q-my%(J=f)u1b~ubu?E)se?F^*ehu2Muq4d+!*w3}1;Fl(y$Y=jT+t4ebt( z-VXC`CpI~8U^~|bURAOw%;uY2Cit9D)HY8?ZSxG&Hs7MQ<{oRCrC8fXCNJu9+B+ey z>~jXRZDBY#?NSNL!#YFVU~8O5cLlK%JxzMUR=-A3i@^(RF1C2#Ezny=J!Pv0;}i6- zI`|oy$3Imog11Q*!DW_}4`^GEIEZ{)z3~$GWV=+Y-fUYc}VI) zEWVMm_Y46zvOEVY4ee6us>gurhl~}y`7L8^;k)qk&{5l5K>hQl;4T~(R!1Ah^hYqP zV~5PwF3fgDN!>i1)Xg(U-Q3tz_#Ud8rBK~RhA--Qni~tR4D03rtc$$@u&T%dAm?T^ z5j+XOGe>5fsYXgf!NhYCPR$?eYNDrT0O= z53&r5cH3inuF(D?_$l9fh`qfE-eP~5k(haASN;e0?8nt5;AL0hhgR+h>LCBFk!&c{hg8vx>ee-nCH_rfl^DXGx z+%c{`p*j9%y2XpSoaP3)E91R+fcKJkv8m<+)2HHQTb&S^ry$R1N`SE*obsSuwk9O05lPqamnJ)7>?OaPK>AkiDaR3L3E&J?`B$b8x;o9SuTG#m~BjtX5|dXp5~ zFC2lb4uX0(i*{`&!yRsq)fv!;RjDp?%X;B(iJs|li6M+|IeVtf!{y>RU?wxN%n7tr zX8kwXoae}{4eqT}S9f4rdzxikp)v{_m+8Q9nE@P^Tj1E<>k5_G#PM_wA?l)9l(Aiz zGA;wk7+4&=)ENsBEdVax_RAGQ5N-To>q3QOM6Z8GHiO1QtWla?p2?a{5N>JH$z63z z8@AIuVl};vkGG5tXV);xum_YeANPSnLN11eF4{Y^Q3~7%%0l)+9BS3DE%t!vQRB$f zE1_bIy#SQncYq_{`jKg(WQD|tJOoX7mN{a_ z>;-%%08eb{1a{{Lz{xb1eZ3-JD2IabD6;-B(Gpw5M7ELl=CbSR+4xZs zZkdh@y$and^_q7qt3j8KdO)F`Nnv^c?EwO^ zkZs4lXU_m6Cv?)npU~V)c0h2`YaCf8KC`_=HjK-nch`pM2#Jvl)xCQ*;fg!Uw>Wf{ zp8DqM&D0nmL6Amp!4YWS9-qhww$u4HmpIE&g1by7xXTQJyWA4o{$7b%W)s}~w&1tB zfxZynF3lZ-R|dGt5a2#mvq$u%w>6<3hU~Ea4vJQq$HMXs)f`})fw!-bDQ@bbOM)NMDECP@I4!;p{)~{tdW@GJTc)9 z`4zoSfV~87GdCm+@N|0hcd1Vpt6gY|C1jVCy+FPkE3s)6 zAF4}6RdQgXGJMNQ!+?yYs5`-Zj^gQMI-Xu;;OXTSPxto*cFSx${f_&5A)Q`Ybh=%c zPA>yG9g7^DENFLpvztl>UiREPRmVX(9^5M1h10Su07W$M5^&YK>VV;H$$i2NA?rI- z1A%LU^QIS8UuHsP8To)tH*9(k86I`}c(%)^G8B=tn>>19jCrjum$}|Q1?G*Mk^~&| zx!@+*yA$Zu)%`sJBYR|>SkE?Kf;+%daf~;EYshT4A5NO~R0A1-VjnJym902W!}^*{ zN@D!}UiTn()j1Qjhfj@l)xgQaf$`b|K?*ZCaCL_1#~?bea?7P_cs?elO~4NpJ~zY& zG~}a4rcYC~wT!(lqwIZ|&fb?9?0vaq@BO_AX4O^BeLK?w1&Yr!pfd&Ctp$P*f zs%Z#kZl*Lq?`bc1WWMP6A@eo$st`mDtOTZ=a?z*7U4WZ}<7B`v75wCPSeg zN4?L??!~dX1KPbG`7ZKBRv$ogqAjY9^(q|eiE?oyvRy9lwCH6U=#m12Ii6j~IlP=0 z{7iT=1NW(YgA9`u=zNp`dAwm#*q)sa`nYi6G-PV)Ss_=ZT`}NN8C5{{87mk;!__;9 zHAFA^&h`8udf_UzEHI)gj(bio^JamIHmgF&#hIWp&t9<25x@g$Cs2-!AcjwbbcK+` zUI#N5^Dcv74jRx!K!j9=Gr+a6go(dMiS`k+b-faDiUf!?Is)r4XO=ebJ&Z{nW8Xh9 z;sGn3UKNTfN6T>8h-w)f<|xyLIm(P-j?x(BxH~&mW>0h6iC-@q<|wUU4!iO&M;Q!r zAX*`Pq^*d7v@u?YnsmOdY@}OgyGGV1gz5vYKpqq=XkRUgb}q;7vjPH94=Ez74yhw- zAhW(fytHX&S$S;fY1B05+S0Dt8L4=v&11D-6h!crNJ(MqJGLJv@j)AA$E=62VY?q8 z-qFa!zIs}EaUH`)3)`3V#G)9YMq>PyWA6_yj3?T1!5tk2mM+u2V`!%%o+1me)jvlT z9cUX#C~AlcxjrF8B0N#*%rR065gd_@c5m9SJCEbT|Hu0KxVK3C=?$Vxt1E1cBBM$S zsYO{rY#i&ZoEV%zkUGmNNXbL@?!eYG;unsLbL09St_2Yg&uClM67CG$^Id%|ltr*J z*{~9Y-t>-V1Z&yUuZTR3fy6j-JX0vQZf@Z`7&)Tt%aKLl3VppVc&_xGR>lkh5_W6| zsqp?~sQ>17$Fh+l8hJz+j)E7ygrUfMu$w4Frs(>Xx0nzaM@Npz^pT@7W8|nbMvm-V zbz%0*(VfWn!jYrW8ac8nj~tc3$Po?d_Un&2-faAz2oXe&V_n~Y?Yd2Sdn40l4Hwj6 z$Y(ukq*=b9tz)*%Xim$-PqIT+AssKY!z?Qwj2w}tg%z@l9oI=bDO3Sgqr%VAYu$17 zxN`U!zB{%ZHO>K17}3)&RF6gn|Ob2_GH|h`1r!XxY8PovnvnA zmBC;f>p> zw6R_ctmrV;%7<^UK$VC1=&S#s_lO~aoT~3aMQ~z0Lx?%_>fuyvm#e)y7KsowJlh@$ z-Wa|bo@UE@54z9rnTXnmt)9W?M6~kS8*v=HIM#QD^hP}b)O6c=o&*Fj_-e=eR$?y> z0BYq~#Z5WWuKGyY)fS!~l@YRqZ9N|@-0?S<(AWPs>C+RP^{qPl;QQ!OvcUk#3fPKAZ@jR6DHH<8U9=%o|5sGy;7%edz?!k_ zitwaxy|~g;pBKG29%sH~-$yly6$NWSUWAB=W3u`YPaNxc&-y`FZ|E%$Da`DGs(w?S z0xGt`C=>Jqj;!}`Vv&%>6JXm+w4;|PHSnr6o1z@>QW*uT;ln!<6(ID%wu4?LkVb#GZ zZ9V>m<+n6+dZ?=%9qYnYDTX+Z*^*Xts_P1CIJ0pQtUXi&v;zC@(6()ChzGWe-Uw|w zf-~IKHGm!;4U7QtguljlGKqJ`Ja}Rq6~p!jM+XnO1BBi!W1ip{2qi^)f_=rhwsFn} zHambj{H6`fj2YK^cH;>#QYmo=6PX)U08?gT5}5%GQ-i44Zp2;xp3;hs&8ogL#q=t1J z4BMp9unwkS86)LBb2Wv*d@%JNcGaFXELVhYq-~o{)fXXCLI#B_j^>g!)yE<}T2{Ah z+10|c;mBLoXMiuIceKN%S?3%PYJbT{1-z@|J(2X`18-*=j{IY?Mpwe@^*m91}A9ocGDUhw(AZKcPI5pE&lDwuWCWv zE1!90*S@G!doQeKi_fOcHF8>C@0`74JLmidK8iLrXVnnBkZfDep1R(wfQlHij4Q6Byj3)XFnaA6D9JBVxGqSXXR5A~GN{cPt+*tf0gA=v**6^%bcX+lt zsZVS1_T6S4gAr8N_-D#I#zs)PpHBBh(??KgJxt6z9*&^S^+T_lMYWsOEUH^~7PUL6 zPwR&U6O**Z$tTJ@#wI4apH8>-@rlXjGLMH-lcN@&ZY}xWV^^I$!X{J}GiG0wmH>2zx!=lq|`JRYL{qZaQPZO+$0|8~=Y{@uFJe|J)!*5vcM zO+9im^egjUyOa8~j%di3 z-qTz9Px^?t#~5SU{dBsy>oKPEl$M*ky*2q4LZ+q#nYxuBQ}bydQ}b>iQ!|82?+Gp# zbo+R@hZ%)T&2-4r%z#YI49L_x2bs1U(F-Y4)1plM%9N@3w3MkCQl|HE4`do2FZVE` zl&P6cnHojP)I3L-LQ%ak`9~HfYVs}2)US-0noo71!iQ`n> z&8KBe%|q67JoniA>iZs}tf`sKni@sc)I7(Urd!18k;RFce2X>pE3>BN)3T=K-Lj_U zA!|CGdz4>&-(!?DHPcyBGlMlXGgwpe9BbNgL@#7bO^Y@4E3>BN)3T;!Dr-7A=i-0G zxyLALYNoTMMv*l&&#|WIcBuZ5#YvjHZLy|)W!BVwTGrIQTh`Q0WlcxtTsFVn+{2Et zrgl1OYG<&fb_Q!|pJPp1j_8G~sco^QVP)3Tep=SlPGwC;a}Vl!^ymF6%RTHUYig&n zrdE+Pwa>Ap`F0cIM;0e)@-5ahtjwC)Ps^IxcgvdEsjTUg8QcE%e{H$PC~In`v!-?i zYieh(ruI43wB?9i$eP*~YZ_K&P3@;;P3>aV^ue4<|L+%P3?5n)GD&3_BqzH+_pL&S)8cJw^-A# zGHYr-Eo*AuEo*9@Wlitp9{m;m8gh?O*3?dCP3;WU)Xrc{?Q^VY%MrbhHMK3)G_1^; z+E2@x+9z4ld$~vW)o3oGtf`&Onp#EH)IP_Wn$7KO+ar?`wfPoo8dio)?WcuJ?Yo6d z?US(Sz2sx_s}WsBVN*LDHnlTgQ#%7Twa>w(O;7Yf+SIma)37paYCkP)YDH+%cQNU* zU1sm2w5gp=n_5NM)ILX>T7UZ{g-0eQY4fgyn}(HfQ}=0cQ}=FhQzwF(zKc0yGjLP)9B$h5L@(q`U5hu3EAyuA)AFWHk~dv9`zXuoeUvwK(|J>; z$eX(7cvB0Y{L1DZnVhK2w}8{QGH~iXEpY1IEpX~2fzx%fkNq-lGzy%$>ABOm1Bu?FP#HkIpJNrB` zIZ>N$A*XR=)r!UVwHp`S3H;SCP>By;@ft zXY+}6S9hb-shdunIz{T#Jw=^<{j&M8{qfM++xU^;iCTV(J&h}~r|#3Tr|#Xdr*6oe zmTLE(Vv}_@%AUIE?5Uf2-L4%oPp`z!sm}HPtx>#3q*}8gQ)(~f~fx8f~fu>h`PO#ihPiF z&G}If)lUae{R|M*&j3;VQy}W7LwX^P>RUW&TA4@npO#1Ui+R+!xk!AUxriU-QT=ot z)hqI-{wW@{7hT^>-`LwZ{70rIYWpoNHLc90`cKQH`ghBv`o&!8++<|?PLq*QF4a%x zQvD1r)z9Ek{Zm}(xJP;+pXytDYFe33^`Dkc^#eW?7K~me?C;c{N9oTpo$9r1S*B6& z`~CL=I;7j`Ip70u4Tt`BB6bhy|9#w6&w(R{{z^iB<*xslkZ<&#;&J@`9wm4Y|2^#fr_-CUe>uSyOt(2vqi+GKX=Omwe_BA*zgs}n4**pp z9WZ&6Hb_k1ltTY`u0KB%P)9hK{_K5!J#k;%)UN;j5y$C|;8D)>M>yf9_^bZkhyEH+ zl%;L`TU?>-zqy&|FN=M$>G>yFZW#*g21pY`phFK<5JUyi^0G~MPz zjlPAbrj-#@|7j6b|85agA3wW08bwt7bVSw9KvewB~inGL=Cx`J3$+%IwT8q zg~1;M4hCw>vEE}`)xQ6JVep6RzrO=ehMykmJqC>C4)reJZz1*uC@ro&4SZsHW-vF5 zlBi)ii5g~*s9^?)8s?Lz<8J7M{ApIqG)(7DgCc(#=JTiDj~V@N5ag+oN(@D^vNP>o2 z5){UJG034k9)I}x+dqH#;rR9I_PgVBLlCvZ7XF!6#y`UV|HR~W@HOxu0|uXr(1Cv1 z_H=gn-5Nyy4Znlc>T6h_P94I%K2!}zfeO15hlQ3r3Q>mX5M`JFQHBOY zdC!P%8OjGn{Phn%{qn70#4iLVLkpbDD}$3^08YYKDZ>NF+yDD;s6hfOFz0`fFT&u^ zM~b=rKC({)9FOPMoGhzp)PXjT%{Vix9n?}n>&YVBaZQW%`=bE zkQ^Z-;Laf(!PqD6D_k3{7`;761-NInKLQ3kJo}yP!eV_Cj||iC$S{saHty|}DcgId zd`m_yH02lKkfDV`=9O{CFu)-Z7ZFX7m12e&6G6xo6N|@NOcwPfNYjgGGo!Z@YLrEB z%gqsy>U69z8|6DPW^U6?R7(j*Cpa9zo7$zvA`{G$Q3EeS7Wv&Lnh_NvOn#)L!5s9f84P!+y zyQ?OS&J9#6EOPYPEQ(8CkGy9oDe{Iix71D72904zoUyy~j%FV5%B+#MphuQjhJ#E4 zg$V8(ng_U-8@5pdif3dj_)R#nd`$LD0iV3(dI6;&etV4%n z8%_=TA)p+Ali4GyK?ar2Im{B{9_8}FbS^K<;PS#Pmly6C_bryU(70cS&qtVLgyq_};l!|+0k$%M!$I@g&5hp!*bhng2@S?nUDbhUep}Z3M(ZB; z5}Q83)gq^Wz6dAy)=FPu;-fHLm=5EGaTu?0&#z4Ut`K$0;Vm@r7Xo;(1>ohC0lYW> z@J@&xhibTp%A__dL7CX?Jahy$03pSSQj~dlVGo7jjA{r z%mnQy>?MNeS6UV5_?2IocwqhM45!q8_K_7Kai*ci0ZIp{97ar1`M%z16dY)%Q5kfq z-`}!Q2`xFe0oK139Zt)g%OLq)C-jZ$$4gH0PTWle2Wo5)I4iGma zj)>VntukXy(7J;0VRsG3L}Tg#BMPyq6IJ!GREKe3VAzhuascUQN8y;M)VPj>A7_a6 z93ml@k3%b_jbHh7{SEONJpo)HG7)t4LDgK`)XY!1uFH{!AQB@}f&*|hTI1fM7z$kQ zgEN2w=#PW0JAQN9>Oo8}_fgm_PKVv%IPBKA|5xUo@0t58=eEq;A6c8IxwinfvNGTn z2Y?$YX1=2+qA%@tzNtox$q?-Ag)TQzXl%X%Q-Sb>1QgK>@fb5C*q{f?o7!_Y4pLZ1 zQ*b_~W(IN0Rg)uS9nl@BEwTpy zFrj7`C>(aJ*3|fwUm3k&!)cDC%xICJg2%)OA}q|(&g>Gz0mKGc;KXn|L~ibOzz?8x zi5i`%eAci75`*qWg=ChP{wTy2r$cOU9Aaxci)-}d9>5l718nzf|AhcsYyoU#Wq>UX z05+8Elr18}pr-`eWKCuCj=-jPPFu4g9UcST;J`vRZSH%lNdYzq&Wx>w-+&|zOGj@H zbp_hn2zF5Y;#@2Atwua-$U)n~zacE_tGA-mAlK_T&hJx>+9wQ9K+S=>MH`x4 zIGA%^anE=m{FJB~-1TJwdmM$|;&k{e&Vb)y1Ae5=mPdph&i1;`D3jVvv3QX_=qvTwiPR_*{0AD@V}`T?KIhDDF8 z`Ck}v25=nlc{fv%k3)109mG&$GNf}f0|50=yoJAmhk~TeDu^_<1u?+xklQ1U@7Ot! z#DQE1-N#M!f{;Yuv*DqSOgssfcES>GFpAy9>DXPIf!)Q%zJB+(yC}uoJu*g7Z_wiI z%F5hb9B_At#aKODj6=rGJK=ylQK`~&W2#Xqq6LV!6{_{1n#IV6Wg}c02CYzS%p^Q| z$x*3skyyK9JwwxC(Z;X*x-Qt(>;!%aV`Zpw(0C*v6F$yVuSY^A@SAeB#hGVwRh_TqGAFV0~0;w`gh?m>G|3fg;Q zlA=DL1?`oUp}jbO_V5BP=uXH7P&e0l{9LW0r-v*887)TSB7@6_Z#`8H1LO`I3-Exe zUHVP^lp`B|gSs>uA8UpH&JKP6mWWkPf+1=OU*kA(0ANLg z_oNy{J=>=NIrx#)<>*3e5A3sIwSCktP&BYx1-g`o?QhxkEGrxkf0QSrdiL;B(C8^Q z+SdHRvsk@nTklKVegK*`_;_zyK)S;(@2t#mLP#cYXPnq?`ovR zBw8&?|$y{D0Kc-Q-Fiocm(+s*WH8#?_hZm;Vc;R%r6m<+OqR?zsMheq# z*F44vQEJK=7S<+&M2-d_L;%<+N?M2#*!GGrdxZLZ{ae6__$ks21l=QRvqM0q_Yfit zIo2?Yk{Ka#JJ<3CNFmaHH1gn;AZNf^A&I9Khi$5_1Z0T&vSr^vnD5?@DBioCXG0XG@pdwNP>X@J-c&LFG zdA(ts3d7Ecw!=DAmqC3AHcAnh%8BkRsxQtz(B@jqZNV8M>BCNU*knAguV$uBlLp9S zVTl!zBO3WE)xCT6e87%jbQ>iPITHCew6eGR;6H(=9UT?y03|HZwWH z4d2*cjfC?MDaaf`P;xlSK(n zg8RU7hAA*X1&)UH9b<$xGWof{QW}7g1R~-q&WUXx0HFrWTC`;NPJF1>;F6BaBx$FR zTwMn87dXy6YpT-w-I<%GO~TXAgg$bBduOLb)-GfcdB4sjP5BZEhg2X0tvi-O&<22C2pK+|*#G|j+3 z(=7(-@77_nG0^XS`tiHl{_R7@BI?>&7^vB-%z-A~V!(;eOf|xy?590#;dJmj$Q!Ut z5})pdk)rtlhro94N2EpulUY`AVj3^sED0Pa=rH6~Fk85ne4){2nc;u~MK_pQ8gS=u zYW?SJSS!jgeF}U_H1%(hJ)+zx?462m*qP--ndvcbE>OlDo6AP-MmyWEnRRr<;XvW4 z49m!fxI;OGf(&^tvQV}&9c^}%s#6Q>Z4JI%9v{!V6G&2 zq6}gkn8cPFayJ5EVHBHc4k(x+17G>SGmGYq0q{5uO~Lm|c+Wb$aEpc^-N>cT3rUw5 zyIE#9z+7oBW^}yJlQGqiA(O%&%#LN1l=U2|qd75fA83ANTVvw9fz%SP3n>Xs>Qo&o z%Fiu(9{fEIK#&hC6CyAcxg@$t$9itGF=widg(lt6y&2a=eS2gmLd!p_37bQI!E(;?n81L94$5U;;C%9mzCy!YJP z3nAXrf_TklWr{ZqC|-0vK!sRF+ryP$ac!7dkIoDtFO?k3%|RG~Oh+4NL62ur5sVa> zAQf=7IzGxRd^Kcrme4Qad)(QXdUqO7yf_c)y>06m@7cM+t)QGHx)3=>s7?e91?P%V z(J)1yRPsH$l1;tKaG>-l$Le}Ko9;QHo0zMMbS#^NOGPuCHZFrB!#P0OfD415xo0jF z&xQ%3$g3ioY&={P{B!PgwN*KadgP?woRFn4rU-YEwk}1{iEK326>wlg7AN4C#5d@H>h2lmFg2GqOX*CQL2W@8Q0yc1#$nsJP3A`ggk8nv@I+x#p$ z9FXA$rZAoO-f_4itVqCTqh-irAG|()R}lnYqBT)4#A>}r-O&p{@<=o3NTkt~$#llYYDgnlj_h7xZQ)Kb&*)kFCw&Up3;P{vutOtbZDXuL zoFNJar2JH3u!jGJ%ik!S(2!*vr9Fd>AQ0dP8z$S+hMXvokSU-*V;&s#MunTJPYu}= z3J7`u4`LVMHa-Q-Y+MW5Zy$s=as-+&nz@yD8q6=C6;GH)sn<`vF>K%h3qhW0>vO_+ zY}wPreT27&%P8eEI=_&n&o87I^9!jlzhLinxn~bB+>2c=9AHST0S2>Kd4eGgCK%w| zfZD;vP#w_zW2|{YKRwhHi_9Mlq0HeW#GF#SB%f%6WfIzgY?<|0X^Mw6S!mLSc@TnZ zS{={vE5D9iv3g~AV#kCon&^Z#h3A9qF{^`bz&$#!IJ09LJ|Vs#BEj;h?~h(IGJ#V) zzGL+aHE9^^MB6>XpOxyv;3G2gYV>wOR1{2CKp#G`YUIeSi*`9jMX{@ANVDKfm^3V- z;IRw8gL4DHyI##cY-*L=aqp7xMl?mZqtjeW{6Udy~ zdi>0;YtM8IL~N{7RAQ*g@SErj6gJ0)m9uBHJMGj_>YYS{N8N>WADD)+=Tozm{XUe4 zO+8yuo3O_A^{)(5QedmN+k9phPZNUiW^UFuoU=i-iq*eiYXxf^xfy(buV;Wg4$bq?81A9eoy-1|X3 zOn5~+e`l5*4km3Z19}l95p7WIQ6#z4d1nsCo6Lk@> zR#^0-9uj(+=nOFwhhAp5tzXd{MJ(O3>J)3j@)``_5$+qlkK6|LZBy4=Vc-(-HT(g8kpz>#9q`0re5`t)g31$#~{`n8R3B59inbwnL=UnTAt-i zg;mIg)wEmI3#Fb1&I)#jDB|l%-m|rbYuWLYY}vD5N8nT>YDLS0t}T-yQQ>1H6RlwD zztP1-rbD~!pXy)1roc)NpoaW{Nr^|+JD^ubFtCa`&#**SulK-ur|>L?%d4W!+4Y7+ z)4=<&$gmi@LA#8=H{pq39b#3$?lyJB(jHugdWY$%SvQ-AQ>KXEN@-7H)|sbKqfQX)lvhR}Q)=@V}@p-~;KceaMVleRjyC@Z25imF$@1a`pymxUiK8 z>u{WL#yZFSf#*R63ILDE=I~?Gbz?CpvQZ9nPa;z^a0KLcc#c@TsL|s5m~oZ6ZP{)O zxKr>Tu)4yc+>u8rSFiTO^d!gf|Fp1kJ~{)Lrq4j888eXSb_UXhdqdJ`_7LQ~-0g)E zk-0SyX*Mg5MCQRrBvq+~c{FCdwAT-88?g$!R;eC@P)`OKpx?Y<8Z0VkP-Ix`=&xPT zSn!o>CwKUL!$1jSC-8A*rh=6RBZmi8vGdKPVSC66V3Y9fAOX<}MOC$BZy`hH6F&R6 zY~(PHjvVIcBZql>);V|OovB|+OqVAQ?JhN+Wf$HM2nfbZG;g}S%?ZgyAOu6w! zg1gcC;V{!|Pw~R3rrexrGAmCt<@jkm#bEXWj4|iH%g&=Wm zg2ZNJkT{o5Yn0{PhVRl0->mrFt{lEcakV@hSIaYSwLD|X{``z4*ObD}IlnYh^mR zR%W1UWd^!dodQtoyh1be-c&*HU*UAidtvm;>HC@FE z>9x|N*X+vlTKTl}T4~d3)7f*U9luBEwKAPvD~j}5d5&I-zG0Lv#Mep_U$ZOYYvt48 zYvtYIYo(2^O^45;cKja2*UEH!t<1pJ$_#w1Jcq9}UBwIewbJC*?8^LF`Lz66dC0Gg z$M21L{XNRBmFfIiQRLUkbNpIrKq-$*Lewam{F+^vUn`%MUn}pHUn>v!wek2})a&n2 zeyvRB*UAijt<2!p%5(f$(^b5VUvrx#zh>9v*SfR%q^{!a%Ac#hVR&ls`)$G8H^}a% zQw@@yu}b`=ySUsa8zY^MOhVKsoBWzvmtX77>eCwKd*#>O&g{ARJJs{hh~IBZdCXl* z=GSQTO^V<2ye7qOx`U#w;*p_>x{4;h=GNucy0iMUu3{>`Hf4S+XvFU^ey#iIbc596 z*XS-THp<-C4)Kvmh#F;+Uvum7Yu#CWTBCfg{My@@3B+%zzfT(RdyHS}emdPA&>(1)ax{Ag8+5`UFOU3Uoey#iIbc596*XS-THp&tk zM)^8^&25_enp>A&>(1)a8s&TC*WS)dE`Ia++eyXmF@CN4>2!B7onNEpH8Fla$FDVA z#q0Prw`uZgZe4z@JF8FYDxT%n?#1sU6~D*$weF|W4N{L^qr14=C|gaj*YRs^)8yCO zy8K#qR-e`=-z&fNc4j*9dm|OU$N07Gr_HcCmz(&t&VgP>*U~Bt|7ZPlyNwB$<2{!X-2{t1_uuUS+ z<06YRqXe6oPOuq8g3UZfu+bh$1FL)?!e*KXn_n4WGoKb=Gw&8*Ga?AvBm_M#^B1EC zo0*QVnHdP1nSrpG=Mc80uXtpsqQ0WZu=$l4HuGs2HY3TfjYsgX%pyk_HZz@JGl~qG zdGhU{wlNv<$R`?@j{BtG$}T}GR0;-EyZTED7KpjzFpQuH=`7rnNG18MT*TlN3qd936!?V>9m-V>4P9+f4+I%ev@h6k{{fF*Y*;V>2@_HuD_D*7g-I zZ06H)Y(|S?yNTd&VFVxL*vxc}%_wqg<~fdyHf=;#w;-F* z0@-dN_;z6g9|hUWbdb%=0NKn8kj*>?vbBB13rRN9B-#ARB%ArPB%2wMY<6Y@cT*$y zLXypll5A!=$z~KuHuDt8_Vvr=%l5}ZbC<+NmLY1JO`grK%(IzK%d?qx%d?pw&sJu} z@i;Y(FXY+GD9>i5^K51Y&t_)uZ00GRZPa7DkZQ9{s?D!Vwb@Tgwb_SM+r9UKzvjIr zZwqF`F70%x%_>rD_9?3E>)YFYd*f^%r;kiS)Hs`PTUZ%xv!51jv+ovevk&36d+!H- z&HGK>mhza}m=3qu8E~7O0k_$w;I>hh@yK9BT}G2}3oA2j_R}(Mb}{2NH=Zx-uiH_^ z%}!_BtRmxPpJLp;zFFm)aW;Erk8DHKI-9IpSebRRpO$sA@0NA5i&?k10exYg-Hx(u zb~@{3XRvN|2J2>@V%;A2j2AL*w#mGOm6+ zdJ8Kkep>F$4!E~de|}nDmzd-z_hzSa zZ&s0ev-7#PZ?|S?W>|!%O*VPAurlvvKP~TO-!1QE%X{}0qr97)&b!$eyqlfDyV?1? z+api$Le9-KIk&Jf=jJ{w=jH~STX6O4_l$Ep;u_F7XSz7<&Jn-gf8VnGSJ4hTJ)?`e zQO?ax=iHnk=jP^fZa;k8eZ3gvt+4e%y3IA|wzx9g<~}Xm=H4yc<_2_I=s(Go^HrYd zHn` z_n)2E{j<=z`@0UXhTdGp?%Bd^SKTPc=B9&eZU)HaW`JyNKFIdKQM`~|b4_|Ju1v4F z0lfx((wCYhZWxV)uc$tc{nvb~=2H6K-}gs2^b7Y?&Z%Vg{Z>Lber8wZ;`;N*{inKA zO()^s{Z}9(`wff2pve!_j6$h#_SFA=M2yDwftvs;>79n_|8^Vezu}&Ie}%wP;1+P? zUH=^<+DCVG9ZSq{lwNbw={0vtufc32V)re*22;P7%fswlc}_GrJ0?7Ud!Aa9e}? zwm*-sVPUoZ)IRtKBefw(Eat``-tIhO@W0 zXZXIWo(4TR@_V-awDeD)z~W=|gaFkX`yJeoZU6KFus2)%%A03e;vq(HH8&ksbGNt} z_YjTsFfm}?;%ZC0!wdN|*W}aU%6ys|@M#IC&#uCcN7pSRsrYlnwJSNj<1`60DMDS=M5#ZM14V#A_go5)Gf zDaUuHo<3D;js1P`%(@T#SE|u*FWl@azw$oFeo(E$+nrK9Gx)+||5E_32mWM2^$R#x zJYkeWo_Wm!(*OQD$iR;MaXbnzJac%KTzwNM1^vk8-=`Fxr;(GTTXi)vy zhbjeor|-n`dY@&30~igNc>+GZt(FKcP+$?Z+9rGrtP;KkHNuu<_^{u@!W@1SMsw3) zGs15fwW0>@1R7R3;`4S}*Q7hK_>5S92`M(ud_-2dsd*$K z0!AZ_+nIKfucI_F2UHG-$&R<>PSskFr9vt~7JMudZ5{vf%xxdIsD% zRP(quq;;d4zN;~ic7o}Dljg@yH7X*~CcDgnN7*$uon3Rc?ArY(muKYI54p8T*84(M z%{5uIxH7Be2CN$DHVhk4MR=^4BjOwBI+$|Y)f^5Pc(T<-V!s}d5$Cy`umMX3i5EE_ zTIkS=U@yoAkK1Z5=nBA|;fK(*Lv%*$_H6tL^Ukf8%KlOvNP+SQih-F|8|eeV_^k8%Bs2PteU%J z)$V(TTUPCU4*ZZ+o8%o{$fx-xpB7i<)BJ!>Lw9+@>NyZt_&yO>$UR-Pz8Gpe->|rb zjMcHhMtBX>r^uYKa?xu;uL+aW$7A(7b@=gI3&Oe`o3u{Hy7q}R>pyYNED5%ZY+%bc zGDK3uXw>zX`9}6|WF7`}Dr$3NG?`^LIERy~UKRNSy#sh#J?sw0hwcD>h5OcG*~XvW zHT8-fWPjWp^JvJ&kOA#L*+GJH^%=wSLLuwy*|TxK)SYX5m? zGSlb>Oe2;KmR)AB4)PN+HKs&B2LM=vUSovP$*MLi>&TWqjFOzjp&kcI{KWb-i4hu+ zp;lPj1Xqk8;Mj6wW|RbSMP#a^ zKOrY%s1xoOfMzJOCwu;sS&qtHyHIQqf_?sRJy6xDPu<@g=q5YlW}%)XvT!^bWa`L$ z4ZB)=2cZ$wFP;V$EY(6JC^pei}m{oAnhLh4liDSM_c0((OT5@;O)7^;xM>YL-Tp1U7q zUj20D)!#C&_g%D|UX%M<-gSYCej(%Pn~ZB(nQ`?4#udU7TGa%5z+JNp!!T3E(%djN zxV@m(=Os=p@>6wFO{Zl`EMaGO<&f$qPAH z-{fG^${eg8aInZy;4Y9IV5uWA5y67ND%Ll`&V`g&*lNzieTC{S@Kf5v3|(}TZrkd1 z$i4LEfI+W<tZ?Oc|?xY4WJ@J^$v=X_%Dp@SPd)$e0a0M3?5<^ywXK(HZtqHr$tT2K^jE)e%D zM=}7hamG6?DZ!PaMD^8KBa9vS{LrTUK7JFT3t@rCbdg!|!V#G1#$Hd1@8g6I|#hi0!9? z*!~v8zVAYBLG1e_=fizNr?}7;a@fAfVc&ed`@MbJKluq4+8<$(6UAqBXEt!7$Lb)U zxk5>_%rMcAhxAgIqXAKYT$UE}ox*K`W29^tyD%&r<;>K&6!ktQWZt)kwf5pSpu z{cj>sbc`k2v1E@AVIwU>s)lMBsUzw+!&*|bmC5W{=yItK{K1gfe&7#oxoz$bnosJw zD!T6sZn5nL&H!lFjWc*?h{DdG1#jP0XKOfv0l`4NV|4&% zZdm3B(VIUq1eM0B(f?*mrozN2Bo>6i$C`o!=6*NQ%;|Ee4_v|! z0)OBVZb9%dmvD=MHnmg`xU|hnHHD!pdyx>L4 z9K${O`||U7j^UO8A9D;13jDrfxW&MiIfjQuDeD+Q3kJU($XvlOgaHsvF&nWBNi577 zr37Q~HcY-bFpLKpCQSMNXYbu|9LAM3>!}pZ)87p=U`Zq;P2h~6C*bSu1JvHNajIUr zNB?JPMLIsqw3+m+RONh0B=RCl6ysxDR*(h}Q67-%BncL*2qnb|YPgnT<0m-h$7Yo} zQ~r3y)4%~dsq;^X-*5NwYo7WIq&f~h0(eMCGIxy>XYi1aD9jfr#gDP-aqpu|s(>a_ z3TJo&WJZx^>gl{eB$of8`Da(Xo6_-7uggQ6L)X{kA)bTRSLA_rcOnnrqCCWN?)o-) zD4OPj)^W_gvHxR^{_rG5a*ck-tU~6HpPbZ_baA;#>e}+iRAmdKbTL1}`#+N>aouDKn%P?*zDPzk78n#{q z*3RHRu___?iPon-!hm05)kE=GhUz>)oPoGhPw`8veRgz{TG#s%Gu#zHT??FTt-2Vr zG~FF^?H4QtIkXxxl}#y6Fp^{=qVzhDX#kzUZy;A;JfhZ>Zw)u%C9w7Q`#PyO$6K#S z#W~=b;WbWP$^)dLXr>RAiX7;A-uwDzNW~0xrS=8hNIlKy?batFeE|n)N@7X|CAg-) zA@^>3ChUFf9K?lgWp@R{X`@~XbQL}gt7E-CG26P;_`2Yp3K;_K!MZlTj}rK&oc5Fl zH+t%&)*m3~3u6eNLM@c~1$RO=0uW;@nGEWd1SWVA2>Djt8l%@p+LSvXxx6{jbhin{ zC4lw#`#Qlm$5^ik#`(ss{bj*8r&wv{j_pCK4Cpp_gu>-tut!nSLr zbe3EUX#Q>`Jh6S9sdq>q(@6_EDLHGE!9ZJ=lbv=g~0 zMZloja%*tuvrZYLy?+)Gg=Yr2#;CI02a-TYf~Q5G)QZGf_G0IwMAgISE^V}v;4$NoHxj&)?!Ym@ruNe1!`2k* zY9J!cNJ?BGQz|K_4Du}8zimNr%O{?m+aisE{UA2G_RnRTAKOS{aP>wrNo5d$FwUrS zC$1a{!>6E)>mw-sRbOUlP@h}Z6~c0=A*4>s z`gg7nq(6dk23RV-%g*hiIdYv}NVK)P245Ym$G>%ZBH=q8Bb`cXo-v_Y>9w+xD@aGC zxfWU!M$AS1NKz7Gy|&GG(oyM+t=qkUTjQ5yAGb85RKD`@M;kP$4J(?YQI!OZ?Oi~8 zL=txGPh?R~a7DLWMRU*iEnO+_q_K`Cja58pJm*Q9%Rp&-6i`|=>Bs6y%5E>b2&6R4 zkW$-L6K_NE3f2*&NkYEIpV+!uSi?PtD1Oh{=ROTIuO$_5)KrI~rYamYo#Uv@Wgay>ibpLQ z_Jh?WyC3i(h}1MAQdhF~AlW_J-iszG*-DJ)fD8)Jf09ie$bKFqyNbQylM_8P0>m3- zNxqVm8;zM1#Wv(Uf^C)7JR?%K0=5z5t)vMLRkI_9vBJ*3;#Wc1Zl%ZMP>rai8O?f- zNQVeK!5Wj_Fn19eGv75g`8vnSm!u47JD$=tFLq#iLa?$1 zR}|_LWJU4(jZ8bZVzFt>DB!0x&WLYMh9Dlh(JQTa2DFkv*^BaFksGmTtZgH`>U09| z)Mk+f`5WTL>gL`wgJF~O39Kb&&HV)FJKRZqZF5%6w=*N*?)Lt3iqJ{k8bx$#$7Pl1 zU4wVx6_LeBxl;PKl%@c~raBllRl%_79EQ#9UUu?UYLuqNt{*He*{xm|fxxC20?Pv3 zODdHq3$kfj-;6FmB>h?~9tSrFWrHBw4oJ{mis&2Z4q!}H62#!h*`bF7TYTT#aEGVP48i5rM*|~YiR;Bv9Hba; zo12iX!mV2S-&i0e)LSEkBipe+ns0b&#w1FBNV0dEE3|)0VhZ?ds>5ef6+WBJ@!94w zKbxxg*&6G9u*76HfL#PMn`Y1~=NIvnip3xVinVi4ljwX>;%(EmOP!jvj;Y+s5h6)8 z48dz)%4&NnxdlB%oan_Gc&anIX$H;Op0bUv@Z2+IOr{gbv)#Lhrgkou8`43_XaSmxp;v78G~y+)>{P8pa5n--Bkoqi zLx9K!OQRJ25t-vCkgy$ebF&x~pxjgk<)$hqH=RSd?Un3JHI-YV0}mFX9Esa5g2YWR z*B#i%dT85(>|BNnl^_U`>1aCuATG_9a2(Gw+PYbiX0QXwF!_yDW{; zxzS0dBUiI9@YW{hRA7Qr9TS|YnBerieNs=}%5CCR){O^?SB?X27r_Ci83#;&&&ro;^&B(RaAC9L2Xa@&VP%m-%8_=vBJ{KWM^K|ekAZaQi6F97B%&G-5CdLCp?k6 zrgo=QHG&a5I0-zBD@2s#FbjfBI~C{PKewDb9tZgy_yc^^(GA;no9O+i3A^Bu$qKC` zS7p26bBE-iqKl3Naid>t6a44ay0mgR-X1e?)uVbMi@k*NcD@24&OHYgO4v!;ms3P- zC(R8AAIlyxXT&8QD@&#{URdpeY?myt(e|$~m1=&f!XcSxq@l z8%Uq;HTh!5Ic0aAT?FKuW{@*J&M1dz*nw{cpT2gCFu@ur=h01q{SIt@BPj)$ch9m1We5bku2aEHq+si_*_z95t@Cb(0M;BFT|aHko;ZD$!`#=%7` zNZorUWHHq=*g<$ zw-U0{QvSi8&JHWVuR#P6%9YC#6vHSrIBWZq+8hL!?SMgcZ{@;me3;|}M=39mM;nEq zAZuy6Zn1#j^GaTf9ZTq;Ga^I0QGPqh@g6s@Au~Rm(I7uKN(X@Mw#Iy5#E2D)F-OFM zj~k0kBU?MN%LfaO(d#?^EIZ5^VLkY}W_e)o+ud9nE%527j!#cje0na9?*93kk-&%GEIhK;U9reCl@$;C_FEwDL;vVTz7J) zhh?m!X^e@kN8-l%D&!1L-zX@W{Q9=nxHR36-Lq55w<1z339TC~fw`RrpZt5n{TnxI z7J!w&=mxw+mpRLvHZEa%LAfXdfwth0tp(SmC}9Y`?44l2J|5r3@ADu#F0e2VnCr2{ z8}aYff|DVC+`0L-czKdWV6ilRmXT)>WidwDdcVVs>`+JU(oUX|3O@ca_iy{POL>hf zEep?1B7jcv)JdWxL;J|;Zha;Y_}lIdykB{)wL}aDL8O`g?B1%ot@N{H3Nt% zkZoHm&FxH^H>so`&Wdg0MIwlq14zW8B@qb@jR8-ckK{(;lC?x#Sn)0rct~{(52>o*A!QmKu5?nR>W+sCE7gk|9{OCvL%WEEhkn-Z5Ttd;c2klD zA`+suCpMKJO7cYhXuqs!DBnh^W@HCQo#L=rlhhHnJ0=%*{`0kzy|XMy=^0NqwUde! ziiNJXl6UB&&V^p0M!J7BL6DuXfevk4k1Zief>|2oiP8^8y!z`Wq)T@a7P0aZ1Q}pS z*h`VEeQue|D75_Uam3HSJJc?tkS^Gz#SeDrxXIH8shpSq+XWvs&(5eeu77 z1aU!jG+RjuJjfN8tMP1P4l;%t(QNLA5`@8=2bl@7ve~)kgWu06{@qSWF19UX>vL}u z$o=zOS6j`=8pv9GkkecUd#UOgo=R4ZEFP=(+V6yb+VZ4>{~Tb&X2|pucGMJpmaKt{ zIiF}7&TyU8*SxxE4eSeTIelGQPG8lQ(`VXp+RIgdzPc~x!W#JEwwylKmeVexEvKJv z6p!zS-`ThxkeJ~ooixvo%f;fgA+D9R#o7jC+aA_Q)4##BgmyxbTlnQkk}h^&cy*z) zpS9(%(%Mn#+?xV#;zQd(<${d`fxB$W6f_1qCZ!bp**jSqxxO_n3)f&9yl?yyt?5$e zVa@QfHliP_%v1!dp@B8wSXBO6dCYqjewRpi6!ju5Vr{W({K2o!XLS;RZ>1QSWP@H? zpCz7O%m1R~tPECcCh{R3WBr7kVP$B1cG*!n)TE@SOsSRCgIJ4a*Y(7ZNaiiY?6qHi zElSLM-b!lIb}p6Oy{%-vk(tT$$z|}rTfZ{v9%}+%9>s6G6*~fenIKzgF%#_kHK{k* z8N`E+n;m`H`5SMg=^X!}t@j^i&0`kTV;%UylCQCiNVLc;U;%d$rH+G_P1@K_cNXuD z^;{eCND149OFW%6$sWFD*KI3dp?R#YYaZ*Xn#cM~^H_Vi%+ptQk6l;^U)(&_=bFdb zMKq7~v*t0~DyNlAu@tadkaa|%w{8>G3lRMZ=G{uN-l9#4LtGh!8(o1+lUi4! zzPilQ&zi^B7R%b-u|Fafq8&VGiRf6>$u*&)>LHn{Bx?&++Y0m7 zN%foSqvbpCgNgU3)mxNBCU9_-?PML}9`L+(Qrsf8iIRu3?F|~gHzgM=hL>!WMVoj5 z#O%I-k#WWER%J9g-cx_a}nc%Ttqs2$7t!O}cezbUP-UwbcCI=r$qU$qC4*aoDelJAlsUT+5Xj$bZ~`hBznZ+iSw;q-TU*}K|FYB;#Fba zJ5?{qgP3J+eLN4c#S5$G?$-KVU+AFi>pE!r>m9WJUuN+C=l}SR|2Q$|%NsfO#U9%K zHMi&g{Pn;7{qK)Y+Wglazf8R!pBJbwsR!G2uCcaVL}P6q-oUPBjkV8x#_D@J(HzEs z46-$~lD`wb-XdKp9e75`?-M$loYCqm<7urGnrqwme-Y0SA6R>{Y_?=uwdBVCTbfg7 zlR6lc~!YCiwp(vv83koI*Q zr2X{{(tACLVh`z6yKc_xx@=Mpw(DGDX}5^R(muU`U8eq!*539s69e{R<=ZY%6_ZH3(;+6w#m!7zVEyB-$oNz5AZs0aT&J&8g?USHRc*H<;< z^_c@>u6Po~hP+zEd2wf6pXg&3f`s>|G z_j(e=_NA+KJ)GP1i~E>{Tpv@nh(4xa_4l{yVYOUOVwiP{G{VLH%{+;r&@D35b&CvD z-6BJ#Tja7QF%+9cY8B_jT_Z!TYouF5*T|4P%;j&UI8D}*ketN!@8U@e1@e8UBj1PX z0ebgm&$`ivb+th;%JBM9{ zMPQf18(^2ig0ahCj$K~zB_tX8SM?)_J28FqQG4ab=>9fRPJ)PkGo76!+tS%Ipo00un6#ScmwcqSTJ}w z4Bzx6&T1U-FXu}Xz{{Zyyd0{)%b^Oq9PR@zbCUC7@^Z+Lmthg)Wd;|1yTrhe$=F!XVH*swLGQPxE zKrhES^m431FUKnMa=Z_{%t_9R*~>A}6O4dpW)VdpRzcy&Q||<#k`8{p;i<#sYge*0Gmk6?-{W zv6th0>}5`JUd&#OIrcIvg1sEyfV~{Q%U)jX<7od9zC?k&9P8N2@u}?PcprP&pSOCK zZR){>ontSlJjEr za?G)paS`n0_y+9d_+9q$J3XOk*}g=9y&UV<%kin~<#-=^Ih=20TehhO8+MMpjEi6| z$2VXv#|5*O<9FH1@AQO@%l0J-?B!U;UXE4l=(0_V~)Lyi(oIuH()Qv1+$mq&Fp2N zk7K_)U!uTXj&AA6aToENi~V~)Lyi(oIuH()Qvd)doNzQnLRU!uTX zj&AY>VRPV{zJ$G%hf2tx9Goxl9}eVtuDlfSh0 za))J~XC2E%^y<7zI^WOeq-o*OmjOcX)^W*n*s#Akt+8p?{H*p_=nbn-v zGMHhNV=&Va7|f4bdjrjR7K8aTZzA68OdafH0dn2(zhzFqX-GucDWsH%ck{U`_8eL zX%Q@D^9C$tvtSmpnX{Oo(x=$I+NZdg#cT>JW>d#vHdQQUQ^jI7cd?k)l;_1nW|Jc_ z(;|q><_(CXMyo16K}THj*#r~4KKKC`LgGn=RKnay2%=2Xi3H1MW9XQs-=^Ha77T1QGhlN+T|a~`1OJc(#$@lZ(;*$xQ$#`=7XRsP*90}wZx4Hyqy04gq+btQ zc^ZL3@c$a8zuZm#JMzED#|NSNd{ei{P660#>VVCr3fOF_fX${J*er|Ai;2x9M{M?s zAU2yfAU2yBv1!k^@UOQSc7fPz>WIzesl;YePi+40kL!GV%D?{c@o9hj_RFWG|G)iz z|5jsFk2UQ!hivwXKsMVqKsMV2Bb)8&ZDgk{Ae(I+ve{N4n{5@c+14YQWzl&tv)SgD z&3+NgX8Q)rW;8ER21!Vf% zn|n#y0;Ad1F`DgD8O^qy(fsG{o8OOyeOADHF`3!s$jp8bWM=yYWM;cyGP9kLnd9{7 z-R8@g)@6%&uvzCI%wZ7_X8Q&ZX1ibrvz@*ojQfaa3#vtUgBP$qgTEsI z4EM8gDPqjK#_u0b#DGj>Z2HRF zi^8^IYn|V6oQ@0sl zfs$woNPru~C$FNa1Bi$EjW85)VD z;pL8mtJC)cr`u_!a=fJF(i&foSV-`S58@}YNU+Sa2oV~$TwfMcvxn%P$d!Qvhsgqm z++tID#*@W9+p$!-!in{^!Sw>qpUgacT7Zq4#@z*awl>qVlXoOvh;uXCY`q28u&sj) z+bY={v%_$F9r1Xcp>KrL#p~SpHA#;%>37G4tJ3hsnV(J*LGDP1 z(sfP^czQ0<^5n}Ht2N^=eGf|vAv~zpPZVri2KY)=fh zy==heMB$AF{9=r-%VC7WA~3>kh7pqKA(5R#j%I*Q3A@RRy8@)w)j@h)6{OdlLwemsGw#kAy&KK=#b92S1M`MOfO*{v z%nO9CD<|0*ZG}xfS#d7|t^6Bb&*_GtS(ncpsV-6RS-CVc z)ei8-GoF|+>%aL0q_3;j_HG9Iv9|M!vG*TKB(IG-4ExNOYlRNjro{9+of%h7nlB51sBM&q&iSz8&omW?~T^sf`IcJj5C zhB6{y;$%!Z?cMlcPH@^04pv~CXLjUhB@>46chg_)j>+;$!)tTKjEG>&o9@Q-xy|(# zv(l2Wqt=D5Vd;NFkmqXLyMd)446&UCZsp#(0{7O{ac^A}_tu?rZ}GB8pJQ(~n)Hit zw=Rdf4U53tx*6_vkXi<-BFR{wE(|z!KKV!pGX+_Hh-OKEQSq^#L^t@c@t^P2?2!Wz zk%7O*A%_9kR~ue;YSJXVF(KStw&tMy{*dc#EnWY_uqj;gDLsX5!iR%M38G1aOlpuo z16jncp}N=HYS;zzt*b-dy6fm$cFa!<`*QiHJLleRH0&1xZ(R;}8x{e)bu-|N)s+Tu z_K1O_=p?6&TMm86ZZgD#RA096o>W$duHiRvclZ81EBu=O8r(bBNMV@2$6x3nKyndg z=^0N9d))fUNyUrSc?^kX?CYcS8M;QszDE|P5hEXAyZMm)?tJxTgn3dZ6#NL%jW?gU z))g?bt`0NnsxY(e95d@LoA)_ocB6T}7%%H`c-goJysVqyWvtSy%pHcB+~A3I$=qrt z+zL*z<})<|?swxW7#q~UN8+xNAI79vrT0QxkS*sgjjE_-JwBfC#JsIcjYH0zP{byW zAi0AZQgJhs4fz-(zpzREq{QJH)@P)!cTqFXg%aKBYn{K%$P3t6SBIT-*Riwg_@5a0 zaM{SunX}uBylh_&Hu4;7HZB4->t?VShK&mi+RW}$M8ZJL6kRYy*7=V5DzPGz2o5l2 zv+}jkR!i3K;9?OeXl>m)*iP3W1Q;crU)QhUGuVuz9gZ==6lAw7R#zf$N_SnoyFNq6 zNS>{wUVy)_8(cu~P;k)^M+#$zCT{`Z>vO5TZ<%@l_v-3!udWLB>dtYm@v^C((_S~4 z`in8IE{A!Ii@?0P8Ri87u|6XyNwyJBlF{uCzQPY=&WV{o8Om?&FDV!A}&NCW98 zPgpFtn>HA*VI4Hqyq-Tp~Z0ddb8JLDfu0-3w0N`@iQxAX^Eu>~>&OmSn zz!2P<^Ku0+t*Zmmx+*ZO%YbQ@$+YfKWLnwe9&GnHGHqN0nbyt7v_Oh2y1iOq3*Jo1 zLq=h3d^Mui(JJWV*Rkg53dEkBz^SdQXKYv7NScpw8~6!2fpVnWOfNm-iQS_;M9t_E zPB)rIFwsk}vKE?-D7&rC`p>8~>j))a!kYI!GHdZ{U;+rX$Zr4{88}ba(cWtP1*)y9 zquRPEs;xVx+M3H)TlXlet!#LYwf>O9+Qvm-ZDEGB9b_fOpM*tawqlXiF-7Wl`ktH| z+Cb4bNjaVN3^43Q_!*;L@vf;+QA{3u4W@)nX<&Ek+N!g>FvHpip0Ow52)u4hLk#k{ ztjc;c$KiO-)pwF_0Ciyo)Dde^l>^@r`6a45(ub-U`o3R=~D$pwtlEFQF8`+H5(v>8?Nu z$cxn1`@#&ygIA(Y$Mk07dSkeq_+%9C$*AHb@LWK8*@)>|dQgDzLLH13s$jg3*@W&g zjTat8TmG13yyUVRBaVxF9s1$lYOOiFlPhYK}6)!5ee)l)4LV@H9btGS?BKg8O$#-QZ zh)|94)!5*Jg&;@ojf~a*gOgwj_vnVP*M?SEe3R@g z5v3y?Mjh#)M1V2qqS@Dn2s3(*QXgRl_r`MHOUh#_p*s!?1qur+ru*y#J;M3vj}0)@ zcX%2!99&Wnnu8!f)VP8SY22Aj&pIxSu4>Nte<2Y1=ccebHo5J8@>CFS6K{^~COc30q6Q ztA)+2+a-lMW;*toJtV61jHe_}^yfm`tW95FLtGS`aXN%RARB4@TT3?*;lfU~YO;-} z8qq%%ah~p|qt(xHiX80R4M0JIq-OS-jBQ-i2yr?of};2F)?VCDzzIVgP8h0i!f=ig zwpY>()jVO9(LPu@atvX!S_DKGW)LAuXe;gXWF4$Rs5?4LCP2mzgMy01zr`78v{FE= z5@Teq3(5Cwgz7QAn7^mjsCCn>@9+sTh>+`(ts}>KSuBT{@9JBd_XbKkXEbetj5Z+uiK=ifHQ_VoH114jNu$->@L?iLp9G>W#kW*njFK}tQG+=hCYWh zkuEoHed{YMCW#!emppzkD1umK9|v^K#9B? zS~<8B5SQ>N?7@ZXtYwcfi(2rwD8CLaUzVaKU4xiQlLv3Deh;xQLo|)0j{dxi245R3 zd=m`=mh~>?_)Go%OLA`$u>ztQ>JZIPg=mIzL^E88w5k!!Uw`}8KhCqU-;k0A3tA4* zY*ve4G{cP1Br|DSZH_J@R3v&~1fezXrZ6kK9fWRsG?Oohvv6SLh6c-F{uQYOp`!`z z;5aclb_H40`wufl(;6P|NuaOye$Q-FI7&SP+T;t|bN(7(+lG-5K+0Md4P#_wQzv9$B_S{p!Q1IYHt~V2~J0NYRn*oJe!He7C`3)O(_ zC2@N(U>kFQZL?YgVH;Purdd``%LVm5Ep6LjX`>~5Z3%4xioyK^t4(t?;p(_DWh*jCU2%q{XO}A**-YryO0R(P*U#v7v7-d)@1)(c)K9)#hP^`3BWzWO(uDdEFycE z2^O#;JJH{xF%=@SBpgUe;1BPlkBHGWE&_^}aUNZwjkFRTz>2Ob7rmV}Ik)rwVu7}0 z5veEXvGqA-3mHD-+J8wQnO9nC)1{Y{x2QJ7$>eD~%hm z8rr_JuDlr9jyY(%SuKLvjx%Z-9mF*xDzgZg^#BzPZVAS5%gTX{Y$TmGNC$}V+LGkL zHAfxLN87hldYXDEUe>c&aYk*UAZBl(AXaL{-R%4maj&gU8{$;@TL3&z2iCv6@M;z$ z@Vo~fnYC;qNd|#^+PJ3atbC%?HUx=bQC5N^SsUDU zBfaQm*|_>}1t1pI%R!Ws#4dBdx=o;M`ODRpT779Wjx}SVy2jcA(H~?ZswhvvbkGPczqNRFe z{vRZeAcbw8wfFlcBgV>VTW$rPtNgYTf6lCx>R>e{6lc8!gKUD<${`;V`&l*3%jD-g z9q&a_@Mz1Y0^GJ@6?zL|U2j3G>Me+w-h%dW_BvKK7hGDgUff&|bIk?KY7yN9an@a6 z{5qdyA@$c`*THY;HP@Ss_-^l(cO zU92c5h3&j1M{BbVX$sAD4ds5M&}T;j5p`|kU99~L+6u&~j7kpvH`+C38!q+!yu_)x z3(FwUk4Bt$FiA>qqja=c*^~bbK2}f(+?CZv1T!6^7X=D_6bzK;cCUvi$$zaRiXwtH zd<;K;)s%iZO>;6PR1b*bH$GNL_JCm(q0GxOT0VdgV}`I=AN>9mTD2q0TA#5|PKaTY zHj+p)reovt*6T3UwsT6mCx7ESyYe^+tSHJN$<6 z;XYAG@v=KvQFIeMbj=R7LH#9Su;PoTE#r2Ox}-%vto=Lx->u|PA>VBGQ0XxyZnNl6 z_6;|$f{3~C=Q4j8#q9mv*$UCShIX+_Q=F6-P*JVNW#6hI4)huIi46Ha!w_fNFL z4Y9T4@0tJ&q&$~2{Laf zQ{qjo{HYtsPOBfxt~|DvmgK-!;%RN=I_AMJ!stfwcSN416`#`1y`~`B_!!y-=4&6x zDE=RJ&U>)~x`N+>GB#*Pklcx>3b7Em1ffTm!;P>#mh)@w}Y=q9*gUsZ{+a# z`+ARU)}N@yn+;M@$HU%gg#y2pRc7z^5QTv`fOCH;cyA@-uTd`R!qFpi0+7+LBV*F7Z8doUW83ikiu5_#f#8tM}8M?Nqw!K+1 zAQ|tC9H6bIm)RaIWQ<$a9rLK9ajQS#Cb!vMp&2mNH3P=$&470vQXPx!fM@5#|L3p& z_3wXweA4E>{`h5ec2N8`=Kq7OFxw>9ETTy;#y7CSn8WX%^^Dc`c1n8&UyG@d+a4#4 zD+K-negdAkZKp1At92gTN_)ma(_gG>`ioUffAPHO@5=50vDoxis}E(%e6T)bI{}+T zbOOfo2Kq4H+`n1IDqZM?i*?;_@p?Dhy{mMwAMUCZHW@2?ag$ukHpw-MXp)Ql8(3ks zNp2yl^sLp)NP<6ol`gcJ#ky9rSk-D4Gp7MuS*44uX4U%e;-0gZ?Kx`}(Q_7uH_(S6 z*Y5e}uhNCSs94t*6|eV2-MdN`JEN{zVV|+W7q>{oY>QO0h!&|hzJV2v3tpvX%|+z& z|NK?D&|DPjnu}spb5YFf-hXA4E;bic>%)t?j8eACs98jpQCj`|^&!nVF{qM4JO7ER zbSiXWq`FRwbiEVf&Q&@UTQRO$;gGSy7x!eOY)?kBh@Onpynz)q%Uz|@jC^MVpnm_v zRXP>O_f$u|rz-M2Wytr-t8^-Y@74P7Vgf#83HW9a1bk}WKp)!dDlM_}_D@-*3lwjv zqj=MGiuc}Cx`^>!wZbl!(t0t_o3cP}vk0I!b#GvX-GZ0tF1t)iFunUzmgxdEmg=yv zRE3SDs%`C4ks7NPh!^u?Da(&Fi{Qu78}MUk&W~NndAF}!rwja8s^iDfQ~9xUA3xT$ z88dt_K$fxqS-S{;EWH6hmKF??K)im$Wk3ZmZ|`K$K1M z!2*#b$l65^Wa$kEvNR{iF0IqzEWcu%E)Zm?jvz}j zY53+keU|s$KXsihFl4EYAxlqX$kKfbS<0E=iy^XrRrN7gQaBkSLQBkLE;k@ZE6?D{(0J|~{;3mjQr$C33_99dt*k@fd+WLbfD zF-O*CIkI*U99jPc99jQej_fM$-9CJsE^uUh9Y@wbl_Tr#B~xwTc-;gSzpJI^-tx<`ujMtA+sT1*#I7FhFOlRTLeeezX3+j>p#*{I`7jtBNmLuyH!IAZEz>)O}=E(Y+IkE!py}xgrE^uUh z9Y@wzab$fJN7moRk!1zq#T?m?<;c24aAd<9aAd>19NDFH`gq>iO-48rII^LRBO9K| zkq!58WMeL^^?)4LGu4!5rCeFGqH1o!;HGP7ei+Y^dYNhANJ1sN%?m z`#7?!K)jeE8?qc(w+N1Gcms}XxRWEhv`!!H%X<$6j%=vo$cCqKWW#+NS+mOYU6d{0 z!FHGh$+|^=WWyVPWW$0%vf)mU?9xKLx-aoP6hN|}4kR0@K(e6$%ZUU78U`M4Q~LG4GV_JhDX9==PPx0 zt40)HvY`$p8>(Qkp$aA&?mX8rs}L`y$%ZUV78XI14R1h`4bP&E3DmRE=u^JHU|Cku<<$;LO}$;M~#WYhh$x31JB5oP03iL&u7qU`ryR==$Owae}kShj-) zTVs|h3ya{&#y8-~#sza_=_ zHfHIvun4+rd;_{{EYf9{&ZU0p`5a?`E*tCUvhk^O*?1RS_WS3#vy(YyV9&B4JlGtw zkXc*=WH!D5WHv4sG8>DK*`@QTpL$NmSb)sNI>>CSg3QJ$$ZWg|GP^1iWfOg{P-I!N zxCqv4d;`{OoUvw`>E1%`&$8jJw!T*HrcWF(!|Bcs(|smZdyFxD8SHJwSYXY@I@WA_ zDr+{@vu5jGf5jAkJA4}8F9*!C$^;&4h*{VyE&?_i-vBln7Yv(?GuUiDT|Z2B(oT1> zW=!@j5*;r7^b`>npT^GVZr3>X({B&^TScM(n~im_*;oaeja9JOSPz?hLn2;Gn~ho8 zEG~jJ8{dF78)vkcJ>vtv-e!gc+H9<&&BmwFW@9~V_P;-_^YJPF`p3to{qfr`pLY5G z_W%7`l?go95VN>hTm)`5z5#AFE*Li($7PB{0XG}#aI>)rHyf*Pv#}mG`-VikmN$#5 zEN>Q( z2vV!&3`|CBnC^3ze6(*x!at|%b%Cft%xso@dy%d|%xnZ7DG#qD%i=0amc=EIWgqwU z2J$c`%izITXQ%52DLYZ8ZhK#~jR!x2M(o6nn@#XKS@!Y!Ium>*S!QEcWrV+8H^SHQ zWO0?{$u2M zCgxfuX~)!_WMDTL-@4wEXT;Z@>Cd?s)2Bm!wWG@hcNNAjgZTQd?PR#!-pv=o+D|`E zliA@E?}?+QuiYdVVdLU);5w6RfPM0b1K)>RP4GHJ_VN2V6FjHLFq6lu(dQHy27WZc zxefmQe}4P#KYsbVrJ6baV9U#5V`&N4*vGxiERR_{Elb;Jj_mFsCetro4 zeLKzHak7B4uC}}x;uX0LK_h50R?_-U#@78-0#5Qzo5@zTENOdRN{8tu>*0obJ1rYe zw!WU89p1B#Zp|nb7R;!cCiQ-Yc;CRjO*I)MXwd&$D z!!@VmD>L0n>y@u&mIm6pqq)z`$j06Pstz4#HR0eZ!n zJbfLfC#8{sl^iT{z!jdZup3+(52#|}ddO;wW=3LYY%2VUH@YdWX`toJKQ+cx}DtB&3D&Y{%K7BukpTa10y^q88X3e?I$bJ02PIJx~ zxoes;oN3O73wBX+&I!3&H0QNQTwG<5xU>W$?&IE0H3wDcrujzLxf6@FS-105mG#ut z_vz<5>Q4ADyK1|eA!2wP>()OD@B1*>QFlBs?`tjY_pXZQ&j$NSUn+E)ja)~>K7L@h-Q=?9$h7 zS#|NC&Hp|4T21;LUl>~^+BQF(D^QmrbBD(|`qhY!x6?h~#iuCiKk+dU2EIJ;@h#7O zTDF#vBvHRV5-MLFu4ych_vqtqehP(byylzrp}>|kb!=I4&X!%%hjX^D&^yyTHSvQ&aJMqEka3;q+to{1@?_MHN{DCd`bh)dw)~&hoo!>(u zYM=hT$BP*JYD55JFCy7BDhK!#TyyQuPPvVI0HeC9_lRb+92!pXagb~!3WM4ZB`|K* zDk@{bQ?vEMATjzzqH~IgbeMDJC^m1LS%f!8*^XT4!1Ly+Bi~Z00)f}m5qQlxf%h@l z9~Fx<=LB9MV*mBGfBj=FRWGLQnk;pf7D3%LGwRMv3**E!A<-?VFlx*JvB2O-;z^Q< zv?0lGOY(Ovb|j!Upq?~1t^kR2LXJjCg_smk)7B*S zaDb*eB)Ny_Vr+YH2&m#WLL?XsfRU46ByHGv!UIVV}KiFBxn%Fj908$|lW>}r!`SNlb%hp}^XZuS4of^K5 z1d~Hs`;&%ARyHCoLHsKMJ7eo49RJ*bxl&frj7#DT1{YI9{dYcAmLAx;6ymGk$#6d~ zN<0@iy6%>HJC!^VA^1ypfFfZmV`P}g6Ox~7MY31IF!r}HK23o(Zt7^`=A1UZ=0~Nf zV7Itq<#z<{#i((UMUDGKpvKJ{H9q)Sk3nq2aJSLr2ahXA&dYLem>S-ZpalHaAU!>X z&5OKYtQY}i!Neb>0~MedbdQ`DK98m6C94RgY={rx8UYGu?_NG#$_r5h&tzD#ka&{# zNO*&IR(MJnE4~UX2If;u*G%H2@G0CmazZe=uWpNIW^lIV#YT~E%M}U?jUS5;TGmoB zxp-euvS}1Otf6D{w}$Tuj$z>}9;37?vREBtw%{{cVTZX?pOKuw--PTe)SA)eo*5Zt zEQ{4aa*ixPy`(YX%|2uS)NblP?dBZRz9y*Wp!T)Ew79?LcLeptoOYAtv~%|m)4g&U z(|6_c{L#f_Jk+qg%QY%zItOyn`2k+v6lk@ltM@=EH%EQ?e&3(A+S`HrPA9- zsEGGU2#o9)+lBOD{{7dLzi*88?5A`l9&7X^pqCudTF4simhu3ZFiJrPiwOu`Gh;$^ z9a%$mf{PD6EdK9WQ$;^6s<#4+}iC{v0u#RiKw!|BRQ$&WN~(vKk=| zaIbbkXA<2R$*e_KS*(nI;%_A1NZkw(G{ z?Zi1H-bSHG+R+bc4sWhv@h$zhLXz|QI{i2&$yGnHZ}2n{yDT2(7(I`Sbz8QpVj;WE>7gKG^I;;003|urN$!}xqT7Vp>E3c`yKM?*hLP!h)ESL?53;YOWE`j_8yqm(jMk7q{tfqlC0qP&c+H;gWAA0!9dVqu!&G*3)l4IGk{V*?=kQvF2nUYzw^@;Ufief}1#;|J$%v1%* zivBlDYF1p6C>YYlJrC>Ez`XcG*-VA&v!d^%{%?p+|0PJ3raz=cxC8d6Appww1w$_rs0Fgl|@N!rMTQ@ah0%<$tFNO9roQR)j4ZPkLX=g&Rb@{|6 zNL5gdUGqdv0Eq}^@YqNN1(A?md<9DyO@A{AZe=a}yq(@DT1s98A9^C+(S>gv)YrPNm-_Cq+|!u$<(;^lTr` z%jIN_rT6ZO3{qPMFmHs-!*yq6-Aa|2I2+kW;(j;sH`Gr@L1C=hMY+VS%LXO|$Q-1| zGzx6~X_S?w-{rdbY%k`68|$XtuaFqlvJ1KDy7;ZK5wDYloaM(*mO1l>+m4Pb} z!t~<9;m?tGA!I{-kaj#vSV6wxIni~<5NZ4vqCllP#6+u)Ow&;zr!jqJ8Qo%t(ma*dJ$PD9#w5;5d0B%BVNue5h7iarWUM?+jxVZJ{OpI<4a&S{-x)F=B z!X?3PTS>gq;{guCI!z6evlmF|Cdu5`PF8{vTT>gs$j(=ELZ>LePRzOMrDs2p7Ca%_ z6Hg98MQr%(p*|p*!N1n-hewE)ApJJB%`Rb)?CF;zIi92|8^6uEQ+B=}tR#cQK3Y`M zSPJkO@o&s0qsjwb)cVzsF{{Aevdu0-P!O05Xnajz&OzgA0&~92Zhu)|&MD*D1g2=* z4;GjlXq@e#c)7sLG2_lB6etFM$zG-{c?b{?gCv;v7)0-K!g@^5WZU%;XrwP={W567 zL|Biv{x^GRT(UAX5JqxSu!jY5Mm&QNrDtie_Nl%odLIq2WeR9s(ZnAtGg-Vh+f?y#ote?SET@Aoj<&V%-siUU z)?@EfBzw0|>&zj|viVYgBZwYcZT8~v)9A|g##s^t?OoXnVhg?$ucg7TZs&h{_7k1a zjd-oqRH6~UJC=INV2ApI%#23Gi6cs(B*tgaj0tQ)ZW}NTH6S~S%SmC$GVXi7&Ox%a ztO%$C4w})uJQpb%B3p1FG)m&(-Ld5Ml@@Dnj+(BJul&AFZO+NpYie^&zK)mG<{W&z zO>N4S{$RPu!mo>-aV4GJ89MK zrTK?Bi2JRM!A=}|bB74ca3LfoWX(mSK2g4v|J+)*gWDx}9hAvP^sd_aXVfivLqI_~ zo4bV|4${D5rQp5mK{i!d`t%d+!M^!ilC}T>IDY6ou1k`(AJY{n{*zbZEub`TFzh2? z-%F>2Z347%ttCHatH<7zW)vrOBV7mm%??k2*lp{G-L{I@Z8OB~Wn{N~6tY`3`^Rce zm)-n%5zuZogLYXjZ7E2q~L zfZwhT`0c8I-!8Lv^=0C>dld0oHvR`IP;Dx(7Ubw5`g}ZZJxVa1rcaH*w%M$Ql9m;N# zy$EEun<2wiG{J}8`CP^ep&QSt$1wC;pXvBRwwde7S8LlZv3L8nZpFzO=moUG3aZw- zV%ctuq(f1@y;}xe0;_)AHU#$Ur&};It~$0g7zuNHK}qM5kFjm77!%nK$5gi7Gn?VY zM48&de(FzuZkAeJO5+ZmW^PZbmB~q_kzREqP=)rI)qBPFx{h z#d|~}$xx$Ds7~+C2oGc%Uej-dha^>pR>s7j#Ma-1H9~BB4%jv|x3)lZ1zNeQqm{cV zTDi+?Dt#GO?jD6Jm*wEWnv~sGdJ({KHv^W9SnEU^pw}eALSqaD+KbgP(^o#bd-Y?O zv$8=KnI4Mkc9M_)yrV>adj2M#*vb9aIY8A^VK)Po?F1326XCbn{)w_9jU%r&mQd@)KLvHMEIH#KY~e{oOz?9w-uCez&P7x4iP0pyUa2LFa<(!v z!CJaxzZ`rcgRzJlr?0DhS2U3Xks2@#y91Koz$;^lUY#_4t#w*H4HC+ z2nz4U_Q;JQZNvlO-w)EE(IJBdi~7udST zHl3IHBIFeJOr38d)jk@lK*W(SDo>55yQ`6p+euZ(s-rhoEDIESS4XjTRTO)7PO*n80dFXZMkZS5=~%cs*ZJxV`vBYVAC0Tq8!Jol}%9NC7LQd;RnQVrTC zZ^(0T=PWJ9lSQh>_C#0#SS_R1_{i8&y>pr4ZBho=3VODdb_QS)+ijRgMS7WSuRd8Y zhfg(S8t`+)g%lk)Tsnx>>s^ z5(4iedC$~DGS=c<8q`i&pm(vbdZh%dwrkv4j6rt3!3fF3S*5#m5g(42ex>ox+7IlU zJN#v`Z1~HKKNkzkP6BG%8JUbQ|gzAy@Fl%VBmd$(paKwV+dRXIRq8opZB$qxoSW=%p4R(tO+i{u=M?{3tOR~ zCDb*vgsO&?kZEYS(peX(J6bNRY%gwT3Au)rb`cFNVb;*XI>ubns?Am?Cu`3QUp9BF z0kK2AK+2tzz)e|&)3KC!BkC(bhwTw2Wo+zeC(%1jV>%{-E3LoHRrD-9FU~3!1`jm| zHc9&pVZ|VuL}QnBMh;_wR&8BDd5X29s8_NJ6)Pb+XMm-oigyCUjRZ(?rmmnJ;d;3c0qcb`fn?Vb*qKJ7G3H zm(d1nH%NhPd$hUZOeDc08RkKfH^gr{@k&`~Tiv3#6Ai$Ih)$*WiXCW7MbuQ^;t*zS zSEj+_{KcAiQao4gBuZq<3V=6n>n+a?yFsMayQQKoc4Xzwzo&M9b`n$BX@EQVp1O$~ z&1L0P5=E@Q+^tZ~#_UK`69g|@Nd(o&Iuj+`WyklTTWF+|Z(GUvGdJuQ&(Rf>#2(SI z?Mo?fAgvWf({O!~j?5PEn^v;+61DDylNw~dN+J`(KBYE9(wDpj^N@C9BA+Or1FKLg zkt*H?Q6jj2ZPg}8zLj_=mVTDFk-x;_V6^Rs*Mr})Wgkd0;|mavVSPmGj4$YQY z`?2lqc)SRfxb>&D>l~Zg~uMn)1lBC50*E-`8=yZhpa z@TLqAknx6V|6t8Qw_y{n7sSPUeb5?>Fk83vK`el{ z3stu5_{qJXQoZZVuHO3RrIx)vuo?0V%c@Pxt-5^JHzPU^O-AKCW2L(B531RV^kT*Mtpy5>0lE8 zW}S^*@-bm<6Avfx1-KL2HbJ~3E5_r2wm#>Xd$!TY-etH- zRDVX9rNrC#yjFWU_`G5c+lFGkGsqsci`;joE`VEm?CF?{4EWb0w=Vy7YOs zxA}~Pw(U^YwjHY4w!?Ybb{jA6C=sgrwlDaMFYe(ExgPFz5k1^t*28Tl&^JEIuv&#} z(9xB|{6v^&2J;lg)V#dCD^??_OqCKFBFBiY+DM)P<-i-V?RGY9@u-gZMD-PlS%-8K zkA{1&C&gRo+(r-LiCF!DsxqD+e=k{vR&q>u;&^s@$!l!IQ?P3D*8hGKKc$y?JL^w& zd#`UmAbnU*@I!&;Ris|8XJ!mp48S#UAPZHMjr&{Pn;7{qK)Y+Wgla zzf8S1pBJbw!3XO=u5r3uMB{WwZ>$5e#_8uid-c7YG88BPu_GSP-c^eVm*s-RN9)Cl zG0H3Em$8b^-Zh7}hQ3h)!V|G->FP^`z9=4i|3)H=Pffc`qY91Cp{@}+R5e0} z^G4_^8_R@ZBXq4oy|_C%ktmtJB07`REj;q zS9PE{(}A)HK3E5GjlUu@P^)mO0dMdHlo_19ShI1Ww zai3bu^{I7>=u?aB8|y&3U{7V%4P*=mjMbZXDur&KSl0~{tGa<=rW@#rr&4SNs#T~L zcLl{z}a8(DoOmg+bO%5^F z$>6>zLa3RHioG$JA2oITeBzL$xsn)pm=3YU3M2wQ<2v zZJa~3mkK~MLH#X#l>$^7>!8|L1=YqXs5agQ)#fDX#Z+y~QMF+aRBe1?sy5E4+DpF5 zbhm#`U!_3R#yYAtK9#DC_ffUfeNTj-Y=aLLf*e*G7J=2qH^yq?g0b2-$7(P6Dzwx8 zEq#>&RvYWE+E|6v#wx5f-iOuZB6*p!DwyDqqW~}0@}J{{8fFG0$Q8u(Ardm)}|`7Hr%PkNub)>*1-3TTv9;-`Y;C%at?kdjwXzL9SO{`#ZCC_b zo8FkMO$%mgQ<1H`?yC%cgS<+Ctxa`oZK`5xQx#jA?qh3n67^!XHs#pbun4v`y)j#x zzRT8L%ByVre*UVyN`b9Sb!=^VDqEZGV{7~KtqaOF_+TN(v9)0lY;AgDwl*!8txex$ zYp?bJ#lN(#QebOS9b22K*xFRZ)~5T|+MGnan5|7Ywl*$;txa#t)~4^WwO4%=%d4#2 zl>bV;N`b9Sb!=^VDqEZGV{3==t*gs6_+TN(v9)m#Y;AgDwl*!8txex$Yp?n$mRFgc z=&$Fi6xiBS$JVAQwl-C#HYZUpW@}T9t&NLdYttLEwdrQIw$KMOJ=b5uS1GWy zsgA8pPi1S)2kFCu~)Qj2LKF8L^MXP>2rL`n zgOwl$*TzM_wf!5zwf%zO+WtS_EI)zcF9i zKa#KgbG?=BRvjqtwS665+dq}B?eF7jTd?{QB`6!=gOwl$*rr7Qw*4Cew*7(u+y0S& z?Vszd&u^sM1Y_l5mV#apJF}7(DjP3BojP39&#`fjjO1RZq848T;P{-H~ zPi1U}`xx66T%ft)IqjG6=XY9 zLAJwvkZo3@UQF2zIm$LIg0dann6e$_lx^cy|0cWb4+YA0sH1F$r&6}VU6k$bzpQ>) z|7(}q(YkDk57vVmYnv9q+755b+71h5ZHGB)ixPa_XW6=P{6#m18w#xLP{-O1Rjln$ z#o7*cv9{Ng>czzEkRxu>B8c1JjfvZ#NZbw=JeR-CnTA7wxE<<<+u^Ci?Qj=y`};3l zgCLwE_+?vsups2X+q4Mqc6ej(c33cYI~2j&=7Q_;w>jHzD1f&^9e6ubfww~ycstw$ z-d>fe7xTA6j=${}!QT#V%-;?-^S8CW%X+cCOM$-~>iFB?sr>D57k@jIhCc!I06(Psr_KV$BZIB;_i6gyU369Gr=NGzcy{|+^`OAx4s|^4@KhdmsONFlzy69E z{C4=1fL{(MM2!_bRtm-(klQZ;$Q|Dp$Q>692S_b}Z9;SXb#8W*lKeI;l@d=9OP zMtktF-A#Y9!(o}8Wi$PJJ^ciSXw$gt99AxIK@!tk6M^ccXT(JsJHHNr*ymfmNv6gE zkUQ1^xnmWOJ5~X?V?B^t7O58#xnqvV?H57hj&Drljx!?Hp8YTS^)?|W5V>O=kvl$> z$Q|p6-2eS?osUoX*FQc!?T_Dn`BaAgxBu_oYOL_VQjkM(`$ZtR;~OKnl3a>u7Kxnn((`^UKyG&LspU>(S@xcwqn-0_WB+;PDy?ihYFs=(robu8{!#o~@t zEbds(;uaL@#SHG4V{rRLFu3CzGq~f7!KD)0lE#!&C+y0$^U;7~*^(^X`1g=1?9opx zw-t`XcJSZ&NRqZC(HeGsg1jByn7kbqOx}(&@^+Z6e3(8Z33-cXF(x~KSB9Mn2AE!& z{+A8<*VKOmUfE4Q87Xn^U2=wl%UdT!a<0kS1l(hk_FKPB*L_LaZ4y-=Z^t_FcB~?A z$13u6tS4`;3)G8w+cC%64vXMz$2aC}$2o7?xMA|?_Keeg1`5B^S7HR~a$fuQ_$GEn zGoHnC=k3v(U>~Kg0`h)(UP{e)C0rRZ$8+KD$HwId+64*P9zCGjM4-Uij&;24_*C9@ ztmkciy(R-?3w*E)Zp#*po}V90iyL$(6kgUgNw7p+l1S%k-$oAE)WCxRfc z6Pl;{@22|?0_ZaSgg{6R_m8}7roZn8zb4{D7zRm0pv84I?U$t8CQ${*cC3SJ$12En ztb%OEddT*=K)sl(9dl&uun4ktoRPJd0M0V2Xou51eZ?7X0lA3wr%6Z#0qAN!{baXx z^XY@H=fiYm!UD{SOa$h}WJtKmAP*lkBFSjCAryXA!~2?&f?)fqWh7$k*|yHF^z}XXIkZO*I@~`>&LB~+ULIaS;#U;-vx^nEcOBa_TY;RT_S|c8(8n@ z3c!-PgD+`h2l-!Ea{*;9d*1KAu2yBApU-~cK!lt(Ub@1G zg>%n5dz2^YNh6?Qqynby_sVAh!T@Binw|NbLm-me8k(<%pw4od(?%viIKB(QxJ)W;NVh7B7hMi8_3uqh1Ntva~tE+`15|oQnwlTbs+TP_jN{o9SF^i z^NEqSmyP_K2EEb9UyFdIRSp3imVkhM+}g~??tB%(zh$!GLlWrqvWDYN;(OB$fiKE5 zT}NNX2%ptZ3G?YT-${x9AA6J)8}mR!%!8oklpfFNzv8CaIA;jxfmRIy|N8ZO25mB8 z#1~fM?EQP9i6E^eq%}zJN0GKI*+(fv^zl|xzYbM?{JzfAYoJOS?Gsb)E}Qx}Q+cDQ zzZRrSs~ku5R)Ibc53kLG~vjQwbF{X7FUyX7?+#%oOO&<9SImsIk`Zm!Be4X`C}+5^se(AHhr9f0#!m0gnR(s#t1v{HP2V>DcxL<;OJ_Eik1+n%!iQ;VZ|7ots*BYi)I%u0wWu*nh2H zUw=svo&BL$hq)SQEmDb)Hmv_+&gm^Z`-$;W*rsX#eY}yK?eI-fy#&lKLQEPw&qR&5 zU1|`cR55V=Nrm$FK!dpb@Itm1&dm~V9rOG6eVqihJuTm4lUFwF?sJMM7a)E79NH*d;}z$rZ@>U zOAvA$Qeu?TkR*bF&dn0=kIw=W+}0cC4Dch_)(RuUwoR6082oPe+--e|afa=&krSdu zl>`|@8X771Z6y9rBu(*~2#d(qOydJX@fjf8CI{ECx{u%2$w3WPXK&<04#vxJa8A|T zCC!5P(~V2O={|04mKO-_5?j7nssQX~24+WL%nEh3oQq(S;$ z$nCSrVTwiy;1Q7bUb~U7ry5?#aCDC=jdMJe1ALz-L_;gkKA8emW=s^RYU}e6GmHcHqsPeWkQmsj5&cD9s~dtSrvjNg1Go4<+q8#b&T)h_jRIh9plTsms7~+BE)B- z`3O~bF~ry8Aii-C5MMKc_zWeTtbvRl#b}U#APX5K1ZFD>C{aW!$pEwjo!H58kLp-5 zfS7@3q;rczQOKmB0ayc33O2+dORX|hTW7P%6$z- z04$s3gS8v~njja8UezsP?cszAs!2v~$RZ-furN`r!RRvp|6`GkybQ-}gR*woR3O%*-ZoYRBNWqh!C6h2rs z&Ic<*4j&vBfe$t_e2_qQExtPSHY@AY#1@HS8n-a(>)-pm?bK2w9_g!-9nB0q zgzPfhfGCCtLK+0{Z&p&5g~diKh|#$7PAa&cG2m@FQ9uuyI`puqLJynFevX&f!{$-! zVcA3lZ}M9!zR~EQ+oE(C}ZtD4H`D`ya!*KtpJPuHLi$OfW^#aU$Cf`)ED9`O z7WQ=F0d)0|$P9Y4o+Ip@Y=oemR^LQ9@GXLmr?pK>!>8?zwEOz|+ccv9JvMdFV^ak^ zHknNrFH?`rqo~KSxjtAka@6Cv2XN5kkiG>>ZS zK1UFsi+&I?2Rxk-4Jhj^_jaNjWNYjMo`a7Gxgz`<=n~^rP+Z={%9VzWImvikNK9iOI{mjo4_`C`XN*K3FVrl;pSwO0r40u1A(~(wkNakbcBgKwVM> z7z}CqQF_G5DR7PL2FaE=DkmBtk9x7Q8A6Yj~*U6q*?&NwR=|zn47} zaCj)N?4)x+542*5C*i_hB6iRUG=m+gA+BadSmNw~gaL^&Cbl=Mgn*1KQr-w{VJ&UF zKZON_w-!yC0%6(I5tdCAVcBFhQoM{g^O9@|!^xrAitSx$>8 zD0=j_KspBHjxx3Yp6Ct5E_mW?UnRLHMd!1 z*bkPM9IM%^76EHEGgy-t1Sz0CLZuY<1V@9mj+HQ47zMEgxeYP|@Iv%Kk>#{qi&^Bi z{$J!z;T~{^&M9xL;#&U_S3A~ODot_*Yg*<2xuDJo`GElv5lBX)k-H-IVAK}z9r+Jw zLP=7a#qe$4L*Y5#)>;v?jdXCanHu{lM)}&*SCMAeD3lj(7GO7t9POpWb}iYgLH3a* zE5kSpvLntRmnr_192Kz9rVblzs<6@K92@Pf)Of48(JCQ$upH%B(Pp&>ShShJqE^b3 zA}rH#BMlY?dE(*V$q)}w+?0rll;Qr^<@_Z(0F4_d<{E~DuwaZ5{_|f*knJ)j{5qy| z1DG{~MJYbvaj}OBfSTc1B&4VNF+7Vjk(e!FwHH*2ap1Rz2|f>^x|Ospzinj+!2jV+ zRNfh9{2Ag={7jE^zOa#v_*eLfw%5*t{>QLCG3WaUXQP^-Ls;fp}fBo%W|2WSee?x8_ zD|&4Xg>6=gU}4);j*vG>6~jm9FzUU?5r2cH!PZyWV~_EYVnHa#_ma}U%p0HT7B)&{ zS~tKV#DIgtAH$rHo#Dvp*O_NKV`0fiQxCSp$V?SQoMabRp&=19NsTw^Xj{~hUT3#4ybNBXu^ zq;Gpp`i9G`f^9YFdrA6UO!~Gt(zjVH0`+ZYsIS4cgjAB};pg#~dpSbEa)b?LLhzLY z{?+dhLj!T7J%H=jUIcgul4(XT8)=!v`=X_|KXxrvn&%AlwOzc)t#xiMZT{rJN6h?BN|}4VH`}6> z!aHw)rGz}8d=}4ZyN#3OJMIxtJ;JB04zlARBT2P^r=y~R6azI6l3`=~_h(kQU zURY&(V8j-B!M3AA;8l8^?R61iF?k4GY*? zA4%K9mXZ)2?BH`?CyW~bvYk@1kr6;h8GoTBcy`9z&aIK~nLH;sUOH)5Zg>|5*{qg@ zn1v7d#TO+FLTL#$l#TATGOBxF^1J3Grslf+QVLeVWea+&(QPZ++g9 zU?C0C3Z=tS822Izu`N%`_MQK>J#N%{+tO2D8+YB3jrHQ7khT|`-Juimi z+Z-IJ?%spalvJqidbFyX=il&PO4l7-4T#6kXL+|LYB7ts|EmGbnV3M(7b}^DA@L-v&-+@b<1`KhfyQz$i8SP4?V8foWQ;6upK zDZEF^xr}ZdyftH<0mfJ(S=Crq_!N@nJPRuX^-D%6`3yf)Z#Lh~dN>#{12WcrpLkJ> z10!Hi1>u|oV2tNh!dgQ8Y`@F5R<%M8M_bp!(N^_vw3!}`_Hs78t#0DDw5q+hiKERm zaWtz%baAw^E)G-=a1h%gp0J(cBo!2;296~YD?~X2&5$crBRO?hJ3(!`B&n9KB%4c? zeJcqY5?7rlOLy#HsI<>n7YEk9l^ruWDYaQIEIKRIdlDPy8mhr4?PLYo$d+8Je5_TJ z0jbNxj6rG= z8C%y4397YUe~{OI0)uhB-(Me9i97W`S1h5Q5gG|NNEt}4Etz_Hr6 za-Fp^gX?|IS+`Luh%zfE>yRCl&Kh%!4!^X?&O;&EAbRLsM~E9b$)uqs=$8?UC^8zv zJy7`A`Y1IL+u5;+M1EXNvUbFI`d`q7tP@r*=DAQ|yn9v-ImoKjvWpRA0h)3u0MQ=z zY`f=Co$p*>4Oy4C*$4_&<>?BR`Aq(~+Ba_dSncGRl-QX6yiM^TM(J4#;!%wfRW}j` zuO+i;nG)^_OT-rmK9jdH_js0#&g53!gU?v+c(faq~gznRGO=ijmE@+svGdUxhvakHvb*?R zLXX(aEpnEll{lFd*xkx!ENgi$V3<9%SR?)(wt)Zz({?BE8zL@9+|zix6Cc8#_4gl+?Dw5cD@+zk>_R3to(Bu zu|ezP?R?Bxb8l|yY72d!ZCxK|Th#~Jp7(*a@p21!TipnH$*X&DS7@8-3T;-4XbWv; zZJ`#|HllQ5)sSjvpHex;W4Q!wAa}izS}!p-To>yo1V4&NT!_s#vTuJQk&uBD zJJ-IZzD_o4xHC?vXn=bD= zaNfrAnt}eWxrP4cumAP$e}8<^=D+^Z}>_ zxzApGZ>Mz$B2Y4q8(+K8l~HoFXoFSQ@ga#y@O$OdvF=#&yiG+4&6RCkb7foAT-lyC zS6pHZv=oYow7rGAHx~{|ade`B-t9`NW z@T#RY8B2X}Gh&-tu1P`?+X2AU0wfKcfJ4Y&egsvcA#Cg)IMXW zFK$KavaM*%B3jY9=8Y|Ne(J=6R{L(&#ATGtl2-e!(8Sf%HF0%SOXfseOGMa zs@9MfcXM^wZmwn#-CSM!#u_r~c!8Rv-no?3zR>Z~)pfjd*E?SBUG0l4FIO#f$XM!& zdtbV2?@P0Y-j}X>V@vH8yxPw@3^u-cFJ-kabQpAX9R^)hhe4O=Fu1bX7aI(!HRQ#e z23@w(pjkwxK^NXwLqc}7m)L&z(^vZfE#1}8(%p4h`rg&Ph)Z9!)Gn8XdoeiOWx?rY z5#V$e-`G^+f|vW4UG62gZ~pYSI6mfPv!Kw`#8O>&6w(oLA@>u>a~ji^}06(^|}Rvdfgn< zyOhjd|9R_u0o3d2K)tRC)a$B1z3x6xFDD{p^L?<0WJ$et5u{%C#-v_1C-p9^_tO3L z>h-=r>UDLbUiVZ|ue*=b>$;4oz8KZ(vZ!9W2vo0oV^ptOFsj$hQN2s+{rKmt_XSk1 zt3&m=DpaqlLiM`)P`#{(yqMJsSyr!I1gjU`nAHpOz2d*k>h-T$??Zvr3w5kscq*$G z?ql^*&QxCv>xC?=*DeCq3vUeTg$2WUq50-|f0oa0U$x$c0<0J6V7*WU>xC*K6`mqNx=UySR8EUwos z0@n*~jO&F3<9Z>F>wO>2-#&l6FW`Ei4%Z7+xL&Bj^}>C)URFe2%xCk(cYVFzz97CY@Oq(+*9%YO^}>C;UY|j2%0}{FQ_b>v?IL)+@W#AeSTL^_ioD+S z^?rCkd|%-8LLILcs(8In#p{Lpc)hHMyqMPuSzfPQ1g{s~nAZ#6<@K)e`OQ<;`vR{Q z>Uh2IR9-LK$LsZ(#@VuwJlIsTyk55mUN5{cuNM}~>xJ*~dRO`U_|)~j!0UxNUN2Pf zdZCKf3-|GQIT0zF?}J4o%jE@z&2-?+d(MsN?m*Q+d5`AFnrL zHo+_#$%9Qb%j1b_UVLL- zFW$@RU0Uy($F27TUN6@1dhw~eUc8Uj8*{0+7xQ{C%jv` z*^0lqHLITr*j}o`_EHtLm#VP6bRV{tSCJQUdnwE9g+*|C>5aL)^ek@gY{g&Syy6$Q zy;R5TrKfUx={|1HHrbik>Wjg>lm+*~BEY@$#^7FBFu0eV1@4`#_}iOT`~tX_>cG8J z1@5IPa4+2l?&VeF#pGVfl6zqhDs+g3`_`zb5W%}YGn7;JJOkcX0>8oA;Z_oD^n7&lU^rfdVed#Wy@Apqz{WRHZ z#;$BF54PDX+ZPwX_N6yw`_h8hzH~F&SL*=Wp7$@XeW{M^OI2)Ns$%=nU2I=LO+2c6^{>BTufH8Wjr5lTHe6*U4>r~; zcbM*Bh(1=SacN1@S3(2i;V|9*F#Wte_}K2IzuB?qPtUT6w+cxC^6Tp$zrG6c>#HEY zz8>=XhK#(J^6RsdUt9#`*S|64*Uu=i^iU z^^cEF`{TD?K5h5^?f?6?Dl>Vov1T#9xCqRze`CzAUohs^&oRFR3P}O;>+3MTz6$f} zt1!R59`pN#jJ%lh>$99+TmhIKRG*^Xs3=`Staj-yi43 z+Em%dgDo}7_r*o))8>>laM(^)s4pn67-7J|zjwhpaFrJ1OQ5 z)2AOO@=wo|rvGI#-Zi=W`-=H}f#&P$XuiIR=Ig6yzP_I3yDlMR<9)D%WEsA+2!^kJ zV}`GvGkj2YYyWh6#_2u-Wwz-np0;)Ht^Iq}cRO1To^QJIn|I>v3k+Xh$ME$}W%&Af zhVR$whWcV~ug`*eX%XOF|Hj~6zhH2$pM!fe?oHPR!5a@QE93MvCYJ_l+?#%GC+SZA zYbWbX_uozTfAcoHeF5C->%hIf3f$|fz`ed6+$%`Pi)p-2L%);RtBX8P@BT6#O~kf+OK#Y*>fq8w1}EWLc~JJ+_p^)ZB^@22n5&hOu-`{~a6 zQ5=hvFW6|I!Fbb8BAGvOdyQWq?&tS|CUrYkP}t$^tr@|gfaeW$c;0Z1=c#gJ=f-yz z_~9JSyG1u%%;ODN9xp9|#~Wrm9AnPbcdiL^rm%RlW4=C%P2Sjp=R=$+ajB{uF8Y39kQc`uiOtko@PH#*087;4u_f#G#Hw9L`z9Yr52)=@Lql z*QIk3@fKZrF?u*;(ZjR|^l+G=hv-ZYKz-Z04=}JIPqVRG`8*t_-==Bi?^mt^_7f5i z+iKgK;djjTcI8%vo^U6q5P&@q3F~!_hcnq1-MicAC+*g)Z4wBB$|>s?zFLzTB)Wc9vf*DvPthAf|# z7QyEYGd_Zz*hI2menr@u)dDpz@ zBA@py-FPvRH)NT-v7!MHxvEi1r6d6aSuem=xxwS|Jt>ezJ0u`9vx%c`f7!lk%eR#ZCkJDnq&gZHzRi# zT+=i*vOEF#S4NfSfBIjd86vG9WU%cgNWO;=PX2RpoSW81)iMo|Z}!~7Z3 zaX2RzKPLFYVw!Vuv5*n?^|ychV=iGYrWJ=Qt=KPuRvc!uBCH!u_Fj_b1Pp_OE8!Rn ze1!*%2o_Tx5hMUdAfmYPl>SI#;<${mF%Aw53H+5*;)lWI?;ylpkiSH3lDJ=14!~fh z&&93TOR66?q8HMFG7Tb&RPihnM-T-JwUe|7_q@ebg0WcpJ)b-m&p!PnNyt>6&Ydxr zR%j(Lvhz1MNRo$l$6KZ_#CsUC?IODon#7Vw8=n=ugyOAmpL~`{cFuACmb@02&Y_O!9L||e zmDlXt_;z4<&UDs`YgyJFEUsCOvtIe=&V-BY$5+iY|{8_VV>gyBi@KTGm~hAnT99N=n*d%LxKN{SIlgQ zJ~wQJAAFRoS_lzvb97%IeTO>IcQ_|~uZj0i72Th6zBh>Xi`m{G%l7t*V0(ud+e{G%hAi;JXrmwDLI~m4wtxTLjExOyG8m*u0;?r#2z-LDFnS%TC{~rSWYq z#p$j1TO0KVr+Xv$*Q)=ATs3~rX1+)}WxuW8?M8fP`=0cG7D@P&!DYj6pN;=7Cf-TB zQBMI6GYU9qBqMl%`Ft!~c%P&XcRse}BliAWyx+~`)aJJYra%D?brkS$P60nM_%3q5 z-;tOXv%h1O{p}aQ{*E*D7q12p!I!`Q$m|(|Ls&y@iqJ<|*a%py3d&=xf2X238`!ucs>Q+K*YlGc*(D90Wp$<1n@)n#DhHPO70e~$^0vb%Y%;$9?0j8pLG)R@di)*!^R~KZx)*AAe~6mE{7xa z`ISgOj`4FCNov8okyxGE9B1@4Zz_%c)x@3g-}rlH{CQuURFsG~@Bll>1`j#b<2&*< z7U=4+j;FO)~74Po5!SPt!3H3YT_hPhq%%au(BGBq_hE^jjD+veLZrAdL2Vc88 zfqn)787TMJByC*MY%^|tO94L^xWB6t)7rno0D-*T82n>?lV`OZbby-Fl8BZ3RC>dwc zFrV|M`q@v!6=CZEe64wHNKGp%~<2itS zOJL39c{(Q{x=b3xxK8c;Xr1j$p-;~zR&-%Et8K(w4EE%{Yazsvx z3>p5W$(Lkw$WhtODx*)`MiS+eRmdr_IWoC71i?%)`e#9u;1iMO8-?t!Y@*~!>0&c4 zIQricesWih7!J?aNIr~vF#0@xJ=eDl|7&bdE5-;B*B3v|ymCrq;)k|UFtge(Lb3O^ z!?W`&mgSnRPY_L>FCEJgUkjr7Wov)4jK2v>@GJL1Eh}arECAsfB*4+fBEPB z_utq5*jFgWUF!9zAgAh;qttV;`Rmnd#;Bt-u;oO;`Gd$l`BLkn2r)rbG5aQD>xli|Gyx!}@p94TO&39-3kW z*Unf|ko_9l)1JW`FI&38iT>G^H;g%v^I5uLR&*oYxE zosS_-6R_0;W4?|`pCJzpuq=4rtZ!ft`2#X^0U?I#knB-c9>qa=4bZ*eF!VbmBLbNOm5WNkNGnW~9yE89I#dhV?E5SbK|aH|OB#y^GSk&I(6br;^d zogyHd6{DS`24;J?fk;M|ZE~Di{n`t{$g|)bBKhz$1nm6wkSjueOB64+nAq>@MDe`E zo;Pq@lg9G~jx1j&li>l!oqlz=7w1K&~~7zVj)`^u+ffheSx*OLK-1$w(I|e*ThrrJ#JaiwYhIg#oDxTk!)U z5T=&GjEO<=&oc6&aZ}qJw;=yABjcel?v?)~0*qW)(7pAa+)x6UZT?OO*$89ZODV`| z@y!jNlBqS1QVZTlS;%&arDsgw%2sl>#sDDX)3f7yF>Wgn-6)>A?PMX)D6+(Y!$=y@ zu97ByX(6!qj@HRWmQjLeGNwEuGY5avq?$P<_~+`FQNB$eFE^mr@9PBeyaDB!K%Q?y z-(MEU^X`+|1hObj4;9FMm1{uB?LhHrf&93$Q-LHjW(r#(UP>tz@{nG~qmo+ZL7Fe{ zQLKdlqhS?KE`$h=p0Gd=9R#cxBs|9#BtdVrY)qkbdA3pzAuwKu79Q{j1uNu<)<+5a z@@z0H>k#X{o~uf_KF9V%AQ>x0bt_OE<%hkD)liG%e16vH#+isBp>*`|JjfEE+ve;9 zm9j(!uu>AK+xy=WIV7RpfqD=~5)qB0M;J+#O6wbx!U?ixo0W-dv-EZ1vv#t3gl#xR zAkSMSa=^1B+-434LVCDilN=l3t1|iV`x==v%loEG+FUx3$>EYr+GKcuOco{T!7`a` zRmp88@p_${b*ijH15N#+&qE53BnipBgPzgHvJq|JZ*VznD^5zt5{bc(5OtF@Q}lT! zd!j_)Neo5Yx!qYBO6v(kj>@ z3@z%Uk79j{534`%v~#2PG4X4DIfInmtqX{_lvQl&PfcWQj8pG#!JJT0;8BcMiEZ9Z8-_sPet&FVBvtbazxhu?)`VFZs z+zaS*;`+v)#rkXzM+g@ojo0x~;BHcSCQ%LP!_^?XBuR{9A4J-S)@^6Zy^jMK zo(F{xIdil7unQG#S^giG1G_{>u0~XK-2*dofnzA^PmUk2zCCIhn5c7TG z*QcyP@84Q*-(GrgY*+asiTIUE!+Hz}!A4PK9G;C|c@T#dcZiBDc|^3TlLCg5mzC-@ z>w3X~w_ViGjLyH}^s>TOA6@I?)7HDVvyPcwARUAAr}5lNX{Qwz-S&u(F|pjCRI~}t zZRsZ_67(+p>fa!or;C;AAlq%MV5O1jrN&4(`y zsJ@3&?^D!qC0a;LD2Qg0+GH)Ik_Rsa@ou{(@-B`E!mqc9PH&}afLTF8(KhbTq_{F= zXf`R{&hITsLMTWghxx#W?PSkOE9>w5I<5HABuK2h9>3npZ3=q5;pXG_bqZS3aAR}q zR6#Fx+}Lb*go3`d<)&X{k3d;M&&|iJ%{Ds}s{(rg0~thnh<{O86g0|iWhA!tXSGhN zaZ9TqDJQ%E^SUHL+>7GkRoLmlTeno(bcfAUM!#q5buTGew92}(JO5u|H&oMhVdFm6 z{#o(pb62WY%wa^Mpz_!*Nx-#ms8+uga-bD>KGjz3KkwwUUkB0=eUc0eDrhGs2Uj5L z+F^}4rU;Li&-A~nt7Kh*0AH*FC>N32;kg)d)-hukhyjT1g`hQ9Z0+-nnZw#R zO4qh+7R6USi@TD0wgyh%BYfgqhU8m1dc9xg0pZsm>8&R8drva!UCTM4>r=NU<9yA|-!+HtUq z&aG!9BIVIayu9r||on&w9$O2Y2zDM0D3vxeuS1j`p z@k)tdL<=o*vXUnvryl*;$wu2gjrhcCS8*eZwyv@^8-tHql2wTH-&SD8ymOUh1_sI1 zFz2lgBIogcOHHr0`+WSqPEBjteQds+s_DgkADa!2P}A2o{Pe5r=`>5|`1!cCS>c_y zlG@DPS9J1)WT#eAbY+GTi8J@9D4@85G|`z)8U1@=D=IzMr4@wNuDe*R#c1LQq2)k4;hz4P?Ato=z1 zxx#M~JV(3oZ$O!5-9lt2$$i>3o1-fYD-7$TZ5vKh0NKfE$=~x6Vv^n!bSGthas_sp zVk=i@{lB;ZZ{M=E%$&8qHS=OepHX(=nXtS>HOwVD$xW^UxIw(XJ#M7&l^q(6nT^{t z^?J9^$M5SjwWeFhX5Fc#UThb#+3*NWeQm!`zsesgj`PThux!c}-wP^@Dq#`*t*e;4f&5S(seMYPAQyTkDe~zQfa!sIV2^ zXfIWGMgUI>Z^?4EhidhjH4N>PPUmx{`zK@93H5FJ$hEGcmVw4UJIEcfp42Prtl7w- zdo*vlGM=mL?cTVu9%S`H3pHLoS%p|>gWt3Hsd%yCkz2l#>+rm2q+~jy+gRvxmeip~dLq)@B5Kb84c;yx;YLY)aZgf{JrrjV zO-aqHDT&yaItd1b3?Tu!t1ISV1k32A#T3V=f~@~`l<2`_r4f@$l9vmzxgvQ{VsgIc z4oAVcsiojwV4_-`;C`(76#XdAnD z0phz^!@|~Og&ayNJ75q=*r61}(zI4dW(0|}*q9Nh_Gg<}(-VuI_0h^42(mE1>K>$) z$jEn+J*EcVNE}YKGYI)>XShTAN?yRWBtTxt-QX`1>#%4^R@}A#MY4OJjbvPHui}l* zC1Yc$4n+UlweYqZ$zsIg?#nlcZ&PS`YU-MvnyRL!=Dg{ty_|h*s=Jl_~{m*6C!)4VDT? z1R6+%P&Qwm_4O<)et4AJt;tjGB4vjG?|ih834^5eE``?B*~-@*&|N0PG3Lx{Tqjb2aT7SWNgJlw{gP{ z#S>KjlnT6zEwP1hTIow%jwfvhkDyyQS%5DYSpJeZ!+5qw0<3yePnH4ZnC`!0dzwfV z9$6v}OV|FNB>$5S){(p9$bMVpVWfNXI{*O#L z^OlHBNJru%-lLt}ihIG_<~=t4m3fjK+ixucg)XwDu8XXx>LP2-yU4=jgh^A~MK&G! zc7Arqi<`)r?8!-sXd-K7O=RHaWDnhM{emR$i?>pIYsDi*q%5aNzEYqvWP;_yj9zI6~t3Z!Y<=6aW!(y7`$~j z3-P>{(wX(ck-k{D)Z$y&#CoTINeGEGx ziEWol{B$IYNQlwqO_8<|8C^?3QVDg^FE^ylX8nKWNALapMqzub&q&I@EDW~uCsFCv zrJ3YUl-YvYVH?=3eSEAlulK)CGUqLc#G4ZLhcF5lazQ%Z=@~mWM+BUsKor*HrcYHRt_*;qsn6O?Cg@h2`PJ?SD*WiS@qito=`$B*^@dE@Q!qvVhr6 z;Npkc!4ae~gyBKfSal0MvO!UQbjJC_hs!JvXBtZt)xm}3p^gH z?6_$=JIZfaXbs~}e*e591P-@gE$0dGL@SYOmU%-e2Y(i-ID@b>CeZli!G)Mg1M|e9 z3es^JLj;%FgT$crH;s>sZSKs>k(i0mBi^#zC>i88U*awv8=7naF(d`>g?zB3B6fEX?IMw9wCBhWGI+h>P*t1hD9(lqmS??v(C0? z==_}$rNNk4l_>fMGkjH9?worgMB)zdFJucoD-_gMrDqML7Se9~&S4l0N|!yO8ErB?7K)Dk)Ykel zy1LlGm^;@ARv7a>q)ZW{aFj&z*21gu*0?LeE(>or{$JL*8T`}NLV)h1WMn}Zr4L~_ zTUmuzk+eW$4fuFxvUb^yw^HdQw`GkajgQY-3WghjNvGS8e<+h|HL4E7PNq#TF7S+tPxz3AH?p+x6<&!$lK9k zjbDLWEi<8!)PbGqO}?1-D4w95EhtUe_#>nOxGSETIoV19a9{7w&f1>s_%VW0*{3*2 z*^ zFY$A2S6nG6TOnHfKKuF3KPw*n-`m#wLfdmw*Y@00wLLePw&(Ur6|cJQ`NEq2;EUp{f0(4V? zy`;o!OA4+gv|uOeQjnFw>=Fu0A|jM8isfPDe6FR0S?yO}dReJnv$ki()A9~$9~nCw zuy@U19Pp~pY_c9fJTlWWVn6w_axmE~1 zlpAl(_ChC78vN@Zs10+KS=~viC9~aj)F+Z`{A&ASN6MFv!!?a>CEgPV$zXNHmY=ZF zN{pH$LCYMl?ThfQ@uTr@EVsMW?3Hl7R$~<}l4rL~_n23BK+Kb^KM~ir`Y+z@)<+E6WPYw? z(*)aoR;tEUZ%u9;b}kI#zwuGB>>)nj-e)OZ;V9W6d{ulvX1g8ay1sSgFEr;jb4s~3PX^v{k3>o<*A?3knmZBOLhXox>`bBQ=N5}%RYbhR zt7O|yh{kR4AXR|RIHyv*X3hC%50SvhhDK5gFyK(~s2d?Wc=jYK56_O0LH9H=&KC6% zG4A|X$Z6YV`jWxH$B9zlWPRv`Y%=af@-IpBX(bs1;ufyf$wpsMvMO{$Sfg7IrIfWr zx9^XV55fzuN&&HM@6W=jWr*X>$AppRt99l|&$6BU#oWL*VWv?LVB{rcQ?{Nt-^r(p zQWLROFxJDZ|ChnWynSKK4&sSe7k2bH86=05Bv-{49wZWGtjt@KcC=A4(pCYHEn=+p zgik@XW$W(|ADIS6d>qT#;5(2_+xZo&o&|Bnyv2{B`ar&b7^3$%&)sr1P9s}n_TpJ! z7o+4>cwe^lTI;idLOc0+^B@|3bBWQm zOxE)7h39!$BV^W@g2@J^RAhKlX8Yo? z8u}3Ay-WQoi7j*zI~p{z^QX3zh^LdfFzXaL3Dvl&Zv>can?l}74xn0 zw2Rn7rJ3!aLT28!C?yi>e4ehv8(j$pjIQG+0yM6~`fWSZgR6_3+0IJRx&5*Fp;(PD z#Esx~*2lVa8?_VK53X2fp?No*t1meEaE-5+F2%O<@#-#u1Z$RI)5cAZatW+_UH=rg1w9$n$5ZtzO>{kUqCiw zEgKWqcBm*WtF&xkfX52EWORvC_^n|}7@X~~3VEA)6?Q0T>UJn;uJ2It|7BkK|NI~S z@gFAwcKP6@rnpDR|C;O9fByPk|Ni&KCvE=gk6)(V%g+l`NXTP#tj%p)(k^1-l6Li@ zW6#pDcD8ZJbH}#&-cB^uaAG3Ay=z(&kJyg0B1({LJHlC|$Knqn;Faqq3dY#3C9_Zd zfM~vvYBF)jUMdrv#F2JLed9`tUr8LvU9F}1Vl`88OVRI{h|Lb*lUj}+GR+VG&w9C&=iQ!H+HP^+*n-ua--?R?NJ zV&{W4{wVCz6n54fuDeJ4c#4nl6bs$qZC!VGd%ZjSUQe;u9)4BFhI1Wzai4gb>l5!5 z(I?)fA02y|j->^AinDIqB;Dmdp5kLX#X>i3Ti1=-R(0dHnQq)Go?@{Xw^m_a+?Ctr zx^lZkbmg}5!-#(r_Hhc^XFWy9DKvip|h~9>nv=qcNX63DHdA`uj*KrDUQ6j z$*|2e8Fq_kGHiz*A$yvT4GVS^hpek8NyY7tt9YlYSZHNw>sndbs#cb^>IC4n*vV2Y zu`ljvX>&a--6DEg+Mk}5=Sl3mr{z-pdAh?NU-1?hEA+Iqbv-TZQ+rz4`+8caHlGUF ziW&>Le?#~sim7YwOlGdM<0_PU$IJLyFyb-SJ%|iRW-GARZT73 zeN8PniG6WbOPA|v35)1z>3+Ieo+q*Mu9i!_BEHj)uXuxu6}nowx~`V)sa-AIeO)bZ zGbch;){qAaS+1=mETXNY`)O-=o{%lLt)-i{wOsNQlaI-duUIFtg|?QiuC1l3YHR7L z+FH8%+FEiF`{KTqF4xx*7SY$z{q(gwPhz`o`if^Y==G1U_)Qrr^tE(#eJ$Nn`&zpD z`dU&($X?vo(&ZXk!Xg@5x}V0D=Ly+@8(X^YO<(b>20i}xir*C3LSsu;*VxikHMVqB zjV;}MjV(EeeQ{??m+Nc^i|B0WemYy8C$ag?mT&lqmRCgTetg9%GFIqp>FPRLx~F!w zboX_(q;M`|FK%t=a;+_45v?uVPixEbglxgBEnU8~@rK@Xg z>8e^=x~kTe?!MNRoW#Dkx24PVwuD9Wwsb$eEzgtKVsFcJU$OnkD;8y}(A(10^|o|R z?QQAq>uu@J!RxYyJXpwby)9u8y)E5OZ_D$9Y{9)PU9q?2x~~|2@`^=~E%df@b-gWJ zRc}jI)!WkD*V~el*cbP6OZe$+d7i}H+}l# zT#&K4-j?vx-j;A*Z_Aj@h3v(>Eg{$25*N|i5`KDHo+o4r?rjM-_qG)JpnI3aclQ+w zy)B`xwfdv9;cC0}v+{>N9GhPWVO zb-gX&sl6@XzTTGcyg*XckOvD{uD2yFqPHdd^tL=t$QIn&67KD7x#TMbm&JGY6$`yB zp{}O;itFdc@lePZ_6cL@$gfF_8~6FSY2;R zcxrD;xUaXRS)K3bP!^E~D_O3&B`%`5CHyqEJWt6M+}slGY;L*aET*3#v=4DXW$T(- zLRE81sA_Hr_cga27(8PUzg&eoMy+-7TT6yCpoe zyCvLta!a47k-WIQCFa^&;v(8x;!k_a)08YOxVC04b! z#H#j|c<0eAIgNdBe@o2ux1>e%x5S_Rmgi~gBl}za-rnN&Rvjz!x5T>smiW~EmU!pc zEtyWevWPrb$#M-YX%P)B@u$J%c}lk62ABBA2A99Lx0r5K*+PR$tZQ(IRShn&s=+1R zd3Z}sV_)3i5_26cX%QVR@u$P(c^dny4wt{3x7glViH?O1msr=~5}(@P67TD9>4x(& zOUokiU?t17xTHn2xWu0pm**+jf?HhTvszsKcHZK6Yb81sT3ljXi%YC(afwweF7dt= zm#oIVxW^^tdR)>XdR*d9kIVBk_E|kHe>-n+f3vq(=y8d4JudO7JudOS9+z%7XKKnK z@?a&)HMyikG`Yl|CYR?a*@Bx~;1~9WQAS9WU{xjhe<#EFwfK4SwBoW-Ql70r^B+>)2D3L zt`jIhM9-4nInOxst~wpxPyaVCs(Oq8lV02^Zj(?6kJ`l(@zGjkMeQ+ zLFcoAJBib{CH`{y`G)JGd1%}8^E8cN?0hER{c``GzU6ItR_KRGb^S2usr@jiz8_}& z>#wNUZ--9_`{jVb)u_mWr7YJF(=VbSCjB(TJWt9N+z^vy4Kd^NS%lBrA+okUx=vr> zv+uq}<3p^bPv78t_5P+1#xVW;D2^U;05=Vx<}Gy7PrB)|_JrQk)2&zj#w`;nPUtX= z7?2WTyCnc`{jT^FW?kI-$n&nbXWlh$fuzBD`gu6I%(uyGp&=&KHN>QW~ zV#*@>;*OY<>xk(W(Gin=I%1wDva^mD8{40+*{`<=S)n5))pf+Ar*_1o`i_|Y{c)X- zPx;qBK0fV_-+uX2w*R;P@84=v(Grt>T4J6jWeaYJN$E#spDnY6mY7u6 z5|gT0Vp3I0Osa2*DU0ljdty?qC#GLSPfYshiFuyL&U#`FU(1TIG3`fMnWE}W4T_Kei6Me>8BUwc{;Y>UYIoeXza5!w$KZc>Uv>PRWD4c z>V--5y)XrZeQ^&=%JsnXi|Bz#KRqzdQ`lJ#45fr&x^j{pm>uPY>E1fw7%7oJ62|E# z)S5XXkm5)Xj*$_7By6P=!l&3ff^eChh*HHUqY8JknSKJH14U^>53G$;y%|Z~DK&H` z$^%82=~ITCzi~ztLJ}q@+_%?GD)hjlx*nMH)E<~r-vjf{-#5P>h3pKdd2#1UpX+?- z7t#6B|8%}QO~(2KcfRzq&X@i4iBy|=>3rcQYk?7g7m?&{dKPNGhHNK)M<74Ii##a; z29%9Rg9(P|CqW<}q6Moxafd(${sq^i`cNeO2d6U*Gw1U0`3_@6zY`U4}*UyYxT(F3%I#dB02J zV}b`~Vg=-ak0xH8?Xm+zgZU#7)BkP}H@=_#YeX2u)5IGcg(4iF7Y{Oq)0OcSLv&&3 zxjy(0@XpS~jXPN%dBZQlI|v<#7%~&+i2>d@zL#JMkYlJs?*B>hu6N&53n zk~W;k##}Y_|NQqK|M!=F?tlM%{f~W(sXkaQa_u9-BHBm#Z2Jf^n|Vf@0=B;nK2t&O z(Tg?8a`>8yU$Z|ZUn~<#J5CZxfz32?rNC)RlP&E<1+bGSi6b)cBcD#BhC@aID*19w z3W!wFnociV8KRqmFW#m&-1Brb>mJMH$V+2;;*gE?ZquyEgQ$&6KRvhFF>61;VM0@a zE9~y56km=GZU;WZ>h|SH+#<4&ZtqTR2lZ z5s4d$k2^^x?dsi=cq%tmpuFWer|B?y#5xzmAn_LIFdHSJA`xo@niLgI9PUgb@??2) zsR8gd8C6nXhhr>zo9Gl8Ao{uni2iy5ME1R$h)#Q1bk4gUZWNstw>xEf4*y z<$?Sw9pj{W@C7XDAxT0`6dwm6=*0WLUzjHML9)dpBJgyOC!-CLdl_a((@%&Fkelts ze?qdz_V=K`#hs8FmedyUj_vz__axK;D>o#5zee$gQ$Q&NTAytdTtmOfbHGe7> zm6Wb_B0cQ=MBIl^4iXL7E>zQ)_s8VPm&eL~@qYO&3k)6;QDjdFNa9M~I}*k_#aBAq z9AOoj0{Xh9fWE3Jpg(U4=q^joc~8KN((~d*fIimMy)(b(TaNaO422r+)1mYtLUG|c5YPp zF{-`fOu2tNJG?wTg={aI6AfhEkKj_JSoEjTvy+@`f6VGuU-LwO*iw#-iU=Fo0M8OV znk8?(1oX>e;;B{W@s*G;#(}(llr8QMcS~tW7`wi?^j3iR`#PAvzYg=18IfGADCO!EYCN#O24dIN0X80Q9j7IT3 znEICA?R{lNN{|WmW+cPXNOp$5#EkiS@}0;N5Dz63vZMrAJMp#%*|?hRw}U7U?yda_ zRL58KfzpiN$CKiT2xQpZXq`iUN>@H@*4+EZQ?|mVLv}Zk;Uc4Nm3y9R?O!Rc@vaHb z_8Mw!eA!@38X*!`HinxqrULKY*YWOs74P1k^X~Do44vcdH_Fh9G50=)xetrL-1`~k z&h}V{3!4Gr0d2(nW{qW?Bs-I&Tt(r-_NmdL72-nWm#>5jcqoX}&j02>F-0~PLqw1; zyc?_6BPC>}@V5A@txG3C2Px!1($%c(Tp22mfQy7KWgx_~sTYg!RE7wY2#YXmwoYRl z`uY%WhS3Kk9?y~SKlu3YbOcnYD{PbHk(x-t*>K zc>!DR>#+6yI<}sDUngR8rBr^-tlua`FNW2J9IQSp0#+YpusT&L9D9rZ@mZwWZN!~a znyq_dGxtF{sg)QcBpe`l9BMQmBZPPWBAslVMWDAMeAv5@@b~yf^qNrfBIv_xFiQ-K zFa#sSgIGzA2=c@|?--25b|i zkxnL@wET-Cp+_N=np-~clwgeh9!(}%mt!L~$*CbL@{aJ15hKd~R-|uT+B&H%QsCbc zmTvqlFy^1j+imhxz@CRX?0Kldo`-YndAux7=hX9!^7LZddC1|;<05e9VTL>7-E5_) z3J-;K(!3s4(UqGS24>J8Q}e7~Z+#v32&7=i8IfT*_*YV=B+KnUBn+u>QKRx@%~==# zK2CH&u~1QfN!xOy@xNRNBzX|8a4!Lid0x3(Noj0PmdhOkBfk;hZ$tuNHld2-`%u?Xd$@!!IDbS zs3*09V?)Y^d76A7rsltq;@nzFIQdJm?v}HLXIE zjuiBl$3``e>=4?sK6)5ObwpDIFd%Qn|B?q|?FW8<;IR#q@ZnajYG@dQIo=iMXgpRX zE7f8~XyaL0CgC5+-MX%`=^Z*sQFSM$3E7xS*_Q?YixXML@TDZ_ z#v37_*~wawjjX?=TLm=%ET4IduGhL#wQo(z* zEiz}4m%@7R!}KS_nD`bui57RNue)lsn6cs3V$bMFrpP(Z<}TluH(rWg%8_~BNrd?;|` zLmgK>RB`3QIal6X2Fr&>f#qf4c(8iq!18esVEHfu%UMS)k0rPd(UYC@w{y*4Ro+V; zXfNFdE#-j zC%L-VX2sJzSP7R62$KKAI*27FVDVsb?PupCeqvcPJWj@$d?#7Gn{!<>SE`mZQ?gMNsL(j7qotTBUku{1H(GUeU@`!LnI+IsBX!83hp} zlWxafOCDxlI#| zwnu`jQY~gwy6wb31@_=N-3!J61GSgFLffu{EFJeLQ5$b0)aT)5MEl96F+10LYlPws zgMT^{UXXD{v3mK+TRVsc3Bq!I60fz9qlhxCx(&LzsMFU=9#y?uCHErR4o0tT?~~ z$0oR=zw5PprPRsDP>TG#=1med76|yUj({Jl2>3Cx(fMTreym2|Yt-Yx5|*Rho7Ez) z_i={3+kVuN(z4!P(ivb1;@GT?r2l$jZ0t~F9^wM8zu!;Vhc}?pQGENItO6qgVg z=Y+AcgrK-X7K-isCnyKw1F^c1jdTGQR^m3}Ty@8wu=-g}`+b5aT<@P~9YEX<+AK{E z6hxu~>%3V5{IrBYq7$c`B8~ul*7bw?mrDhHOYI6+{aA<9k5yRxc#hS#m(yosHCJCH zG!K@$982G<76H?bGnk$!M>Ju_KqVIeObM=mSd2>IPV!#FMAmhTcs4F~R=r2Ega}2r zpe-;Wvi!s>#!pf;BOctj@M7|~65J<$NlkMj2M}0OBylv=Rm^kmSFj8gd4K4!)z=+X zO2iDNhbdTzq}!e|jB4ZJVEgJMG3x2AEK_(8p>F)=8`&t8EELZ>ifrP5BYO7k$oMD! zK8Sm08xvPE9pen^HwUosx5EP3NsB8EICI0Ys=~G~L&%$22A4%)D>Enh{Todv+ls*5 z>~D={#{$+r)?xi)71lqVWBuJ_remz;`m2QL!Sa}6`J2@uVE%Ci^8;JqFA;4-fs#hS zqeh8W4syf-l477fX*VLp!Nt~gN#Rp40V$gSP7qxI{~I=d@gf3(O(7jS@gFcWDm1G_^eT+AUImjc%o$_c zx>4H(ngqy9MZATr{~V*(3ZY^<{xFTjlSCX~Bf29K`jz|(GSx8z>(9c2m188VITLA; z?gC^DPnCKp0iy+vcy~OJc)3=^mBoTPAF3&kan`HA{Wo$r7k)BJ$wBHJjRfGfH#UA6 zUMq>xz27HK&70C~&**<(lq(Ix)5q_!HwW$1D+%{26WW5+}j-v6L-$ce0S#8AYwX1=2N) z?GS)Skj8%;$<9VY=xV+iGSlwuHNswRMXfoy+O`6prI!(q| zr^#MAIm2;#)GzM~f7m+B@jUT_CDUj{sEr%NMl!mXZ6{1HG8m=rZIJMpjt+-F@c@->4*kj%b|?8AvPG;Ad)fZg)Q$g&GODQL-WA8r_Gn#I&7UAVYh77b&!PY~ z*2l)$AUifshjm_vW_wcAXEfo;B zN+69Ece3`c*L1k3X)r-a%}81?{V*ANDni(AhVQozg?ea+4!gH z{WNl_nr+D@IY9z@ti})-d?{ux`Pu2`=3y`nD}V1+P{9-J{O{2OTR{bEVrO^rLXtlz zqhtYXHPt=NdhD1L%zPsiT7M$zxMns=4ZD}DsJiFiT7)H1tK2avear=Yb}Wzd<@a+twaN+O?Y6ee>;Ct)<3cr zta+?Jtd2=BPev@s^_d%MpEE{0$Q>Xovxb&ar)4vne>_N&(+mYYV-gV_h%kSk((UW_m%} zE9JK8X3$G(?Ted1$6PaLvsy$q=r}*42!Bv|no(O~1yclOGjU-jDu55m{Kl&ByVW<} zxFw)0LC~@!8RK3ua+cSPu28*nep{T1=0;ac-Jsd*zj4JhO(!2E_!)|6o^KFktS<)5 zxl6W4rHb`bNNfFa_8NwHl7BrO9&e>l3=tU(xI#CeRAH|VesO1JxuHf(5N_gZ6 zlaIEYO5OQeCcf#!-(vJOnuoxXfNAOd{%z)vKi~MpE zb{$V+IQVQdQaz%U!ZvpSh4sT`-V9VGSaXemi@cCfPh2 zq_(A59G*gP2z*UAF|gz)W2^DoAQ=wJL6Q%X+9G)@gH-V^B^udCMiwTDJK0G7&uUUT z9|!Jdl%3PC*;aP0<4ukAHNknGe(Pgm{v!VC-rp3uVem%ukwO3Q6iunb@3dAvQ9rZp zm0t&Cvt3TdTfNLepZ-|ar$1Kp>5u1q`fa?t<;YmwsDH`Jd~MhMu*!AqH>)MI?SI_c zY}dDy&$gBLD`auavm_%edg^}I(U07^Wsg3oNrx1$JB;U<1PUUNQ@$vf_y|CGLQ7`_#%pm{I z|M4IHaUvNP&knHhza|*}Ypxjo`RjlE``;g*wE3?;ewjK&KQB;Yvkz8|Y_oi`gl74V zd;3w2rzyv*S^l|WTYYaQszxnTeQ(WXGA5nm(09_Q8e}AG>lAn!JfD>-7P$hYeTXJ3 zKOVl`{%xvuz4`s)_jRgP)BJAl`kT8I+2}t~)5>b{U`@+*#5YUmi2t~^A5D9jrp>y- z$zA-ly`k$};UB-R(~aw0;rDt&#lG;X%F$$$-YlV6{Nvt!l;dg2(Jj~; znzdY$bNXw0L)TlbKYm}QYBep__O8F}4Ha9it2OPlz1PDk+k4$Cq4)aZ-hMRgX__|c z54IET{?gvi_5R?G-`DBJ_5R>{y`f@<@KxpLGs^MWR^eflZ53{o&?@|KZ$HZMH06j3 z_J-z7ws75lX>aIylkLav>r}0#$=2TWx4ofalWn!8y|&wSSY^9yn#$7_2NhgG&Wu~|ZI;>W%HD96*3 zqhGK$H0uC^lClk-|DxW|^$xI)-`A;HO$V60>u-BQ#RjlyO?z!8*s#iWf;CI%1pBzR zA5D9jrp>!q&T>P|U(Or4-p%sy`#RmY-pz8aH&kqAxvCspF0K69#+G4~ZER_l(Ae^E zZ$HxUH0hW(wk*jV8nf<@B!{+tId|wfKK=3gI$5j1r|n&T+Z`&>)AgeEVvf4Wa@5Tt zIO^tyqkfvGHFJ*oQmt&d!@q<-)D$@CrjDa-p2|@-_i@x+n~{zegVaqHq;3}hQa3*! z_4A}-!60=r2dOU=%c76T!u_G908%$~Aazp(Qa4o~b#os`ofEaPoIF_6vLto82$H(_ zA*r7yYIBnMl0U?rXnzTRs6bLTbtHB3RFb;6kEHIpjC8yhrEan)b-M_Zy7@t=pC=s) zMyZ=QN`1*6NR9ULsVsGKA4{Eb((z)Ly2--S?IK|6<_D&Jo^&i2rf%Xl{h_mZ z*|=DLr~p$pbue{P1yeUwFm-buOq~_A7t_>DmZokOK~pzBH1+dDEl*Q_!ymHz5aO~Z zf2crHH+3|1^HiF;xsRq!AtN0x#;KbuPTej7r*3|5>gP$vf^q65k5hlYxomohW%)w| zoVuyQshcXCx~amcoBMF;tf;-1r*5)5b-M_jy7}R$pC@WXp8C2!)GjbTRN$$bI-a_D zDo@?q$5Zzi^ssES50;KBPu(tpr*3|D>gP$vf_dtu$WveUhvEYBLj|6?spF}eDxSKj z;;EbacZ|=_X-WQ2Ti~hNI-a_HDo@?s$5Z#2 zjXKIk`(WwF^3>fTcB#cb-6DAE_J^l_o^&jjr*6N?Q(yImEI*WdB>zl*sK8UVbv$)j#Z$LcJau~? zPn{LD7xUC@mZ$C(!Be+CJoWQL?Pi|3&|fzFyG8KS?GI1=Jn2|4PudZNr}EV8eLVG;OD(^cr*5-6b+-tf zy8Yp)pC=s)=Be9zdFo64(De6zjz3i3soOf9x~<}=+bW*Ay^p8PirR~L>Nd+$cZ=Yu z+aI3#d7^eFPkqTBI{b$O6^fB7o}l2dI9Y zb}SgEZtn!DFF8c%Pb`=ffab44~ZtnxC^Q!h@qPoix)!ib9>h6cAewwOv z4S0JjpI-gTE2Bbn;Q zdPLh>m7~B^cXdp4_f)33yN{`EhM3Wg7em!u7OD=5fU3J6sQP)@v0$jWdn8o-SdS>& zs%r(Px~qe#yDF%>aGf_?(V~?^Q!h@uDZ)|)nO4_b@#(nKTp-3#Z}+!5gl&!hzeYFSI1R%Pvxq+ z`?%_6%aGf` z?(PGt^Q!h@vbxKX)nO52b@xM7KTp->WOd^s^A|n2qbrcrT^(87J(aBP?joyy|7G>d z`d_>3UiW3&eXxRL`RcF;zPkJ2tDmPJ3+Ai4IbS_}?qB)pkY#r)g>re$-hbq`Q+yz@- z6}PgiJXqYa%ynD@a~*z|>*tBv&CGSJe-vKk9~GGEP{&+{r!v>!F6R38Pwn`W5Ifv# zrXeq8uS1r-j*DQg!w-A?JPlbedmV0OuWKEo{mUGr0(%|m*y~WmUWY37I^4xx7u4;= z40gye*l`gIcKBhipQmm!2Ah*z51l_3?^DaV5O>oETPRIR{YhdTZ`RPooLioXu^{B=pwUd&y`EO#9j!Cl86?)qt(7H8Zw zsor6_auV)(H{IuEy0=caB9hD7>E7b>6Y64|_d!}Y2v@`igwCI0Kl-QGJEAs!D_0Z? z+;yzuuH#d=>sZfS|MU0F??>r4FSoy#wvJiaIxT{>jz6^Z^Mqr;v~`@()|}!>Wvmz4 znxCu%4gw}Z1iR^3w$uNv<*<)N;3Hrnp0uC7UvFI&Bf>ZRBpeZe+eEEETgN)uI#$uv zv5K~i^|bYMNh^!VgC#A?Sf@oW*71k2ex9Vw8SBQ!1TV$pffD$1ha2%^tV5p?JHE|y zg?{?qEpo#5(|?Ufk$6*hTztwfeLp}G-5Nv10%INP80+{{#yZwB*1ujCju(T~F$-3w zMS#`u2dsXca4Z@$0?cCTaz+I@W>Ju?nn?RbX|j2dfK`_F|ekW@+lQ2%0+1X=>bUSl?;V z(XB++Q_vM0_k5bFKyv-`lL2gwuBvIWAEv3gmfnNNb%L+anDQq0^ba}WxAZKh`CIOj zeg+9IMq!T+)8{747kOB@QEmxP*8ac9ZAU00U>{G^C706ubj^|9CYK_{mVPtDU`?)O z?LX(P_89u~TMmr|97NRVzCZ~1o*)USK*D*_&2(ivCFFd(*%vC%)Ul4Hj^{Krru`US z=$xiTl#aqN*Nxx*&u{j20~a8BJ z-Hu;f1uV(?*0q7K-xkHeT?&9(mVaC#>%p9UKGZMjGhBJUccn;WAWsoyCbnp6P z8jtoz*EUe+b#kS|DU9N*@Hfl>`aFo<4k(|*ZRE%;Bd)!%@k^z?oY!IFDo9@lbD(c; zRk8v;9qaJvc#co2l4a-Kw;iB!eEJq0doeE^v%GX#1TP(Dyfl6X-HU7K?~yizODsgB{ZVD)%pY3)kOlX4H+ z>E7t#La*rDB3wD_+%`uvaPRhu_eZ!$E{72#RNISgx3VJOzo2G2?qT<(-n3v;Kl`ap zPWMT878-e*$u%l$Ts?TRcy_iPkwa=+8;9vWS+jb68~ra?xfpYMF70n4%eD2dB+VJ6 z^~(Q?HKk{qQG2}Lwa-273J;y{ZNBk!`d?OC((Z(dJlAK(-fcQrV8vq{D<02T@oPGn z&UEtQkuU1xIVpaNPQDlok6AQ4EdmXXGc=q%D^Rwyaa$vigi4URWgiSp!C1V47a{Z3 zyvOOv8)>=1_v4y-RCMJQcc}NNX1Fu{-d=Ld#GMqSELnqfqY`*T#Hqw#y+7|-l$Io& z_1dF;YgbqN+ci3gZ+3GMr+_=hI@~#)ZbDR;*2WD&I zHpe==l_W5$0rS^Zr|7d4zh)z?id>Cc25TCb9ee@yeqa@{wSE8f>6O+w%%U-gAW4Ix z2WSInVXOz=YLK*W-@Eo~CAUI8Xj7k8n$gb0B`e8}u{Q>hsHq(hEnkU!r+e7pKT2Ad z7;EG&r|XPFNYZ9%zL=)&o3D|%O*sm*bF8DC<2mhoZB-wtqMst`{4L#hG2a}sd~;d^ z-yCOr^C)XkA6yMu@mMK05ViNL-pRdDzLNW))M8#UnM%CcuArjghT%Az1 zHW$TyOP30~a;)Q(<2kQsk?Mv>+DxG%d*0#1Qng=c0@iS_O39j z`&I|SN1}924xsTn-w5!=_uMTigoRr4k8Viz!m=GGGgQs=bYv{hWa1T`m)g>Ss-Aon zUK3aQRE#=BN;4ALGS*}uxKDJCZ8p}fSL{#5PKtnn{DeE)2`zMx>fubdnLoxV9b7I+>*4s4;wB9UM$t+;3(GKHhn@ zUN7Ed*?h2gXSwr!5!`v2apz>9@j{Kxi7p20!@7|QVHB=tFCHBgE#hlr6>rB(Q+9#H zuj@rlsBuN9Y9yE#w)JPuz_N zQAI@REM`ZXR$nswCG9pQ+|SCT+T=uJ<}(Jb6v*~eybZXUChx58sGn8eS{% z!w3+kAnHWuuv{C-!|?1@TM(`bkCZsb>XX9iaUB+6a*XwWZkmz(NI0{Ftd9B5Y>CJG z+4@s60@mz<{7*kOfLZ7_77a3=#)D`*lWJ{rsoo17Y&`%we`;JFevWkz6LGap7(vFC zD<`qIDAiryYTOF)9#;D$yK>|UZ(AG+od&6{(;%I98eCf(+M4V~I`1>MVR3kIZ$ZlT z7W9kgElBg;0(|0~n>A*E=ZfI1#3$YK^^q2SR^+tx(E#AAj3HLTqFmd zbuV{9!IkUxE>!lsvM@H)Wui3e5k>%kT>_6xHWd2=z9UI5?hQ!U-hh4)y#Z;~8$gbf z>SQA)18k*5XjH!u)7tpdgm1EbfYHqxAwZJ&?M~34IZQN)hk&3UrW+L<;lHdQt94m1UX14w>EUki;Yl#?EcoF_C%*1V zNZWnA&lYCMhP8_|ewr;Idl#dXG$KW*h4G|Rf~X9VwlQiu=kt{A?X-G@54rbugg?p7 z@}z}$YbI^2k1FH?Ndn%{R#jyfJXpbmDZlaG zlHY73TT01-LKeA8ra#3rD@04{6MmO@jCg}21~4YU*YHfpjaq}4G$#bf?)8#`-U|9m z8h{ppPQVI zQEVlU9V8iGEfXXISR4rPNBs*pqBxQfQ zK1y^WWlod^+9 zPi(;$;@vYQoh+<)f>FeT=L$j@?4)dl$h1<3vhFzE(aPtBQ6z(ll_oLPlAqp7wV#~m zN=l3?;XTPlbLT9A8_A5axNl`Pl6PleJqWEpZjz;eS-qCXgP*X389l*l!8wt|-Ac2K zzu(U|tX6pK6^UFO?~^rq|5yZ`6E|M3>b({s)wj`N%^7x|w03-sT zrm*ad{Fg=G#Ha!Zpd8o%Drnn{^{xb_6MO$U2m@qXELFGO)e##-;}23aClo;ATY)83 z633ERVBg1HNK<1*#mz(yaHDJk6jHo`5PW`OrTWf~E2v3=eqG^Izj=>Rk3=bXmW`5p z=sK<+5>WgydEj zF%qqa@lIe)rn#|Zf}U!-vz?G8U_34|iDe_R5RBj^Vw<=z{WoqRmZ1<%El33`YKoYw zflz7W6gC2LS~QE}9{f5u#~4-=SJHN-5@Lwx9V~$b#70l3H{IpZG9c0Agr>toz4Xpn zsMhrxV|-obG%-s6AfSjf0wBo(Hf*Jl#5TYfe6+36L*BAoO)6pJvo^wfS)Fol=?zjx z1fJo|5~>08^1cj**!oHCd^}Yftojh5aa0ELGH{zK8tj8y;e^)L8 z^Lh!Nb$4Md#<^e+qs!7-cI!f_dnx@7QdPriKZ#z2%CSsHa#ORo6%P?UvubGv2yT;iry5 z+Yz}zH8Li=Bjz4?ExuZ6z4KXQ#f#`~oUhdSZ0A@!`@tpC#8L_eEaPOiY@SQ>m4r33 zeco^}2A|uu;7In5C4$9)DyU%_#0HW8*IkY5L~JZ27m0mK$S?Q9+3)Lw{JbCTnviGu z;VujLc{|)~LS7Wn#|n9$YlzEj0rGMo?`Q3BL3|YaB$5M6Vfr$t0uf*m#+v^$CS z;5>-DVanF_FFt(~5HLRy5fW)4W7w*Swe8Gv@Vj zK5N~>_hmZUK5f7p;+L4GvUfv7s5+tRNp9G_jN<#6*dusb7v^5TTnq>giOezLY8zHd zXl&quR8sNGtZ|S$B_@LROw=KMGoNCNJwiyu3p4HhfA-!i$8l|0(w<72UXc_^U?$XXvvCx1g5DSn72SUlNH31;u79b8~kyXPhlX8@>6gjXO}7 z(!MqU^xC)`$Cq%ni}OS@y!-09WkT=Bw6`%H%(Eb`*yPv&Kac$VeF@eX;LKNcEeDfF zlfw|?TN5s8^71Cm5ZIO%n}BB1ie;~?0*njGWXR$+Hk(ruSXmX@SRt)-yIDE>mQoBv zfR1VDqNOUG2}|DusGnN;n)9H3>gc-+)Mo+p#-N@u^`!>-JRa0XmOlBef%biD3)$exfHbxy z{IW5xDX_OS)Oz0h%`P9s_G7-;3Zse3G zc<%V$Ukk_;xo`+>YJrik4`6Fl28BBU9U0vw)`p(A)s>ZFY-82QJ+!s|m+{nK*!(R5 zmF<@Z`je872Nu@V*_j+gRHcm7ey~AA3iVw)JJuwDNR)*2Z0npOKr8lEa#2P%d_M8d zqp7`W>Q*4X`jYfq2JPn!dHQ`Gv?mOC6VQHY$V=+EZL!?|+Gk<)#?YR!O!s^I$&@sePSKoE|)lKz}l;F z=2I8}*lhlhhF7fPU$QvAUb&Al&BH-A6`6 zf}4sSKzI}1ySI@Pl5-9Q!>fQsKEo3!EECh{30So~eSS+BL`o+sKoL@)60*K_0ip`O z0BRp#OnA|gV&$8zhH%X}NVNs=S;cDCYh-94a}H1;XLT9OpEqXe_jxd%FlJ7`{HZasKM(V#zRb&DeimYH4D(5AW@`A;<8glE%yj1@ z6xC;jN#cF{xn3G)C2=1n(;3wT4U{wQW2e-Hr7Auf^;5@;V}gg)iQO0lLjbY1@+MKn zUzr7+NA;&P7Lk>K3Sx;aVFfWtwoKM8Tso}iFNMT zeIM`49fKO13CE>Ed{?|~CHot{k2#_RW0LL4szRzvLASZ~HjuM7DHWuZUZn;#TTfCW zl6G0;FH7|xPi`EuheI1Y%EET z2%(Gb-Fgqzs1FsSjd??*GGoJU0#Kk_d~#y~;=$$}*G7T?WhUzp@JKVHu-nJ^>ukBw zLu^j+amYOdTFGW85_fUE=-pK1;I8J=`q8`0B=xBS3i))Y4C~81HFR5;v~4J^n_Bw=7Miej6PAcw3Mo|o(2_qxWIZBXC;60F4h&} zP9(!DW93MIS;W=R>J}`diHt6^iwJ={_3&C_w~6v~&xPb{J5Ji#!S zpF}kqJ0I}IO3NDC)yK6oU%U3JaGPIl8JSkWS0az*oDji|R{=KDMv&%_Xv}@1w3aUf z8W~x5#Dco6ZN64W7f zmiqn0r4eAp@Y>}WUb`&AYnOPR;d#evcPq#1Jow%?0wiB)_!6GiZsd7YnclPq%9qhR zmRRSsZ zgT5M{VIx9`3>#~}lxB>Ag|BUTl5#DJmWT}aUe1~Csw_eZxyhQkSU=<&u25o?>iw5Q zW6L=uE;hG7X(Jw4SL_R}OX5~rjW8W{98Z?x%ME;SCNSfd?ehGxU6x&?jFZ`4X1deq@=YNxHQbs>W`x#s}MlUF>oUpc-9L2G;5oXZyfrcK^Zj zdQ#+>^F)BHsrkN5MYQ%Abp}~)VN_HS*pY@1gY7?d zKRJw~*ju|s7nX1p;HwEmh-Q`5kE?8%O+T{C_KvuHToDoAU=fm7LEeROR(4PFt1mNX z_W68o1RKtA4z$<7-PVLXng`a#ozzNzFKpw9fb^OuO6~6Wa~OwSS+S2*7>4}vl@q#OHUED)W)F%TmQ9dh*Y89M_oIwq1o5(4<3t1UEvHg4& zpHGLZk_w(`p`1CHXY;u-FNy~JjNP`+v)lGrcH92cZd;u9+xEBe+s*^=jiW*GZJ96O zxa~)dTab_3Q+1Ld_NdGwWVq~X*0{;#$Ydogu{F;6MaU_y>MFiVo=z$)ps6XOd#g%m zAUv#V6NpQ1mB_=HXpjNeKxAuTU#e~mH-*WWAVq?vb?nZaRUu%UL>N_6tP4@v)EBY~ zF~7B)a~Eeq#?oh3<@=H2wz8~)Bd<(;OTMSK0q+7Sdy{u*wrv$Z*=En@=|^r|y_aJ> zM$m)xHFp*_lzmxEuQ6%WV1hDgdaMU^fvmo#Dkc3KGKxd26HTtPDvfG}#(Jo3k?ZPJ zn&=pIaYfuuI_`2jTOL@OV?j@u|Fh2Nb&x^riAo|n|u?ypBj{2=Vgi-dEJRTLtqtX+F2c@w3@U}RPIbvN2Y(U z+WFQHQSV_|1;%iV5}}rHy^Se_I4cR z*6UHQb0Qnx!g2Jh`@m_Yvf&XUKjF@(QVRDu#5zPTrzeHl2j0XT+r~ZgOt`j+9Qlm$ z1XNGnk!WLg5Xm)G$U4*HSHyF@lAB5tag{SCFR~o?<7r+N8D`ABeV*C3&ocY=r)J;u z+na2)Vn13y45`wYLg6Ku8`5;GNGSap;M3Ad~zqZ*pTH^dz-Y+4_Mbygjv zBi84^%KZ}N@RV(GLTPOYsq(F~rdbVDJTKY_P#?X;iBxeNYjv=)90`jAsaF1xBdv>{ zv*QjXW%dS)J~PCs(-guo&RnCdwy~Qyw>H(3`cX)ju?P2g_TWCt9^9YWgNyV2;6B?Q zoP)+U4hhMZp1y=BxUW;wlc{Z@-dr1qm$p&q+-iuX4Jgrj=S`okt`{IqJ-LhJs~6zy z;xmKsan&!ZPQHCaiJUo{j-CjCu#GbWwl=1FT-o+( ztuM_r>b?OVeSjBz2UWS@m4|G=9hrg^TCCzWSRO_-VX*vw-q6~vLhnW0#`*VO)rT)* zm(}O>wk=2lQwsRr?1^*z$aLJ<^kHea=ic?tr%IYN}(d=?49hr?~s4}^KX`wC)9y6xnKF@UAXPJ)sQ`2!d(S68v9p~Wo zje|$ZX{VFX4=%R1FeBb-^Ck!?%3aKk#I?hSDL?D2 zp$4qAiBDYU>hI2t;#(%*j-1BIB$&8S1^5Dal@)OGA}2B=;Hj~DYy4M|0>U$4gP>y4 z7m0AIxMMyVwX-Zr<6?)nhZ_8vpQ$vd;*};mxA8<&u%}!`_}|C6a#65er(mmPYh(zj z#J3Dqh~x7FGwlU38^X*w*4WB~RWdEG8k@M=jkT^d&#(Gi8((c{xA$0yY4asw_!=16 z#R??6QK}{U@P7g`=LT((sFsji#aiWhS62G#za$Qq1)CYqbD!sV?z244{ZHR^YpdNHx4!_pL6*VKIeYqbJqCsO)P6bpR(1~dkhu~q~@eX&qlQ^!A50q_og9=aSorA zch%zA7?cG}hq5yLAEl4lwzRgQ!#5d25kCQd^l~S*7IpvLAQGnE1{A{YD9{~jzwKlP0$F*WfSb@>4->r)dBc}8Rj&;mJ@t-Gxb%08e|Q~XTBKyD$|y**ztDuQ~M z--8*sxTTmg<(l3M>ZM&T;rf%ce#Xw$#@@0^AFjv0Y+7US zGP7BxB^&qQqTXj&)caG5dVPKbVV`YLKNHv<>`?Dh4)yXS9P0hZp{|?>O(oTE>*A=7 z!X`IW*w!XB=m=~E)R#1AS-!SOD8+28OtH0qM`c_A)xxa`8Z3IY;x@J}d7IS71U8OV z#NTqBYBJt_yf-zPc};;9lnEY9oib zIPX5Lr8UJaxfJ=6;Hmlqj<2F0VQd}Gi+~}oxn-y-|8l)`T(yd&gs$U#t4)`s(i4G! zbpm9w#>{uFk{U-i#B&*pB#l7VYmvk1aw>DCuU9gSksA09HOzTY4&{-BGUu_llWNo>T7s=^Gv8P(=-KzM% zi?!War&&{Dj4W!Z5#_`(j-!6w@i>~t4(VY}RdGdRYTLp>OT*iY|Gv-j-}hPm z`~K8_U!R}3*k}9i&xE%J+wc37{l0t&`+YyM-&5$&NGfZm%XYqtMXYiPThv6Hk`>gk zY1ua9WQEBPS`!ZF4KfH`ivWnVWdM?5TVc@OPpKgr6xj$)Y_KM_s0&*)x0_HzQ=PN2 z!2yGp*LHCqG)SzBZ7Bnh-7zv78Cy01I-0*uv1K3ExX%aQk^P=Ku(A#%p$kDlZ(*BU zfo`7^ebz_eiMY~Ft@t58Q=mpRW>R&55!thafA#qwMtcL?Iv}_;84e+HZDu9Wg?&8b zo#j%R{ZIJZ2C$M(XjBB*JlQivGoBYEK`RyVG$A7DlNp6#%>d%uZB4^vrh*Y-DJQGXGX@7K#6AWVWq-gnn)U8t0>N_iGMM=ShN zQU)3xtFNda zY`tVvI8Z9EHdxh7{GVsnxEPAkI;-N#dT|-Cm>KBM=M8k|vj#f!iGdCilYRQ^i4JF& z#e)Yr45@(*HY`+|Vk#L>nSfXDSi) zJuwGKD6x*~Wj7BN=fU9GBzno=jC0TKyP}4gS`+A1Sdyjjrq){2yX@g&RtE>MNN}X} zuH%!GGIZ@lU?jN6Q=QheCOeSp#P#KjrwSQ|1AvU;tXaxmMp-ef?UZx!vvs>2MR zZmhn)whW`U;tb!oG25fw=DLcz!5-1;jf+?(dL_1TPnEM$jnKJW^IiB`$4-%rj+J0- zf2{=T1Z=E3B9r$nuA0WU@*(zqAFGI;bM2j#_4tgxkXvsGVg1|F+*vjj?_Y9(+=^(K_p3vdG7nTUNIoVEEGRCvHoG%2a_Ram9pjyD-Nk1*iSgi zFf(>!$QwH{WQ`pe5@Sco^IhyAd+x{?&hp@~BSUKJNcj?DM~2bZk-dpX!1%&?%@Q_I zZtr6yO7uhAU}toOqwIAuF?KdM!TzIGa)`aF7aABU$mp>PBz80U*2YpVFIjC=WMr&%s({?{wA4V81xj_W=X7#ciIWsu(6z(wIr^70+S_^wO|HVkVq! z6=$fY;|(H?S;pGfdJl9L_q?_4Fi{t#<73CP_J+7#q9Q-hn-Kdz-<@^ORr#`erJg=# zMJ=FYrfp>`PhL%U$0qI@ zS8=dwJXiyYr!V$Y#y!-ScUB8e-_#2lYgWbXfVD|L2BYlbx$CXlR@s!wg)_A0qAvM9 z)(@D#uKZwa*?Z^vOH_EKh8vyLgUF&ZyauKZyJQ8@@ZpXb9;$X@bsW{{%!dqP(l7(C zg{w0?gWl|3#7}s#8p+MB@8h>yYd7spd(&CFRq7yeM5-#F1dTf?ZcVK4$}$6SQmaPk zMZVMxhqy}`x$0FytI1M>u2awMN6ckrIL?qa9B0THjx!{NBb&pJ_~@tQJ0u zgHI9(VNb*sDhn_yV=-z8lhs?yVRx3sr&{xGkZZAz^=bfqYoDRYt?|wDCWwmrzz?oY z5rzoK{x0J@sl}Am)UUGjcf)8n&fd;hxxMMaxH{1HV8c6i)=1{M5EJYy-}dLCf&5)y z=hnSp!zUVj9#i6f(|MI9lkTl+#@VX+Lsi_kt;;W@DCBwZ`6iCvTV1I%`+(lV%ri2V zmxRzJz$V^;*&4KD^}F6GHGCHwM{hpd#`nrZZYzX4L;Yf9+*|@0tJssT5*4Zc6J6aX zK~}6+^st_Zt6i)*>MR-_XwxKW<6Kml^jaZfOmf7TC`4T$vs0^rKuxEP^&^hM+NfeB z=sEiCHerOu*7fndh4q76rmpp~iTkEr4^=9jqfG*l)QS63#8WtU-;D~z#-6DOeJaa= zU8cuOXg-vqdmL zz0^ajK=7R12g^8E9o$VNvc_2bQ8pGY-IM2ystxxI_6@hPN{tYHA8Se9%d-HB zs3x0PiJD_$d{!g9KzNhmXdX@*_mkbxSjHyF4v~l$$C|XR8EBwAT6UHgP{SXx@5l;JGY0`PIhJ*s{IdZM`<2i90|>HQ2BUp&3t^NZ}Q8 zcAwSpSBCS{3}EGoQ$#4Rv9}E~=&`bHl!k+tD*yxnvDhnA=%ht*Of_+% zCQey@vv3Y>IuusAR~Wx3gQ#1JaFw@t$Su zNWJO;R@KICCR$e3)v7H1!yu&Y$*-769gPTj_Ns!m7T z2G90^bL1=DDN_Wqp*-L{_YDrEu|Y&9SYaJ!s~4bgCiF&Eab!)3SOt#Cd*di;^|ju( zJhi`-XVN$A|M-t@ z0DS(%v%~C+u>U#6-~aX3|NQ4ae}B{FKmYu7^xl6QAOiw#jKitHVdYB<4jbwPhu;>5 zM}x!e`|PsM?Ykae9|%U5pR89e10+MW3KkhKYFQZ&h#FLoH-Uj0>%6;ST2}IHtct-n ztm=XwFr3=z*R8X4@SNslNeJ|3Iy&81eh}IWa;= z^FyYtwf#e;uGMzS2=Umd7{e+x6{C8EsTjXcZHW+X8zG7$Q@5J>VPWbo&D1}TVH$w*}(zg{gX(r0P~wUoBMq#i{zV zmGt-T^MXW0^Oh_?+9V^8Th{R{B3aP=4D z>eHUm-@ng;;d^>YwcaiV;_?)TA8RTdRw+|y^$Moa->0?!@!JCN>zYbG&TWRPtE>+2 zEnNKtx%#xJ^!M-cf<%s~RBQXkT>UyzX(~iK)>S&JQm)ea6+NzNu19s_R-#3@^8{R+0y->0?!@!JCN>)J{` z&h2Mh-NuqHT>Z7U`n0X|_wVz9M2@XgYx~Ds{W@D|DnvZiS30axzS8;?e5JonZ3z)? z8zQZ8FT&NQeWkyDp9jPD^p$G8T@1u+0*D`LEFD%UV`=>g#?s%XwgBd)iq#f-JI$g`FfS=Q1b%UW7oXDv;IhzEO1 ziPVyX1t|Ep0~8PtGBec&Rg1@8i(dF@Ww!# z@|M;w;Vmr|Z|VC2@e6xPi&<~!G*>??b@iun^%-wzk>@Qfvb?25mbbLH&Rd!a5fAp3 z7AbFO{Sw~NV)2&#dfO23Q*Y_Hy87|_*9%vFB3GaBmKJ&5(&Db((&9RAX?Hq0cOC<8 z48$pKY5fx3(qi$JzAq5Ju(!1Mskii8UA+iEU%2{nxcZE@w8-<87FpiXBFkG^T<0xK zg@^}xON*4Zw0Q|{X|Z@qf4yyp_^G#alB=t(4sb49{lQ#)##>tCc}t7CdP|Gzyruo= ztE1;J@Ww!#@|HF);Vmr|Z|VC2@e6xPi=TQ+C%L-n>c?wYxcZ~H`i!@<$n%yKS>Dnj z%UfDp=PgZzhzEO1i7n9w81%#fwu+XGUY98Ucy^iF5c3&1>*9By`|-~-qLei{rHoGt3QCNmowhd zGS6FDW_e4?EN^LfowqaD><^|m46N^j{ouD)3`FpuKu<&3wq z%=4C(clDN**Lh2e)#*g8c@VrY5~s|i%}ba|%f(#!zDWGS=F;*?bLlyCX?dNwG#Miv>@F=+?$YKZ+@F8%ekG2$lf(q$6N4cK~fDGtxL zOUpcWX?a(7X?dNyv{{|bGtrwR@ zi5YuonP)F8v+Sj1mc6vR&R&{~5fAp4mMMQ}`x5@ra`Bh`dfOOrOMmIY)~{jf?WH(8 z<1a1q{H5hx{iWq~{?caEoFMT$2;LZpQwG!aB@CwJVlaJQBz|FoX?aV7>B82pVe93k zQDVkmTILx{%PfOwnPo67uQQk?W5k0Ure(@u+P;Ltv|Jpfzuq=R+{%oU)jrtM33Ov}Y%`s;0D#JxPG3tP`*>xYZk z`i#f4%=4I*clDT-*Lh5v;`EId^B{OzB(72>)Al7yrqyCHeOn~1Uf5(>-OFUUu=Px~ zzPgmHS2HHlD$itEWtmK?ER$(@q!`RR&wH z;wKARe~QbrnsJ#{c`noHt}fH+DwpXWzgEB2f8V9vC_N8_H^$?X*R*{JuW7Y-P2U%f zU)XC}jlHJ(K(Zfkc6jl^*`Mb%t!BKYRi4+h%JQ04SzgoXDzE8Oqh zR*U2G*V{&lS;y(&40GQtb@mrw?lX?lD$j9R-PLhgUFA6aH@Wz0g zGM=_CVLYuCI`*XFXi?Zq3$!r(<;w+T4fnet1RPbb(QgSGE_X+ ze_Eydr`=2VPpid$`s-~&#l`;9T<+d3-2G16ea3%U<@rymyZTS7tNf=&Y2pVU7v<@+ z-FYy)F(RjYsNGBWP^-m<`o4(#!amgMVjpTQd9N1oekbxi<3p|Te5h5H54Fnjp;lM< zP^V+XgZ-#g%8%N;gdeq9{HVX)Hdc)Mr~^23{CC*K|6#@J<2iK4b6B^5g8T&Zo%^s;WLN${Jsi^CS>RpAa$%so);mh z2Ck1k*&kvR@w~hsQ$y9E|E1lxRowZlm5exZhaLE|D&LX%zkeU+_qY80FTcO-&wu>-K<59q|F3`K zpx|wxxK3G8yO*$}){7Ah2kOy z0&k4NDKBdG5?<7L@uI#j4!^J$wJw(!@jCxr79(c7sCAwfwa)UQ)>&TEI^T;r6Cob# zL9J6B)b1rbsP*DO{q?pHV&p+ZnT{QeAwNOIjn}2g6V!3Gs98{wqqLzJ%8^kHqC#(v-_jk= zq_wqyB3+iM<9DHvEL|6L{0#GRdec&1EczA*g4&eOV15p@8J`@?r3Hbm53 zn|S?D#GOHOzBQ!@_i$_CbwUJBocqA%kvgs|T=0zuA+cMb%HjSXfs{oFzy{7y(^Tlv}TIV}Yrvt=;{ib!wZ`!|v-?U!*roY}cK#cvS$nlQfF=J}+dAYfp~q)^$|FRUfbxh*X!9=v;TgYao#!{L@9Hu})y4Fk%WQKp5U}tHaa+dZl;Vi93 z&QeY9vqY2apvfRzEOG!GkZjihm24BB71#%q_GYvoA;w|Ywz1&x_|?YmaAd>9uzbMy zs1B>9$xr$?4rj&Y>Ww+BZ6ogt3@H^*Uk2(MOT>E%ADBt7;&23NtV0*j#6||1IIG?! zjKCkU>y*YuyVORWdv@PInDdAKa{SgR#XED>4_20_c`k%k!Wlm?(B?Vry8yjCWfHEG zfC6k@AKmYHq zzwQ6{WBr$X4s_fYzfyM0{w3^~^~jFdLlKVXAX8c!tC`(ScxK&0E2KP zJg#ge8)*U)WNV0HQeI=-SLS|Z=g>96g0?AQKe%^!AWz%}%77XijeQG^U>|~mqT03X zwByggab`G`b{x^fI zcF8vGC*+Cj8(O?GT6{2q$Q`5L%##{wLw~9S{A94TK@zeH=a~-cEYo3~Fdd$Uzf;fQ4E+7^fBx}be?Ae$i zu1F*1ppfO~aWcVc_zr&rm?RaNJI?oVExA4!Y8l~#$_L;`wo2)iTy|>}7YI0+D4?do z=q8@p%E&vlmc8|&`25xiySDw;Hlg1 zLJ)kg#jiUXr6gEb zleRJS5>qdGV-vNp3C;>Y*;z@4qmk!QZUVBkAt~#TOIjBKhD&ZmA4YuBi&WOh;mBy1 z;4-~U+oVSUDAU6cuQA?AFaWmDDt+*pJn(8p7C)Ya3aZ-+j`p1o64GGV$Ma;!1uKDC z0ok_(Ta@uH&yF%6nFK{hGJUcN225y<98lQCF)Pca*H%4%adQNIP7syEp!j^g7eQe& zV`^*iOl?h;sjWFRwN+=KusQX#T?mB_HnKG-BU}FxMz&^TWMc!6%#zp=rGW-uZcEBT zd5Gk(i{;3a7odkS8~_LB(m+N7k=nor5J8xEu#HW$*SJY)->X>q+9Y2i6h9@9nr*WW zNZMLS3m(B0u?b0L`F0f_=>`F0bS%m^2UxR4VN&RhGQyC}4V#fUj;p34#kEKr+QeN_abx{?6`uiyjt&8a6-9tVz6#f4eh*I* zK28C5*ahGMlq!|3BAlpLK{0{ANzoZFtu6(`8FN{aXD(}|&1K1F`VA24^MH8jEV~d8 zAM7Y=QjW6zB^+hV$Wf*_-o))9z=*_?gjce;T|f*qY--!Yb5h#+_;aQaQe~q?hMbNG zvVhvg_(f;UYC)1fEwDXHKP6 zjF>QX2p}ez9W1LrdrtvGna3`I2i%jV%rh!Y#;Piz-7$(40^fan7oDrM^~Y8z#{DB$ zobgjNd48%U%TLvu`l*`puy|^xx)2s0Y@=#YHmd$5Y*fw2Mg<21>>A@=)DubZ7`shD zowOQIQ=()*saHPt0d@!Dk|eXhjSB4~*On9mwXiA@aBy`7fR%?~UYaQDd zRS)M6Un8+)>%wF?hn;IJtZhP?OdXKoJ$#n4!iKc9ByMAsL`052u;hxJLG30Rys8l_ zTEZ^o3-cn$O(l|Z$NvV7r8RstgR+RHOyig;D!Q7zadtq8S}>fQrW1FPRYWjrt!Yyl z$Jf|)(&uf!wBJMimY=Xbn=e*=892_^oSHnFQ!{OINwK7bF-LQ+Pehsclrs}%zy>th?kMq!JC zH4tdIvX_cV0BA^bY7zYpuRFWqe3kL4d9vv)SA)io^4qTQ2;;U58{YMZvWAkb9 zY(7nv&8IoF`E=(Y^3>&XAw)jd-qWP)J;O`bdzz8GhsC|Is17G;ER9-Q#jv*CA6sQ@ zayeiExS_ho|B3wS7k9Dr;T=dWV2FSnyzg)#^g%Xwuyzm(S6;Y2wiZVqWz&mjV53M$ zU@j)O1MGll;8o0JA3vw_P8F5(oS(FoRN_CBn9ih&()`ki-h6&06TF)55LsD&U)^Eu zJc)1}_qoWgKaQ+K)Mo)ZYJvm_pjq8^lU`Ddr2i&YW>=B z6lu4QpQOaWGa?WY-pFH=j1!i+OM!C6iqqs-ahho>PV!lQ1Iqq9P@ej5E(6MWjJh#U zrVKd4OBisPkpV|WgF}FzQt2`P4qi!(lI2^NmyVQNre_!&(wT$(+?0<3$|ANwX_A`K zRKD6Cl=j#0?WJiR#UhPKsZLtNwUoBCFhQ&h;PzH|)J?_Y?{Ow_=Cw>{=xT> z0eq`aw{Z{UbmTKwW=zY?PgqwJb7->3kI3->Yx8%mO>?R+Z<3>r=XDue&e&3#JX=bW zWlL#JZ7IWfxIA^GTnLvBwxcvDJIe49c9dphN0H@&6sfgnOf`!1$9vh>Ge}Vn0W<&y zECX-^!Ujt=VIMn7lO^^BvTb8j_R1-#9sAfGlKxPmQWR3Njw=OqX$GKI; zItQ=x4RL%)){V&mzNN8L5>J_t;kK|y(@0W9-KRG2+_O88bAQ(RXk~CF@^f0#qqP*Z z%x@EoY%n`ZljQ;>`GsRPpWpKNbSirmJM(j{tlG%u`G04PAUG_bsgYE)amx5E39Y(# zzLM)3=Usg%A}<5Y85>NKXM<^`Z7|8_{#^uq-UQQRn_$kN=7UWzP09o_yo3p+8JS=- zMP?iOfc7LAFIpb*F36q?YhU~RQ(aB@O2xlJ9Dz2ZbU+Y;L*OFB<6zBZ);Rw!jIeDD zYn4lb1e6S|yh^8LXIRK?7Lx7kx*%rc;be*X_zZb9Ivvmm>Y`@q@$=9sWR{pVKt%39 zV~t+qe^OL|7WtH~Pc^xzQ>bwcJzjqv{}ZRxJL9Q+shqOEJ>lbC*}Nr1KjIrnN@X}& z#hT%qsU5hZp!1S2$D}u8*Co*`y*!)k&k=~C5nhy%>VgDcJ|87a2MC^ z?S#E4EcvYrgj6!Y_1)(#{A5L)HG#O3+`Y~@7EFEfxsNl^YviDzY(OSJvd(-9rR-FR zO?8TpM(wfv=l#h(hi?eV-2gkuOz2UsY-;z%{+MB7D3yT z{bqOx`%OEt-%t>&%rFDDlX1mLa;$gpC)15%YXN)6CQx2_6n?k9P-NQa(zka0`KBj?WK8;(*M zZcMJr-CJ4JLbhwpnFtA9l0~rgY=j5Vm>v=3=F$vQ8so;(2PsY8rq`aA@ia?Q%i#fS zzMj-YINHuwciKGbPMc-jX%p|GI`7?SZ{^*Yhp-#tXv(`Yyo7hB9eH=iJzL|Na$m0l z4_N80(A%0go4TMY4>i&UrQ-f`r+#m0XtV>n$|lRgMX)i#uBdE*Lwl1lQG;9=9&3gb zgEzXsX3f7cj>uK3J^-6(;vC2XxeBB`{HV84rrinvRv#v#$Nd=s==dBrz7k8Vfa zoz~{>D#NuVj>c&ehA4=G3PV#I(bebAv(M-I+r+6cn{|;^ATf}2MMQ$x!$*lT{4Lo6 z_(}zaemQGN)BkpM|A|XxV&yri6$n}rw>ckT4w_O}@>ebYGBlm>{j_<$pEk?))1LZ% ziu1;w_EyH9c_6znnx>3D!%G-{+L7@`H7Dzu(3z0Gk?K6?Wo=%$`&NO7>`UsM5;BsD znV|z#A>o}(w*d3V$jFY#$6-{Ogs_htP+3b>vlOhuw6{(J{EvTK4nQ|TT6Jol>%g0} z<>`%$&RLlxu`r&!Hi?1u?jb(O@ztWY3T~aPP-;iUAF#YIA?e^%z&h?&V;UjOf%9}1 z>-y{2WuMhIOy$|Bk7yEDCa7?i8jC#2F>EphKZjM5DS@oa6_EtiX53SysZ2Oa%%}cC zKa#(tGO+T>I!v9Ild5w32vcWFLv5aEsLe7BwTYK7op%kjw{i{5!`Y27HRT!_Ucxoh zj$A`)?=rLhOaM<`Rj%+M&=FRo$uS@bUC|=;6C!!-S9(|Md*o28ci0K&OZIK&Q(4bo zXWB^^1~@_ePjh4Gq&I;ppa|j~Nyq!xube0O^6=&4`5F(-wL7;qP3XaDBVd3g;r4;J zrQ-xj%qsAs$*xnjRjO7>Euyfoo|P#ssV1(j!8GME8eYO>)Q((6TF`YYO2CNaJ{Td~+gJ^? zjp_hFUycWB{;QQ;#0KCSN%ANX>`bZxU`Yfs#I`572drDua<(=x$O{#FPvs4QCGZAt zIV;K-kT<}Njb}|`%8?}ckRQ@zsT!-eW3{!PD2mXCQOS5`_aVFS)Q((65MXGtW)fRj zqW*%#&j8lh^McH`*52nzhw}S%WuM{qp>W6burmcN_wZmrtM(M24cOHShbZ9yb4Q3o zg-S_=mBSN1Sa>*CLl9!DL4vEeC!(^HsR+HB0PcM%efSZi&N!6XJcm-7QN1phKkEThmIaeduwv+P)pxl1j5-39I;hqBGio&{8m zLJRG5nTkx5TUsPUjH>C!TuT-I4ylID+_iikyF|*<#IvUKtP(#00ULqE-R{lM&Qqpr z%Cl>}9I~Ip72zw-lt_Xs1yo*H3k<4{goM?_nQW|J4O)N1tIN=L#`e_a*`C@g+f#dL zdnzZ&ui3t*Ea1B_{HDB4#p)%@PVLC-M2|r}#U{W*PBRi}z-fOVp&25jt;>g^2%hWh~UU49NeGCNWC0F)qNkb1qRhZKbF+9qI) zXQ#0MWjsg7zLd38Gl1^y6J$P>7zeA77uMgG6ZBxfWjZ@4t-gAY+1LKvcEy<=;(X{u zX%qvUJkzf>d7&RXQ>gb4|Ei)zy_R)l{a02ywyxehsoYg6QIW)u`dkLr zGq$TX&vw;j*{<4C+f{X5!_{W{uCjpg#&DhTS{198Fk7`Fvz5=c-I!ogQYb6EYW(9W zHiATyY(RJ*tcJx;rbzB?`66v&{&r_jrun(ZzyJi3V9`kKtj(|1vV9|bPcGB#=hpbL z>5~o9EP^Y-Hjz`<6lOw0WvwuZoRURZ)($ACDB8x^ZjHm!%5!_#;j0mp30Y&a6?wr) zM$;KMw`Mfs&J&2?euE8J6(H~9GYUrB87s`HvFWmC8LfgmHaZg~#s@d?|jS>(pk#rD1IUkLAC}IUl zXh)FU#huhZ3o1rl(C+OsMxyjy8^GW0$u6~`eiR61tYmGTm8{LOlC`H+vU;Lwl5HjX z>p%Yfm(vd458(L5K_O)&D^@SzC2L1sG8UxXr&tA;z%!+$GI!S6-9CT=#YNcuKDGnA z9axaA0lo*L>jR>tTp+y#-Yt!#@S+LNuqNQEkK^bSYd$*33f^cs4(2bSU|Cx)sWKg# zW{~XTN~LPH0vL=8hOd+nF=VZi%M}?Y6UbboUJif z>3gfVlOg~%FrqW%h1{(CZ5Q`euhw%Np{WB|KbjR}z^>NEKK@VeYHa0@cc@KK#5!b^ zst9fB6(7;Iy5!z|f3<*xGuD#wTSxn8K+#E=ag%+oO11{Q?5Qg%BIbB%AE@h4|dA6DW_bq zdI_ssJF?2L@b)eXCY^`3v*0Pkm~etEBZC^%b(j)jB{)2=kDhs*Q`!1<7(XESE5R26Y?0m1@t7;Pq*Ct)8%q$~&A0f{>y2x5K zagEfaW%C*0Z#AHU`?HU`#7`;>CLydMk{PoRBkR-{J2a zSECJ-hA0dY6j+CY-Fdz2fc3nIdnHk--E&r^EI)RK^|B8-8Uz}f^dvJV#ZMDfl`cv8 z8b)zhfS54?ws}UtHp>Xuo*Dt`^TT`EY$M>g0P$cWV3#ri7OR(V0(Qw4aqZ2?0G!g^ zm%9LvgfVVn1G2mUAHAz^7u&YB*@{4uhU-!q0@zLLpoZW!HeG4HXEq@J-`emsy;6(D zF)2R@INQ_Gc5zXP7)@+jDz{_=m2q9o7qUVSKbMP|&~~spL$L@zMnXa`B}8(cS8)eE z;4Tlox{(u*04-Ov1vm{>Bj^J}R=p>5HdeBu`c0-F6(50y{tH2wf)#B4OEdmi2H_et zV}ioSE{@il#(Cq8luZERHx)nE0?cw1cv>t^A$-e=QpO4)pa9F7w#2g_MDjGN_^+JBg_-Ng7KGwe9S(YvNl8s*`N0TqX=nZ#(l}~GUZ9Ob?)~uI=N|qj+ zXa?(wy9XsBXJM5d|F5ye>Xw+e$ra-Wi?9Cx{2d( zS1+Cr)y;TIyF71cm*p+(65i4YlYWS;5_ zBqigDln#-2n}8P1q{P)!^_?LU)1*2ZCdx4jV{cn?3#f)gBrsVL5#2p^n(1vles#_H zEsZ+(#PRvAte~K(D;Rxn_%t#8sQPc34GWsWJ>~Wr-irf@i7;HpJ%RRa4_*2knfD z@a(t`$j;ziq`OoS)r{=pc~OamRp_lR*80^u#1Tp!Vi&+XI&1rJw_#mMK8caLSS@_J z@nNe}wFaQb=nIp284a2Z~?GsYE}D`ZFHrF3$tqWqF{xga^7j-_7f?P0;6}{)0`> zUCIPqtX{$e-Hlw(^ypj~Kr9q;SqV^%E}LAYETIpa-5Gb*d^BsAldphlDk4&d0_jRa z0V)ARVs?(@WFRjQlx(lG@}ZwIcumO-uAp)`7nVmCldK!`X_wZsdYqnf6UFW))A9?l zH2|O1Q&{FL2@ls>#@)~x@yOCDyGuOZA$Aa1Y-2Sl<=j3Wn(V)b^#jY{x5zy->5re- zJXLlgM)o;0f6U$Uu|i5GzmRT|p>DAdik)$SNWI04p#FfRv{{m!Sd$PYKgTeSlGAh z0ZpMNOJMJ9VsEU>&8-)fRDrFUILxjiW>aY-?poDBlP$`?Uzxf1Kh*+`*~R{sSdl9| zer99Mvd-8Kor}HI8_2q7%gRMw#C_8%|2A>o_Sw_$x{+I-SEMK(GJ&PuL_npz3CvX$ z*Uk!jA>&k(;?9uAl<}-#0D6}fch&M6F|bwKF=dlYpya_&a$|RLZ6a0bCCc@UO=3Pe zm=%@hMa1HKh?-t4knM~0KrAGhT9($C_DSby!cpx7<2SUwbzS>7^TBd%jM|#&Wi@k6 zs~~2x2H-%{X{@ioeJCuBDvD6~uzH4cL^jn`Hd&$zYk;3yUxVre>xXaDBntkvx9766 zr|->oo)@(}t4qU6dgo-DxZ5ks8R7-tpY=1I&cS+TdUKa&z;M1zTvur#5Y5J{;s~uV zu)+A&+M=~4I$C^fyr0;_`STf9_rVlljqvQj7y!Ghv?GJJYpZXu0`)RVcrDj%xTHDz zrVnHaBTBR1t%7JGqQ`*Nfs*MA26|8xxXu?KAewkQz@myBc*^$KEBm}+9 zHDx91?HiU2!m}&OwdA#d9a0M{;{LE(H+DC0)4&v!CwTs89n!+g^jnJppafUsnnupQ zHhG4odGSe}9sM|1FQ2roA2_U6PjM%SfUIHaI;=Fz%2*Wt z*9-kX6Jo#+_ebx9fkjzoiuK)zYpVG8f^0MXjtsVjxc(M~gQ+pqFSW{P@ij!{GL)SePSWKKC+V_=lXR!U zNhYT4b+f}saxr!u-ENGr$%!S!OH3^3+680Z7GpgBzy2Mk1jdPqj-s79$mK}+1nyn_rh#(G!nyYi~lZcab_e&mp2ll%NmK% zCEl()!4_vnVq|0NgJ)xO$=MjiOU%aT`UPX(7Gp>A8}??9{dZxDGxHm|y!j2?^!$cv z+2ZU3he;&s5=i#oQ4U>lltb|nqa3{5W1`( z2wmcB$P;XFb_hZ?#y)r&LZ6(5P`t!6gnqSP?7L!YKXQy~#3YKJe-F0U&p5{WJjZxH z?HIq3E%vjP@ku1>6G--8?|7f|ju$WC9q)?;$=(*piq~a}{m7xKk<=Ntl+py1b z8}`#~!)w{%tle-D$*NSFR+BN&e&V} zJbO!@WpC-TUK8BUx?A!=_Q5`vKIwBQUc%?nFFu#|1=+FB-WO!YPM33h(PrZPtMSDdr%Rvbbm{Nv zbm^~ix>QvH${uWW>62EM@+GV;{bF@_UnqNFt4lw&x}4*Sz}mkgU!1YJ^m$g7KFjLT zXIWkP>#QzGkbSV%rB8ZY%9rrE^o!T!eL=SWAzwV{NALb+_~MM$rO)%a^mp~T^w)V^ z+7y&M*zD3L%`W9jm|gnC?DD=)_QGbDe)u6@Jn2WT|7G~%jM=5nGrROzW|uz8?9yLn zc1eQlgWWDe((O{dgxh6U+%9hmvP0VK@^f!=6+d}XzBtUdU4}fj%Wzk>%W$3BrL7ZC z_F%iqkhHs$FJX5X7Q4&)LfH%3U52#X<>%(;K(WyrF-3|V%U;X1oZ z5@a9jcNvm?m+~e2F2mw?d0&v7^}9^-#r6Bw7l#?Y%aG@H8Sd(L8LsoYbO|Z;Jc!&F z%94JU@+JH(!{T>&UnqNFzsoS|cbVpkhxe~94l{n2AWf7{;=A(28NbVr=XV*h{4PV5-(|SY?~(%9d3d`q z$R_?{Vv0GewRM+lB#(SxiOR_ z{Vvr@_+5s@@AAG-_QHOb;irC=NxrE1;_+JEk1x*nU4}fr%aG-F8M6E?!*za_B*;G4 z?=mF)F4ar;U53T)^1dK@vEOCJAH9kD^XhzY#_uxZ`CW#)`dx*M<37XJ^12`-(|@2y9`-=mm$mVGF<0(NrLQS{Vv67 zl{CCmuV8rjIJpI8-xOw#5AQydv5y<{+LZCQyQaYG;{!Qp_PHbO#2P=J+2x3q>XAU~v! zpO5UeX!}_I%kOJQ8epndFu;7A+=906i?&xIOX*Pj!} z96!wGBfBx&KGqTQ`y!H-nCcZQF&`(l!0r3O?M+NEFJYoCFGjR!SIox;G7;^bzL?Kv zb}^)tb>bzc^H_3gNK0B{>Q}JFe4N|@Y3~bZuWODup4@#(kdJ4O+l%pb+8*=qflR#3 zG01!_ke@Ti>nt)!xShwjTf=SABvZeFN#^6^7Px(1xV@!K=D7^AxERr($V9Yz zI%Phe*%gpBBp~gvUYXw)ku=NHuV9w>IJpJV-WSqd*DiBBxqlS~nY#F&;qA0x=HmmI zc$;IH`CK4BXOP#KX3}u`Sl7(&i%8mL>Q}JMe4N|@x9xV(!!ZK3)2 zKqlVim}ov1$j=$%bvBwb+&=qHvbmT+7IQ|LBGX7y z8Gh*!%tHzewsH1wpaGk6k|Wl@j(Ah?;<>I{TbBF z^wSi1ewrfBPg7jwrPhcj$)_hR+PE7;_mtER|w z)fD%2)f88`YX10D6(C!}FE|e=w??+4xu$syb4{_BYu*^yUfEnz%$jRfXXxbm#mbUb z(8)P-O_6D?De}xUMV`5)xXN5JiMsP}cWcy5dTg54@YocK$L5Vu_hOGtE}v{)mru@l zY>G^eO>tk3O>vdS=8q3Z`#?6m<9Y;bkM`OWNv}=w8eW@X@!GsGw7s&|rnuN^lS?S8 z*Cmv5UYjD*Yg6QTZHhdvO>vdiW(Ia2?YSwEo}1=1JU7MSxp`yQ9eHks<0qEkOgGRw?n({39#4zWyPGcV1R%(aaZ+g#^9>LT9prDJp>14t!)Ffh z`TgkVD^27l58q#_E$^P)UjxGe;Inzy%X}T%$OgBZI>88jx-TVM=AMLs+ zldhZQHC#94;<|ZXye&tr8$G-?{r56RE9YD{Wv1(%M;O(P*H)Yay)4Yc7rd)hCZ;ZDi-_7B8itqaGg^)JqyD2k$H|2eOH)X!>=Fd}1 zE3%N})_|7u+cdA?w<#CD%^L&SEBkHAYC+p_&Tms@`fbWQzfGCvw<+`eHgjP6XrE1) z^w~78;j<|hpUoSC?Z{`dKb{ zq;0}&qB+AOf&(`~LWo;rQFjhyIjv?wT^wT~p?{ zYsx%#O_}emna0|Akh?Y3COtLnYj|qP#Z&XfSUdLApgTPN+m`WvZdr3Yp&pLd$F1Qf zQe$^-u@?3Il)<=9AbJP?)@w2oK^(J{i_wyU_` z8uW9Bl~M!0$I~M5u8*g?=>u%ne5Q!cvqnk-UfCg!M}VQiTmg23=4~JA^zzppmUBj$ zGSf&?<{4?qJR?n+Z={*Q+DE%*%A|XyeGT_aIdac{d6cC<3kC}wwt-BCD)447oiHn( zb&iQ*Yl`AM8{0}_!YcOKaYv9@@pJ-oA@-69B;ick%z4#}6Q~L;%F&PjL7Fm!!o!e)uI} zi(5^w=ahpU zw+6AKU8a2vyG%K<%M2EF$)4DSEjz4?{jr1G9arVyxZcUR@J*}^`;+VL~^3b~0OFNB^r0aEiX#I5e)+z3+}ix4u(tYalM#2bFjis17U3Hvw) zkwos21>2Ryn}#!_ioj3kJq;Hl?3`Vu%(Tmtr*;`f*z^MbIbl4t%UlAmkM_q@NqQTLqrUHtURbwVqEm0SdG{0a#!h zO0~0!{|49xAozJc!2Z7YZvcDfVlN)7Q9#lS5^&Pg&JOIz=svb=Cx#Rl%bTArVICmW!LR~`QrHUnw`^0jU6uKPT4E{2W#DmA;=l3%a{ zn59TLSTX=jM}`9vCc**5s`pYQ;lhr;g4 z^e)7JIloGk=~t;v{VKOildD<7%8x+c(GHa==}>83!=X}*94f7)$&ik|jabFTWbg{i zjc7-SXnS1UlC@EVqoCDBOg-3C0gdk?rds2YGTUGkKgdgI-&ooCu&cJIeK33R-&h{$QU*w({FPPHyn`031J~Vr6s5$$dvCS{^Xg;}w&TsxjNf&!M5D&-9|e zuY+}%Ksuj13leeJ@FE}|oZ|D;1xQ^>>kol|N=2La#_jP24XKO&8A8q3PpVA&Np)&J znPe$tR+?GOx=(%tP>*(;R7uB4`x=guYUDVfqT!?&s;#+Bv=vARsM^3=%GfYe+jiSn ztgUT^Ey)JkfL1D+hbAz94MS>4hY}t_kf-qnU^dnYyr3CTjT{?;i8jbWlt@yeBe$Tm zz76z*S8(c}rq9vK7Tj7L zx4gKMQO!9*s!T^nb?OM21i({A$Yh!}>j?P~06y9UQYBp=?Q6I|s*ww1XSFYYXlIl} z5gm|3w?d8rRMx=*sDO~u5bxPw2*w(#n82^p5P@xw%9VjbtFL;*XYFQX$5Bm$W(Q|w zbv(-VvMyLt1`sX`mdUr)mZH+Yq?9#yD~BuE1tP9Z4o4tR$!#0os0t1hD_HIjpO3a} zE|QJBAjBRJOTF4IkVEsY+kj#&gFXPLMsr>IyfQw+BLs?}*DAaj`G%Si8tBZbcvi;k z=JRy6pnh}=G{3uz^WQ@-*MX`0pXEYlgTw$POwX5}cNS|2E-MpgmsUtyTaSe+C7ksq z_lne_F$uP={fnz#h{SVVmMYWBQYE}B%?*>~Q!mR*#q6*D`1@bRNc?F3N|p4lbg$uG zsYd=4Hl*?(T8f4!T5!h6(91B)Ui^$A8Gp624bTNBP*+#G(As$%A4;<|d}ZmQvLRnv zS;v?7K=F*vGsbznjq{|^)Y#^PAgPF}(>VVsj@+8I5+G1LAGqn`eCPrY zw`xYfEIeZs z-%CIt^uPvuRc=f^#Iq%|smVpW-^afP69_5j&_ZwGiq!Du-(6g_s=FrWB0%WcyLj*) zdC-MnV$OwAWx8;xgbSycAnbWAoa)qtlOHAK;rZ54BI&&8Uc-4)jhr{ERn~uLN=HfQ zn!q`9-7swJ3+RnWKah2JHolgm9pDi=%{gaQ`aX6ZI(*44 z_*+(S7w4d%^YB7j7PWOxl&4?b*_$&@Rhj0gDq)_Qib8E(+33_ebwLz*v|p-9`lY(p z@Jm%AzZ7XSB~Ile>|gXNL_?Gq%Nc+k7^Gk`a{4IGy}Tc7?IFK5UVUf z8@Na+LOd{N{9q~#q*5e&gB1|l%d0MP#-u9Km{cW-tq8m+trpQ3n~+Ss z4-`CDue`QTf;xJw%ptZ7+*caaZQ!xyR8TcyYpr6dgSEZA=B6@31Dp%YqsqiNQ^OI@ zUdK6qyDqMsVr%nxwz){wf9KOOMN%r*#Uq49BIxDe@t7$~$Y^FI{ewv=)oHtc?~V*# z#34Ej66;bSfjgQmiUwd5*x5Q%SL@(U`>*ewr^ zXH;6KB&-6}gvZbrvN(_%e5IB`V%-N4qngl5!0d|Tnr~uX!*ogLL0rfc^%m|JvRa(} zi*%LLd59ZC)q?u>#wriBsTVrax)pZ8D{FAT1=m(2qR=y#Ab)Fu z+RkM2qz*2<{b;7-U;OuRdtj%iedskYhA}}Edlx3Dn zf(NYQsZyJ-tUAuapc+jvh+gyNaulC4WmTD`tSa#iqbU?WHDyg^{j={d`U#3Z+LKi$ zJz1wG(bv}@cwhevzkh$v$4PxhZ`WIZV=zsS7GMBpD(l6-c{IIb6`Pn^7|gdYUL>^` zCC?((IzXbG(8PC9#Z&bVbhQquFxeswcBhSv6B>*ctGi_RIoDVisO&8jg%=kYZMn}| z`wdtKO#~AP4iIQ*1*^bBg-6PgW*|VJAOSN;2!V_L@8dI+O%z^+z*auL|B|D8r4W3t zkx-66_RnpDit3X#v_>y?>jUm+08$!a$rP3UX!Ugh zvTPrG1FX8gL3VE|;Tv9Y@UwWe|Jy(R{J+2cw*TXg^o;nQ;40-nO4Jt~ z3s)oO5zrz*8VNb&yR88a!FL-#)mcK07_72(6T5Hlf;K(vIk|&6&11yu{AZKpvHxl@Pt+@yIuDZ1r zWN%YMAm>VZyZCMC$}3RG+BOorK&P!i4<(YO%SgTo6|2C$otdOGXw#Ht8!N)@Yz=|e zFjkqTctTbhZp~4rzImM3(lIKEqoYh_NWyY3<2Ppl4$IUJQ>p?L_9kS2+)4TdHg0pF zYGmJ{a=Xcf%#qPbG!@1MQXk@a)CVCd7`HoE8%!e)Otw~8pM_(RG>XK+3(bz9x~Dg- zeH7g$o+5M?j#!u^us5*>Jn!HNUdVqJn5=924TLm{jycxi`E#jq|TZxSLv4}TvY&oX_!4&^ZLMnX>E3u5-Bg?g^<0;Ef z^KUIzVt)|lkyWtg1`|e+b7_VSWqViy6{|jW1A9(c9{35vG--A)aINy*mqX~-4s~$HtsueuiEc8@y41<%2(~q^1M~^ zvlc!KjSQ0p3Wa5mkZ<8kVDMBZN&JT|xBur81ueHGYgk#)m8@7C-J~`MaaLB)P2~_eMr7 zxRc~?rV^)&3{z4ImSzQoE0fK@I7;^`_OV*`&OWHsz(E>Y%T|J}ZT2KhOT?rHb3bYz zr%5bn%fQg6IMK4`4RtjGq>Qst!+RH)!N25uA7#iqsH(r?9?6?@Kwlbq%G>KCnd!^0jbvUoH#z*U9;5rWEHr?edPFq zNh;+jGc%sbyoS$2#M-j;(&Ud^%fUQc>r3l;XB|`ebq4yKdZi}NuRcM)`YigLx}+{c zzZvkkE&8QQQi-W1k43+cIf`{heD19ZEddS9H51g4Z)(W)I`E1n22x?Vi92f`P&a~2 zbtV#rVbazZ3=j1t1-Rl6d#E!RP-8MeuQu(hxxKNP*4|Vo0FxyACRwC91=sDf6V#Du ziJr&Ch*9^Yrp!HX;vHoYIPL=;a1T=ao90-=^1%)7v-jS2V) zb96LTNh4d*`&*L z63K`hNP5-*(w*@uxOG?#KabO%Oxe>2{*|o;vyt$PTN7*+79;h>$Xy^Cxv)I-tOhG2 z5Ub#d@+yJ(=rS*5gJ&%%`gH~po|;i6knq%sl2R7hD!2g>&H&MEkuYULNlZ|AEE10F zCz^}SN(8kIfoalyfkJy*k979vgOq`a?7FA}cf9NbA_DPXQMtOQXX{ zCxU(4#&@-rC$*Mi)y8Alk@Q)}+gih0;7J+uHhz-dt{A;cr?*s%@>XX}8#T!@1a+TZ z^8JO1up^5TaypXL8b-mm$UWiKn$JZom8b)*ny^!T7Grv<$!v z^Bqh$)Y}oj)y@<%gpSIveQWxI%2bm(tA&bgBgro>#KW`B7X3N{4^KTU6L@&~s-5mE z9-g{cF2lnaIJzw!rpzpfIVO+A!;y)FJXceEzz6GkY)q*ozElMU>Miq-o?Wa;jc2fG z{nj)Tof%Zfh{>g7Q}qEHWVm!J&5SN5Ss9qQwoap7Yr2mev$E`JV-^Q^FI6#ityFN; z=XK>l)yQ0;RsjTV7jQ!|xwl)@XKQ0dRuLjZVcbsx$n6~z>Z2PcB(_N~e~2f6+M4^Q zn(Qj@lj@=~L(Mg^=SPiIO(C958_$3)lsaK`AegFxrc44kYwPAzmYL{A9%5~AgZI{D zUSFz>Icr4GuQO2b)PgdBil+vY{wykCyBuwkA=mN>tyB9vNB*! z?hj-!EPj?c|FZQAO8AUMGxo9d)Ix?TfD<-<#x=$yx4;NlTuo7Co! zY0QDLcA1&AWY|7~!KmKV*aQ^pvte=M2BBvJYvp!IbwhW8OcX{98m;rc@VihN_@_8{ zyb^V7_VI)oGlr<(x{Lb)Y?Ur&UdItiYuT12so7f!&1LmgTv0NA2#A!^32{#o$EW=T zC`$$eutNR_cYrm3Xf*U-EpToyM`M+&Q^k*;fa6(zhkl&_j;GF!32;31bqr_0@zm6D z892^i(@oK_Nt!yI?doVou8xBRZFUG!*4l(!U=p$!6_Bh(#wURS%@*3ken6;08&^|S zXd6-hG}%ANy98yV_U7&ILKJcm4YuSQtn@CTL_-yl(%OD2;#%Zi0T&SVGg}7D(4iPDI7y3Y~*2=O_XSLxsfix>~>yQFd zoLpP$OTs1_Q*>~-HAUOfo)h=l#7|qZpim&~tkfyFgWWLJD=}Bn8f&L%aCQ|}-F{*4 zB^cREn@O4sGf6XTCP^)*@8asSPLd|uNpcP(A893Nk}tD)wwI(Cc}X-Pfn`N+7ico? zmA{iw({>?!eQXOsmW`Wm}zC-r-BFDh_glMmnu#bX{?jl3k_iyYmcNfrOXXo)BI3}I#MSBjYX<=<7=mS4*e zM1Q@G=c)mBP&r55 zWORqd>03pnwkr180-mbRTsvBMLbX*sclpzGbcd&*GQ)?`zUwVOcCpnX$e)sh>V~x!T)^?OQXD;Gq7-H zd7`jHG0aVX9^Xq24RC34Dc{9?@8fUPKyTtWl3Q`KGR~*4BDlDyReo57n)G{!mCD&B zJ&`{F%xN1-lVM|Na%?P3;w?mHeJstbd@OTtbz8tpzJlo4PL^imWa+Icj{rrw4}%(# z*}=RNjXCitGogU1EooEt8I?yFi=EU^q-qnuxHo`>9hBBDWtk%ogyX3Iedq!R~d;IB>oDFS3I{n8}rIRkG$Pvkpn zS}{TZ*aoDq0yO^yVA;nVY^-#$w{bJltn5D4RM;<1U61;7f(X3=&J&V z#7hZv1W1J6_4ou!n<*z*6&VWyYXD)ZcIqA7Rw!6oa?Rg%7NmXPtt{2t+CIJ);MIT+ zl6~YFWJIh*tC4WCF-SJ40QnQ}oHo%k877)0$3)YdnrMo%E}G_6E}A*$x-EDn-!=4X zA5Amz(a0@G8)Y9`hb=-vTYpztFgK^`-5C)WtCf%ChGVkt4$+tQ{A?o zKB&?+|P6;6cE^;@M_LM z!sJ|aSI_^2nuw9M2~DB z9a(q^3uZoGPPh&Pf#?9yA?}@q%Gn4H4gM(NI2;+xgoL(z+;QnMIQ}*+RI`hD>Z@2) zJIihKE~h2{5XrA#@DOJLf97vl2YR}Fd{Xc0}txlAUYXc zK6Z|bJIF-+C7HUc%7DUxjWpyWv*ujV+k0VO7PJnzrk`eH`XSPRNvfilGN?23qRJtw zsc~Y6D$i1_br95)xd$`oU{Y8aUTPr6)>hjlp5NMVdSy|V#0O^YQg;X@*s0!P8RuC# zDYgMAopr;wQZfbJN()uBlRXJ!iQ#nC~y3J;*BP$V!w>Y8&1D!ti7YPA)W=aYthXnS{a&IRrG@D)E$y8^iUL)opo-dQ~zj&pPylAvdxI@~7=r(*C&`8vCur?9rTD z#fpSiXoLW3B^Abgg0<6Dq9(&i)Z|!+no}!LdA@R*?Irp-(%lwoQ~sgy+5Vws~vHqY-s8j}PaUEq&MUqKckm7=FS>v#_y5=?kQ|=coPb1 zkgv7f_*&K(*v!wlTpw-;ljd?MrAnY|*-UNnQTR78m%N_apn=hRujOZ|S5PN1d2wN5 zmxwk5KT;2I6|?@T!@9StW{+LyWNN0JOihN9smXCNH9veqjV*)Auz3y{Z;H)r%Dq%R z+r89|+)HFm8dhlB1KjeLUvI3b(3=#y`l4E2;9!Dm*_-LT0~c`IE&yR~dQTM|t)`&? zy@%KXosGa$j=Kra+gXQLPR@Po)tw1_fF_Mo+{ZTx*K_B#wIlaZX{BvKk<#OBY;#Tx zaL|jfDLInHv++5#L!3TntruEShH35A8voX9vzeKiO<*O1+HNf%=1}Rce$%wmO#lu> zT5g-lp_}-m-d;mY=su5}dsDyrSNm9eE|ZwkU*p3odc3dleih1^|0B9K+uO(h1_ zxvsZ%WIU6U7F2EmO;?79Yg432w8Bj-Vg;{EQRvmQ!L(xRfzr5pW4?vfbS4Lzez3JD zMEXc;i9CTZwN&Jp3UQVt*0`rj2K9hViV;F`l)j#eAm{4QOY*|lTe z8NsXz5ZKxLCJF(Z4$47cFy(_jE>|;O34x{?+q-^?fNEvijTJ8lsCv6w5l1LYO2^~E zB{$f#EX}wjw%D+MmC1IAJe0wy=u4W--<}A=DW+tX!P=3luCm%6wHiEY8W>x}4VDwK z3T)>8QbEH#=$NolSu3_m=*37@L)V&}VCoTqab+u>2SONz!>|?)Up<%4Znk7NLo60O zb};@Bi$a#_DpsoAh)wkS>i%354W?anZHB9^&2iPWr>?sC>{y#N+f{ca8a&ce*QQK$ z<+Dw7?Z{L|^#;`doqvg6tq;XI*2{;WpBn=o{?@u$KvQYbnzCE&u!(V#e?OEVA23hIEG;;V7@)#_Nq4MY3}XrTX=ir5Skg>`dR z)?rXMrz2|3(zaA=q!9E!{1CJ z#6#26r7CW%G;pqCTg6RXTUSJ{H!9O9kr47C)4o}-O+YFm#n`6^#6E@BB_Vza0r+Fq2Khmbzrfiz!vu&E~$fn8uWWgeZ z8;naVUhSO*8cF-u z#NaFdAlZqdDre5Qv7tFb1Aw*3N4L2hCfdO8r+^r2t8vI`|`(nzA}6Gy&s*G>EtXuC1o;Rqn_&e}anx%xoT zo#o!OHT=D~qgRi>#Vk~5;wyQLsn_J+DB}LCtp`|IZA`{C7VJ8HzP1LF#054~i{p2u z6zRW0*e98xV(bH!Yinqd}D32irC{X*yFpXDUv#qOS0`$n_S18*K4tg zI0A)NRzhKg0ga!c_{(!N;s+twoAVj^L88xD^_E4J*1X$iv)Az(`B-$D*g9)#wX$9G zp7~u|qO2HS1o|^T^XUA|TqNAB6+pob4ZrcaNga<%ZwiGi^6f+1a<&B(4IU{Bj?Dox zRiVkMAu4cL4WHtHMkLvi*?-~bMInCLOx$LeiQ61Aahos`m*+ch*>2)9A^wqO;x=U_ zE}v~CZbxR~t;t>Y7E*}>I}80vct9vBQ(%_K2w)}S)|5bF}2CD9jNE9YG2eUZ0 z(rN-Lt0xfn^u}2*4hmuDwzX<53ySjT#wyKRqsDpB7Hi^f`TyQ{;?|TWLgaPa2T76% z)&y<}vzF%drix*yYI>wO8d>ZbAWwCoh@(-Gl_`7`$CU7t1l8n1QjK$O`3d-Lbq}Si zyI2EypAc*s*1V7Z>kYyDRT-N`WXTG-lz$cZEMeB>Fu4;e2Xdt?%NDQWI4hHeeB8a< zt@C|qNEJ7}w1NS_eQTAq)^c|AGb~JWfxcxZeJ ztcT-plQaNfA2*(QB7}j5qbj}`w&X-+X(JEbnc?@?M^A zv1WVT&jk8MTHf1~<-L5i<-HwQ-X$)n11WsYq}~bblYa<;aMgY6b4^4BwW+#NU?Z*& zK&?#$x>2#!m?dhUAk;Q6h%F9|Xd*IaLOHFBtwWLnVuH3xHHmpv0wlZlnP{YW2P^4+ zq%nDDHL|=*T}L^jjGMZ$y1rD|Ruq*wu!u`?nclchI;}F-y62qAwe_0*NYGt7Wl@z3H4#bA{ao|ndz zm9Z-HMi^|Cri{zBd*+sy@3kg(O9*e?^1WWilYIItQkOs{7If+D~M`;u@|U- zA(7a`liC>IK~N#*jkVI)t(EO}W!yua2-%*-&|8M& zN&r|9$i^z--b&!jCyh~kb02kay@U&P*2-3$5X@$L(!kz6eG4hEV&Q-Y3LbQh~+wGbddI&Vp`^1SHa1=IZ6Wdf#jU?Hmaq^FD19ymgYC^37 z`^09dKwBziM3>U4c5F2b_S*zP5vR+qt(k{bqro3)MjQ{;TN=zoyDdb4%*f>02wQJM z05tvB%6Nmn;liMs+L6XNLkOYSkd191muLgT)sT*GR#-CcCM}M?x1nGMyGG4GCVWE= zidZIXs!aG3w3;6L(Pj+(Xr~8%{I|s8{vZGSKmOwzVx4_6Q9C>Pwo?AKmYm9 z-(R%(&p&@1U5_6J_%UqU7PwLaLCR+j1Zn#Pxb6j9qk$mzy|uZgmar3&VDaTN=Lf^B z%JgMwv#$c}RHg0$DODOR@-0j@g%S2up4@9QwZZai3mLh8Z>A@0R#$bsqXRt(h>noYy ztoeEpxcXDzdZY`xOS!PCXS=YwdI7F`0ayLHOmO6NMc9i2Y+-^oVS>|M*Dk~B+U0m% zyM)*EJQJL?y5<7vBR#KO%JW)1+wdgSPNispJ3Dye}yp9P@8~3^l<6bvy z+`Ezq&RX{-fvZY%GahN;>ry7Z>e(i~u3eDpUdYwHE){H(RM3io-9iPgqk_{`kuJk3 z(&bo1x}5jccC${AY(#yeXQWGcMyh9fM!Ll_ayLXBdq&RnhwIqD3m43St!d9lm*E-d z?&%rnuJer04gQW?k2H;RDbq;xY|}`$m`3h~T(4^y>Bgp!a}DAmfNSA`S)e*?8tF1j zBVCSZq{}glbk~_iQi%FU*GQLgjnvO}jdY7^)J;8v2ElW7c2v~7A}|rs{OQW zq|dO8^f|VXKF2oFUuPRhA?hQ2BYny@Qa{@_(l5S|yCG`vLoRsIBQ6&%_%qm=_Koxz zzLEZ(zLEYq-$UyLJnL$22~j`ZaZx!_5UxLvs5&p>tBIMQbr zNBSJ&NS|XI>8~@6q!9Iy&XGRl9I2n}9O)P5$lVY%?Hu{JhxqvK!UZQ_YuY)|XE;at zdpbw@>zpHPeTrOqz}<>qx&?NA8APuWKFY)7Ft6a6#1tfx(3fo(I)w>qwtr z9qDtdBYlo_q`%HOl0wu+dPn+{ccgx{ccfpuBX>j8S?|a+7d$L=!8zEP_Kx%!-jV*E z-jV(~??`v5be_YF+ag!WJ5oQ}JJK)Sk-H(+>v~7}S?|a+7u+v(!8uT!_Kx%!-jP1X zJJRQPNBZl$BPm3Eq<5rGc}MDJdq?`kJ90Nf{i%0k(nnk`T<|<>O?yZB4DU#PPwz;7 zop+==orN`r8@ENSly{_lws)joyd!r*uGjUB^gs2EO!|n2g$tes)oJfYpWz+pbG##c zj(4QL&O4Gq)JJ+p`jmI1dA4_?U%VrCL)4#oM<%(T>Vn75EL?DWho@mH!#mR7(>u~% z=N;)!-<33n8#hI+A>|!up6wkO7VpTtkZX8d@5t~|@5oPP%5-rl3m1$#JPE2phIeGh z@s12R-jU%t???(!AL$(#Qr?l~+1`<1@s8XLQ7`t6%=n0pC%bULvg>&!^Pf_86UB6yMJ>oIPD!7GQ1;0j(23p z@s14Fc}G%+`bh7{kn)Z+&-RWCi+AL1hna6HxhY&IPBvBSVIFWXSQ33_0GB z;X3a~3Q-^F9T`&Ik>=Unkzw(U+znB$^p2e4f~%!R{B?(?VJpKsGThTUGF;~!DORT= z5axj6w$PO_k2KFVj|_`>uks-%CGUS*?hU?5D zNl1O9dt^wtN1A85M~1~cayLl5iF@SV!b#j+h+EU{ks-r9GThTWGFjXrC3F?5l!2su zvVr9HSuN0YAL#nHwJ*vBKTd67gFj<~m!ay%Zl6Ha-@pDbs%ne=j16kh{frH28Qd09 zALt+{Rw)Nb`(y{n@3UGU^uG#!sY%@Wxr0Re;67|nE8%kJ>Q7&y zIR_lKg|3u^qsrQ1^dwEFy<=Ei1GBuQO0J!$hJ*_fs}_ zorxp~sSk9K6swerq2V?Squ$AAAF*x-dOl8-GliCaH+k!T;> ziw$1oBKhOj>eu@3yVNU`=HTPD0G9HSv`_Yu{64D%!0rWLFY6`wIJNJb5G49JCj<@u z4LIS2UXqX9K8dYA_mXIf{*)7DcuBMj?g6Y1bd(gUl%u45vZLhpSuMbNFJPT@l+ExMml!>f!XlgRo&e@U@Q`AfPd`%8YG z)q%Oev=}@Z&KXTZ&Kv@P1b+?EAaJ?!v|*lIsj=uM~>TK zSIThGJ=<_nEQXW2Vb|*#PKuG?q=6tEPwK$eLjMf9M5Ta3VE7P#M{3O71S~6P+b#eP z;N)@v;A)7^w+`f%I1k6q^gv)6-wtu*hCv7c$iwl-^(t0dGsK$fj{jF{e27mH9QYT= z=h^Qsh1F@pNs(bVDRK-aMULU5$TytKW9lOvCq>F}(mmU8QY?;>yJ70caiUwh{G0su zBH)^KoD><3lj5F^lOo@7^1pu{=J%KU{V%`2?9YGv`hc?kxBsty{2V!Mi(M(pN%w5a zNwHW??uK2jYdI9tk>NEda=a!*j@P8f_nOQA>LWcSMapB+J=-fm6Ss|@qw1s8(HuXIdT+mt+po^`@h6+( zjp>TG@w6hUDsGsxGRMD_*07J`qhHzV;y7F*%ZEots{=(&fBfD{XVDbX9+M)&V^ZAH zV^ZXMO#b%A=8rGrI#IYh(pgfZoF(0}oh8NMEV&zQy{@yQ7&%M0{_XLQy*Wz?gRPB; z2lv(o2J8@S^8&lQ^^g${s&8Bb$Z~OY8=o&6#E)l!$Yy{1%%P5(!MFFvZ>Q^vAdwr1 zED>oAU2dLtyN?@;$YyBclUg6ge}Q`f$)$s6ifLy_k>M;Ua-1baj-l4yf1lzjkGYocGA=#UnJcWJ4GLT!DLBu_$v3<48LH+UR~9}Y@(Emxgkd=}aXSJfgfs}tait^sXPpuzMS@uM5T9ZU z4UjUz@ZPpPP{KAQXCmClg)+mmQ0ABx%7kg*EV`U}7G}`pkN@+J|N1k5E{`-SlqsV^|7@c|IW{UZ zK@3z@-9_XhA`;43#~{J}7%%r$942w1o&u#I?h;K8MkLtZO2gXtM)m^;#POjVD$HUA zvSa})A=d%b%^;|E)m}!4Onc*)er~L(~2l5SL z%Ci`A>MghsV;*TJC{u=l{@I3ta%3oAjZ&+mP}7^Antv(&tZc>vDTufQY=HGjGC|66 zT$k_|&4wfAMiiQ=g@ZJhjq%Yc6aHHdINxXJ&6!;mL z#qlRN)0t8vD>c@NF; zlS}|3BCo92QQ4WO#SRuW@r@nv7cK&Bv6uF7{_r+99N$7NLSdA7I23?Bj-Lk(&3B{$ z+NkkD3YrTJ`JLIcaV2Co{C>RwwRw91QB*myILy@d%Wn zspovel#B3YS}9*k__#dJl#H%cj;sgw+%naudt5U=l>w!MFtsM#Wf~6tn}u|X)Sq~p(QVKwB+Tf zmb^KOI;T?d3sL8h67n)7A@83pAumS~@- zp*dc}x>voYh?vV~4i=rM7I9pybC83o5?qS!+Qx37eMGglx5_fDDvrE^;l8r zcHcEg7e-mey<^>6st7Nq72#!uBD|bdgr^?VH|#mzwLVpYUx+=Al!2Ei8F>F}8F)F8 zfzzqj_pyR28`-4sO6G*1{|ROg(w$*|Rdh=v&oMO|H5fWjWa{Cn+1;p-3>?VYSgNW)(d8%h zP`=LnlJ7#EBCrI^RE~me?PJFAJ<_2<7A zA<(pdy37zzmpKCJ@>D?GokgHi{q%(h^hn`!nG#M9&lXOXBjI#wPAWJxvOjgUy=Jow zhJlbq$iz>Y;1=qcTNXq0#q*=iy3o{t)R)}^Dv$@UAJpx#?h;iZ=}wCHmrQDHy9jv< zY)OOe;7RL1*5*rD;_{w6a2UQL5S|Huk^(!edgw`OwdN|DXpJ=5l__qh4g-HMS)LO- zv9anI8XSHO0<#Y2DT*N$5ii7i;gVI{Yn~1Dq59I=&$K4G%+N%a)0*hiL;Hq9{aGA3 z)k9x~Lvtu_Qyi*NLg?YyLg;EFgodqClt4vBM~PaFMqZ-PG4X6?vOe-D1$nx;JHxO; zM9i&;^@yrc1KVfdDCCB$Y(;^;>^GVR}yeg%=ow>E&(1>ISeKKD{i3*@l za=DAIrF5U1B0Tf8iT8GF%{IYZ=E`9?>dd1#G?{i``X=u9&J>?|uLe4YGSGux@AWX6hS)LGn7BxjuYnwrHNEx~>Rm>-U00yBvJCg(IorzWKWMBv3 z^v+u9oGl4qV`U}&Pa|4EojeJ`wTdIlmX!@kBk6Ku^>lJW_BQ|Ttm7obrdQ{4i%3?Mr)C0wl?u86j~xvF3ZZ^h{}>hx1T`MwCuUckUdv9 zvgaxxdp@gsu5P7!o&$#4LQ_ijJUmmnAuzz_(vPQTt`Q^Xde4_2Dqj-9V@8>;{@APY4f z+)3_)ubyEZI*fGB&_+_H@|4z*#BSoocV?raxc5<3&OL>10M+dRh`4LLy>FN;Ew@TQpsbMALE?lPFOFHJL1JVA}GnnI(w2_?#u6V^i0097z)?^OT?a?ehqf zc1ZdTHtz=Jv$fi=3m^weN-C4xt*q%r;syt!V7oT%N7_M=ma~F=0ihB#W`ry&lJqn&_P$GzTNSOl-81=m%E;JV5YTvv%1=Vuky)vXlQb0BeBm`W+Ghi5CU ztMOp-)|Rko5LtReS~jxWT!(-WK3TfH&Z;`>(#Aa8WIOU<+|9*x1=>)DQH%;R?wBS31JS~)TGWIZGt>>7|FGFri5~}IXm`XlZwd7DEg>$XCeb(?H8`+ zp49hu+K?)j0qc#i=f?Q-V3Kx%O=AsQy>8VSDhfPY+#%o#o>tmjmUuOl(f$OorlsCh zhSa;tk$P8&vEgU6-qo$N-gAI)TgXajy@zLOy{nPdn*w-ceLXE(JWp_*Re*phQ8r(Y zzVgNu0ao-TA!w}z)fK0OFo2j+ zAL?n_K$(x9=b^($>#flQRH!Z2>P$|7Wp{6-BFL;!<$=`MCA5)FoV%txm4x~D z6AEUeZ=F49$RMnV=LfR-8?GDUU4;$Dg;`0(i@wZodVS%`uc~RCc$J|OuX1$a)u~SW z{CKk}TPXf>q_{0srL^J0v$f&XSQ}0U-U?1+hinkMmty>U26ce7e0EkAl0$0~KSB5d z4zbbXi=_>C2sF~SSZfMoBHL3Xp1owG3=I~?(aVtiikdj4h8BJ~DLzYFpchK7`m1-& zU*!S9NE=R1v9X~*t&Ke4^w%cD(mXbo!V?DQO|sd!F*FY^IKl6FPH(oZ1D`;e($t=! z-;iD!vfRNTP7^I}Vf_(~Ss8&>FO#gaj@wgSnjKE-%Bu`rd6lCpuM&f~&kD<{Y+?D& z@#40KmC}+It7nVJtC5&o9c3#=$sXIs;u?&$uydeAwW%9`k&Q_QB@CsGZu1x`6N6G& zr+~tuCTEb_3_u%V6R@|b{|F50IET(UXoXpZX;#%%1?K;HTYDYAt6cLdamz!5k(k_P zgp`J_q`P{}JSxjwz!aT3A_Hv(_44*{dk}_hx;Pr@hLv$*irXk=vu7VvBe6OS+`{e= z8DVQA3$c}Qc?y+iTDo}Ntg7C|Y#|vgO)>{T1qt;?qE2~eWdN?3E8JAtwsl-OH;)?z7gdq(V6a@o&o?&p6P>xHz8OlwuE97x zy5qMK)cAjGdL0gQ{mrrpc@H+Mq*k#1mj3N5vgz~(u~1iOT%2& zmYFH`U)|_S(6F8s%hwrV`8r1|U!RKQtFz*YI$JHD0Y$e(!<0h4SUp=JUymg6QVf!k zf@_D^l!NJ#2D5G)Z2rH73w5!rmG@MKA>V} z9e>hR;AiWV>TP^dCLroqtH4Cf^9EZ19~y?!A{jlo z8|2E`A{%pdgNA^=yar_BT-+gUs`|N>=F$+|8grzUwzD9}xBKK!uoybW4WrKqlckNo zap1FsB?BM1ZSGC|&N^9ztN^nYsVEB?QlL1*NtIUS+gaSkuuYm?n_fgO2<+nq@2xz{ z5jGbNs;Q?90Ck1|pw2M>)Tai3`fN&FXBz`;JSUuYTP>&n{ zLMyf}n{OMNn9N2hP-FzVSd;vmynAa>k+rSut?@*_fYG8p&Xyen5vt9@ERz%b)XXz7 zGy+AY*$2kpp|mn-$S7AUV)qrsVbx!?*q~jRtH-EE4uGu*y13BBG!;HGrm$>UbDilY z!AUm(Dw31z;z9Y8FI)xOB)uZ1iiab^10@g>Anwh-O#mX(ml=b$Qkyzqc{5D=Twrgd-2CA3wm> zbO`F#r>ZbNLEdS9L!IGosB`=c^{Kz1KI=}ev;7U{koS@PhC1bMC|1ulIMgG91BEv* zOM_luqm@rf~&d!#Kga8KmXYkN{IjTMZN!cNLleF1NiP;kb>yg2Ma!6+>fhI(6;+Df+xkSAz zbqM5T>r-^yStuc4P%==(-};Rl>>V?pJhyyfVifs$X;^oG+S2Nk0XaMC&uH><5eUm| zgBEIHBuPjg=Qdcco@KSqX1*i)h7geYG*p{FvyYpB+<_YQ)?^TkWoMnqPu0q+?6*eT z_m23RSS$6V%y-(pQD@jU>KywK8$`21C*^)-Vm!gVn^OSOFg`879-;86`VdFN^bmm_gxy zG*Di{J)nH-9jAOnKnNvI$RXdjwq2(2%bQ$y82LBk)-oNTzXw2b3;+Yru#Zn_iV4+Q zYm)1)%0ONOmb3#!+rT(e&8Tq*2!V-a!qCLceH;_A$9JK}Q3aX$1Axav9^&DUVDPv& zrrzH{u%_{}if`9jRX}`eHtkF^kBpHeMyZvcyf#X}V%b{U(u=*VbWg%V3@9ypQ}osR z+kG5oXZ0Mm0_Q0cQ)ABsG3^ldRtY5M*~J~u`&z7cOtPn`@7y=C5Te&1&cR#1s0fI! ztFNW{MShTru@NB>#6>I4ZLBTtY| zmCP@%EuHRUP%ymKZ{3~OkrE%!aJU;MO3g?uKTw7as z2(>CSsxP%2QGJ0_C@%Mb9@K|9LTjU|R36HmyihkO&8i0A(dRt=gtlXET{KBNR{^Ly zE7nl@At3B+xT%|;L6XYU2NGD&a5OBE8D^}0;uGJ&&niMq0g;-n3o=l96FAJLXCdv#ju(5Iw0g8-HV<;`> zWCOIu5@p5Y_(l92YRvga_B_P7wI>)-c$b~tWf_R1;?lv63C?t}2|2gga#!ktbvEf9 zdDmJCjG9tsl0KM9Wkr98vm7``i%^|YX)`^zzyGPWjE;wZz<@wRPP@0>4fALSL_A&< z4ajGB$kt~ew5lLm$1Mb&xvp9b+?*$3ody zldPQ1Ea08VuJ|oyTc_GfGh65TB(ORbBa3=%r;G|_Z-oU<1R5)e4A#)otE;zhv)Sz$ zSOmvni)>=KU7W8@J1pxAhh?4Pu&fgf%kq4yEZbsvF0?+{CNmS%XW%2eQ7(c0Cl8FvTv0Ry+0H1g?T4wTZr3EB|&@UsI8`2}J75m!~WgjBR3r zvE>dnZ-G2nMPo3W^0EoTKuF>OTUtn%-N_kwED0U0@eG9mD>Js%f7Bozn1>m?08YKm zc^x;eaZLs##3CMo#!(plsL%)3G3-+NjiO&0H=C*%YX91dw3V?dZr;X=3=jv@CtaMs z77n%WO+5UA-5I^Und>D;5>!nn(O5ZRWjPynPa~&o1|~%qNhiucT0(2%L60jX%v!Dp zsZoB|$0zkl6nYU&{4KOa#UFl7GDI-%J{Q;bk!c#DLZl#LFXONDc`I4(tq{bw@Dw0Z zjdcZyAVe8WKY~Nou^wdkgFuz`^CGSb!ljoBc=6e~?QA=}zIcec*IKa%U{L5T#&^52 zRz+(iYfZlN(S?+vnM!wN-Fb_c6M}KGM)0+SuDTLx`lx z`#cMtku_E{F${>}{x`ACA%Of=J{qHS>h%wCm(&(v*BHIxDT~z8`+`~?;*;{-7!cBh z+t{w;{!0@Hl`i5NYiq-UNZhw?LMm%id5wmva3urOl0G(i;l}Q*XKU&rTH3+S3+oeh zR^Fh#R#@_}v2rUSEY4(O)jjnRc5xp#ABefefP*bI+l?nRWcT+*?swR;Ji-UtKtP~@ zHydESSgR7q+iUtNiLk01(?IP)-Bf%qIb^5@E#wi0NPHX&yd| zyymrag!Gm}yXc)|?4Uts^@z1~cqH@WuRt4McoR^~&s&=Yu(Po6fk+qO!?f4D&hVPo z(_ZucmbktD)fdE??2ni&?sZ12PGvzx3k_*+? zk0Njlyd%Ap(d}ymT!doNrt&(&R9@$p%Ii~8`S}??^{lBp7sBT70xBM9!)}r`?Bdxr?50?t z;$Bcuye!*k#&0vDApgc}rC?*F54Nu84R|wjW2&YwlnRoYBKy)O^&~+N%*VIvz=LcRW^h@(r48qeOAS@eO67o zK-j$?tWB~VtL@b9#&)L7B29)_q?tC0T*-E3?IM#EIr8Kt=jB|@tU5U#!yc(qZjw6X;@LXoX3;6% z4a3Gd<#WBPanxu;IKxlX5Cl?kkPq)@p@3YE)e3zeHisC+l9cwM1# zGZreJYi1o!_AU6%v{1Rp5Gpr0Lggk$sN7s9R8C>o9Dv*u!`h@$xqP-#xm}dX_rkDt ztW-Y7cVH-Qz<1hdrE;60RBrF7RBo?RDpyqkD;_CTZj(~w^4U`5c9AOI4J%$(s@#sH z%IEmb@igCo@3hlW=ZZovX?LD>1?R8q^HiZ?B6f3t$v2yurv2weJmG6cXuPat=s~_^6lYUnF zs(fc!tlVaZmD?P#a+@PoZm$z7Co$}iYUMVmRxY2dR&E!y^4%~jtyccIH|zNCOYxm) zwQ`%GR&MX9R&K9TE4Ot5D;_CVZj*B5^4W6bc9ARJ4J%$(uH2^O%0D+}0X(n7cc$ga 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 M2i`sQtFONL|4L~n@Bjb+ literal 0 Hc$@ diff --git a/secure/lib/Makefile b/secure/lib/Makefile --- a/secure/lib/Makefile +++ b/secure/lib/Makefile @@ -1,6 +1,6 @@ .include -SUBDIR= +SUBDIR= libpkgecc .if ${MK_OPENSSL} != "no" SUBDIR+=libcrypto libssl .if ${MK_OPENSSH} != "no" diff --git a/secure/lib/libpkgecc/Makefile b/secure/lib/libpkgecc/Makefile new file mode 100644 --- /dev/null +++ b/secure/lib/libpkgecc/Makefile @@ -0,0 +1,137 @@ + +# STOP - please think carefully before you try to use this anywhere, and +# consider that the name is specifically prefixed for a reason. +LIB= pkgecc +INTERNALLIB= + +.PATH: $(SRCTOP)/crypto/libecc +SRCS+= pkg_libecc_rand.c + +# curves_mod_src +.PATH: $(SRCTOP)/crypto/libecc/src/curves +SRCS+= aff_pt.c \ + aff_pt_montgomery.c \ + ec_edwards.c \ + ec_montgomery.c \ + ec_params.c \ + ec_shortw.c \ + aff_pt_edwards.c \ + curves.c \ + prj_pt.c + +# utils_ec_src +.PATH: $(SRCTOP)/crypto/libecc/src/utils +SRCS+= print_curves.c + +# fp_mod_src +.PATH: $(SRCTOP)/crypto/libecc/src/fp +SRCS+= fp_add.c \ + fp.c \ + fp_montgomery.c \ + fp_mul.c \ + fp_mul_redc1.c \ + fp_pow.c \ + fp_rand.c \ + fp_sqrt.c + +# nn_mod_src +.PATH: $(SRCTOP)/crypto/libecc/src/nn +SRCS+= nn_add.c \ + nn.c \ + nn_div.c \ + nn_logical.c \ + nn_modinv.c \ + nn_mod_pow.c \ + nn_mul.c \ + nn_mul_redc1.c \ + nn_rand.c + +# utils_arith_src +SRCS+= utils.c \ + utils_rand.c \ + print_buf.c \ + print_fp.c \ + print_nn.c + +## libsign bits +# hash_mod_src +.PATH: $(SRCTOP)/crypto/libecc/src/hash +SRCS+= hash_algs.c \ + sm3.c \ + streebog.c \ + ripemd160.c \ + belt-hash.c \ + hmac.c \ + bash224.c \ + bash256.c \ + bash384.c \ + bash512.c \ + bash.c \ + sha224.c \ + sha256.c \ + sha3-224.c \ + sha3-256.c \ + sha3-384.c \ + sha3-512.c \ + sha384.c \ + sha3.c \ + sha512-224.c \ + sha512-256.c \ + sha512.c \ + sha512_core.c \ + shake256.c \ + shake.c + +# sig_mod_src +.PATH: $(SRCTOP)/crypto/libecc/src/sig +SRCS+= decdsa.c \ + ecdsa.c \ + ecfsdsa.c \ + ecgdsa.c \ + eckcdsa.c \ + ecosdsa.c \ + ecrdsa.c \ + ecsdsa.c \ + eddsa.c \ + fuzzing_ecdsa.c \ + fuzzing_ecgdsa.c \ + fuzzing_ecrdsa.c \ + ecdsa_common.c \ + ecsdsa_common.c \ + sig_algs.c \ + sm2.c \ + bign_common.c \ + bign.c \ + dbign.c \ + bip0340.c + +# key_mod_src +SRCS+= ec_key.c + +# utils_sign_src +.PATH: $(SRCTOP)/crypto/libecc/src/sig +SRCS+= print_keys.c + +# ecdh_mod_src +.PATH: $(SRCTOP)/crypto/libecc/src/ecdh +SRCS+= ecccdh.c \ + x25519_448.c + +# external_deps +.PATH: $(SRCTOP)/crypto/libecc/src/external_deps +SRCS+= print.c + +CONFLICTS= -Dsha256_init=_libecc_sha256_init \ + -Dsha256_update=_libecc_sha256_update \ + -Dsha256_final=_libecc_sha256_final \ + -Dsha512_224_init=_libecc_sha512_224_init \ + -Dsha512_256_init=_libecc_sha512_256_init + +CFLAGS= -I$(SRCTOP)/crypto/libecc/include \ + -ffreestanding \ + -fno-builtin \ + -DUSE_WARN_UNUSED_RET \ + -DWITH_STDLIB \ + $(CONFLICTS) + +.include diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk --- a/share/mk/src.libnames.mk +++ b/share/mk/src.libnames.mk @@ -44,6 +44,7 @@ bsnmptools \ c_nossp_pic \ cron \ + der \ diff \ elftc \ fdt \ @@ -63,6 +64,7 @@ parse \ pe \ pfctl \ + pkgecc \ pmcstat \ sl \ sm \ @@ -613,6 +615,9 @@ LIBCRONDIR= ${_LIB_OBJTOP}/usr.sbin/cron/lib LIBCRON?= ${LIBCRONDIR}/libcron${PIE_SUFFIX}.a +LIBDERDIR= ${_LIB_OBJTOP}/lib/libder +LIBDER?= ${LIBDERDIR}/libder${PIE_SUFFIX}.a + LIBNTPDIR= ${_LIB_OBJTOP}/usr.sbin/ntp/libntp LIBNTP?= ${LIBNTPDIR}/libntp${PIE_SUFFIX}.a @@ -639,6 +644,9 @@ LIBBE?= ${LIBBEDIR}/libbe${PIE_SUFFIX}.a +LIBPKGECCDIR= ${_LIB_OBJTOP}/secure/lib/libpkgecc +LIBPKGECC?= ${LIBPKGECCDIR}/libpkgecc${PIE_SUFFIX}.a + LIBPMCSTATDIR= ${_LIB_OBJTOP}/lib/libpmcstat LIBPMCSTAT?= ${LIBPMCSTATDIR}/libpmcstat${PIE_SUFFIX}.a

    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%0Dog}2*j^pyqbn^6uxnyQ)d0ktGj#ztJ&Gww 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 *9s?*sX}*Jo=XAd(FEd@^Sx#D`bL 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ⅇ@2;DR; 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�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≶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